docs: re-verify the dated upstream doc stamp corpus against live pages - #2187
Conversation
|
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. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bd81f9658f
ℹ️ 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".
bd81f96 to
a4e35c5
Compare
|
Claude finished @kyle-sexton's task in 1m 51s —— View job Security review — PR #2187
Scope: All 58 changed files were reviewed against the diff ( Findings: none. This PR is a pure documentation/comment/metadata pass:
No injection surfaces, credential/token handling, authorization logic, workflow permissions, or dependency pins are touched anywhere in this diff — there is nothing in scope for this lane's threat model (logic flaws, access-control gaps, injection, secret handling, dangerous Actions patterns, supply-chain risk) to flag. |
|
Claude finished @kyle-sexton's task in 3m 23s —— View job Review complete
SummaryThis is a docs-currency pass re-verifying dated upstream-doc stamps across 14 plugins plus Two findings — both independently confirmed, both corroborating pre-existing Codex review comments on this PR:
Both are narrow, mechanical misses (a handful of stamps not bumped) rather than fabricated verification — the surrounding claim text itself is unchanged and plausible, only the stamp/CHANGELOG-claim pairing is inconsistent. Given the PR's own stated bar ("no stamp was re-dated without a verbatim quote retrieved this session"), the CHANGELOG entries should match what the corpus actually shows, or vice versa. No other overclaiming CHANGELOG entries were found — I grepped all 14 CHANGELOG diffs for similar "all N quotes"/"every quote" language and only these two made that strength of claim. Verified myself: the two findings above, by reading the current file contents directly. Author-claimed and not independently verified by me: the gate results and Branch: |
|
Claude has reviewed this PR 3 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
Review on #2187 (Codex and Claude, independently, on two different files) caught the first pass over-claiming: CHANGELOG entries said every listed stamp had been re-verified, while several stamps in those same files still carried their old dates. Both reviewers were right, and the cause is worth recording because it is the failure mode the PR was written to avoid. ROOT CAUSE. The inventory regex was single-line: `(verified|fetched|as of) 2026-[0-9]{2}-[0-9]{2}`. In a repo that hard-wraps prose, a stamp whose keyword lands at the end of one line and whose date starts the next is invisible to it. **30 stamps were hidden this way**, so the "291" denominator in the original PR body was itself wrong. A second, plainer error compounded it: the bump list was assembled by hand while reading, not derived from a per-file inventory, so a handful of single-line stamps in files I had verified were simply never listed. The corrected wrap-aware regex finds 327 stamps, not 291. WHAT CHANGED. Every stamp in a file this PR claims to have verified now actually carries 2026-08-10 — 12 more of them, each already backed by a verbatim quote retrieved in the same session, none newly assumed. The CHANGELOG entries are narrowed to what moved. Left deliberately at their old dates: narrative references to when something was previously read ("since the 2026-07-29 read", "read 2026-07-29"), which are history, not currency. ONE MORE DRIFT, found while re-sweeping. Both `statusline-shim.sh` copies cited the plugins reference section "Plugin cache and file access" for the 14-day orphaned-cache grace period. Upstream renamed it to "Plugin caching and file resolution". The behaviour is unchanged and still stated verbatim, but a citation whose section title no longer exists cannot be followed — the exact rot a dated stamp is supposed to expose. Both comments now name the current title and record the former one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
Review on #2187 (Codex and Claude, independently, on two different files) caught the first pass over-claiming: CHANGELOG entries said every listed stamp had been re-verified, while several stamps in those same files still carried their old dates. Both reviewers were right, and the cause is worth recording because it is the failure mode the PR was written to avoid. ROOT CAUSE. The inventory regex was single-line: `(verified|fetched|as of) 2026-[0-9]{2}-[0-9]{2}`. In a repo that hard-wraps prose, a stamp whose keyword lands at the end of one line and whose date starts the next is invisible to it. **30 stamps were hidden this way**, so the "291" denominator in the original PR body was itself wrong. A second, plainer error compounded it: the bump list was assembled by hand while reading, not derived from a per-file inventory, so a handful of single-line stamps in files I had verified were simply never listed. The corrected wrap-aware regex finds 327 stamps, not 291. WHAT CHANGED. Every stamp in a file this PR claims to have verified now actually carries 2026-08-10 — 12 more of them, each already backed by a verbatim quote retrieved in the same session, none newly assumed. The CHANGELOG entries are narrowed to what moved. Left deliberately at their old dates: narrative references to when something was previously read ("since the 2026-07-29 read", "read 2026-07-29"), which are history, not currency. ONE MORE DRIFT, found while re-sweeping. Both `statusline-shim.sh` copies cited the plugins reference section "Plugin cache and file access" for the 14-day orphaned-cache grace period. Upstream renamed it to "Plugin caching and file resolution". The behaviour is unchanged and still stated verbatim, but a citation whose section title no longer exists cannot be followed — the exact rot a dated stamp is supposed to expose. Both comments now name the current title and record the former one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
0730ae9 to
bdb3692
Compare
The repo carries ~291 dated verification stamps (`verified`/`fetched`/`as of` 2026-MM-DD) spanning 2026-07-15 to 2026-08-08. PR #2169 re-verified only the ~8 claims a gate or check skill directly enforces; the rest had gone unchecked 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. WHY THE VERIFICATION IS TRUSTWORTHY THIS TIME. Previous passes fetched pages through WebFetch, which summarizes through a small model and truncates long pages, so "the page does not say that" was a routine false negative and no negative claim could be settled. This pass reads `https://code.claude.com/docs/en/<page>.md`, which returns the complete raw markdown source (hooks alone is 249 KB), and greps it. Every CONFIRMED claim here is backed by a verbatim string match against the full page, and the two negatives asserted below are sound because the whole page was in hand. WHAT MOVED. 50 stamps on claims re-confirmed by verbatim quote had their dates refreshed to 2026-08-10. Two claims are corrected: - `scripts/check-silent-skips.sh` said exit-0 hook stderr is "discarded entirely". The hooks reference says it "goes to the debug log only, never the transcript, and Claude never sees it". The gate's conclusion is untouched — a debug-only sink is not a visibility surface — but the comment now states what upstream states. - `context-guard`'s reader contract quoted a statusline sentence, "Before v2.1.132 these were cumulative session totals", that upstream has since removed. The dead quote is replaced with an explicit sourcing-status note. The 2.1.132 floor itself is deliberately kept: it is conservative, dropping it could only widen which payloads the token shape trusts, and the misfire it prevents is silent. WHAT WAS NOT CHECKED, AND WHY. CHANGELOG entries and `docs/topics/**` records describe what was true when written — re-dating them would falsify the record, so they were read only to confirm that character and left alone. `env-vars` claims were skipped by assignment. Claims sourced to platform.claude.com, github.com, or this repo's own gate runs are outside a Claude Code docs pass. Full coverage table in the PR body. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
Review on #2187 (Codex and Claude, independently, on two different files) caught the first pass over-claiming: CHANGELOG entries said every listed stamp had been re-verified, while several stamps in those same files still carried their old dates. Both reviewers were right, and the cause is worth recording because it is the failure mode the PR was written to avoid. ROOT CAUSE. The inventory regex was single-line: `(verified|fetched|as of) 2026-[0-9]{2}-[0-9]{2}`. In a repo that hard-wraps prose, a stamp whose keyword lands at the end of one line and whose date starts the next is invisible to it. **30 stamps were hidden this way**, so the "291" denominator in the original PR body was itself wrong. A second, plainer error compounded it: the bump list was assembled by hand while reading, not derived from a per-file inventory, so a handful of single-line stamps in files I had verified were simply never listed. The corrected wrap-aware regex finds 327 stamps, not 291. WHAT CHANGED. Every stamp in a file this PR claims to have verified now actually carries 2026-08-10 — 12 more of them, each already backed by a verbatim quote retrieved in the same session, none newly assumed. The CHANGELOG entries are narrowed to what moved. Left deliberately at their old dates: narrative references to when something was previously read ("since the 2026-07-29 read", "read 2026-07-29"), which are history, not currency. ONE MORE DRIFT, found while re-sweeping. Both `statusline-shim.sh` copies cited the plugins reference section "Plugin cache and file access" for the 14-day orphaned-cache grace period. Upstream renamed it to "Plugin caching and file resolution". The behaviour is unchanged and still stated verbatim, but a citation whose section title no longer exists cannot be followed — the exact rot a dated stamp is supposed to expose. Both comments now name the current title and record the former one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
bdb3692 to
eaa349e
Compare
|
Claude finished @kyle-sexton's task in 56s —— View job Security review — PR #2187
Scope: Read the full diff for all 58 changed files ( Findings: none. This PR is a pure documentation/comment/metadata pass — re-verifying dated upstream-doc citation stamps against live Claude Code docs pages. Confirmed by reading every hunk in the diff:
No injection surfaces, credential/token handling, authorization logic, workflow permissions, or dependency pins are touched anywhere in this diff. Nothing in scope for this lane's threat model (logic flaws, access-control gaps, injection, secret handling, dangerous Actions patterns, supply-chain risk) applies here. Note: this PR already has two documentation-consistency findings from Codex and a prior code-review-lane pass (stamp/CHANGELOG-claim mismatches in Branch: |
|
Claude finished @kyle-sexton's task in 2m 50s —— View job Review complete
SummaryReviewed Both previously-flagged findings are fixed. I independently re-checked the current file contents (not just the diff):
Cross-checks that came back clean:
One minor finding posted inline (context-guard/scripts/statusline-shim.sh:11, duplicated in Not independently re-run: the gate/lint results listed under "Gates" in the PR description ( No correctness or alignment issues beyond the one cosmetic nit above. |
…e's width The section-rename fix replaced text mid-sentence and left the tail appended to the citation line, producing a ~133-char comment line in a file that hand-wraps every other line near 78. Caught in review on #2187. No gate enforces a shell comment width, which is exactly why this is worth fixing by hand: the wrap is a readability convention the file keeps consistently, and a single line breaking it is the kind of thing that erodes the convention silently. Comment text is unchanged; only the line break moves. Both copies of the shim are corrected identically, since they carry the same block. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FdBsorqGjCU4Mg5nrmgz4m
|
Claude finished @kyle-sexton's task in 1m 33s —— View job Code review — PR #2187 (re-review after latest push)
SummaryThis trigger fired on the
Verified myself, by direct inspection of the checked-out tree (not the author's account):
No new findings. This PR's only remaining open items were the two stamp mismatches and the line-wrap nit, all three now confirmed fixed. No inline comments to add. Not independently re-run: the gate/lint results listed under "Gates" in the PR description ( Branch: |
|
Claude finished @kyle-sexton's task in 1m 25s —— View job Security review — PR #2187
Scope: Read the full diff for all 58 changed files ( Findings: none. This PR is a pure documentation/comment/metadata pass — re-verifying dated upstream-doc citation stamps against live Claude Code docs pages (
No injection surfaces, credential/token handling, authorization logic, workflow permissions, or dependency pins are touched anywhere in this diff. Nothing in scope for this lane's threat model (logic flaws, access-control gaps, injection, secret handling, dangerous Actions patterns, supply-chain risk) applies here. Note: this PR has two documentation-consistency findings already raised by Codex and a prior code-review-lane pass (stamp/CHANGELOG-claim mismatches in |
…scope (#2191) No linked issue ## Summary `upstream-drift` 1.2.0 shipped the fetch route yesterday ([#2185](#2185)). [#2187](#2187) applied it across 327 stamps today and surfaced **two holes in it**. Both are the route's own failure mode — a false absence carrying every outward sign of a good read — one scope up from where 1.2.0 drew the line. This is the convention's recheck discipline finding gaps in the convention, one release after it shipped. `upstream-drift` 1.2.0 → 1.3.0, additive; no required part, canonical name, or enforceability verdict changed. Pure `docs/`, so no plugin bump. ## Fix ### Hole 1 — a `200` does not mean you got the page you asked for 1.2.0's rung 1 guarded against truncation and against a channel that 404s. It did not guard against a channel that **succeeds with the wrong page**. A retired slug is silently aliased to its successor — no redirect, no `Location`, no notice in the body: | Probe | Result | |---|---| | `slash-commands.md` | `200`, `text/markdown`, 82,668 bytes, first heading `# Extend Claude with skills` | | `skills.md` | `200`, `text/markdown`, 82,668 bytes, same heading | | SHA-256 of both | `a833dd5c96b9b111de0daec5fc6436e210c8cdc009e51306d32438746db0b5a5` — **byte-identical** | | Rendered `slash-commands` | `200`, `num_redirects: 0` | | `nonexistent-page-xyz.md` | `404` — so this is **not** a catch-all; aliasing is specific to slugs that once existed | **This outranks truncation as a failure.** Truncation at least yields text you can see is short. Here a search for a term the *requested* page owns comes back empty against a full, healthy-looking body. Identity is therefore now part of rung 1, with two cheap checks: - **Confirm the slug against `llms.txt`.** Verified across ten slugs: the nine live ones each appear as `docs/en/<slug>.md`; `slash-commands` appears in no such entry (only an unrelated `agent-sdk/slash-commands`) — exactly the one that aliased. A mechanical detector, not a judgment call. - **Read the body's first heading before quoting it.** A heading that does not match the page you asked for ends the read. A title merely *worded* differently from the slug does not — `sub-agents.md` is titled "Create custom subagents", `costs.md` "Manage costs effectively"; both are correct pages. A missing slug is not a dead end — it is a prompt to find the successor in the index and cite **that** slug. Left unchecked, a citation of a retired slug keeps working indefinitely while pointing somewhere its author never read, then becomes a `404` on a claim nobody re-derived the day the alias is dropped. ### Hole 2 — an absence claim now carries its scope 1.2.0 said a truncated read supports no absence claim. It never said a **complete** read of one page supports no claim about the product. Two moves break it: - **Widening the subject.** Searching `hooks` and concluding "Claude Code has no X" asserts something about every page not searched. The honest form names the corpus: "not documented on `hooks`" — or, if the sweep genuinely covered the index, "not documented on any page listed in `llms.txt` as of `<date>`", a far larger and more expensive claim. - **Searching the phrase instead of the capability.** Verified on `hooks.md`: the phrase "verbose hooks" appears **zero** times, while the same page documents > Async hook completion notifications are suppressed by default. To see them, enable verbose mode > with `Ctrl+O` or start Claude Code with `--verbose`. and separately > set `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` to see additional log lines such as hook matcher > counts and query matching A phrase search returns nothing here and licenses "no verbose hooks toggle exists" — false, from a complete, untruncated read of the *right* page. Stated as its own rule because it is the reason to care: **a sound conclusion resting on a false premise is fragile, not safe.** The instance above kept its conclusion on a corrected premise ([#2190](#2190)); the next reader who checks a false premise discards the conclusion with it. Fix the premise and keep the conclusion — never keep a premise because the conclusion it props up is convenient. ## Verification Every claim above was re-derived here directly rather than taken on report, per the rule this section states — a report of an absence is exactly the thing the convention says not to accept second-hand: - Both `.md` bodies fetched and hashed locally; `slash-commands`/`skills` identity confirmed by matching SHA-256, byte count, and first heading - Redirect behavior probed with `curl -L -w '%{num_redirects}'` on the rendered URL - `404` control run against an invented slug, establishing the alias is not a catch-all - `llms.txt` fetched (187 `docs/en/` entries) and checked slug-by-slug across all ten - `hooks.md` fetched in full; `grep -ic "verbose hooks"` → `0`, and all four `verbose` mentions read verbatim - Nine live pages fetched to confirm the title-vs-slug check does not produce false positives **Gates (committed tree, CI form):** `check-contract-slice-prune.sh --check-diff origin/main`, `check-changelog-parity.sh --check-bump origin/main`, `check-skill-portability.sh`, `check-shell-portability.sh` — all pass; `markdownlint-cli2` over both changed files — 0 errors. Remaining gates: CI is the authority. ## Related - [#2185](#2185) — shipped the fetch route this patches - [#2187](#2187) — applied it at scale and found both holes - [#2190](#2190) — withdrew the over-scoped nonexistence claim that hole 2 generalizes --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…searched (#2190) No linked issue ## Summary PR #2187 claimed, as a headline result, that reading complete raw pages made two negative claims assertable "for the first time". **One of them was wrong**, and wrong in the way negative claims usually are: I searched one page and stated the result about the product. This corrects it. The rule it supports does not change; its justification does. ## Fix ### The claim that was wrong `docs/conventions/hook-observability/README.md` read: > **Not a UI feature.** No native "verbose hooks" toggle exists in Claude Code as of 2026-08-10 (confirmed against the same fresh fetch this doc cites) The literal phrase "verbose hooks" does appear on no page. But `verbose` appears across **at least 13 Claude Code docs pages**, four of those mentions on `hooks` itself — and one is squarely on point: > Async hook completion notifications are suppressed by default. To see them, enable verbose mode with `Ctrl+O` or start Claude Code with `--verbose`. A verbose mode that reveals hook output is precisely what the bullet denied. Also present, none of it acknowledged: | Surface | What it is | | :-- | :-- | | `verbose` setting | "Show full tool output instead of truncated summaries" | | `viewMode` setting | `"default"` / `"verbose"` / `"focus"` | | `--verbose` flag | Full turn-by-turn output; overrides `viewMode` | | `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` | Hook matcher counts and query matching | | `--include-hook-events` | Hook lifecycle events in the stream-json feed | ### Why the rule still stands None of those is a **consumer-facing toggle that makes an ordinary hook's routine work visible**. Each is operator-driven debugging, a transcript view the consumer must already have switched on, or a machine feed for a `-p` harness. A plugin cannot depend on an operator's debug posture, and none of them changes where a hook must *put* its message. So `statusMessage` and `systemMessage` remain the surfaces a fleet hook writes to, and no hook in the fleet changes. What changes is that the rule now rests on "a plugin cannot assume an operator's debug posture" instead of on a nonexistence claim that was false. A correct conclusion resting on a false premise is fragile — the next person to check the premise has reason to discard the conclusion with it. ### Second fix, same class The same file attributed this to the hooks page: > The harness's own signal for it is a generic "PostToolUse hook modified `<file>` after your edit (likely a formatter)" line That string appears on **no** Claude Code docs page. It is an observed harness string, and the sentence read as though it had been verified against the page cited beside it. It is now labelled as observed, and the documented negative it sits next to — that the three output channels carry no file-change or diff surface — is kept and separately attributed, since that is the part the rule actually needs and it does hold. ## Verification - `verbose` occurrence counts taken across the full raw-markdown corpus fetched via the rung-1 route in [`upstream-drift`, "Reading the basis"](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/upstream-drift/README.md#reading-the-basis--the-fetch-route): 13 pages carry it, `hooks.md` four times. - The `Ctrl+O` / `--verbose` sentence quoted verbatim from `hooks.md`. - "PostToolUse hook modified" and "likely a formatter" both return zero matches across every page in the corpus. Gates: `check-contract-slice-prune` pass · `check-changelog-parity --check-bump` pass · `check-skill-portability` pass (no skill files in scope) · `markdownlint-cli2` 0 errors. Pure `docs/` change — no plugin version bump required. ## Related - PR #2187 — introduced the claim this corrects, as one of its two advertised negatives - PR #2185 — established the rung-1 fetch route; its gotcha "absence from one page is not absence" is what prompted re-checking my own merged work, and is what caught this --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
No linked issue
Summary
The repo carries 327 dated verification stamps (
verified/fetched/as of2026-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:hooks.mdsettings.mdchangelog.mdsub-agents.mdplugins-reference.mdEvery CONFIRMED claim below is backed by a verbatim
grep -Fmatch 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 namesautoMemoryEnabled,CLAUDE_CODE_DISABLE_AUTO_MEMORY, or auto memory.One caution for the next person: markdown link flattening causes false misses. Four
sub-agentsquotes appeared to have vanished until inspection showed the only difference was[fork](#fork-the-current-conversation)becominga 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:
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.mdquoted 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.shcarries the same note at itscli_versioncomment.The floor itself is deliberately unchanged.
TOKEN_SEMANTICS_MIN_VERSIONstill 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 resolvesdumbwhile 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.shcopies 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 amelodic-software/standardsfile, 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,pluginConfigsread scopes).Confirmed and re-dated (no claim changed)
docs/PLUGIN-PHILOSOPHY.md·docs/conventions/hook-observability/README.md· gate/hook/script comments incheck-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, bothstatusline-shim.sh· and skill bodies/references acrossclaude-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 againstsub-agents,workflows,changelog, andwhats-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", andCLAUDE_CODE_MAX_SUBAGENTS_PER_SESSIONappears 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:Buckets below are disjoint and sum to the total; nothing is hidden in a residual.
platform.claude.com,claude.com/blog,github.com,git-scm.com— different corpusdocs/topics/**env-vars-citedThe 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.mdclaim; (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 leavedocs/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 aplatform.claude.compage alongside Claude Code pages — see below), andplaybooks/**(9, mostlyplatform.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-PHILOSOPHYstamps cover several pages at once, at least one of them outside this corpus. Where I verified the Claude Code pages but not theplatform.claude.comone 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— passbash scripts/check-changelog-parity.sh --check-bump origin/main— passbash scripts/check-skill-portability.sh origin/main— passnpx markdownlint-cli2 <43 changed md files>— 0 errorsbash 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. Nodocs/topics/<slug>/created.Related
docs/PLUGIN-PHILOSOPHY.mdwhile 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.md-endpoint route was shared with the parallelenv-varseffort, whose truncation problem it also solves