diff --git a/SKILL.md b/SKILL.md index 3551d67..30cf124 100644 --- a/SKILL.md +++ b/SKILL.md @@ -382,6 +382,14 @@ and reconciles the target doc with the Body. model does not soften its brief: it still attacks, invariants first. When Fable ran out mid-migration, Opus carried every faculty and Soul still found the defects. +- **Give every parallel Hands its own worktree, and name it in the brief.** + Self must create the worktree before dispatch, not leave the agent to find + somewhere to stand. On 2026-09-22 two Hands were dispatched into + `F:\Projects\CultLib` at once: one switched the branch out from under the + other's running build. Nothing was lost, only because the second agent + stopped and reported a concurrency hazard instead of forcing the checkout. + **A brief that names a repo path without naming a worktree is a defect in + the brief.** - **Commit maps to `main`, not to whatever branch Self is standing on.** A map is only current if it is current on the branch the reader has. On 2026-09-22 a Hands agent on the selection cut reported that the map had no fix-batch-4 diff --git a/references/changelog.md b/references/changelog.md index a864a12..d07c2d5 100644 --- a/references/changelog.md +++ b/references/changelog.md @@ -727,3 +727,22 @@ evidence is `postmortem-cultcache.md` and the Aetheria repo's confirmed by Self before the agent acts; an instruction that cannot be distinguished from an injection should be refused whether or not it happens to be real. + +## 2026-09-22: two Hands in one working tree, and the agent that refused to force it + +Evidence: Self dispatched a Hands agent for the CultNet selection survivor +tests into `F:\Projects\CultLib` while another Hands was mid-build in that same +checkout on a different branch. The second agent switched the branch to reach +its own work, which pulled the tree out from under the running build, then +found an uncommitted `CMakeLists.txt` edit it had not made. It **stopped and +reported a concurrency hazard rather than forcing the checkout**, which is the +only reason nothing was lost. + +The rule against parallel Hands in one working tree was already in SKILL.md. +Self ignored it. The fix is not a stronger warning to Hands: Self now **creates +the worktree before dispatch and names it in the brief**, so an agent is never +left to find somewhere to stand. A brief that names a repo path without naming +a worktree is a defect in the brief. + +Second-checkout build output stays separate, per the existing scar: a shared +target directory has let an unmutated tree look green.