You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
backlog-burndown: cleanup leaves an abandoned group's claim and its pushed remote branch standing #1274
backlog-burndown says its cleanup step exists to stop an abandoned group's worktree holding "a live claim that would collide with the very group the next round re-forms for the same issue". For the ordinary abandoned group, the procedure as written does not reach that outcome.
"Cleanup Is the Orchestrator's" covers "the finished ones and the abandoned ones", and gates the abandoned path on "confirm the branch carries no commit that is not already on develop". An abandoned group is by definition one that lost an adjudication after doing work, so any commit it made fails that check, cleanup "stops there", and the worktree plus its live claim stay standing. Nothing says what releases the claim in that case.
"with no remote branch to delete where none was pushed" leaves the pushed-abandoned case undisposed. "Grouping and File Claims" explicitly contemplates one ("Where the loser has already opened a pull request, say whether it closes or waits"), and "The Round" step 6 cleans only merged remote branches. The remote branch survives while its claim comment is released, and the next round's "A branch no claim comment covers still has to yield a file set" then reads it as an unknown set that "collides with every group", which is a stop the run inflicts on itself.
"the worktree and branch go the same way a merged group's do" points at the git branch -D a merged group uses under git-commit-conventions' narrow post-squash exception, and that exception "never applies to develop, an unmerged branch, an unresolved pull request, or a branch with uncommitted work". An abandoned branch has no merged pull request, so "the same way" points at a forbidden command. git branch -d is what the section's own no-unmerged-commit check licenses, and the section never says so.
"its claim comment released" names no action and no actor. Everywhere else the durable record is maintained by writing, and a claim comment cannot be un-posted.
"finished" means merged in "The Round" step 6 and work-complete-but-unmerged in "Bounding the Wait on a Worker". Cleaning up on the second sense is the case "Cleanup Is the Orchestrator's" stops on.
drive-pr step 4 requires the head SHA be captured before the merge, for the verify-then-delete. This skill's override leaves the merge with the worker and the verify with the orchestrator, so the capture has no owner: nothing tells the worker to report that value or the orchestrator where to read it back.
Raised by the local-strict-review passes on the pull request that added this skill, and deferred there under that skill's own review-round budget.
Carried forward from #1405, closed as a duplicate of this issue. It raised this issue's second and fourth bullets (the pushed-abandoned remote branch left standing, and the claim release naming no action) independently, from a different reviewer: qodo on ptr727/PlexCleaner#954, which carried the Skills tree into that repository and so gave backlog-burndown/SKILL.md its first review by a reviewer that had not seen it before. It was checked against the hub source and holds. Found during the #1399 fleet resync pilot; another instance of #1138.
It carries a proposed remedy for the pushed-abandoned case that this issue does not, and the reasoning for why the merged path's check cannot simply be reused:
The merged disposition cannot be borrowed. It verifies the remote tip against the pull request's headRefOid before git push origin --delete. An abandoned group has no merged pull request, so there is no headRefOid to read, which is the same reason the no-merge substitute exists at all. It needs its own remote identity check rather than a borrowed one.
The local half already states the right test, and it extends to the remote directly. Confirm the remote tip equals the local branch tip, and that the branch carries no commit not already on develop. Both hold and the remote branch is safe to delete on the same evidence the local one is. Either fails and cleanup stops for the maintainer, exactly as the local check already does, since past that point deletion discards work.
On the claim comment. The dead-worker-re-dispatched path says the claim comment is "released with the worktree". The abandoned path says to update the claim comment when a file set grows, and never says the claim is released when the group is abandoned. A released branch with a standing claim comment defers overlapping groups just as effectively as a standing branch does, so the disposition needs to name the claim release explicitly rather than leave it to be inferred from a neighbouring path.
Scope.backlog-burndown/SKILL.md owns the fix. qodo also pointed at drive-pr/SKILL.md's post-merge cleanup, which is the merged path and is not implicated: it has a headRefOid and uses it.
Re-measured against develop after #3188. Resolved: the abandoned group's branch is now deleted with git branch -d <exact-branch>, which refuses rather than discards, and a pushed remote branch is reported to the maintainer. The SHA-capture step is moot for a merged group, since pr_review.py cleanup reads headRefOid itself. Still open: "Its claim comment is released" names no action and no actor, and the "finished" ambiguity remains.
Activity
ptr727 commentedon Sep 9, 2026
Carried forward from #1405, closed as a duplicate of this issue. It raised this issue's second and fourth bullets (the pushed-abandoned remote branch left standing, and the claim release naming no action) independently, from a different reviewer: qodo on ptr727/PlexCleaner#954, which carried the Skills tree into that repository and so gave
backlog-burndown/SKILL.mdits first review by a reviewer that had not seen it before. It was checked against the hub source and holds. Found during the #1399 fleet resync pilot; another instance of #1138.It carries a proposed remedy for the pushed-abandoned case that this issue does not, and the reasoning for why the merged path's check cannot simply be reused:
The merged disposition cannot be borrowed. It verifies the remote tip against the pull request's
headRefOidbeforegit push origin --delete. An abandoned group has no merged pull request, so there is noheadRefOidto read, which is the same reason the no-merge substitute exists at all. It needs its own remote identity check rather than a borrowed one.The local half already states the right test, and it extends to the remote directly. Confirm the remote tip equals the local branch tip, and that the branch carries no commit not already on
develop. Both hold and the remote branch is safe to delete on the same evidence the local one is. Either fails and cleanup stops for the maintainer, exactly as the local check already does, since past that point deletion discards work.On the claim comment. The dead-worker-re-dispatched path says the claim comment is "released with the worktree". The abandoned path says to update the claim comment when a file set grows, and never says the claim is released when the group is abandoned. A released branch with a standing claim comment defers overlapping groups just as effectively as a standing branch does, so the disposition needs to name the claim release explicitly rather than leave it to be inferred from a neighbouring path.
Scope.
backlog-burndown/SKILL.mdowns the fix. qodo also pointed atdrive-pr/SKILL.md's post-merge cleanup, which is the merged path and is not implicated: it has aheadRefOidand uses it.ptr727 commentedon Oct 17, 2026
Re-measured against
developafter #3188. Resolved: the abandoned group's branch is now deleted withgit branch -d <exact-branch>, which refuses rather than discards, and a pushed remote branch is reported to the maintainer. The SHA-capture step is moot for a merged group, sincepr_review.py cleanupreadsheadRefOiditself. Still open: "Its claim comment is released" names no action and no actor, and the "finished" ambiguity remains.