feat(playbooks,claude-memory): ship the DOC-37 verification-loop guidance and the C9 presence check - #1925
Conversation
…and check CLAUDE.md states its build and test commands Closes the buildable half of DOC-37, the seven candidates the verification-loops blog slice adopted but never built. Three ship as content on surfaces that already own the shape; four are deferred with triggers because they have no local instance to fire on. playbooks/skill-authoring gains one spoke, reference/verification-loops-in-skills.md, reached from a single SKILL.md section. It covers what the upstream playbook leaves open once a skill's job is checking work rather than producing it: - Three creation routes, not the post's two. The platform's skill-authoring best-practices page documents asking Claude directly and explicitly disclaims needing a dedicated skill-writing skill; the spoke ranks it ahead of the plugin the post reaches for first purely because it needs no install. Creation via skill-creator, interview flow included, is documented first-party by that plugin's own README and SKILL.md; the harness skills page is what covers only its eval loop. - The plugin invocation written namespaced, for a narrower reason than it appears. Both the plugin-namespaced and directory-scoped forms bare-resolve. The plugin one is conditional: the bare name also invokes the skill unless another command already uses that name, and a plugin copy and a same-named original both stay reachable rather than one overriding the other. The qualified form is preferred because it is unconditional, not because the bare one fails. - Shadowing, which the post omits. It rules bundled skills off-limits for embedding and leaves chaining as the only alternative; a same-name project or personal skill replaces a bundled one. Presented with its real semantics - replace, not extend - which is the trade against chaining. - Embed-failure diagnosis led by the documented cause. The platform attributes a skipped in-body step to insufficient prominence or wording; the post attributes it to the description or earlier instructions, which no reference page states, so it is a second hypothesis. Leading with it sends readers to the frontmatter when the cause is usually the body. Kept distinct from a skill that never surfaced at all. claude-memory/audit gains C9: does a project CLAUDE.md state the repo's exact build and test commands, and are the stated commands correct. It is the only CLAUDE.md check looking for missing or wrong content - C4 asks whether an existing instruction is concrete, C5 whether it should have been cut. Two severities, following C6 and C7's pattern of heading a check at its higher branch: FAIL for a stated command the repo's manifest does not have, WARN for one absent or given only as prose naming the tool. C9 opens with a step 0 because its own source cuts both ways: the memory page lists build and test commands as what project memory is for, while the same page's CLAUDE.md-vs-auto-memory table puts build commands in the auto-memory column. So the check first asks whether the commands are stated on any loaded surface and treats a yes as a C3 placement question. The requirement is that they be reachable, not that they sit in one file. C7 owns paths, versions, and counts; C9 owns whether the command runs; a wrong command is reported once. Deferred with triggers, all four zero-instance in this repo: the log-hygiene skill template, the wrapper-chaining template, the spec-validation skill, and the minimal-skill stub. Build when a consuming setup asks for one. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Claude finished @kyle-sexton's task in 2m 42s —— View job Review: PR #1925
This PR is documentation/reference content (no executable code), so I focused on internal consistency, whether the shipped procedure actually matches its own eval and cross-references, and CLAUDE.md alignment. Security review is out of scope for this lane. Should fixC9's step 0 short-circuit contradicts eval 8's expected behavior. criteria.md#L219-L222: Read literally, "go no further in this check" terminates the whole procedure the moment commands are found reachable elsewhere — before step 1 (find stated commands), step 2 (verify against the manifest), or step 3 (FAIL on a wrong command) ever run. But evals.json#L89-L99 (eval 8, shipped in this same PR) is built exactly on the case where commands are reachable elsewhere (auto memory) and CLAUDE.md also states a wrong one ( This matters here specifically because Suggested fix: scope step 0's short-circuit explicitly to the WARN-for-absence branch, e.g. "...Do not WARN for absence (step 4). Steps 1–3 (verify correctness of anything CLAUDE.md itself states) still apply regardless." Fix this → Minor nitChangelog wording could be read as contradicting criteria.md's own boundary statement. claude-memory/CHANGELOG.md#L15-L17 describes the FAIL branch as "C7's wrong-reference class," but What looks solid
|
|
Claude finished @kyle-sexton's task in 50s —— View job Security Review — complete
Scope reviewed: all 11 changed files — two Findings: none. This PR contains no code, no GitHub Actions workflow changes, no hooks, no The one file with any "instructional" content that a future agent might act on is No security issues to report for this PR. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f361dfa129
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude has reviewed this PR 2 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
… non-surfacing routes Two Codex findings: - C9 step 0 said "go no further", so a stale command stated in CLAUDE.md escaped validation whenever correct commands lived on another loaded surface - contradicting eval 8's own scenario. The carve-out now suppresses only the absence WARN; every command CLAUDE.md states still goes through steps 2-3, because a stale stated command misleads whether or not a correct one exists elsewhere. - The non-surfacing note prescribed /discipline:use-your-skills for every never-triggered case, but that skill routes description quality to skill-quality and budget drops to claude-config, and a playbooks consumer may install none of them. The note now names the owning diagnostic per cause, each marked if-installed. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 59s —— View job Security Review — complete
Scope reviewed: all 11 files changed in this PR (two Findings: none.
No security issues to report for this PR. |
|
Claude finished @kyle-sexton's task in 1m 21s —— View job Review: PR #1925 (re-review after push)
Commit 1. C9 step 0 short-circuit — confirmed fixedcriteria.md#L219-L223 now reads:
This is scoped correctly now: the short-circuit only kills step 4's absence-WARN, and steps 2–3 (verify + FAIL) explicitly still run. I checked it against eval 8 (evals.json#L89-L99) — 2. Non-surfacing routing in verification-loops-in-skills.md — confirmed fixedverification-loops-in-skills.md#L101-L108 now routes by cause rather than prescribing a single diagnostic for every case: description mismatch → Scope check on the fix commit
Not addressed (by design — was a non-blocking nit)My earlier minor nit about No new findings. Both Codex P2s are resolved and internally consistent with their own eval/cross-references. |
Summary
Doc-alignment roster row 236 — Building verification loops in Claude Code with skills (the DOC-37 row: the roster's densest component-opportunity row, named in the campaign's completion criteria). Live post verified unmoved on every load-bearing point (three converging checks + a firecrawl body diff; minor additive drift only).
Zero new skills were minted — deliberately. The slice's own Target typing makes two of the seven "skill candidates" rule rows and one a doctrine chapter; three shipped as content on surfaces that already own the shape, four deferred with a build-on-demand trigger (all four zero-instance by grep; one already correctly served by the shipped verification-surfaces table).
playbooks 0.6.16 — new skill-authoring spoke
reference/verification-loops-in-skills.md:claude-memory 0.5.3 / criteria 1.4.0 — new criterion C9: project CLAUDE.md build/test-command presence, FAIL-headed with branches per the file's own convention, an explicit C7 boundary (C7 owns references; C9 owns commands; never double-report), sourced quotes added to official-guidance.md so the update action can't orphan it — and a step-0 false-positive guard the producer added against its own citation: memory.md's table puts "Build commands" in the auto-memory column, so commands reachable on any loaded surface route to C3 placement, not a C9 WARN, with the counter-evidence disclosed in the Why. Eval 8 exercises all three regression-prone behaviors.
Test plan
Related
🤖 Generated with Claude Code
https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X