Summary
The reviewer's final pipeline-summary comment reconstructs the run table by calling gh run list --workflow=<name>.yml --limit 10 and picking the most-recent successful run per stage. This is fragile: with two concurrent agent-team issues, the reviewer will cross-wire runs from different pipelines into one summary. Even single-issue pipelines can mis-link if a stage was re-dispatched (as happened on verkyyi/agentfolio#105, where impl ran 3 times — the heuristic picks whichever completed last, not whichever led to the approved PR).
Proposal
Thread run IDs through the existing dispatch chain. Each agent passes its predecessors' IDs forward:
spec-agent dispatches planner with spec_run_id=${{ github.run_id }}
planner-agent dispatches implementer with spec_run_id passthrough + plan_run_id=${{ github.run_id }}
implementer-agent dispatches reviewer with spec_run_id + plan_run_id passthrough + impl_run_id=${{ github.run_id }}
reviewer-agent renders the summary table straight from its inputs — no gh run list lookup.
Backward-compat: if an input is missing (old dispatcher), fall back to the current heuristic and emit a warning comment.
Acceptance
Summary
The reviewer's final pipeline-summary comment reconstructs the run table by calling
gh run list --workflow=<name>.yml --limit 10and picking the most-recent successful run per stage. This is fragile: with two concurrentagent-teamissues, the reviewer will cross-wire runs from different pipelines into one summary. Even single-issue pipelines can mis-link if a stage was re-dispatched (as happened onverkyyi/agentfolio#105, where impl ran 3 times — the heuristic picks whichever completed last, not whichever led to the approved PR).Proposal
Thread run IDs through the existing dispatch chain. Each agent passes its predecessors' IDs forward:
spec-agentdispatches planner withspec_run_id=${{ github.run_id }}planner-agentdispatches implementer withspec_run_idpassthrough +plan_run_id=${{ github.run_id }}implementer-agentdispatches reviewer withspec_run_id+plan_run_idpassthrough +impl_run_id=${{ github.run_id }}reviewer-agentrenders the summary table straight from its inputs — nogh run listlookup.Backward-compat: if an input is missing (old dispatcher), fall back to the current heuristic and emit a warning comment.
Acceptance
.mdfiles incatalog/agent-team/declare / accept / pass through the run-id inputs.<!-- agent-team:summary -->comment uses the inputs directly.agent-teamat the same time produce two correct, non-crossed summary tables.