Two valid findings landed on #1594 from the reviewer's fifth pass, seconds after it squash-merged as c4e33461. Both are in prompts/loops/loop-lane-prompts.md, in the 3b parked-decision burn-down block and its profile render (the block appears twice — fix both).
1. A reopened item wearing both canonical roles (regression from #1594)
#1594's parking invariant — "Nothing this session opens or parks stays role-less" — has the burn-down apply the resolved human-gated role when it reopens a closed trigger carrier. Closing an item does not clear its labels, so a carrier that was closed while autonomous-eligible reopens wearing both canonical roles.
plugins/work-items/skills/work-loop/SKILL.md:240-245 treats that state as a contradiction, not a tolerable overlap: "apply the human-gated role label and remove the autonomous-eligible one in the same edit … never flip without clearing, since an item wearing both roles is a contradiction every consumer reads differently." A Re-park outcome then preserves the contradiction indefinitely.
Fix: the reopen/create bullet of the parking invariant should remove the resolved autonomous-eligible role in the same edit that applies the human-gated one — the same shape the Flip outcome already uses in the other direction.
This one is a regression introduced by #1594's own round-4 fix, so it is the higher priority of the two.
2. A fired trigger is never consumed
Population 3 reopens a closed item whose trigger has fired, but nothing marks the trigger consumed and the text stays in comment history. If the operator then chooses Decide and close or Re-home, the next burn-down inside the 90-day closed-item lookback sees the same permanently-true trigger ("after …") and reopens the source item again — and a repeated Re-home can re-file the same item cross-repository each pass.
#1594 fixed the analogous problem for open rows (an unfired trigger is now report-only), but a fired trigger on a closed item has no consumption record.
Fix options, for whoever picks this up:
- consider only the latest unresolved trigger on an item, ignoring superseded ones; or
- record consumption when the resulting disposition completes — a marker comment the sweep reads, which the burn-down can write since it already writes the disposition comment.
The second composes with the disclaimer contract already inlined in the block; the first needs no new state but relies on trigger ordering being meaningful.
Context
#1594's review ran five rounds, each on a new head commit. Rounds 1–4 (13 threads) were evaluated, fixed and resolved before merge; this round arrived post-merge. Related out-of-scope finding from the same review: #1612.
Two valid findings landed on #1594 from the reviewer's fifth pass, seconds after it squash-merged as
c4e33461. Both are inprompts/loops/loop-lane-prompts.md, in the 3b parked-decision burn-down block and its profile render (the block appears twice — fix both).1. A reopened item wearing both canonical roles (regression from #1594)
#1594's parking invariant — "Nothing this session opens or parks stays role-less" — has the burn-down apply the resolved human-gated role when it reopens a closed trigger carrier. Closing an item does not clear its labels, so a carrier that was closed while autonomous-eligible reopens wearing both canonical roles.
plugins/work-items/skills/work-loop/SKILL.md:240-245treats that state as a contradiction, not a tolerable overlap: "apply the human-gated role label and remove the autonomous-eligible one in the same edit … never flip without clearing, since an item wearing both roles is a contradiction every consumer reads differently." A Re-park outcome then preserves the contradiction indefinitely.Fix: the reopen/create bullet of the parking invariant should remove the resolved autonomous-eligible role in the same edit that applies the human-gated one — the same shape the Flip outcome already uses in the other direction.
This one is a regression introduced by #1594's own round-4 fix, so it is the higher priority of the two.
2. A fired trigger is never consumed
Population 3 reopens a closed item whose trigger has fired, but nothing marks the trigger consumed and the text stays in comment history. If the operator then chooses Decide and close or Re-home, the next burn-down inside the 90-day closed-item lookback sees the same permanently-true trigger ("after …") and reopens the source item again — and a repeated Re-home can re-file the same item cross-repository each pass.
#1594 fixed the analogous problem for open rows (an unfired trigger is now report-only), but a fired trigger on a closed item has no consumption record.
Fix options, for whoever picks this up:
The second composes with the disclaimer contract already inlined in the block; the first needs no new state but relies on trigger ordering being meaningful.
Context
#1594's review ran five rounds, each on a new head commit. Rounds 1–4 (13 threads) were evaluated, fixed and resolved before merge; this round arrived post-merge. Related out-of-scope finding from the same review: #1612.