Two defects in backlog-burndown "Bounding the Wait on a Worker", both in how the liveness read classifies a worker that reported nothing.
An unmerged branch is classified as finished. The read is "A pull request that is merged, or a branch whose work is complete, means the worker died after doing the work and the group is finished." The second disjunct accepts a branch that never merged into develop. The round's successful outcome is merged-to-develop, and "Cleanup Is the Orchestrator's" verifies a finished group against a merged pull request, so a group finished on the second disjunct reaches a cleanup step that has no merged pull request to verify, and the round can promote without that work.
A recoverable dead worker is routed to the maintainer. A dead worker leaving a clean worktree over committed but unmerged work is the ordinary case the section itself names: "A worker that committed its fix and then died leaves a clean tree standing over commits develop has never seen." The procedure then applies the abandoned-group check, "confirms the branch carries no commit that is not already on develop", which that case fails by construction, so "cleanup stops there and the group goes to the maintainer". The skill already defines the safe disposition for exactly this state elsewhere, retire the worktree alone and leave the branch standing for a re-dispatch, which is what its local-strict-review bullet does. So an ordinary worker death stops autonomous progress where a defined recovery already exists.
The two interact: the first makes the finished test too loose and the second makes the recovery test too strict, and the boundary between them is the same read.
Raised by qodo-code-review on the develop -> main promotion pull request #1304, findings 2 and 8, and deferred there under the maintainer's instruction to merge the promotion and take the findings up afterwards. Related to #1274, which covers the abandoned-group half of the same cleanup gate, and to #1272, which covers the worktree-only disposition this recovery would use.
Two defects in
backlog-burndown"Bounding the Wait on a Worker", both in how the liveness read classifies a worker that reported nothing.An unmerged branch is classified as finished. The read is "A pull request that is merged, or a branch whose work is complete, means the worker died after doing the work and the group is finished." The second disjunct accepts a branch that never merged into develop. The round's successful outcome is merged-to-develop, and "Cleanup Is the Orchestrator's" verifies a finished group against a merged pull request, so a group finished on the second disjunct reaches a cleanup step that has no merged pull request to verify, and the round can promote without that work.
A recoverable dead worker is routed to the maintainer. A dead worker leaving a clean worktree over committed but unmerged work is the ordinary case the section itself names: "A worker that committed its fix and then died leaves a clean tree standing over commits develop has never seen." The procedure then applies the abandoned-group check, "confirms the branch carries no commit that is not already on develop", which that case fails by construction, so "cleanup stops there and the group goes to the maintainer". The skill already defines the safe disposition for exactly this state elsewhere, retire the worktree alone and leave the branch standing for a re-dispatch, which is what its
local-strict-reviewbullet does. So an ordinary worker death stops autonomous progress where a defined recovery already exists.The two interact: the first makes the finished test too loose and the second makes the recovery test too strict, and the boundary between them is the same read.
Raised by qodo-code-review on the develop -> main promotion pull request #1304, findings 2 and 8, and deferred there under the maintainer's instruction to merge the promotion and take the findings up afterwards. Related to #1274, which covers the abandoned-group half of the same cleanup gate, and to #1272, which covers the worktree-only disposition this recovery would use.