Fix doc drift in the trust model and restated conventions - #82
Conversation
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Self-review rubric — scored adversarially against the diff and command output, not judgment. External anchor.
One item I fixed mid-review rather than passing. The first push described Two observations outside the diff hunks, folded in here rather than posted inline:
|
* Fix doc drift in the trust model and restated conventions Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Clarify that DO_NOT_AUTO_MERGE can only widen the merge gate Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Summary
A Stage A documentation-accuracy sweep — a full pass over every file in
CLAUDE.md's "Documentation sourcesof truth" table, verifying each claim against
create-dev-loop.mdandscripts/check_docs.pyrather thanagainst memory. Three files had drifted; the fixes are doc-only.
SECURITY.md— the trust model understated what the target repo controls.CLAUDE.mdrequires this fileto match "what Step 2 of
create-dev-loop.mdactually reads from the target repo." It didn't:and commit history — Step 2 reads all of them.
conventions"). The sharper consequence was missing entirely: Step 4 derives
COMPILE_CMD,TEST_CMD,LINT_CMD, andEXTERNAL_SIGNAL_CMDfrom the target repo's build files and CI workflows, and thegenerated skill executes them verbatim.
DO_NOT_AUTO_MERGE— which the target repo also supplies —decides what that skill will refuse to merge without a human.
derived commands and merging PRs (Phase 8
gh pr merge --squash).For a document whose whole job is telling readers why to only run this against repos they trust, "the repo
you point this at chooses the shell commands the agent will run and which paths it may auto-merge" is the
load-bearing sentence, and it wasn't there.
CONTRIBUTING.md— restated conventions were incomplete.CLAUDE.mdrequires this file's restatedconventions to match it. Three were absent: repo-specific findings belong only in a generated skill and must
never be back-ported; Steps 3/5/6 are a load-bearing downstream interface whose changes need flagging in the
PR description; and the squash-merge/delete-branch and co-author-trailer conventions. The Steps 3/5/6 rule is
referenced through
CLAUDE.md's own section rather than by adding a second hyperlink to the gardener repo —see #79 for why.
RESEARCH.md— "Last reviewed" bumped to 2026-07-29 to reflect this sweep. All eight findings, theircitations, confidence levels, and Implementations entries were re-read; no inaccuracy found.
Filed rather than fixed here
Three findings from the sweep are code, not doc drift, so per the Stage A rule ("if the code is what's
wrong, file an issue and leave it for an implementation cycle") they are issues:
README.mdandCLAUDE.mdlinkdmccoystephenson/gardenerand call it open source;gh repo viewreports it private, so the link 404s for every reader. Resolving it needs a maintainer decision
(publish the repo vs. soften the docs), and one of the two files is agent-loaded config.
check_docs.pyparses the Step 4 substitution table through a fixed 8000-byte window with 231 bytesof headroom; once the table outgrows it, CI reports existing rows as missing.
CLAUDE.md's doc-sources table omits.github/ISSUE_TEMPLATE/*.md, which restate conventions thesame way the PR template does.
No open issues existed at triage, so nothing was deferred.
Research grounding
No finding applies. This is a documentation-accuracy correction; it touches no template placeholder, no Step
logic, and no phase definition.
RESEARCH.md's only change is the review date — no finding, citation,confidence level, or Implementations entry is added, removed, or reinterpreted.
Doc sync check
README.md's "What it does" Step list still matchescreate-dev-loop.md's Steps 1:1 — unchanged, and verified byscripts/check_docs.py{{placeholder}}added or changed has a corresponding Step 4 substitution-table row — none added or changedRESEARCH.mdupdated — review date only, per aboveTest plan
python3 scripts/check_docs.pypasses locally (placeholder/table coverage, README ↔ Steps 1:1, relative links). CI runs it on this PR.SECURITY.mdclaim traced to source: the read list against Step 2's file enumeration;COMPILE_CMD/TEST_CMD/LINT_CMD/EXTERNAL_SIGNAL_CMD/DO_NOT_AUTO_MERGE/SELF_REVIEW_RUBRICagainst their Step 4 rows; "Phase 3 build-verification step" and "Phase 4 external-signal anchor" against where those placeholders actually appear in the embedded template; "merge PRs" against Phase 8'sgh pr merge --squash.CONTRIBUTING.mdline traced to theCLAUDE.mdsection it restates.[CLAUDE.md](CLAUDE.md)resolves — covered bycheck_local_links.Behavioral anchor: UNVERIFIED-not-applicable.
create-dev-loop.mdis untouched, as are the Step 4substitution table and all Step 1/5–7 logic, so there is no generation behavior for a
/create-dev-looprunagainst a live repo to verify. Per the dev-loop's Phase 4 scope gate, that is the documented condition for
recording the anchor as not-applicable rather than required.
This PR description was drafted during a Gardener session (Stephenson-Software/gardener).