Skip to content

fix(playbooks,docs-hygiene): correct two caching claims against the live pages - #1920

Merged
kyle-sexton merged 2 commits into
mainfrom
docs/roster-r16-prompt-caching
Aug 4, 2026
Merged

fix(playbooks,docs-hygiene): correct two caching claims against the live pages#1920
kyle-sexton merged 2 commits into
mainfrom
docs/roster-r16-prompt-caching

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Summary

Doc-alignment roster row 16: Prompt caching (API) — first captures of both the API page (152,223 B) and its harness sibling (29,721 B), with a hard surface-scoping discipline (API vs harness caching semantics are different products' claims). Seven repo surfaces stating caching facts swept; five verified clean and left alone (including boris's $12.50/$1 figures — confirmed contextually right for subagent orchestration, where the five-minute TTL governs); two carried real defects:

playbooks 0.6.15orchestration.md's continue-an-oriented-worker rationale claimed "accumulated context is a cache read". Wrong in the chapter's own modal case: the harness page states subagents build their own cache and use the five-minute TTL even on subscription, so a worker resumed after a longer fan-out wave re-writes its whole context at the five-minute cache-write rate ("1.25 times the base input tokens price"), not a cache-read rate. The recommendation stands; the reason is now the re-derivation saved (a replacement pays the same tokens plus the rediscovery tool turns), with the TTL and pricing anchors cited.

