orchestrated-discussions/docs/diagrams/smarttools-pipeline-flow.puml

131 lines
2.6 KiB
Plaintext

@startuml SmartTools Pipeline Flow
!theme plain
skinparam activityBackgroundColor white
title SmartTools Pipeline Data Flow
start
:Read discussion.md;
note right
**Input**
Discussion markdown
with metadata headers
and comment blocks
end note
partition "Step 1: Parse" {
:discussion-parser;
note right
**Output: $parsed**
{
"metadata": {...},
"comments": [...],
"vote_summary": {...}
}
end note
}
if (Participants specified?) then (no)
partition "Step 2: Route" {
:discussion-mention-router;
note right
**Output: $routing**
{
"participants_to_call": [...],
"callouts": {...}
}
end note
}
else (yes)
:Use provided\nparticipants;
endif
partition "Step 3: Call Participants" {
fork
:discussion-architect;
note right
stdin: $discussion
args: --callout, --templates-dir
end note
fork again
:discussion-security;
fork again
:discussion-pragmatist;
end fork
:Collect $responses[];
note right
Each response:
{"comment": "...", "vote": "..."}
or {"sentinel": "NO_RESPONSE"}
end note
}
partition "Step 4: Append" {
:discussion-turn-appender;
note right
**Input**
$discussion + ---RESPONSES--- + $responses
**Output**
Updated markdown with
new comment blocks
end note
}
if (Phase has voting?) then (yes)
partition "Step 5: Count Votes" {
:Re-parse updated discussion;
:discussion-vote-counter;
note right
**Output: $votes**
{
"vote_summary": {
"READY": 2,
"CHANGES": 1,
"REJECT": 0
},
"consensus": {
"reached": false,
"reason": "..."
}
}
end note
}
partition "Step 6: Promote Status" {
:discussion-status-promoter;
note right
**Output: $promotion**
{
"should_promote": true,
"new_status": "READY_FOR_DESIGN"
}
end note
}
if (Should promote?) then (yes)
:Update status in\ndiscussion.md;
endif
endif
:Return TurnResult;
note right
- responses[]
- vote_summary
- consensus_reached
- status_promoted
end note
stop
legend right
| Symbol | Meaning |
| Rectangle | SmartTool |
| Diamond | Condition |
| Fork | Parallel execution |
endlegend
@enduml