diff --git a/.gitignore b/.gitignore index 82d6c5b..fd120b1 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,14 @@ pubspec_overrides.yaml .ac/ CLAUDE.local.md .sync-agents-cache.json + +# Worktrees Claude Code creates for parallel sessions and isolated subagents. +# Only this subdirectory, so anything else that lands under `.claude/` stays visible +# to git. Nothing is tracked there today. +# +# They sit inside the working tree rather than beside it. `git clean -xdf` leaves them +# alone: git's nested-repository guard resolves a gitfile too, so it reports "Skipping +# repository .claude/worktrees/" and the contents survive. `git clean -xdff` does +# not skip them, and wipes a live worktree while `.git/worktrees/` survives, +# leaving a registration that `git worktree prune` then has to clear. +.claude/worktrees/ diff --git a/.worktreeinclude b/.worktreeinclude new file mode 100644 index 0000000..1c9f3cf --- /dev/null +++ b/.worktreeinclude @@ -0,0 +1,21 @@ +# Gitignored files copied into every worktree Claude Code creates, for `--worktree`, +# for `EnterWorktree`, and for a subagent with `isolation: worktree`. +# +# A worktree is a fresh checkout, so `pubspec_overrides.yaml` is absent from it, and +# its absence fails silently rather than loudly: the siblings resolve from pub.dev +# instead of the working trees beside this one, `flutter pub get` succeeds, and the +# suite then passes against the PUBLISHED packages while the diff under review is of +# the local ones. An unreleased sibling API is where that bites. +# +# `.gitignore` syntax, and only files that match AND are gitignored are copied, so a +# tracked file can never be duplicated by this list. +# +# The paths inside `pubspec_overrides.yaml` have to be ABSOLUTE for this to work. +# Worktrees live under `.claude/worktrees/`, so a relative `../magic` resolves +# to `.claude/worktrees/magic`, which does not exist, and version solving fails on +# the first path dependency. +# +# NOT processed when a WorktreeCreate hook replaces the default git logic; such a +# hook has to copy these itself. + +pubspec_overrides.yaml diff --git a/CLAUDE.md b/CLAUDE.md index 1bb6c89..7ae0e61 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -44,6 +44,10 @@ directly is flagged as an unnecessary import. Local sibling development goes through the gitignored `pubspec_overrides.yaml`. The committed `pubspec.yaml` stays on hosted caret constraints so a fork outside this workspace resolves on its own. +That overrides file must use ABSOLUTE paths. `.worktreeinclude` copies it into worktrees under +`.claude/worktrees/`, where the conventional relative `../magic` resolves to +`.claude/worktrees/magic` and fails version solving on the first path dependency. + ## Barrels Four, and the split is the API: