diff --git a/.config/git/ignore b/.config/git/ignore index 3f86ce2..06948f5 100644 --- a/.config/git/ignore +++ b/.config/git/ignore @@ -11,3 +11,13 @@ # 9 repos this way and left 2 of them permanently dirty — and a permanently # dirty tree is what lets genuinely stranded work hide in the noise. .playwright-mcp/ + +# Per-session agent worktrees. `_claude_autoworktree_enter` creates these in +# whatever repo a session opens in, so the set of affected repos is "all of +# them, eventually" — which is the test at the top of this file. +# +# It was done the other way first: 21 repos got a .gitignore line, 2 got a +# .git/info/exclude (machine-local, so invisible to review and to every other +# checkout), and 2 were missed — leaving solon reported as stranded work for +# five days over an empty directory. That is the 19th-repo problem, measured. +**/.claude/worktrees/ diff --git a/.gitignore b/.gitignore index 6313533..bbb3575 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,13 @@ __pycache__/ *.pyc .claude/hooks/dangerous-commands.log -.claude/hooks/fleetcrown-capture.sh + +# FleetCrown rewrites its own hooks here on every startup ("Do not edit; Fleet +# Runner rewrites this file", says the file). Only fleetcrown-capture.sh was +# listed, so when a second generated hook appeared this tree went permanently +# dirty — and a permanently dirty tree is where genuinely stranded work hides. +# Match the family, not the member. +.claude/hooks/fleetcrown-*.sh # Per-session agent worktrees — scratch, never part of the repo. .claude/worktrees/