Repository navigation
fix(arena): settle worktree placement follow-ups from #201 - #220
Conversation
pstack-harness now owns one writer placement rule. Worktrees are made one at a time, Grok writers spawn with `isolation: none` (and `cwd` when the spawn lists it), and a failed `git worktree add` gives each writer whose output the lead collects its own plain directory, seeded with `git archive HEAD` when needed. A writer whose work must land on the branch still runs in the checkout, one at a time. Arena makes candidate worktrees one at a time, passes `isolation: none` on Grok, and moves every candidate to a plain directory when any add fails. The Grok row drops the "linked otherwise" and "gc reclaims it" claims for what Grok 1.0.52's docs say, and names `grok worktree rm`. Opening a PR links a PR comment with the swarm report or arena note instead of a run directory, and architect commits the synthesis only without a checkpoint or after sign-off. PORTING records both upstream edits as substitution rows. Closes #219
|
Verdict: FAIL Round 1 swarm at this head: gates + literal replay + Grok docs (sonnet@high), directive review and documentation-impact review (opus@xhigh each; work on opus@high, so these may be same-family). What holds: gates pass; a literal replay of one-at-a-time worktree creation with a forced third failure cleans up and falls back to seeded plain directories, and two consecutive runs leave only main; every Grok claim matches Grok 1.0.52's docs and live spawn schema ( Fix-forward (in scope):
Notes (no change): "after you take its output" sits beside "Never take the writer's work back into the lead" and reads as a clash; the fallback's two cases omit a writer that owns its own branch; pstack-harness:95 says the schema hides |
…the briefed commit Opening a PR now leaves out findings that Shipping step 1 keeps off the PR when it posts a swarm report or arena note. The pstack-harness fallback seeds a plain directory from the commit the brief names, HEAD only when none.
|
Verdict: FAIL Round 2 at this head: gates + seeding proof (sonnet@high), review + documentation-impact (opus@xhigh; work on sonnet@high). One review lane this round (two-clause delta). This is the second FAIL; a third stops the PR. Both round-1 findings are fixed: opening-a-pr.md:26 leaves out the findings shipping.md step 1 keeps off the PR; pstack-harness:64 seeds the named commit (proof: the new text yields exactly the PR head's tree, the round-1 text yields trunk). PORTING rows match. Gates pass apart from known host and load noise; CI 7/7; merge clean. Fix-forward (introduced by this PR's fallback):
|
…nd block on a missing one A verify arm's brief names a parent and a head, but the plain-directory fallback seeded one directory, so the arm never saw the parent tree. A named commit absent locally made git archive fail while macOS tar exited 0 and left an empty directory. Seed one directory per named commit, check each with git cat-file -e first, fetch a missing one, and report the writer blocked when it is still missing. Mirror the rule in PORTING.
|
Verdict: FAIL Round 3 at this head: gates + independent seeding proof in bash and zsh (sonnet@high), directive review and whole-PR review (opus@xhigh each; work on opus@high, so these may be same-family). This is the third FAIL. Per the autopilot playbook the owner is stopped and the PR goes to the operator. What holds: gates pass; all six #219 items hold together; both round-2 fixes are in and proven (one directory per named commit, check then fetch then block); "blocked" fails closed through swarm, shipping and arena; no security-class path reaches a public comment; documentation-impact review: pass. Blocking (introduced by this PR's fallback): |
|
Fail-count reset: the operator approved one more round in chat, scoped to seeding fallback directories with a shared clone and detached checkout instead of git archive. |
…solved SHAs A git archive copy has no .git, so tools/gate-check.sh lint and shipping's Patch-id pipeline fail in a seeded verify arm. Seed each directory with a --shared clone checked out detached at the SHA its commit resolves to in the project, because a ref name such as origin/main names a different commit inside the clone.
|
Verdict: PASS+NOTES Round 4 (operator-granted, scoped to the round-3 seeding blocker) at this head: gates + independent sandbox proof (sonnet@high), review and documentation-impact review (opus@xhigh; work on opus@high, so it may be same-family). The round-3 blocker is fixed: fallback directories are now Notes (follow-ups): inside the clone |
Why
PR #201's round-4 verdict left six arena follow-ups in #219. Some skill text sent agents to a directory that arena now deletes. Some made claims about Grok that rest on one probe. Two rules disagreed about what to do when
git worktree addfails.Closes #219.
What changed
isolation: none. Whengit worktree addfails, a writer whose output the lead collects gets its own plain directory for each commit its brief names, or one directory when the brief names none, so a verify arm briefed with a parent and a head gets two. When it needs the project's files, the lead resolves each named commit to a SHA in the project withgit rev-parse --verifyand fetches a missing one. A commit still missing blocks the writer, with no directory seeded. Otherwise each directory is agit clone --sharedof the project, checked out detached at its own SHA, or atHEAD. A writer whose work must land on the branch still runs in the checkout, one at a time.isolation: noneon Grok, and moves every candidate to a plain directory when any add fails. The Grok row lists Grok'slinked,standalone, andgitmodes plus Grove, and namesgrok worktree rmin place of "gc reclaims it".Scope
Tradeoffs
isolation: none. No paid Grok run covers the rewritten wording. Grok 1.0.52's local docs back it.git worktree adddid not fail here, so a retry would guard a failure nobody has reproduced.Blast Radius
Skill text only. Agents now create arena worktrees one at a time, pass
isolation: noneon Grok, and run plain-directory writers in parallel whengit worktree addfails. In Codex's sandbox, the harness used to send every writer, such as a verify arm, into the checkout one at a time. A writer whose output the lead collects now runs at the same time as others, in shared clones, one for each commit the brief names, so its gates and the verdict's Patch-id run there. A briefed commit the project cannot find blocks the writer.Verification
codex sandbox -P :workspace, no Codex session created) showsgit worktree addexits 128 because.gitis read-only, whilemktemp -ddirectories are writable. The fallback as written ran in bash and zsh, in a throwaway repo and in this repo, on the host and in the sandbox. A brief naming parent and head gets two git checkouts at their SHAs. In the seeded head of this repo,tools/gate-check.sh lintpasses and the Patch-id pipeline prints a value. A brief namingorigin/maingets the project'sorigin/main, not the clone'smain. A missing unfetchable commit reports blocked and leaves no directory. A brief naming no commit seedsHEAD. The checkout is unchanged, and removing the clones leaves nothing behind. The earliergit archiveseeding fails 6 or 7 of the same checks, because its directories have no.git.cwdargument, thecli.worktree_typemodes, and the gc and rm keep rules. Parallelgit worktree addfailed 0 times in 1300 here, so serial creation stays as cheap insurance.tools/gate-check.sh lintandskill-ci checkpass. The test tier passes except threeNativeGittests that fail the same way on main, because this host's pinnedrgchanged.Validation
Risk Assessment
✅ Low: The change edits only agent-instruction prose. Each edit matches the stated intent items and recorded fix-forwards. The two PORTING substitution rows quote the new upstream-owned text exactly, and the clone-based seeding, SHA resolution, and fetch-then-block rules agree across pstack-harness, arena, and PORTING.
Testing
Inspected the complete diff and evaluation routes. All eight scenarios depend on agent interpretation, whose live evaluation is prohibited. No tests, static analysis, paid calls, or product evidence were produced; the previously declined limitation is not raised again as a finding.
Pipeline
Updates from git push no-mistakes
✅ **Intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
✅ **Review** - passed
✅ No issues found.
git diff --stat ea8459bde2d7859526c82a6306333bfa1de0b8aa c5ac4bbb05d2c0d6fb077889ed6d7d63d35ba0e3git diff ea8459bde2d7859526c82a6306333bfa1de0b8aa c5ac4bbb05d2c0d6fb077889ed6d7d63d35ba0e3Inspected repository task configuration, README.md, evals/README.md, and evals/promises/README.md for executable validation routes.git status --short✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.
Issues
Closes #219