Gap found during Phase 9 self-audit (cycle that produced PR #108)
Filed here rather than on dmccoystephenson/create-dev-loop-dev-loop, which does not resolve — see #87.
What was observed
This repository's external anchor, per CLAUDE.md's "Testing changes" section, is a manual run of /create-dev-loop against a real target repository, followed by inspection of the generated skill. That anchor is not merely unavailable in a headless Gardener dispatch — it is structurally unrunnable there, for two independent reasons:
- The dispatch sandbox is scoped to this repository's own checkout, so no second repository is reachable to generate a skill against, and directory creation inside the allowed root can also be blocked — a constraint
create-dev-loop.md:333 already documents, which rules out cloning a fixture locally as a workaround.
- Step 6 of the procedure creates a GitHub repository. That is an outward-facing, hard-to-reverse action that an unattended run should not take on its own.
The consequence compounds rather than being a one-off inconvenience: every autonomous cycle that touches create-dev-loop.md is permanently UNVERIFIED and therefore permanently unmergeable. Since create-dev-loop.md is also on the generated skill's do-not-auto-merge list, template work is the one category of work on this repo that a headless loop can never finish. PR #108 is the concrete instance — a three-line change, CI green, that must nonetheless be handed to a human.
What the existing coverage does and does not reach
CI is not a substitute. During PR #108's self-review the stash-and-revalidate step was performed rather than assumed: with the fix reverted to origin/main, scripts/check_docs.py still reported Doc consistency check passed. The defect did not surface, and this is expected — check_docs.py verifies placeholder/substitution-table parity, README-to-Step parity, and relative-link resolution. Step 2's file list is none of those. Green CI on a template change is evidence of no doc-drift regression and nothing more.
Issue #44 (closed) added generic UNVERIFIED handling to the template, which is what made PR #108 degrade honestly instead of claiming a green anchor. This issue is the complementary repo-specific gap: the honest degradation is working as designed, and the design leaves this repository with no runnable behavioral surface at all.
Directions worth considering
Offered as options rather than a recommendation; the trade-offs here belong to the maintainer.
- A dry-run or fixture mode for
/create-dev-loop that generates into a scratch path within the current tree and skips Steps 5–7, making generation observable without registering a command or creating a repository. This is the narrowest change that would make the anchor runnable headlessly.
- A checked-in fixture repository skeleton (a few directories and convention files, no git remote) that generation can target in-tree, paired with assertions that the output contains no unresolved
{{placeholders}} and carries correct header comments.
- Extending
scripts/check_docs.py toward the template's behavioral claims, accepting that it can only ever reach the mechanically checkable subset.
- Explicitly deciding that template changes are human-validated by policy, and recording that in
CLAUDE.md so the loop stops treating the resulting hand-off as a gap. This is a legitimate resolution and would close this issue as answered rather than fixed.
Self-audit rubric result for the cycle
- Identity drift: PASS — placeholder parity, Step count, and escaping conventions all held; docs moved together with the change.
- Instruction clarity: PASS — no step required reinterpretation. The Phase 4 UNVERIFIED gate and the do-not-auto-merge list both fired exactly as written.
- Edge case coverage: PASS — the sandbox blocked
rm even inside the allowed working directory, which create-dev-loop.md:268 already anticipates and prescribes a working alternative for.
- Phase friction: PASS — Phases 5 through 8 collapsed to near-zero work because the merge gate was decided by Phase 4's anchor result.
- Drift candidates: no signal this cycle.
- External-signal quality: FAIL — the subject of this issue.
This issue body was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener).
Gap found during Phase 9 self-audit (cycle that produced PR #108)
Filed here rather than on
dmccoystephenson/create-dev-loop-dev-loop, which does not resolve — see #87.What was observed
This repository's external anchor, per
CLAUDE.md's "Testing changes" section, is a manual run of/create-dev-loopagainst a real target repository, followed by inspection of the generated skill. That anchor is not merely unavailable in a headless Gardener dispatch — it is structurally unrunnable there, for two independent reasons:create-dev-loop.md:333already documents, which rules out cloning a fixture locally as a workaround.The consequence compounds rather than being a one-off inconvenience: every autonomous cycle that touches
create-dev-loop.mdis permanently UNVERIFIED and therefore permanently unmergeable. Sincecreate-dev-loop.mdis also on the generated skill's do-not-auto-merge list, template work is the one category of work on this repo that a headless loop can never finish. PR #108 is the concrete instance — a three-line change, CI green, that must nonetheless be handed to a human.What the existing coverage does and does not reach
CI is not a substitute. During PR #108's self-review the stash-and-revalidate step was performed rather than assumed: with the fix reverted to
origin/main,scripts/check_docs.pystill reportedDoc consistency check passed.The defect did not surface, and this is expected —check_docs.pyverifies placeholder/substitution-table parity, README-to-Step parity, and relative-link resolution. Step 2's file list is none of those. Green CI on a template change is evidence of no doc-drift regression and nothing more.Issue #44 (closed) added generic UNVERIFIED handling to the template, which is what made PR #108 degrade honestly instead of claiming a green anchor. This issue is the complementary repo-specific gap: the honest degradation is working as designed, and the design leaves this repository with no runnable behavioral surface at all.
Directions worth considering
Offered as options rather than a recommendation; the trade-offs here belong to the maintainer.
/create-dev-loopthat generates into a scratch path within the current tree and skips Steps 5–7, making generation observable without registering a command or creating a repository. This is the narrowest change that would make the anchor runnable headlessly.{{placeholders}}and carries correct header comments.scripts/check_docs.pytoward the template's behavioral claims, accepting that it can only ever reach the mechanically checkable subset.CLAUDE.mdso the loop stops treating the resulting hand-off as a gap. This is a legitimate resolution and would close this issue as answered rather than fixed.Self-audit rubric result for the cycle
rmeven inside the allowed working directory, whichcreate-dev-loop.md:268already anticipates and prescribes a working alternative for.This issue body was drafted during a Gardener session (https://github.com/Stephenson-Software/gardener).