@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