Skip to content

docs(philosophy): pass (b) doctrine currency — correct two model/effort claims, record upstream corroboration - #2184

Merged
kyle-sexton merged 3 commits into
mainfrom
gap/passb
Aug 11, 2026
Merged

docs(philosophy): pass (b) doctrine currency — correct two model/effort claims, record upstream corroboration#2184
kyle-sexton merged 3 commits into
mainfrom
gap/passb

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

No linked issue

Summary

Doc-currency pass (b), never run before. Pass (a) (#2169) asked whether the repo's claims about how Claude Code behaves were still factually current. This pass asks the harder question: is the doctrine these gates enforce still the right rule, given current authoritative guidance?

Scope was doctrine a gate, check skill, or CI script actually enforces. Every source was asked to state its own position; no supersession is claimed without a verbatim quote from the page itself.

Two things had quietly diverged, both in ### Model tiers / ### Effort tiers. The rest held, and several items are now backed by upstream text that did not exist — or was not cited — when they were written.

Per-item verdicts

Item Verdict Basis
Fresh-eyes checkpoints — bias classes, mandatory fresh-context non-fork delegation Still sound, now upstream-stated sub-agents: "Each subagent starts with a fresh, isolated context window… The exception is a fork, which inherits the parent conversation instead of starting fresh." best-practices now states the doctrine too: a fresh context "improves code review since Claude won't be biased toward code it just wrote"; a verification subagent exists "so the agent doing the work isn't the one grading it"
Fresh-eyes — inline-template conventions Sound but incomplete → one bullet added best-practices "Add an adversarial review step" names a failure the doc did not carry: "A reviewer prompted to find gaps will usually report some, even when the work is sound", and chasing all of them "leads to over-engineering"
Fresh-eyes — deterministic-gate exemption Still sound best-practices ranks a Stop hook and a verification subagent as distinct rungs of the same "give Claude a way to verify its work" ladder; nothing contradicts the narrow reach
Naming — imperative grammar vs upstream gerunds Still sound; justification re-grounded The doc characterized the upstream position; it now quotes it. Gerunds are what that page says to "consider using", process-pdfs sits under "Acceptable alternatives", and "inconsistent patterns within your skill collection" is under Avoid
Naming — fixed verb table, exceptions list, leaf-name registry House convention, no upstream position Upstream takes no position beyond charset limits and collection consistency. Stands on its own stated rationale; does not masquerade as backed
Setup contract — required-iff criteria, check+apply, closed verb set House doctrine, no upstream position — now labeled No official page takes a position on a consumer-facing setup skill. disable-model-invocation: true is backed: upstream's own rule is "for workflows with side effects that you want to trigger manually"
Setup — native init idioms (Setup hook event, SessionStart) Still sound Setup event and its --init-only / --init / --maintenance framing unchanged on the hooks reference
Instruction economy — line budgets, progressive disclosure Still sound "Keep SKILL.md body under 500 lines for optimal performance" verbatim, twice on the page (check-skill.sh check 4). The 200-line soft target is house convention, correctly labeled advisory. "Avoid deeply nested references" is carried, correctly attributed
Instruction economy — the two quoted rules Still sound Both verbatim on best-practices today, unchanged
Delegation mechanics — dispatch ladder, named-agent bar Still sound Subagent isolation and tools frontmatter unchanged; the Agent tool still exposes model and no effort counterpart (live schema, 2026-08-10)
Model tiers — availableModels blocked pin Superseded → fixed Doc recorded the branch as "unresolved upstream, and stated here as such". Upstream now resolves it per surface: a subagent override "falls back to the subagent's inherited model", except a family alias on the Anthropic API substituting to "the newest permitted version of its family" (v2.1.222); a skill or command override is ignored and "runs on the session model"
Effort tiers — low at the bulk rung Incoherent against current upstream → fixed The model ladder's bulk row is Haiku 4.5; the effort rules told that lane to pin low. "Models not listed here do not support effort" and no Haiku is in that table — corroborated independently by the roster's adaptive-thinking column reading No for Claude Haiku 4.5
Model tiers — table rows and recheck trigger Still sound, trigger re-tested negative Opus 5 / Sonnet 5 / Haiku 4.5 current; Opus 4.8 confirmed legacy. A further family, Claude Mythos 5, appears upstream but "is not generally available" — invitation-only under Project Glasswing — so the trigger has not fired
Model tiers — interleaved thinking Still sound "Claude Haiku 4.5 does not support interleaved thinking" and the consecutive-tool-calls carve-out are both verbatim as cited
Model tiers — CLAUDE_CODE_SUBAGENT_MODEL Narrowed Still overrides both, but upstream adds an off position: "Set to inherit to use normal model resolution instead" (v2.1.196)
Effort tiers — lane rules, cache caveat, the two-dials rule Still sound sub-agents frontmatter effort confirmed with all five levels; the unsupported-level fallback sentence confirmed verbatim
Design boundary — plugins vs standalone appeal Sound but uncited → citation added plugins draws exactly this line: standalone for "project-specific customizations", plugins for "versioned releases, reusable across projects"
Design boundary — horizontal decoupling, "a bare unguarded cross-plugin reference is a defect" House doctrine, no upstream position Upstream documents dependencies and namespacing but takes no stance on optional cross-plugin coupling. Stands on its own reasoning
Two-lane convention posture House doctrine, no upstream position Attributed to melodic-software/standards, not to upstream. No masquerade
Evidence and validation Still sound best-practices independently asks for evidence over assertion: "Have Claude show evidence rather than asserting success"

Fix

Two corrections and four recorded corroborations, all in docs/PLUGIN-PHILOSOPHY.md. No plugin touched, so no version bump or CHANGELOG entry is owed.

Corrections

  1. Effort tiers. The bulk-sweep bullet now states that the two ladders do not compose at their bottom rung: effort is a per-model capability and Haiku has none, so the pin is inert rather than downgraded — and silently, since this is not the documented unsupported-level fallback (there is no supported level to fall back to). A lane wanting the cheapest tier takes it by model and omits the pin. Nothing in the fleet pins haiku today, so the defect was doctrinal, not live.
  2. availableModels blocked pin. The "unresolved upstream" framing and the enforceAvailableModels-ordering derivation are replaced by the now-documented per-surface rule, split into its subagent and skill/command branches, which the old paragraph lumped together. The conclusion survives intact — a blocked subagent alias can still land below the session, and a blocked cheap pin lands on the session's own model — but the recheck trigger was pointing at a sentence that no longer carries the ambiguity, so it is rewritten too.

Corroboration recorded

  • Fresh-eyes checkpoints gains the upstream statement of the doctrine (not just the mechanism), plus a fourth inline-template bullet bounding what counts as a finding.
  • Naming replaces a characterization of the upstream guidance with its actual words.
  • The setup contract cites upstream for disable-model-invocation and says plainly that the rest has no upstream position.
  • The design boundary's vague appeal gains its citation.

Stamps refreshed only on pages actually fetched this session: sub-agents, model-config, code.claude.com best-practices, plugins, hooks, agent-skills/best-practices, platform thinking, models/overview.

Verification

bash scripts/check-contract-slice-prune.sh --check-diff origin/main   # pass
bash scripts/check-changed-skills.sh origin/main                      # pass (no skills changed)
bash scripts/check-changelog-parity.sh --check-bump origin/main       # pass
bash scripts/check-skill-portability.sh origin/main                   # pass (no skills in scope)
npx --yes markdownlint-cli2 "docs/PLUGIN-PHILOSOPHY.md"               # 0 errors

Fleet grep confirms the effort finding is doctrinal only: git grep -n '^model:' -- 'plugins/*/agents/*.md' returns no haiku pin, and every effort: pin sits on an opus, sonnet, or inherit lane.

Could not verify. Stamps left untouched on pages not fetched: plugins-reference, code.claude.com skills, feature-availability, agents, agent-teams, cross-session-messaging, sessions, checkpointing, prompt-caching, settings, and the platform effort / thinking-steering-and-cost pages. The Recorded gate runs and Component stances tables therefore keep their existing dates. The SessionStart-plus-${CLAUDE_PLUGIN_DATA} half of the native-init stamp was not re-verified against plugins-reference, so that 2026-07-17 stamp stands even though the Setup half was confirmed.

One upstream rule this repo does not carry, deliberately left alone as out of scope for a currency pass: agent-skills/best-practices asks for a table of contents in reference files longer than 100 lines. Adding it would be new doctrine, not a currency correction.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m

…rt claims, record upstream corroboration

Pass (a) asked whether the repo's claims about Claude Code's BEHAVIOR were
current. This pass asks whether the doctrine those gates enforce is still the
right rule against current authoritative guidance. Every source was asked to
state its own position; no claim of supersession is made without a verbatim
quote from the page itself.

Two corrections.

Effort tiers: the model ladder's bottom rung is Haiku 4.5, and the effort lane
rules told a bulk mechanical sweep to pin `low` there. Those two ladders do not
compose. model-config's effort table says "Models not listed here do not support
effort" and lists no Haiku; the model roster corroborates independently with
adaptive thinking off for Claude Haiku 4.5. This is not the documented
unsupported-level fallback, because no supported level exists to fall back to —
the pin is inert, and silently. Nothing in the fleet pins `haiku` today, so the
defect was doctrinal rather than live.

availableModels: the blocked-pin paragraph recorded the fallback branch as
"unresolved upstream, and stated here as such", and derived a worst case from
`enforceAvailableModels`' Default-resolution ordering. Upstream now resolves it
outright, per surface and differently for each: a blocked subagent override
falls back to the inherited model, except that a blocked family alias on the
Anthropic API substitutes to the newest permitted version of its family (a
v2.1.222 change the page dates); a blocked skill or command override is ignored
and runs on the session model. The conclusion survives — a blocked subagent
alias can still land below the session, and a blocked cheap pin lands on the
session's own model — but the basis and the recheck trigger were pointing at a
sentence that no longer carries the ambiguity. The skill/command branch is now
bounded and is stated separately, which the old paragraph lumped together.

Recorded corroboration, where doctrine that stood on its own reasoning is now
stated upstream in upstream's words:

- Fresh-eyes checkpoints. best-practices now says a fresh context "improves code
  review since Claude won't be biased toward code it just wrote" and that a
  verification subagent exists "so the agent doing the work isn't the one
  grading it". Its "Add an adversarial review step" section also names a failure
  this document did not carry — a reviewer prompted to find gaps "will usually
  report some, even when the work is sound" — so the inline-template conventions
  gain a fourth bullet bounding what counts as a finding.
- Naming. The gerund-deviation sentence characterized the upstream guidance
  instead of quoting it; it now quotes it. Gerunds are what that page says to
  "consider using", `process-pdfs`-style action-oriented names sit under
  "Acceptable alternatives", and "inconsistent patterns within your skill
  collection" is what it lists under Avoid.
- Setup contract. `disable-model-invocation: true` matches upstream's own rule
  for the flag. The rest of the contract has no upstream position, and now says
  so plainly rather than sitting adjacent to cited material.
- Design boundary. The vague appeal to "Claude Code's distinction" now carries
  the citation and the two phrases the distinction is actually drawn in.

Stamp refreshes, only on pages actually fetched this session: sub-agents,
model-config, code.claude.com best-practices, plugins, agent-skills
best-practices, platform thinking, models overview. Also recorded:
`CLAUDE_CODE_SUBAGENT_MODEL` has an `inherit` off position since v2.1.196, which
the unqualified "overrides both" claim missed; and the model-tier recheck
trigger re-tested negative — Claude Mythos 5 exists upstream but "is not
generally available".

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
@cursor

cursor Bot commented Aug 11, 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 11, 2026

Copy link
Copy Markdown
Contributor

Claude finished @kyle-sexton's task in 4m 14s —— View job


Review complete ✅

  • Gather context (PR diff, CLAUDE.md, AGENTS.md)
  • Read changed file (docs/PLUGIN-PHILOSOPHY.md) diff in full
  • Independently verify the PR's citation claims against live upstream pages
  • Check alignment with CLAUDE.md fresh-docs mandate and repo conventions
  • Post findings

Summary

This is a docs-only change to docs/PLUGIN-PHILOSOPHY.md (+79/-30). I independently re-fetched every upstream page this diff cites (code.claude.com/docs/en/model-config, .../sub-agents, .../best-practices, .../plugins, platform.claude.com/.../agent-skills/best-practices, .../models/overview) and checked each new/changed quotation against the live text. All of them are accurate, verbatim, and support the claims made:

  • CLAUDE_CODE_SUBAGENT_MODEL off-position (inherit, v2.1.196) — confirmed verbatim on the model-config env-vars table.
  • The rewritten availableModels blocked-pin behavior (subagent inherited-model fallback vs. v2.1.222 family-alias substitution vs. skill/command ignored-and-runs-on-session-model) — confirmed verbatim, and the "lands below the session" / "lands on the inherited model" worked examples in the doc are internally consistent with the actual mechanism.
  • Effort-table Haiku omission ("Models not listed here do not support effort") — confirmed verbatim; Haiku 4.5's adaptive-thinking column reads "No" — confirmed.
  • Claude Mythos 5 "not generally available" / Project Glasswing invitation-only — confirmed verbatim.
  • The best-practices bias/verification-subagent/adversarial-review-bounding quotes and the agent-skills/best-practices gerund/"Acceptable alternatives"/"Avoid" naming quotes — all confirmed verbatim.
  • The fleet-grep claim in the PR body (no haiku model pin, every effort: pin on an opus/sonnet/inherit lane) — I ran git grep -n '^model:' -- 'plugins/*/agents/*.md' and git grep -n '^effort:' -- 'plugins/*/agents/*.md' myself and confirmed it independently.

I could not independently run the PR's listed verification commands (check-contract-slice-prune.sh, check-changed-skills.sh, check-changelog-parity.sh, check-skill-portability.sh, npx markdownlint-cli2) — those require network/approval I wasn't granted in this session. Treat those as author-claimed, unverified by this review.

Finding (minor — doc-currency stamp consistency)

docs/PLUGIN-PHILOSOPHY.md#L751 — the citation to model-config#customize-pinned-model-display-and-capabilities (the interleaved_thinking capability-value claim) still reads verified 2026-08-03, even though the PR body lists model-config among the pages "actually fetched this session" and this diff bumps two other citations to that same page to 2026-08-10 a few lines later (the CLAUDE_CODE_SUBAGENT_MODEL citation at L713 and the availableModels/restrict-model-selection citation at L799). I re-fetched that section myself and its content is unchanged and still accurate, so this isn't a factual error — just a stamp that appears to have been missed during the refresh, which matters for a PR whose entire premise is precise per-citation currency. Either bump it to 2026-08-10 or, if that specific anchor genuinely wasn't re-checked despite the page fetch, say so explicitly rather than leaving it looking refreshed-by-omission.

Assessment

No correctness bugs found. The two substantive doctrine corrections (the availableModels blocked-pin rewrite and the effort/Haiku incoherence fix) are both accurate and internally consistent, and every new verbatim quote checks out against current upstream text. This aligns with CLAUDE.md's fresh-docs mandate in spirit and letter — sourced from pages fetched this session, cited with URLs, dated. The one nit above is cosmetic and doesn't block anything.

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown

Claude has reviewed this PR 3 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: 1616fe6900

ℹ️ 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 docs/PLUGIN-PHILOSOPHY.md Outdated
…sweep

Review caught an inconsistency: the `interleaved_thinking` capability-value
citation still read 2026-08-03 while two other citations to the same
model-config page were bumped to 2026-08-10 in the same diff. The section was in
fact covered by this session's fetch and both halves of the claim still hold —
"`interleaved_thinking` | Thinking between tool calls" is present in the
capability table, and "listed capabilities are enabled and unlisted capabilities
are disabled for the matching pinned model" is verbatim. Refreshing rather than
annotating, because the check was genuinely run.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
@claude

claude Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

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


Review complete ✅

  • Gather context (PR diff, CLAUDE.md, AGENTS.md, REVIEW.md)
  • Read changed file (docs/PLUGIN-PHILOSOPHY.md) diff in full
  • Check the open Codex finding (unsupported effort handling) for merit
  • Independently verify key citation/quote claims against live upstream pages
  • Check alignment with CLAUDE.md fresh-docs mandate and repo conventions
  • Post findings

Summary

Docs-only change to docs/PLUGIN-PHILOSOPHY.md (+80/-31), no plugin manifest, hook contract, or marketplace schema touched — the CLAUDE.md fresh-docs mandate's contract-surface trigger doesn't apply to the file, but the PR's own premise is upstream-doctrine currency, so I held it to that bar anyway. REVIEW.md's code-review-lane checks (audit logging, multi-write atomicity) don't apply to a prose-only doc diff.

I independently re-fetched every upstream page this diff newly cites or re-quotes — code.claude.com/docs/en/model-config (both #environment-variables and #restrict-model-selection), .../best-practices, and platform.claude.com/.../agent-skills/best-practices — and checked each verbatim quote against the live text myself (not relying on the PR body's or the earlier automated review's claims):

  • CLAUDE_CODE_SUBAGENT_MODEL inherit off-position — confirmed verbatim: "Set to inherit to use normal model resolution instead." (Couldn't independently confirm the v2.1.196 version attribution specifically for that sentence — it wasn't tied to a version marker on the fetched page — but I found no evidence it's wrong either, and didn't chase the changelog.)
  • The rewritten availableModels blocked-pin behavior (subagent inherited-model fallback vs. v2.1.222 family-alias substitution vs. skill/command ignored-and-runs-on-session-model) — confirmed verbatim against #restrict-model-selection, including "Claude Code ignores the override, including a blocked family alias, and the skill or command runs on the session model" word-for-word.
  • The best-practices bias/verification-subagent/adversarial-review-bounding quotes ("A fresh context improves code review since Claude won't be biased toward code it just wrote," "so the agent doing the work isn't the one grading it," "leads to over-engineering," the disable-model-invocation rule, and the "show evidence rather than asserting success" line) — all confirmed verbatim.
  • The agent-skills/best-practices naming quotes (gerund "consider using," process-pdfs/analyze-spreadsheets under "Acceptable alternatives," "inconsistent patterns within your skill collection" under Avoid) — confirmed verbatim.

Finding

One inline comment posted on the effort-tiers section (docs/PLUGIN-PHILOSOPHY.md#L850-L854): the new sentence "the pin is inert rather than downgraded, and silently so" is an inference from the absence of upstream documentation, not a verbatim-quoted fact like the rest of the diff. I re-fetched model-config#adjust-effort-level myself and confirmed the page's only stated fallback rule ("falls back to the highest supported level at or below the one you set") presupposes at least one supported level — it says nothing about what happens when a model supports zero levels. This independently corroborates the open Codex review comment on the same lines; I'd treat that one as a legitimate finding, not a false positive.

Assessment

No other correctness issues found. The two substantive doctrine corrections in this PR (the availableModels blocked-pin rewrite and the CLAUDE_CODE_SUBAGENT_MODEL inherit addition) are accurate and internally consistent with current upstream text, and every other quote I spot-checked is verbatim. The one finding above is a precision gap in an otherwise well-sourced diff — worth fixing given the PR's stated bar of "no supersession [or, by the same logic, no behavioral claim] without a verbatim quote," but it doesn't undermine the PR's two headline corrections.

@kyle-sexton

Copy link
Copy Markdown
Contributor Author

Thanks — the stamp finding is correct and is fixed in 358710a.

You were right that it was a miss rather than a deliberate omission. The #customize-pinned-model-display-and-capabilities section was inside this session's model-config fetch, and both halves of the claim it supports are still verbatim there: the capability table's `interleaved_thinking` | Thinking between tool calls row, and "When _SUPPORTED_CAPABILITIES is set, listed capabilities are enabled and unlisted capabilities are disabled for the matching pinned model." So the honest move is to refresh the stamp to 2026-08-10 rather than annotate it as unchecked, which is what the commit does.

On the verification commands you couldn't run: fair to treat as author-claimed from your side, but they are independently reproduced by CI on this PR — contract-slice-prune-gate, changelog-parity-gate, portability-lint, skill-quality-gate, and hygiene (which carries the markdownlint run) are all green on the head commit.

One incidental note for anyone reading the diff later, since it touches the same section: that capability table is also the reason the effort/Haiku correction is scoped to the model rather than to every Haiku deployment. ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES exists, so a provider-specific pinned ID whose pattern Claude Code doesn't recognize can declare effort explicitly. That is an override for unrecognized third-party IDs, not a statement that Claude Haiku 4.5 supports effort on the Anthropic API — which the effort table and the roster's adaptive-thinking column both say it does not. The doctrine text stays as written.

Comment thread docs/PLUGIN-PHILOSOPHY.md Outdated
…verified

Review caught the one sentence in this PR that broke its own method rule. The
effort/Haiku correction asserted that a `low` pin on a model with no effort
support "is inert rather than downgraded, and silently so". The cited pages
establish the missing capability, not the runtime handling: model-config's
fallback sentence — "If you set a level the active model does not support,
Claude Code falls back to the highest supported level at or below the one you
set" — presupposes some supported level exists, and upstream is simply silent
on the zero-support case. That was an inference from doc silence stated in the
same declarative voice as the verbatim-quoted claims around it, which is
exactly what "no verbatim quote, no claim" is meant to prevent.

The finding itself is unaffected, because it never depended on the gap: the
capability is absent either way, so a lane wanting the cheapest tier takes it by
model and omits the pin. The passage now says the absence is documented and the
handling is not.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
@claude

claude Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

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


Code review complete ✅

  • Gather context (PR diff, CLAUDE.md, AGENTS.md)
  • Read full diff of docs/PLUGIN-PHILOSOPHY.md
  • Check alignment with CLAUDE.md fresh-docs mandate
  • Check whether the open Codex/Claude finding (unsupported effort handling) was addressed by 358710a / 80bd47d
  • Post findings

Summary

Docs-only change (+83/-31, one file). No plugin manifest, hook contract, or marketplace schema is touched, so CLAUDE.md's fresh-docs mandate doesn't formally gate this file — but the PR's own methodology ("no supersession without a verbatim quote") is the higher bar, and I held it to that.

Prior finding, independently re-checked as fixed. Two earlier automated reviews (and a matching Codex comment) flagged that the original effort-tiers text asserted the zero-supported-level pin behavior as settled fact ("inert…and silently so") when upstream only documents the fallback-between-supported-levels rule, not the zero-level case. I re-read the current text at docs/PLUGIN-PHILOSOPHY.md#L853-L859 (commit 80bd47d) and confirm it's now correctly hedged: "What the harness then does with the pin — ignore it, warn, or fail — is undocumented, and unverified here." The recommendation ("omit the pin, take the tier by model") is preserved. This resolves the open finding.

Independent verification of the new/changed citations. Rather than re-trust the PR body's or prior reviews' claims, I fetched the live pages myself this session and grep'd/read the relevant sections:

  • code.claude.com/model-config#restrict-model-selection — confirmed verbatim: the subagent-fallback branch ("falls back to the subagent's inherited model … rather than failing the request"), the v2.1.222 family-alias-substitution carve-out ("Before v2.1.222, a blocked family alias fell back like any other blocked value on every provider"), and the skill/command branch ("Claude Code ignores the override, including a blocked family alias, and the skill or command runs on the session model") all match the doc's rewritten paragraph exactly.
  • code.claude.com/sub-agents#choose-a-model — independently corroborates the same v2.1.222 subagent behavior from the other page's perspective.
  • code.claude.com/model-config#environment-variables — confirmed "Set to inherit to use normal model resolution instead" verbatim for the CLAUDE_CODE_SUBAGENT_MODEL off-position claim.
  • code.claude.com/model-config#adjust-effort-level — confirmed the effort table omits Haiku entirely and "Models not listed here do not support effort" is verbatim.
  • platform.claude.com/about-claude/models/overview — confirmed Claude Mythos 5 is "not generally available" / invitation-only under Project Glasswing, and the adaptive-thinking column reads "No" for Claude Haiku 4.5.
  • code.claude.com/best-practices — confirmed all four new quotes verbatim: the fresh-context bias-reduction line, "so the agent doing the work isn't the one grading it" (paraphrased from the verification-subagent bullet, accurately), the adversarial-review-bounding callout ("A reviewer prompted to find gaps will usually report some… leads to over-engineering"), and "Have Claude show evidence rather than asserting success."
  • platform.claude.com/agent-skills/best-practices — confirmed the gerund "Consider using" language, process-pdfs/analyze-spreadsheets under "Acceptable alternatives," and "Inconsistent patterns within your skill collection" under Avoid, all verbatim.
  • code.claude.com/plugins#when-to-use-plugins-vs-standalone-configuration — confirmed the standalone-vs-plugin table cells ("Personal workflows, project-specific customizations, quick experiments" vs. "Sharing with teammates, distributing to community, versioned releases, reusable across projects") verbatim.

Every quote I checked was accurate and in context. I found no new correctness issues in this diff.

Not independently re-run: the PR's listed verification commands (check-contract-slice-prune.sh, check-changelog-parity.sh, check-skill-portability.sh, markdownlint-cli2) and the git grep fleet checks — treat those as author-claimed. CI on the head commit (80bd47d) currently shows pr-title, claude-security-review, do-not-merge, and pr-issue-linkage green; ci (which runs the check scripts) was still in progress at review time.

Assessment

No correctness bugs found, no new inline findings to raise. The doctrine corrections (availableModels blocked-pin rewrite, effort/Haiku incoherence fix, CLAUDE_CODE_SUBAGENT_MODEL off-position) are accurate, internally consistent, and every verbatim quote I independently checked against live upstream text holds up. This is a well-sourced, well-scoped currency pass.
· branch gap/passb

@kyle-sexton
kyle-sexton merged commit 3906c03 into main Aug 11, 2026
33 checks passed
@kyle-sexton
kyle-sexton deleted the gap/passb branch August 11, 2026 00:28
kyle-sexton added a commit that referenced this pull request Aug 11, 2026
#2187)

No linked issue

## Summary

The repo carries **327 dated verification stamps** (`verified` /
`fetched` / `as of` 2026-MM-DD), spanning 2026-07-15 → 2026-08-08. PR
#2169 re-verified only the ~8 claims a gate or check skill directly
enforces. The rest had gone unread for up to four weeks — which is
exactly the drift a dated stamp exists to surface. A stamp nobody
re-reads is worse than no stamp: it advertises a currency the claim does
not have.

This PR re-verifies **72 stamps** against the live upstream pages and
reports honestly on the 49 upstream claims it did not reach.

### The method change that makes this pass different

Earlier passes fetched docs through `WebFetch`, which summarizes through
a small model and **truncates long pages**. Under that route "the page
doesn't say that" is a routine false negative, so no negative claim can
be settled and no drift classification is safe.

This pass reads **`https://code.claude.com/docs/en/<page>.md`**, which
returns the complete raw markdown source (`content-type:
text/markdown`), and greps it:

| page | raw bytes |
| :-- | --: |
| `hooks.md` | 249,026 |
| `settings.md` | 290,489 |
| `changelog.md` | 525,429 |
| `sub-agents.md` | 96,094 |
| `plugins-reference.md` | 90,982 |

Every CONFIRMED claim below is backed by a verbatim `grep -F` match
against the full page. Two **negative** claims are now assertable for
the first time, because the whole page was in hand rather than a
truncated slice:

- `docs/conventions/hook-observability/README.md` — no native "verbose
hooks" toggle exists.
-
`plugins/claude-memory/skills/stateless/reference/official-guidance.md`
— no settings-precedence exception bullet names `autoMemoryEnabled`,
`CLAUDE_CODE_DISABLE_AUTO_MEMORY`, or auto memory.

One caution for the next person: markdown **link flattening** causes
false misses. Four `sub-agents` quotes appeared to have vanished until
inspection showed the only difference was
`[fork](#fork-the-current-conversation)` becoming `a fork`. All four
were verbatim-intact. Grep on a link-free fragment.

## Fix

### Drift found and corrected (3)

**1. `scripts/check-silent-skips.sh` — exit-0 stderr is not "discarded
entirely".**

The gate comment claimed exit-0 hook stderr is "discarded entirely". The
hooks reference says:

> Stderr from a hook that exits 0 goes to the debug log only, never the
transcript, and Claude never sees it.

The debug log is the one place it survives. **The gate's conclusion is
untouched** — a debug-only sink is not a visibility surface, so a
`>&2`-only notice on an exit-0 skip path is still invisible to both user
and agent. The comment now states what upstream states, and records the
correction so the next reader does not re-derive it.

**2. `context-guard` — the 2.1.132 token-semantics floor lost its
upstream source.**

`reference/reader-contract.md` quoted the statusline page as saying
*"Before v2.1.132 these were cumulative session totals"*. That sentence
**is no longer on the page**, and the version number went with it. What
the page still states is only the present-tense semantics the floor
depends on — "Token counts currently in the context window, from the
most recent API response".

The dead quote is replaced with an explicit sourcing-status note;
`scripts/statusline-tee.sh` carries the same note at its `cli_version`
comment.

**The floor itself is deliberately unchanged.**
`TOKEN_SEMANTICS_MIN_VERSION` still gates the token shape at `>=
2.1.132`; no behaviour, test, or zone result moves. Dropping it could
only *widen* which payloads the token shape trusts, and the misfire it
guards against is silent — a pre-2.1.132 cumulative 170k in a 200k
window reads as a perfectly plausible current occupancy and resolves
`dumb` while the live context may be smart-zone. It stays as a
conservative lower bound, now labelled as retained-not-doc-backed.
Re-source before any change that relaxes it.

**3. Both `statusline-shim.sh` copies cited a plugins-reference section
that no longer exists.**

The 14-day orphaned-cache grace period was attributed to a section
titled *"Plugin cache and file access"*. Upstream renamed it to
**"Plugin caching and file resolution"** (cache root
`~/.claude/plugins/cache`). The behaviour cited is unchanged and still
stated verbatim — but a citation whose section title has vanished cannot
be followed, which is precisely the rot a dated stamp exists to expose.
Both comments now name the current title and record the former one.

### Scope correction (1)

`docs/PLUGIN-PHILOSOPHY.md` — the "Pages load-bearing for this document"
stamp covered seven bullets, one of which is a
`melodic-software/standards` file, not a Claude Code page. The refreshed
stamp now says so explicitly instead of implying the whole list was
re-checked. The six Claude Code pages were each re-fetched and confirmed
to still carry the topics named beside them (`Plugin manifest schema`,
`Version management`, `Plugin caching and file resolution`, `Persistent
data directory`, `Hooks in skills and agents`, `Tag plugin releases for
version resolution`, `pluginConfigs` read scopes).

### Confirmed and re-dated (no claim changed)

`docs/PLUGIN-PHILOSOPHY.md` ·
`docs/conventions/hook-observability/README.md` · gate/hook/script
comments in `check-silent-skips.sh`, `post-compact-mark.sh`,
`record-rate-limit-stop.sh`, `packet-seal.sh`, `destructive_guard.py`,
`skill-reference-verify.sh`, `markdown-format.sh`, `typos-format.sh`,
`check-structure.sh`, both `statusline-shim.sh` · and skill
bodies/references across `claude-config`, `claude-memory`, `claude-ops`,
`context-guard`, `discipline`, `disk-hygiene`, `guardrails`,
`implementation`, `plugin-quality`, `rate-limit-guard`, `session-flow`,
`work-items`.

The densest single block,
`session-flow/skills/orchestrate/context/sources.md` (13 stamps), was
re-checked quote by quote against `sub-agents`, `workflows`,
`changelog`, and `whats-new/2026-w32`. All still match. Its 0.22.2
finding is independently re-confirmed: the sub-agents page now states
outright *"There's no limit on the total number of subagents Claude can
spawn over a session"*, and `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION`
appears nowhere on it.

## Verification

### Coverage — all 327 stamps accounted for

**The first version of this table was wrong, and review caught it.** It
was built from a single-line regex, `(verified|fetched|as of)
2026-[0-9]{2}-[0-9]{2}`. This repo hard-wraps prose, so a stamp whose
keyword ends one line and whose date begins the next is invisible to it
— **30 stamps were hidden that way**, and the denominator I published
(291) was itself understated. The wrap-aware pattern is:

```
(verified|fetched|as of)\s*(?:
\s*(?:[#>*-]\s*)?)?(2026-\d{2}-\d{2})
```

Buckets below are disjoint and sum to the total; nothing is hidden in a
residual.

| Bucket | Count | Treatment |
| :-- | --: | :-- |
| **Dated 2026-08-10 (current)** | **104** | 72 refreshed by this PR
after verbatim confirmation; 32 already current from PR #2169, #2184 and
other in-flight work |
| CHANGELOG entries | 69 | **Left alone.** A CHANGELOG entry describes
what was true when written — re-dating it would falsify the record |
| Upstream Claude Code doc — **not re-checked** | **49** | Honest gap.
See below |
| Repo-internal claims (no external page) | 47 | Out of scope for a
docs-currency pass — recorded gate runs, this repo's own probes |
| Non-upstream sources | 25 | `platform.claude.com`, `claude.com/blog`,
`github.com`, `git-scm.com` — different corpus |
| `docs/topics/**` | 29 | **Left alone.** Records of what was true when
written; Contract tier, gated |
| `env-vars`-cited | 4 | Skipped by assignment — a parallel agent owns
that route |
| **TOTAL** | **327** | |

The brief estimated ~260; the wrap-aware regex above is the number.

### The line I drew, stated before the work started

Verify, in order: (1) every `docs/PLUGIN-PHILOSOPHY.md` claim; (2) every
code-comment claim inside a gate, hook, or script, since those are
load-bearing for behaviour; (3) skill-body and reference claims on pages
obtained in full. Deprioritize READMEs and CHANGELOGs as historical
record, and leave `docs/topics/**` alone.

**What that leaves unchecked: 49 upstream claims**, thinly spread —
`docs/conventions/loop-lane/README.md` (8), `docs/MIGRATION-PLAYBOOK.md`
(4), `docs/PLUGIN-PHILOSOPHY.md` (3, each a stamp spanning a
`platform.claude.com` page alongside Claude Code pages — see below), and
`playbooks/**` (9, mostly `platform.claude.com`-adjacent
model-calibration notes). No other file has more than 2. These are
reachable by the same method and are the natural next slice; they were
cut for depth over breadth, not because they are lower risk.

Three `PLUGIN-PHILOSOPHY` stamps cover several pages at once, at least
one of them outside this corpus. Where I verified the Claude Code pages
but not the `platform.claude.com` one under the same stamp, I left the
date alone rather than refresh a stamp that also vouches for a page I
did not open. The same rule produced the scope correction above.

**No stamp was re-dated without a verbatim quote retrieved this
session.** Every one of the 12 stamps added in the review round was
already backed by a quote pulled in the original sweep; none was newly
assumed.

**Every stamp in a file this PR claims to have verified now carries the
new date.** That was not true in the first push — review caught
CHANGELOG entries asserting more than the diff delivered — and the
wrap-aware regex above is what makes the claim checkable rather than
assertable. Bumping a date on a claim I could not locate would launder
an unverified claim into a fresh stamp — strictly worse than leaving it
stale, and invisible to review. Where a claim could not be confirmed it
kept its old date and sits in the 46.

### Gates (CI form, committed tree)

- `bash scripts/check-contract-slice-prune.sh --check-diff origin/main`
— pass
- `bash scripts/check-changelog-parity.sh --check-bump origin/main` —
pass
- `bash scripts/check-skill-portability.sh origin/main` — pass
- `npx markdownlint-cli2 <43 changed md files>` — 0 errors
- `bash scripts/check-changed-skills.sh origin/main` — pass (10 skills
checked, 0 failed)

14 plugins touched, each patch-bumped with a `## [x.y.z]` CHANGELOG
entry. Pure-`docs/` changes carry none. No `docs/topics/<slug>/`
created.

## Related

- PR #2184 — landed on `docs/PLUGIN-PHILOSOPHY.md` while this was in
flight; rebased onto it, and its richer model/effort corrections were
kept over this PR's date-only edits at every conflict
- PR #2169 — the prior audit whose ~8 gate-enforced claims are treated
here as fixed points and not redone
- The `.md`-endpoint route was shared with the parallel `env-vars`
effort, whose truncation problem it also solves

---------

Co-authored-by: Claude Opus 5 (1M context) <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