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
Durable record of two machine-tidiness items that need a human decision. Both are evidence-gathering-complete enough to act on; neither should be actioned by an agent unattended, because a prior cleanup lane was stopped mid-flight by the repo owner and a prior disk-hygiene session destroyed a deliverable another session needed.
1. Worktree fleet — 93 registered, 27 dirty
The criterion, which matters more than the list
Do not use git merge-base --is-ancestor origin/main <branch> to decide whether a worktree's work has landed. It is structurally broken for this repo and two blind verifiers confirmed it independently. The repo is squash-merge only (allow_squash_merge=true, allow_merge_commit=false, allow_rebase_merge=false), so a squash synthesizes a new single-parent commit and the branch's own commits are never ancestors of main. The criterion is unsatisfiable for exactly the population it selects — it reports "not merged" for every merged branch.
Use instead: a merged-PR record plus a git ls-remote SHA match, so the worktree is known to hold the work that landed rather than later unpushed work on top of it.
An audit using that criterion reached 31 SAFE candidates with a blind verifier mid-run before it was stopped. That list was not persisted and needs re-deriving.
Mandatory carve-outs
D:/worktrees/_vfy/ — holds sabotage.sh plus a 9-case sab/ fixture matrix, untracked and unversioned, existing nowhere in git. The only item under D:/worktrees/ whose deletion would be unrecoverable. Note the commonly-recorded reason for holding it ("locked, lane active") is wrong — it is not a registered worktree and has no .git, so it cannot hold a lock. It is held for a better reason than the one usually written down.
Any *-main worktree — mislinked gitdir, sole holder of branch main.
Any worktree whose branch has an open PR.
Five repo-level stashes exist, all from July, all predating current work — inspect before any prune, since a stash cannot be pushed and is invisible to a casual glance.
2. Six D:\ root strays
All six were created 2026-08-16 by session 67f27d86 ("Claude Code Proxy"), which is still running (PID 30028). The synthetic skeleton in them is claude-code-proxy; each lane is a git archive extract at a real commit. That session's own handoff records six PRs open and six verifier agents lost mid-run.
directory
finding
disposition
lane-j-mut-base
both independent checks: no unique data, 139 files ref-reachable in the ODB
owner's handoff calls it disposable — safe to delete
lane-j-mut-mainbase
same
safe to delete
lane-v157-ext
5 mutant files existed nowhere else; now captured durably (see below)
recoverable — prefer holding until PR #157 has a verdict
Two things worth knowing before any hygiene pass touches these:
D:\spike\phase2-spike\venv was already destroyed once by an earlier disk-hygiene session and had to be rebuilt. The owning session's handoff explicitly forbids deleting it.
The owning session tried to clean up lane-j-mut-* itself and the drive-root guard hook blocked it. The "abandoned artifact" appearance is blocked self-cleanup, not neglect — worth considering when tuning that guard, since it currently prevents sessions from tidying their own drive-root scratch.
lane-v157-ext's unique delta is captured at claude-code-proxy/.work/lane-v157-ext-mutant-diffs-capture.md, verified to round-trip: each patch applied to a fresh m0 base copy and cmp'd against the mutant, 5/5, then the fenced blocks re-extracted and confirmed byte-identical to those patches. Note one correction recorded there — m1 is not a one-line edit; it relocates a call block roughly 24 lines earlier.
Why this is filed rather than done
Removal is irreversible and this machine's history shows tidy-ups destroying live work twice. The evidence is assembled so the decision is a single pass rather than an investigation.
Durable record of two machine-tidiness items that need a human decision. Both are evidence-gathering-complete enough to act on; neither should be actioned by an agent unattended, because a prior cleanup lane was stopped mid-flight by the repo owner and a prior disk-hygiene session destroyed a deliverable another session needed.
1. Worktree fleet — 93 registered, 27 dirty
The criterion, which matters more than the list
Do not use
git merge-base --is-ancestor origin/main <branch>to decide whether a worktree's work has landed. It is structurally broken for this repo and two blind verifiers confirmed it independently. The repo is squash-merge only (allow_squash_merge=true,allow_merge_commit=false,allow_rebase_merge=false), so a squash synthesizes a new single-parent commit and the branch's own commits are never ancestors ofmain. The criterion is unsatisfiable for exactly the population it selects — it reports "not merged" for every merged branch.Use instead: a merged-PR record plus a
git ls-remoteSHA match, so the worktree is known to hold the work that landed rather than later unpushed work on top of it.An audit using that criterion reached 31 SAFE candidates with a blind verifier mid-run before it was stopped. That list was not persisted and needs re-deriving.
Mandatory carve-outs
D:/worktrees/_vfy/— holdssabotage.shplus a 9-casesab/fixture matrix, untracked and unversioned, existing nowhere in git. The only item underD:/worktrees/whose deletion would be unrecoverable. Note the commonly-recorded reason for holding it ("locked, lane active") is wrong — it is not a registered worktree and has no.git, so it cannot hold a lock. It is held for a better reason than the one usually written down.D:/worktrees/ccp-2840-fix— roughly 163 lines of uncommitted work orphaned by the fix: isolate test fixtures from the inherited git environment (#2840) #2876 merge: a heredoc-as-data exclusion, aTOPCLEARdistinction for clears nested in a function or subshell that are credited but never run at source time, and adeclaredvsisolatedcount split. Same soundness family as the findings that did land, unowned, and not covered by Widen the fixture-isolation credit signal to require GIT_CONFIG #2889 or Extend the fixture-isolation gate's logical-line join to the shell arm, and credit two correct clear idioms it rejects #2893. Salvage into an issue before anyone considers removing it.D:/worktrees/ccp-2840— stale branchfix/2840-fixture-git-env-isolation, uncommitted work.D:/worktrees/silent-revert-markers— 335 lines uncommitted against base5e5a91a48, a superseded pre-merge state of the fix(scripts): read revert subjects and assert the canary's replay attributions #2843 branch. Almost certainly the prototype of what shipped via feat(scripts): assert a recorded silent-revert incident's content came back #2873; confirm before discarding.fix/2648-tzdata-degradation— locked, lane active on another machine.ccp-2590-engine— merge conflict in progress (UU).fix-2618-belt-run-scoped-lifetime— dirty deliberately.*-mainworktree — mislinked gitdir, sole holder of branchmain.Five repo-level stashes exist, all from July, all predating current work — inspect before any prune, since a stash cannot be pushed and is invisible to a casual glance.
2. Six
D:\root straysAll six were created 2026-08-16 by session
67f27d86("Claude Code Proxy"), which is still running (PID 30028). The synthetic skeleton in them isclaude-code-proxy; each lane is agit archiveextract at a real commit. That session's own handoff records six PRs open and six verifier agents lost mid-run.lane-j-mut-baselane-j-mut-mainbaselane-v157-extlane-v159-mutlane-v159-reprospikeTwo things worth knowing before any hygiene pass touches these:
D:\spike\phase2-spike\venvwas already destroyed once by an earlier disk-hygiene session and had to be rebuilt. The owning session's handoff explicitly forbids deleting it.lane-j-mut-*itself and the drive-root guard hook blocked it. The "abandoned artifact" appearance is blocked self-cleanup, not neglect — worth considering when tuning that guard, since it currently prevents sessions from tidying their own drive-root scratch.lane-v157-ext's unique delta is captured atclaude-code-proxy/.work/lane-v157-ext-mutant-diffs-capture.md, verified to round-trip: each patch applied to a freshm0base copy andcmp'd against the mutant, 5/5, then the fenced blocks re-extracted and confirmed byte-identical to those patches. Note one correction recorded there —m1is not a one-line edit; it relocates a call block roughly 24 lines earlier.Why this is filed rather than done
Removal is irreversible and this machine's history shows tidy-ups destroying live work twice. The evidence is assembled so the decision is a single pass rather than an investigation.