postmortem: terminal_status text-scan over-reports BLOCKED for shipped implement runs #3
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The postmortem aggregator (
postmortem/scripts/postmortem.py) derives each subagentsterminal_statusby scanning the report text for status keywords. Forimplement-orchestratoragents this over-reportsBLOCKED: any report that mentionsBLOCKED.md` (the protocol file) or narrates a surmounted blocker in prose is misclassified as a blocked terminal state.Evidence
In the AILang
/bosssession 08f4d15c (2026-06-02), six implement-orchestrator runs were flaggedBLOCKEDby the script. Every one of them demonstrably shipped a commit onmainthat same session:b11a6d935a9bc668f500ce3a9065d565ed8d72fe0cSo the field reads 0/6 DONE where git shows 6/6 shipped. The one genuine bounce in that run was a single
debugger(leg 3) correctly returning a design fork to brainstorm — which is the success path, not a failure.Impact
terminal_statusis one of the three graded axes (agent effectiveness). A scan that flips every successful implement run to BLOCKED makes the axis actively misleading: a human reading the JSON would conclude the fleet failed when it shipped everything. The postmortem skill`s own Iron Law ("a grade without a cited metric is an opinion") is undermined when the cited metric is wrong.Fix direction (not prescriptive)
Anchor the scan on the final status line of the end-report (the implement skill emits a fixed end-report structure), not on any keyword occurrence anywhere in the body. The DONE/PARTIAL/BLOCKED end-state is structurally locatable;
BLOCKED.mdmentions and "we hit a blocker and resolved it" prose are not the terminal status. Until then, the field should be treated as advisory and cross-checked against git, as the 08f4d15c report did manually.