implementer: never git stash — the stash stack is shared across worktrees
A worker's worktree is isolated; refs/stash is not. It is one stack shared by the primary's checkout and every worker worktree of this repo. This bit a real worker today. Two ran in parallel; one called git stash while the other was mid-edit, and the second worker's in-progress change was silently overwritten by the first's stashed content. It recovered by retyping the edit and diffing to confirm, and pushed the other worker's change back onto the stack untouched — but nothing warned either of them, and nothing would have. Measured before writing this: 'git stash list' from a worker worktree and from the primary's checkout return byte-identical output, and refs/stash is a single common ref, not a per-worktree one. The branch already IS the isolation, so the skill now points at committing a wip commit or writing a patch file instead.
This commit is contained in:
@@ -39,6 +39,19 @@ a worker made all 59 of its edits in the primary's tree and never noticed.
|
||||
test "$(git rev-parse --show-toplevel)" = "$PWD" || cd "$(git rev-parse --show-toplevel)"
|
||||
```
|
||||
|
||||
**Never run `git stash` (or `git stash pop`/`apply`/`drop`).** Your worktree is isolated, but the
|
||||
stash is **not**: `refs/stash` is one stack shared by the primary's checkout and every other
|
||||
worker's worktree of this repo. Measured on 2026-09-04 — `git stash list` from a worker's worktree
|
||||
and from the primary's tree returned byte-identical output. So a `git stash` you run can be popped
|
||||
into someone else's tree, and a `git stash pop` you run can drop **another worker's** uncommitted
|
||||
edits on top of yours. This has already happened here: two workers were running in parallel and one
|
||||
of them had its in-progress edit silently overwritten by the other's stash.
|
||||
|
||||
The branch is your isolation, so use it instead. To set work aside, commit it on your own branch
|
||||
(`git commit -m "wip: ..."`) and carry on; to try something and back out, use
|
||||
`git diff > /tmp/<your-branch>.patch` then `git checkout -- <file>`. Both stay inside your worktree.
|
||||
If you find a stash entry you did not create, leave it alone and say so in your report.
|
||||
|
||||
## 2. Implement
|
||||
|
||||
- Implement exactly the scope the lead named. Keep the diff focused; note anything out of scope
|
||||
|
||||
Reference in New Issue
Block a user