chore(worktree): put worktrees under .claude and carry the overrides into them - #11
Conversation
…into them Worktrees used to sit beside the checkout as <repo>-<slug>, which put them in the workspace directory next to the real repositories and left EnterWorktree unusable, since that tool writes to a fixed .claude/worktrees/<slug>. Pattern proven on fluttersdk/magic_starter#124.
|
Note Kodizm (AI-generated). May contain mistakes; verify before acting. Two config files, both correct in themselves, but the hole they close stays open for the worktree path the canonical docs actually prescribe. Major
Minor
The TestsNothing covers this; it is two config files and there is no harness for worktree bootstrap in the repo. The end-to-end proof is the manual run described in the PR body, which I could not reproduce here. Checks I ran
|
…the Claude Code path
|
Both Majors were right, and the first one I checked against the code rather than the description: You offered two fixes; I took the sturdier one and did both halves:
|
|
Note Kodizm (AI-generated). May contain mistakes; verify before acting. Both Majors and the Minor from my last pass are closed; the new commits leave one stray character in a Since Minor
TestsStill nothing automated; there is no harness for worktree bootstrap in this repo, and the Checks I ran
|
The comment claimed plain -xdf wipes a live worktree because its .git is a file rather than a directory. Measured on a scratch repo: the dry run prints "Skipping repository .claude/worktrees/slug", the worktree survives -xdf with its untracked files intact, and only -xdff removes it and leaves the registration prunable. The guard keys on the gitlink, not on the form of .git. Also splits the stray # that joined the two comment blocks.
|
Note Kodizm (AI-generated). May contain mistakes; verify before acting. The only new commit rewrites a Since TestsUnchanged from my last pass: nothing automated covers worktree bootstrap, and this commit changes no executable text at all. Checks I ran
|
What
.gitignore: ignore.claude/worktrees/(only that subdirectory; the rules under.claude/stay tracked).worktreeinclude: new, copiespubspec_overrides.yamlinto every worktree Claude Code createsWhy
Worktrees were opened beside the checkout as
<repo>-<slug>, so they landed in the workspace directory next to the real repositories, and Claude Code'sEnterWorktreecould not be used at all: it writes to a fixed.claude/worktrees/<slug>.Moving them inside exposes a problem the old layout hid.
pubspec_overrides.yamlis gitignored, so a worktree never receives it, and the absence is silent rather than loud: the siblings resolve from pub.dev,flutter pub getsucceeds, and the suite passes against the PUBLISHED packages while the diff under review is of the local ones. An unreleased sibling API is where that bites.For the copy to be correct the local file needs ABSOLUTE paths, since a relative
../magicresolves to.claude/worktrees/magicfrom inside a worktree. That file is machine-local and not committed, so this PR cannot carry it; the requirement is documented in.worktreeinclude.Testing
The pattern was proven end to end on fluttersdk/magic_starter#124 first: probe worktree opened under the new path,
pubspec_overrides.yamlconfirmed absent, copied in,flutter pub getresolved andpackage_config.jsonpointed at the local checkouts. Here I verified that every rewritten absolute path resolves to a real package directory and thatflutter pub getstill succeeds.No Dart, YAML or
lib/file is touched, so analyze, format and test have nothing to say about this diff.