Raised by 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.
Checked against the hub source and it holds.
The gap
"Cleanup Is the Orchestrator's" defines two branch checks and says which disposition takes which.
For an abandoned group, and a dead worker's clean tree, the no-merge substitute ends:
Both hold, and the worktree and branch go the same way a merged group's do, with no remote
branch to delete where none was pushed.
That clause resolves the never-pushed case and is silent on the pushed one. A worker pushes before
its pull request exists, so a group can be abandoned with origin/<branch> already standing:
abandoned after review, or a worker confirmed gone after it pushed.
Why the silence bites
"Grouping and File Claims" makes the round scan remote branches, and states the consequence
itself:
an abandoned branch reads to every later round as a live claim
So a pushed abandoned branch is never deleted by any step in the skill, and every later round
reads it as a live claim on that file set. Groups overlapping those files defer, round after
round, with nothing in the procedure that ever clears it. The failure is silent and it compounds,
which is worse than a stop.
Why the merged path's check cannot just be reused
The merged disposition 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.
Second half, 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.
Not fixable in the repository that raised it, since the Skills tree is carried byte-for-byte and
any local edit is drift the next audit reports. Deferred there with this issue named.
Found during the #1399 fleet resync pilot. Another instance of #1138.
Raised by 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.Checked against the hub source and it holds.
The gap
"Cleanup Is the Orchestrator's" defines two branch checks and says which disposition takes which.
For an abandoned group, and a dead worker's clean tree, the no-merge substitute ends:
That clause resolves the never-pushed case and is silent on the pushed one. A worker pushes before
its pull request exists, so a group can be abandoned with
origin/<branch>already standing:abandoned after review, or a worker confirmed gone after it pushed.
Why the silence bites
"Grouping and File Claims" makes the round scan remote branches, and states the consequence
itself:
So a pushed abandoned branch is never deleted by any step in the skill, and every later round
reads it as a live claim on that file set. Groups overlapping those files defer, round after
round, with nothing in the procedure that ever clears it. The failure is silent and it compounds,
which is worse than a stop.
Why the merged path's check cannot just be reused
The merged disposition 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 itsown 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 oneis. Either fails and cleanup stops for the maintainer, exactly as the local check already does,
since past that point deletion discards work.
Second half, 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-mergecleanup, which is the merged path and is not implicated: it has a
headRefOidand uses it.Not fixable in the repository that raised it, since the Skills tree is carried byte-for-byte and
any local edit is drift the next audit reports. Deferred there with this issue named.
Found during the #1399 fleet resync pilot. Another instance of #1138.