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
Make the clone-level unpushed probe see every local ref, not one branch. This is a live data-loss fix in shipped code and it is independent of everything else on this map.
Today dl's unpushed answer is log --oneline <branch> --not --remotes everywhere. So commits on any other local branch in the clone are invisible. Commit on wip, switch to main, let dl <ws> rm delete the clone, and those commits are gone — with NothingToLose printed. Measured on #459 and again on #446.
Sliced out of #454 deliberately, on two grounds. It lives in a different module from the agent-worktree sweep that #454 rewrites, so there is no conflict. And it fixes a path a user can lose work on today, which under this map's first principle should not wait behind a large rewrite.
Scope:
--all in place of the single named branch at clone scope, so the probe reaches every local branch. What proves an agent worktree safe to remove, and what if it cannot be proved #446 measured that rev-list --all --not --remotes in a clone reaches every local branch, refs/stash, and every worktree's HEAD including detached ones.
Readers to check, because they all consume this answer: dl <ws> rm's refusal, --prune's orphan arm, and the --ls --json goldens that pin unsaved.
Red first, and the failing test is the point: a clone with commits on a non-checked-out local branch, asserting the guard reports them rather than NothingToLose. That test is the bug report.
Two things explicitly not here, so the boundary is clean. The nested-agent-worktree half of the same blindness (.claude/worktrees/ is gitignored, so status --porcelain sees nothing) belongs to #454, because it needs the site fold that ticket builds. And the verdict type itself (Collectable(Proof) | Stands(NonEmpty<Reason>)) is #454's — this ticket keeps the existing shape and only widens the ref set it asks about.
One thing worth stating in the code: refs/stash is shared, written to <clone>/.git/refs/stash even from inside a linked worktree, and reached by --all. Measured on #446. So widening to --all picks up stashes as a side effect, which is correct and should be deliberate rather than incidental.
Work
Make the clone-level unpushed probe see every local ref, not one branch. This is a live data-loss fix in shipped code and it is independent of everything else on this map.
Today dl's unpushed answer is
log --oneline <branch> --not --remoteseverywhere. So commits on any other local branch in the clone are invisible. Commit onwip, switch tomain, letdl <ws> rmdelete the clone, and those commits are gone — withNothingToLoseprinted. Measured on #459 and again on #446.Sliced out of #454 deliberately, on two grounds. It lives in a different module from the agent-worktree sweep that #454 rewrites, so there is no conflict. And it fixes a path a user can lose work on today, which under this map's first principle should not wait behind a large rewrite.
Scope:
--allin place of the single named branch at clone scope, so the probe reaches every local branch. What proves an agent worktree safe to remove, and what if it cannot be proved #446 measured thatrev-list --all --not --remotesin a clone reaches every local branch,refs/stash, and every worktree's HEAD including detached ones.dl <ws> rm's refusal,--prune's orphan arm, and the--ls --jsongoldens that pinunsaved.NothingToLose. That test is the bug report.Two things explicitly not here, so the boundary is clean. The nested-agent-worktree half of the same blindness (
.claude/worktrees/is gitignored, sostatus --porcelainsees nothing) belongs to #454, because it needs the site fold that ticket builds. And the verdict type itself (Collectable(Proof) | Stands(NonEmpty<Reason>)) is #454's — this ticket keeps the existing shape and only widens the ref set it asks about.One thing worth stating in the code:
refs/stashis shared, written to<clone>/.git/refs/stasheven from inside a linked worktree, and reached by--all. Measured on #446. So widening to--allpicks up stashes as a side effect, which is correct and should be deliberate rather than incidental.