Constrain where a worktree may live and skip it under headless dispatch - #113
Conversation
The template recommended a git worktree for concurrent-session isolation without saying where to put it. A path-restricted sandbox refuses reads and edits outside the checkout, so a worktree in /tmp locks the session out of its own tree. Require the worktree inside the checkout, and skip it entirely in a headless dispatch, which already owns a dedicated clone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Self-review rubricScored adversarially — FAIL assumed unless direct evidence of PASS was produced.
Judgment calls left for review
Verification commands run
This comment was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener). drafted by Claude on behalf of Daniel Stephenson |
|
Follow-up filed as #114 for the half of #110 this PR does not answer: whether an in-checkout This comment was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener). drafted by Claude on behalf of Daniel Stephenson |
Merge withheldThis run carried operator merge pre-authorization, and it has deliberately not been used here. Two independent gates apply:
The terminal state for this cycle is therefore: open, CI green, self-review posted, awaiting a human who can run This comment was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener). drafted by Claude on behalf of Daniel Stephenson |
Continuation review — second dispatchThis pull request was inherited by a later Gardener dispatch as unfinished work, because the previous run was killed before it could report back. Assessment: the work itself was already complete; only the report was lost. No second branch or duplicate pull request has been opened. Independent re-verification on the current head (
|
Summary
git worktreefor concurrent-session isolation in three places (Phase 1's adopt-a-concurrent-PR bullet, Phase 8's--delete-branchnote, and the Edge cases entry) without ever stating where that worktree should be created. Under a path-restricted session — the sandbox model a headless dispatch runs under — a worktree created outside the checkout cannot be read or edited, and every subsequent file operation is refused..worktrees/<branch>, added to.git/info/exclude), never/tmp, and a headless dispatch should not create one at all, since such a run already owns a clone dedicated to it and has no concurrent session to collide with.fatal: '<branch>' is already checked out) that is correct under either placement..git/info/excludewas chosen over the repo's tracked.gitignoredeliberately — the generated skill runs against arbitrary target repositories, and adding a line to a tracked file there would be an unrelated change smuggled into an unrelated PR.Closes #110
Research grounding
No
RESEARCH.mdfinding applies. This corrects an instruction whose recommended workflow is unexecutable in a known execution environment; it is an environment-accuracy fix rather than a design decision about agent behavior, and the repository's empirical findings do not speak to sandbox path scoping.Doc sync check
README.md's "What it does" Step list still matchescreate-dev-loop.md's Steps 1:1 — no Step was added or removed; verified mechanically byscripts/check_docs.py{{placeholder}}added or changed has a corresponding Step 4 substitution-table row — no placeholder was added or changed; verified mechanically by the same scriptRESEARCH.mdupdated — not applicable; no finding is shipped or superseded here, as stated aboveTest plan
python3 scripts/check_docs.py→Doc consistency check passed.python3 -m pytest tests/ -q→ 13 passed{{placeholder}}added, no fenced code block introduced (so no triple-backtick escape is at risk), and the change is confined to prose inside the generated-skill template.CLAUDE.md's "Testing changes" procedure (run/create-dev-loopagainst a real repository and inspect the generated skill) is structurally unrunnable in this session: the sandbox is scoped to this repository's own checkout, so no second repository is reachable, and Step 6 creates a GitHub repository, which an unattended run must not do. This is the condition described in [self-audit] The repo's own validation anchor is structurally unrunnable in a headless dispatch, so template changes can never merge autonomously #109.Because the changed file is
create-dev-loop.md— template surface, and on the generated skill's do-not-auto-merge list — the Phase 4 scope gate requires the anchor, so this PR has not been merged autonomously and is handed off for human review. The changed lines are prose within the generated skill body rather than generation logic, so a fixture run would confirm the new wording appears in the output; it could not, on its own, confirm that the guidance is correct.Deferred this cycle
Both remaining open issues were considered and deliberately not picked up:
CLAUDE.mdstill links gardener under the old owner) —CLAUDE.mdis agent-loaded configuration. Phase 1's harness-blocked classification requires that edits to it be authorized explicitly and separately rather than made mid-cycle, and the file is independently on the do-not-auto-merge list. Awaiting maintainer authorization.This PR description was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener).
drafted by Claude on behalf of Daniel Stephenson