What
The stranded/* refs pushed during the 2026-08-07 worktree cleanup have never
had a recorded disposition — they were quarantine, and "when do these get
deleted" stayed open. Audited now, and the answer is the opposite of what
"quarantine" suggests.
52 refs across 6 repositories. 50 hold content that is on no base. 2 are
redundant.
| Repository |
contained |
landed |
unique |
| claude-code-plugins |
0 |
0 |
44 |
| standards |
0 |
1 |
2 |
| github-iac |
0 |
0 |
2 |
| ci-workflows |
0 |
1 |
0 |
| medley |
0 |
0 |
1 |
| dotfiles |
0 |
0 |
1 |
Method, per ref: contained means the tip is an ancestor of origin/HEAD, so
every commit is already there. landed means the ref's RANGE patch-id (computed
--verbatim, so whitespace-only variants are not treated as the same change) is
in the base's per-commit id set — the shape a squash-merge leaves. unique means
neither held.
Why this matters
These refs were created as a safety net for 56 worktree removals, on the
assumption they were mostly redundant copies. They are not. For 50 of them, the
ref IS the work — deleting them destroys content that exists in no other
reachable place. The pending decision was framed as "when do we clean these up";
the honest reframing is "these are 50 pieces of unfinished work with no owner and
no ticket".
The two safe to delete today, both already on their base:
ci-workflows — its single stranded/* ref
standards — one of three
What to do with the other 50
Each needs one of three outcomes, and none of them is deletion-by-default:
- Land it — the work is still wanted; it becomes a PR.
- Abandon it deliberately — recorded as not-wanted, then the ref goes.
- Keep it as an archive — the current state, which costs a ref and nothing
else. Legitimate, but it should be a choice rather than a default.
Names carry their own signal. Fourteen are stranded/wip/*-paused-merge or
*-detached, which are mid-operation captures rather than authored work, and are
the most likely (2). Others name a live issue number — wip/1264-babysit-readiness-gate,
wip/587-fetch-comments-paused-merge, wip/926-wire-ecosystem-gates-execution —
and those are the ones where deletion would silently drop work someone already
filed a ticket for.
Reproducing
The audit is per-ref and read-only: resolve origin/HEAD, test
merge-base --is-ancestor, then compare the ref's range patch-id against the
base's per-commit id set. Same primitives as
plugins/source-control/scripts/landed-work.sh, applied to refs instead of
worktrees.
Found while closing out the stranded-work detection work (#1970).
What
The
stranded/*refs pushed during the 2026-08-07 worktree cleanup have neverhad a recorded disposition — they were quarantine, and "when do these get
deleted" stayed open. Audited now, and the answer is the opposite of what
"quarantine" suggests.
52 refs across 6 repositories. 50 hold content that is on no base. 2 are
redundant.
Method, per ref:
containedmeans the tip is an ancestor oforigin/HEAD, soevery commit is already there.
landedmeans the ref's RANGE patch-id (computed--verbatim, so whitespace-only variants are not treated as the same change) isin the base's per-commit id set — the shape a squash-merge leaves.
uniquemeansneither held.
Why this matters
These refs were created as a safety net for 56 worktree removals, on the
assumption they were mostly redundant copies. They are not. For 50 of them, the
ref IS the work — deleting them destroys content that exists in no other
reachable place. The pending decision was framed as "when do we clean these up";
the honest reframing is "these are 50 pieces of unfinished work with no owner and
no ticket".
The two safe to delete today, both already on their base:
ci-workflows— its singlestranded/*refstandards— one of threeWhat to do with the other 50
Each needs one of three outcomes, and none of them is deletion-by-default:
else. Legitimate, but it should be a choice rather than a default.
Names carry their own signal. Fourteen are
stranded/wip/*-paused-mergeor*-detached, which are mid-operation captures rather than authored work, and arethe most likely (2). Others name a live issue number —
wip/1264-babysit-readiness-gate,wip/587-fetch-comments-paused-merge,wip/926-wire-ecosystem-gates-execution—and those are the ones where deletion would silently drop work someone already
filed a ticket for.
Reproducing
The audit is per-ref and read-only: resolve
origin/HEAD, testmerge-base --is-ancestor, then compare the ref's range patch-id against thebase's per-commit id set. Same primitives as
plugins/source-control/scripts/landed-work.sh, applied to refs instead ofworktrees.
Found while closing out the stranded-work detection work (#1970).