docs-hygiene 0.9.5extract-ssot's anti-pattern #9 ("Cache invalidation cascade") rested on a mechanism that is dead on the skill's own declared surface: the harness page states mid-session edits of always-loaded files keep the cache (the edit just doesn't apply), and cross-session sharing keys on the git-status snapshot, which any commit breaks. Rewritten in place as "Always-loaded SSOT propagation lag" — corrections ship that live sessions don't see until /clear//compact/restart — with a scope fence for the API surface (where prefix volatility genuinely costs an Agent SDK fleet), scoped to unscoped rules files (path-scoped rules load lazily; pre-load edits apply), and slot 9 preserved because #10#13 are cited by number in eight places. The dead vocabulary survives only in the changelog, quoted as removed.

Routed, not acted on: the owner's dotfiles CLAUDE.md caching claim verified correct with one additive omission (fast mode is a third cache-key element) — recorded for dotfiles routing; the API page's explicit-default-effort no-invalidate row flagged as a future I17-b enrichment parallel.

Test plan

  • Docs-only; markdownlint 0 errors; version/changelog parity both plugins; scripted quote fidelity 11/11 against the captured pages.
  • Orchestrator-commissioned Fable verifier: both live fetches (MD5s exact), both correction logics reconstructed, the slot-9 citation count independently verified, both contested calls upheld — substance PASS with 1 real defect (a surviving dead-mechanism table row in the same file) + 2 precision nits (cache-write rate; unscoped-rules scoping), all three fixed and re-checked ALL PASS including an independent dead-vocabulary sweep.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X

… surface that owns them

Roster row 16 (Prompt caching, API) verified two families of caching claim
against the live pages. Both failed, in opposite directions: one stated a
harness mechanism that its own modal case defeats, the other cited the API
page for a claim whose consumers are Claude Code sessions.

playbooks 0.6.14 -> 0.6.15. fable-5's orchestration chapter argued that
continuing an oriented worker is cheap because "accumulated context is a cache
read rather than a re-derivation". Subagents "use the five-minute TTL even on a
subscription", so a worker resumed after a fan-out wave longer than five minutes
re-writes its whole context at the five-minute cache-write rate -- "1.25 times
the base input tokens price" -- not the cache-read rate. The recommendation
stands; its reason is now the re-derivation saved, not the tokens.

docs-hygiene 0.9.4 -> 0.9.5. extract-ssot's anti-pattern #9 was "Cache
invalidation cascade", and decision-framework carried the same dead mechanism in
two places: test #3's rationale, cited to the API prompt-caching page glossed as
"cache TTL hinges on stability", and KEEP-INLINE row C. The API page says no
such thing and is the wrong surface: this skill scopes to tracked markdown
consumed by Claude Code sessions, where editing an always-loaded file mid-session
"does not invalidate the cache, but the edit also doesn't apply", and sequential
sessions "share the prefix only when the git status snapshot at startup matches"
-- that snapshot "captures branch and recent commits", so committing the edit
breaks sharing exactly as any other commit does and SSOT edit frequency is not a
distinct driver.

The real cost is propagation, and it still earns a gate: #9 is now
"Always-loaded SSOT propagation lag" -- a correction lands while every running
session keeps following the superseded version until its next /clear, /compact,
or restart. Test #3 and row C now state that mechanism. The pattern is scoped to
CLAUDE.md and UNSCOPED rules files, since rules with paths: frontmatter "load
later, when Claude first reads a matching file" and a pre-load edit "does take
effect". A scope fence keeps API-surface caching separate, where prefix
volatility genuinely costs an Agent SDK fleet sharing one prefix across machines.
Slot 9 is preserved so the by-number citations to #10-#13 stay intact.

Sources verified 2026-08-04, fetched as raw markdown:
platform.claude.com/docs/en/build-with-claude/prompt-caching (152,223 B, MD5
99507693631240bea1d10fc75f07c78f) and code.claude.com/docs/en/prompt-caching
(29,721 B, MD5 3c33a5402e05a5e18ea8c5177780bbea).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@cursor

cursor Bot commented Aug 4, 2026

Copy link
Copy Markdown

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

claude Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 30s —— View job


Code Review

  • Gather context (diff, changed files, CLAUDE.md guidelines)
  • Review docs-hygiene changes (extract-ssot anti-patterns, decision-framework, SKILL.md, CHANGELOG, plugin.json)
  • Review playbooks changes (orchestration.md, CHANGELOG, plugin.json)
  • Check version/changelog parity and cross-references (slot 9 citation count, etc.)
  • Post final review

Verdict: no blocking findings. This is a well-scoped, well-verified fix. I re-fetched both live doc pages this session (code.claude.com/docs/en/prompt-caching, platform.claude.com/docs/en/build-with-claude/prompt-caching) and cross-checked the PR's technical claims directly against them:

  • plugins/docs-hygiene/.../anti-patterns.md #9 rewrite: "editing an always-loaded file mid-session neither applies nor invalidates the cache," "sequential sessions share a prefix only when the git-status snapshot matches," and the API-surface "100% identical prompt segments" scope fence all match the live pages verbatim in substance.
  • plugins/playbooks/.../orchestration.md line 96: "subagents build their own cache and use the five-minute TTL even on a subscription" and the "1.25× base input" cache-write rate are exact matches to the Subagents and the cache section and the pricing note.

Other things checked and clean:

One minor, non-blocking observation: anti-patterns.md line 125 says cache hits on the API surface require "byte-identical prefix segments" — the live page's actual wording is "100% identical prompt segments" (functionally the same claim, byte-identical is a reasonable paraphrase, not a factual error).

No code/logic to review here beyond markdown — didn't find architecture, error-handling, or test-coverage concerns since this PR only touches documentation content and versioning.

@claude

claude Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 50s —— View job


Security review — PR #1920

No security issues found.

This PR is documentation-only: two markdown skill/context files (extract-ssot/context/anti-patterns.md, extract-ssot/context/decision-framework.md, fable-5/context/orchestration.md), a SKILL.md taxonomy-list edit, two CHANGELOG.md additions, and two plugin.json semver bumps (docs-hygiene 0.9.4→0.9.5, playbooks 0.6.14→0.6.15). All content changes are prose corrections to prompt-caching claims, cited to Claude Code and Anthropic API docs pages.

Checked and confirmed out of scope for this review:

  • No workflow files (.github/workflows/**) touched — zizmor's advisory lane covers that surface anyway.
  • No hooks, scripts, executable code, .mcp.json, or marketplace/plugin schema fields beyond the version string changed.
  • No new URLs introduced as fetchable/actionable references — the added links are citations inside markdown prose (code.claude.com, platform.claude.com docs pages), not consumed by any script or workflow in this diff.
  • No secrets, tokens, credentials, or config values added or modified.
  • No injection surfaces (command, SQL, path, template) — nothing in this diff executes.

Nothing here touches trust boundaries, permissions, or data flow. Clean from a security-review standpoint.

  • Gather context (PR diff, changed files)
  • Review changed files for security issues
  • Post findings

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude has reviewed this PR 2 times. The lane skips further automatic reviews after 5; deleting this comment resets the count.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 16ecc8fe32

ℹ️ 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".

Comment thread plugins/docs-hygiene/skills/extract-ssot/context/anti-patterns.md Outdated
…t mitigation

Codex finding: the "goes back inline" branch is a no-op when the
original home was itself always-loaded - inline in CLAUDE.md or an
unscoped rule carries the same propagation lag the mitigation exists to
reduce. The split now names late-enough-loading targets (skill body,
paths:-scoped rule, on-demand file) and states when inline genuinely
helps.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@claude

claude Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 1m 36s —— View job


Code Review — PR #1920

  • Gather context (diff at HEAD d08a720, CLAUDE.md/REVIEW.md guidelines)
  • Review the Codex-flagged fix in anti-patterns.md (commit d08a720)
  • Review remaining diff for correctness/maintainability
  • Post final review

Verdict: no blocking findings. This synchronize re-review picks up from the two earlier passes on this PR (general code review + security review, both clean). The only change since then is d08a720, which fixes the one open item: Codex's P2 finding that the volatile-split mitigation's "goes back inline" branch could leave content on the same always-loaded surface it was extracted from, undoing the extraction without curing the propagation lag that motivated it.

Confirmed the fix lands correctly at anti-patterns.md#L134:

  • Mitigation fix: correct plugin-system inaccuracies and harden references #2 now requires the split target to be "a surface that loads late enough to see corrections — a skill body (injects at invocation), a paths:-scoped rule (loads on first matching read), or a file consulted on demand."
  • It explicitly closes the gap Codex flagged: "Going back inline helps only when the original home was itself lazy-loaded; inline in CLAUDE.md or an unscoped rule is the same always-loaded surface with the same lag, and buys nothing."

This is the right fix — it doesn't just gate the new target, it also disqualifies the "return to inline" path when the source was itself always-loaded, which is exactly the case Codex's example (content originally inline in CLAUDE.md or an unscoped rule) hits.

Re-checked for regressions from this one-line-scoped change:

  • Cross-references intact. Anti-pattern chore: adopt widened comment-hygiene policy and re-pin ci-workflows @9567b8b #9's slot number is still unchanged, so the by-number citations to build(deps): bump ci-workflows pin to b6431a1 (PSSA RULE_ERROR retry fix) #10ci: add Conventional Commits PR-title gate #13 in actions/verify.md, actions/batch.md, lessons.md, rename-references/context/patterns.md, and SKILL.md all still resolve correctly (grep-verified).
  • CHANGELOG parity. docs-hygiene 0.9.5's changelog entry describes the propagation-lag mechanism generally and doesn't need updating for this wording refinement — the entry isn't misleading post-fix, though it also doesn't call out the "requires a late-loading target" refinement specifically. Minor, not blocking, since the changelog entry's claims remain accurate.
  • No other files touched by d08a720decision-framework.md, orchestration.md, SKILL.md, both plugin.jsons, and playbooks/CHANGELOG.md are unchanged from the prior review pass, which already verified their technical claims against the live docs pages.

Couldn't run markdownlint-cli2 in this session (tool permissions didn't allow the npx invocation) — the PR description states it was run locally with 0 errors; if --allowedTools is extended for npx/markdownlint-cli2 I can independently confirm on a future pass.

@claude

claude Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 52s —— View job


Security review — PR #1920

No security issues found.

Reviewed the full diff (git diff origin/main...HEAD, HEAD = d08a720) against all 8 changed files. This PR is documentation-only:

  • plugins/docs-hygiene/skills/extract-ssot/context/anti-patterns.md — anti-pattern chore: adopt widened comment-hygiene policy and re-pin ci-workflows @9567b8b #9 rewrite (prose)
  • plugins/docs-hygiene/skills/extract-ssot/context/decision-framework.md — test feat: markdown-formatter plugin (pilot migration) #3 / KEEP-INLINE test C rationale (prose)
  • plugins/docs-hygiene/skills/extract-ssot/SKILL.md — taxonomy list label update (prose)
  • plugins/docs-hygiene/CHANGELOG.md, plugins/playbooks/CHANGELOG.md — new entries
  • plugins/docs-hygiene/.claude-plugin/plugin.json, plugins/playbooks/.claude-plugin/plugin.jsonversion string bumps only (0.9.4→0.9.5, 0.6.14→0.6.15)
  • plugins/playbooks/skills/fable-5/context/orchestration.md — one bullet's rationale (prose)

Checked and confirmed out of scope for this review:

  • No workflow files. Nothing under .github/workflows/** is touched — no pull_request_target/workflow_run exposure, no permissions: changes, no github context interpolated into a run: block.
  • No executable surface. No hooks, scripts, .mcp.json, marketplace/plugin schema fields (beyond the version string), or any code that runs — this diff is markdown prose plus two JSON version bumps.
  • No injection surfaces. No command construction, SQL, path handling, or templating anywhere in the diff.
  • No secrets/tokens/credentials added, modified, or referenced.
  • URLs are inert citations. The added links (code.claude.com, platform.claude.com docs pages) are prose citations inside markdown content, not consumed by any script, hook, or workflow in this diff — no fetch/exec surface.
  • No authorization/access-control logic exists in this diff to have a gap in.

The latest commit (d08a720) addresses a correctness point from Codex's review (mitigation #2 in anti-pattern #9 now requires a genuinely late-loading target rather than allowing "inline" to silently return content to the same always-loaded surface) — a documentation-accuracy fix, not a security-relevant change.

Nothing in this diff touches trust boundaries, permissions, or data flow. Clean from a security-review standpoint.

  • Gather PR diff (gh diff origin/main...HEAD) and changed files
  • Review each changed file for security issues (logic flaws, injection, secrets, auth gaps)
  • Post findings

@kyle-sexton
kyle-sexton merged commit 0704908 into main Aug 4, 2026
32 checks passed
@kyle-sexton
kyle-sexton deleted the docs/roster-r16-prompt-caching branch August 4, 2026 10:08
kyle-sexton added a commit that referenced this pull request Aug 4, 2026
…fleet acts on (#1922)

## Summary

Doc-alignment roster row 17: **How Claude Code uses prompt caching**
(the harness half of the caching pair; page unmoved vs row 16's capture
— MD5 re-confirmed three times). Most of the page was already
verified-in-use this session (I17-b's authority chain, row 16's sweep);
this row closed the residue.

**claude-ops 0.27.0** — the observability skill stored the cache half of
the cost signal but never surfaced it: `cc_metrics` has always split
token usage into input/output/cacheRead/cacheCreation, yet no report
section rendered it. Now shipped:

- A **Cache health** report section — deliberately its own OTEL-sourced
section rather than new columns on the ccusage-sourced Token/cost table,
fixing a grain mismatch *and* a provenance mismatch in one move
(per-model windowed data vs a session-scoped query; OTEL tokens vs
ccusage billing).
- A new per-model windowed query in `otel-queries.md`, **verified by
execution** against a live store (returns real per-model rows; the live
data even demonstrates the diagnostic — an inverted read/creation ratio
on short-session Haiku subagents). Deliberately hot-tier-only: the
cold-tier union was built, tested, and **fails** with an IO error on any
fresh install lacking cold parquet — the constraint is documented at the
point of use rather than shipping a query that breaks for most
consumers.
- The upstream reading ("a high read-to-creation ratio means caching is
working well…") in-fence as report copy; the **reported-never-graded**
rule outside the skeleton fence with only the non-derivable rationale
(upstream publishes direction, no threshold — a severity band here would
be an invented number cited as sourced).
- A Cache-health routing row distinguishable from the existing
historical-token row.

**`docs/PLUGIN-PHILOSOPHY.md`** (one line, no bump per precedent) — the
component-stances MCP-servers row gains its second adoption cost,
previously omitted: the only component type that can cost a consumer
their prompt cache — with the load-bearing deferred-tools qualifier (the
cache survives when the server's tools are deferred, the default on
supported models), conclusion-plus-pointer, no enumeration. The row's
Verified column deliberately not advanced (it dates the MCP link, which
was not re-verified; the new claim carries its own inline stamp).

Residue dispositions with evidence: 7 sections verified-this-session, 3
already satisfied in-repo, the rest declined on the
no-decision-turns-on-it test (provider table, TTL env-var enumeration,
worktree cache scope, tool-deny mid-session cost, compaction mechanics).
Recorded for the roster: the session-flow handoff "fork" naming
collision with the harness feature of the same name (skill defines its
term inline; nothing false).

## Test plan

- markdownlint 0 errors; changelog parity all three modes; manifest
presence; skill portability; check-changed-skills PASS.
- Producer-side independent reviewer (rationale withheld) found 2
blockers + 1 major on the first commit — a rendering directive inside
the report skeleton's fence, an unfillable-at-grain data path, an
overstated routing-gap claim — all fixed, with the fill-path fix going
beyond the reviewer's options after the producer found the underlying
provenance mismatch.
- Orchestrator-commissioned Fable verifier over the final state (which
no prior review had covered end-to-end): live page fetch, fence-boundary
check, **query extracted verbatim and executed read-only against the
live OTEL store**, cold-union failure reproduced first-hand, provenance
separation judged, philosophy-row accuracy and table integrity, claim
accuracy against origin/main — **7/7 PASS, empty defect list**.

## Related

- No linked issue.
- Doc-alignment loop, roster row 17. Predecessors: #1908#1920.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 4, 2026
…ss accepts but declines to honor (#1923)

## Summary

Doc-alignment roster row 18 — the priority head's final row: **Model
configuration** (code.claude.com/docs/en/model-config), the corpus's
most-cited harness page, first formally captured here (82,975 B, MD5
`5c9e06c5…`) with a **semantic-stability proof**: normalized token
streams of the live page and the frozen 2026-07-31 snapshot are
identical (10,222 tokens each, control-probed) — retroactively
confirming seven earlier rows' model-config-dependent work ran against
an unchanged page.

**claude-config 0.21.7 / criteria 1.15.0**:

- The audit skill advertised settings auditing yet had zero coverage of
the model-configuration keys. New **category H (Model and effort
settings)** — four rows, each a value the harness accepts into a
settings file and then declines to honor: `effortLevel: max/ultracode`
(not accepted there), `fallbackModel` beyond three after dedup (with the
raw-`maxItems:3` schema test reported separately — the two tests
genuinely diverge, verified empirically), a specific entry disabling its
family wildcard (including the Mantle-ID and custom-model-option arms),
and `enforceAvailableModels` against an unset/empty list (rated
**error** per the skill's own enforcement-bypass rubric). Visibility
stated per row from the page's own text (row 3's substitution notice;
row 2's documented silence). Category H is wired into the skill's phase
flow: "Eight categories", a Category H section, and a MANDATORY Phase
3.3 live model-config fetch gating every H finding.
`settings.local.json` routed through the safe-read path.
- **criteria I17's carve-out justification corrected** (1.15.0): it
claimed the schema makes `effortLevel: max` "unreachable" in settings —
false (JSON Schema is advisory; the harness reads a violating file). The
directive is unchanged; the justification now states the true reason and
points at the sibling that owns the file-level check, making the two
halves of one plugin cohere.
- Loop-lane alias stamp refreshed in place (prescribed by that
convention's own no-drift rule; claim re-verified against today's
bytes). CLOSE-2 re-confirmed discharged. The roster's named component
(dotfiles pin audit) declined — machine-scope, not this repo's to own.

Recorded upstream: schemastore's `effortLevel` description omits Opus
5/Sonnet 5 from its effort-support list — stale against the live page;
their fix, flagged because this PR now cites that schema.

## Test plan

- markdownlint 0 errors; changelog parity all modes;
`instruction-scan.test.sh` 46/46; `conflict-scan.test.sh` 41/41;
scripted quote fidelity (6 literals exact, 3 near-miss control probes
absent); schema constraints script-verified including the
no-`uniqueItems` fact the divergence rests on.
- Two full independent passes converged: the producer's reviewer (found
the blocking category-letter collision that made the section
unreachable, plus 8 accuracy/coherence defects — all fixed) and an
orchestrator-commissioned Fable verifier (upstream fidelity, the
stability-proof reproduction, IA-10-boundary and quote-vs-cite
adjudications, then a delta re-verify of the fix round: **every item
PASS, empty defect list**, both its residual observations non-blocking).
- Producer self-caught one defect pre-review (a sorted dedup
misidentifying dead chain entries) and corrected one of its own premises
when tested (A–F never quote upstream; the quote call stands on the
consumer-repo ground instead, disclosed as a deliberate departure).

## Related

- No linked issue.
- Doc-alignment loop, roster row 18 — completes the 18-row priority
head. Predecessors: #1908#1920, #1922.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 4, 2026
…and its fences (#1924)

## Summary

Doc-alignment roster row 241: **Choosing a Claude model and effort level
in Claude Code** (claude.com blog) — the post the owner's model-routing
lane and two main-tree surfaces cite for the model-vs-effort dial
discrimination. First custody baseline taken (article-body-only hash, so
site chrome can't fake drift). The roster's premise was corrected en
route: the post was *not* "digested nowhere" — planning's session-config
already carried a faithful two-knob digest; what it lacked was custody
and the post's own qualifiers.

**planning 0.27.3** — the "Two orthogonal knobs" section gains:

- Its citation, led by the strongest ground available: model-config's
own delegation sentence ("For guidance on which model and effort level
fit different kinds of work, see [the post] on the blog") — the
reference page points *at* the post; the narrowed negative is the
supporting ground: no reference page states the try-versus-know
**diagnostic** (choosing-a-model *orders* the levers — "Tuning effort is
often a better lever than switching models" — and the effort page pairs
effort against prompting; ordering a lever is not diagnosing which
failure you have).
- The post's **context-first prior step** neither knob had: on a wrong
answer, examine the provided context before touching a dial — sharpened
here because the step is this skill's own product (the Brief *is* the
context fix).
- Two missing fences: the discriminator is "a starting point, not a hard
rule" (the post's figure caption, disclosed as such), and raising effort
is sharpest below the model's default.
- The ambiguity signal: ambiguity the rounds could not retire argues up;
a Brief precise enough to execute from argues down.

Both pre-existing main-tree citations verified holding against the live
post. Owner-facing findings routed to the dotfiles ledger (not this
repo's to edit): the CLAUDE.md lane's dropped "clearly tried" (making
the two branches overlap), the Fable-reservation grounds contradiction,
the missing context-first step — with one earlier finding partially
withdrawn after the verifier surfaced the choosing-a-model source.

## Test plan

- Docs-only; markdownlint 0 errors; check-skill PASS identical to base;
scripted quote fidelity across four live sources (post, effort,
model-config, choosing-a-model) — after the producer caught and fixed
its own circular self-match, all spans verbatim with one disclosed
editorial elision.
- Independent fresh-context Fable verifier (rationale withheld, 8 binary
criteria incl. an adversarial test of the load-bearing negative): 7/8
PASS; its one FAIL (the negative stated too broadly) fixed with its
prescribed wording, the fix cross-verified verbatim against both live
pages before amending.

## Related

- No linked issue.
- Doc-alignment loop, roster row 241. Predecessors: #1908#1920, #1922,
#1923.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
kyle-sexton added a commit that referenced this pull request Aug 4, 2026
…ance and the C9 presence check (#1925)

## 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`:

- Three skill-creation routes ranked with the documented dependency-free
direct-ask first (the platform page's own "you don't need a 'writing
skills' skill" disclaimer), the skill-creator plugin second on
needs-no-install grounds — with creation *including its interview flow*
correctly credited as first-party documented (README + the plugin's own
SKILL.md "Interview and Research" phase).
- The **conditional bare-resolution rule**, stated accurately: a plugin
skill's bare name also resolves *unless another command claims it*
(skills.md's own sentence, v2.1.216+ noted); write the namespaced form
because it is unconditional — not because bare fails. This corrects an
inference the campaign's frozen EC-4 record had closed wrongly (its
cited evidence was about collision, not resolution; its live test was
never run) — **EC-4 should be treated as superseded**, and rows that
consumed its answer re-checked.
- The embed-debugging checklist leading with the documented diagnosis
(prominence/wording, then unfollowed references, tested on real work not
test scenarios), the blog's description-diagnosis as a clearly-marked
second hypothesis; the shadowing note with its true replace-not-extend
semantics (the blog omits shadowing entirely); the three senses of
"chaining" disambiguated.

**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

- check-changed-skills 2 skills 0 failed; markdownlint 0 errors;
changelog parity + order; manifests/catalog/contracts/portability all
pass; eval 8 schema-validated.
- Two full independent passes ran to convergence. The producer's
reviewer falsified **three successive coverage-negatives** ("bare
doesn't resolve", "blog alone", "stated by neither") — each corrected
against a wider primary-source fetch, and the lesson (phrase coverage
claims positively) applied across the artifact. The
orchestrator-commissioned Fable verifier independently fetched every
load-bearing source (including the upstream skill-creator SKILL.md to
adjudicate the final conflict), validated the no-skills-minted call
against the slice's own typing, and pinned the final SHA: **verified end
to end, no content defects**.

## Related

- No linked issue.
- Doc-alignment loop, roster row 236 (DOC-37). Predecessors:
#1908#1920, #1922#1924. Campaign record note: EC-4
(EMPIRICAL-CHECKS-RESULTS-2026-08-02) is superseded by this PR's
documented conditional-resolution rule; the frozen record stays frozen,
the supersession is recorded on the roster.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant