Skip to content

stranded/* quarantine refs: 50 of 52 hold content that exists nowhere else #1976

Description

@kyle-sexton

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:

  1. Land it — the work is still wanted; it becomes a PR.
  2. Abandon it deliberately — recorded as not-wanted, then the ref goes.
  3. 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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions