Fleet sweep run as row 2 of #2273. docs/conventions/upstream-drift/ requires a restated
upstream-owned specific to carry four parts — claim, basis (URL/probe), as-of date, and a recheck
trigger naming an observable event. The convention "binds on touch". This issue records the
carriers the sweep found so each can adopt when its owning plugin is next changed.
architecture is not listed: it was the motivating case, was corrected and stamped in
architecture 0.5.1, and is now an Adopters row (#2207). Every carrier below sits outside that
lane's plugin fence, which is why they are filed rather than fixed.
Carriers
Ranked by whether a wrong value changes what the surface does.
plugins/plugin-quality/skills/audit/references/component-types/hook.md:15 — "Exit-code
semantics — PreToolUse: 0 allow, 2 block; PostToolUse: 2 shows stderr to Claude." Pure harness
contract used as an audit criterion; no doc URL, no date anywhere in the file.
plugins/desktop-notification/hooks/desktop-notification.sh:49 — "systemMessage-only: the
Notification event has no additionalContext channel." An absence claim naming no corpus; it
is the stated reason the script emits only systemMessage.
plugins/actionlint/hooks/actionlint-check.sh:58 — "PostToolUse cannot block or undo the write
(the tool already ran), so the guard protects nothing." Load-bearing for the advisory posture.
plugins/claude-config/skills/audit/reference/required-permissions.md:195 and :198 — "Deny
and ask rules are evaluated regardless of which decision a PreToolUse hook returns" / "A hook
that exits 2 stops the tool call before permission rules are evaluated at all." Mixed file:
it carries a permissions-page URL + "Verified 2026-07-26" at :38, but that stamp is scoped to
the "Scope of a Read deny" section and does not reach the hook-ordering section. Drives audit
severity verdicts.
plugins/discovery/agents/researcher.md:109 and :111 — "the harness removes it outright at
the nesting depth limit" / "a configurable default of three as of Claude Code v2.1.219 — tunable
via CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH". A version-pinned fact with no URL, date, or
trigger. Twin at plugins/discovery/agents/explorer.md:96-99.
plugins/disk-hygiene/skills/clean/SKILL.md:381, :384, :361, :375 — "PreToolUse hooks DO
fire for the PowerShell tool (2.1.218...)", "(CLAUDE_TOOL_NAME does not exist)", and two more
version-pinned claims with no as-of date and no trigger. Note the sibling
clean/reference/safety-model.md:243 carries the same PowerShell claim better stamped, so
this is arguably a duplication to collapse toward the stamped record rather than a fresh stamp.
plugins/claude-memory/skills/stateless/context/status.md:27 and :32 —
"autoMemoryEnabled defaults to true", and "CLAUDE_CODE_DISABLE_AUTO_MEMORY overrides
autoMemoryEnabled (docs)" — a citation reading literally "(docs)", with no page, URL, or date.
plugins/context-guard/hooks/zone-crossing-inject.sh:6 and :25 — "systemMessage renders to
the operator; additionalContext lands in the model's context", and "systemMessage is
documented only as a message shown to the user, with nothing said about non-interactive runs".
The second is a claim about what the upstream docs say, unstamped; the whole two-channel
design rests on it.
plugins/autonomy/hooks/lane-stop-gate.sh:132 and :135 — "Stop supports additionalContext"
and "A subagent finishing is delivered as SubagentStop". No basis anywhere in the file.
plugins/claude-ops/skills/plugins/SKILL.md:138, :142 — userConfig substitution "only when
the key is explicitly set", with "verified 2026-07-23 against CC 2.1.218". Partially
stamped: claim + probe basis + date, but no source URL and no recheck trigger.
plugins/context-guard/hooks/zone-gate.sh:125 — "Claude starts matched tools in PARALLEL, so
several PreToolUse hook processes run concurrently against one session's counter." The atomic
counter exists because of it.
plugins/session-flow/reference/observer.md:100 — "A SessionStart hook fires on every session
start, including the observer's own analysis -p run." The re-entrancy guard rests on it.
Plugins with at least one firm carrier: plugin-quality, desktop-notification, actionlint,
claude-config, discovery, disk-hygiene, claude-memory, context-guard, autonomy,
claude-ops, session-flow.
One stamped-but-nonconforming case
plugins/discovery/skills/explore/SKILL.md:89-95 carries a probe date, a documented basis, and an
expiry — but names page slugs with no URL, and its trigger is "This caveat expires 2027-02-11.
Re-fetch both pages then." That is a bare date, the exact form the observability bar rejects.
Known limitation — this is a lower bound, not a census
The citation gate was file-level: any file containing a code.claude.com or
docs.anthropic.com URL anywhere was dropped from the carrier pass. Mixed files — one stamped
claim plus several bare harness assertions — are therefore structurally under-represented. Carrier
4 is the single one found by manually reopening a stamped file; roughly 300 files were dropped this
way, densest under claude-config/skills/audit/**, claude-memory/skills/audit/**, and
context-guard/reference/**. Closing that needs a section-scoped rather than file-scoped pass.
The sweep also did not search paraphrases. A claim worded without the vocabulary grepped for
(PostToolUse, ${CLAUDE_, settings.json, subagent, and so on) would not have been found.
Verified as conforming (so the sweep is not one-sided)
Twelve files carried both a doc URL and a dated stamp; four were read in full and conform:
claude-config/skills/audit/reference/audit-checklist.md:167,
claude-config/skills/audit-instructions/reference/criteria.md:444,
context-guard/reference/reader-contract.md:236, and
disk-hygiene/skills/clean/reference/safety-model.md:308.
Disposition
No single lane owns these. Each carrier adopts when its plugin is next touched, per the convention's
own on-touch rule; a plugin becomes an Adopters row only once it actually conforms, since that
table's third column is a promise to the reader. Enforcement was considered and deferred as a
recorded decision in upstream-drift 1.4.0 — the check the doc already named would not have caught
the motivating case, because that surface carried no stamp for a stamp-anchored grep to match.
Related
Fleet sweep run as row 2 of #2273.
docs/conventions/upstream-drift/requires a restatedupstream-owned specific to carry four parts — claim, basis (URL/probe), as-of date, and a recheck
trigger naming an observable event. The convention "binds on touch". This issue records the
carriers the sweep found so each can adopt when its owning plugin is next changed.
architectureis not listed: it was the motivating case, was corrected and stamped inarchitecture0.5.1, and is now an Adopters row (#2207). Every carrier below sits outside thatlane's plugin fence, which is why they are filed rather than fixed.
Carriers
Ranked by whether a wrong value changes what the surface does.
plugins/plugin-quality/skills/audit/references/component-types/hook.md:15— "Exit-codesemantics — PreToolUse: 0 allow, 2 block; PostToolUse: 2 shows stderr to Claude." Pure harness
contract used as an audit criterion; no doc URL, no date anywhere in the file.
plugins/desktop-notification/hooks/desktop-notification.sh:49— "systemMessage-only: theNotification event has no additionalContext channel." An absence claim naming no corpus; it
is the stated reason the script emits only
systemMessage.plugins/actionlint/hooks/actionlint-check.sh:58— "PostToolUse cannot block or undo the write(the tool already ran), so the guard protects nothing." Load-bearing for the advisory posture.
plugins/claude-config/skills/audit/reference/required-permissions.md:195and:198— "Denyand ask rules are evaluated regardless of which decision a
PreToolUsehook returns" / "A hookthat exits 2 stops the tool call before permission rules are evaluated at all." Mixed file:
it carries a permissions-page URL + "Verified 2026-07-26" at
:38, but that stamp is scoped tothe "Scope of a Read deny" section and does not reach the hook-ordering section. Drives audit
severity verdicts.
plugins/discovery/agents/researcher.md:109and:111— "the harness removes it outright atthe nesting depth limit" / "a configurable default of three as of Claude Code v2.1.219 — tunable
via
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH". A version-pinned fact with no URL, date, ortrigger. Twin at
plugins/discovery/agents/explorer.md:96-99.plugins/disk-hygiene/skills/clean/SKILL.md:381,:384,:361,:375— "PreToolUse hooks DOfire for the PowerShell tool (2.1.218...)", "(
CLAUDE_TOOL_NAMEdoes not exist)", and two moreversion-pinned claims with no as-of date and no trigger. Note the sibling
clean/reference/safety-model.md:243carries the same PowerShell claim better stamped, sothis is arguably a duplication to collapse toward the stamped record rather than a fresh stamp.
plugins/claude-memory/skills/stateless/context/status.md:27and:32—"
autoMemoryEnableddefaults totrue", and "CLAUDE_CODE_DISABLE_AUTO_MEMORYoverridesautoMemoryEnabled(docs)" — a citation reading literally "(docs)", with no page, URL, or date.plugins/context-guard/hooks/zone-crossing-inject.sh:6and:25— "systemMessagerenders tothe operator;
additionalContextlands in the model's context", and "systemMessageisdocumented only as a message shown to the user, with nothing said about non-interactive runs".
The second is a claim about what the upstream docs say, unstamped; the whole two-channel
design rests on it.
plugins/autonomy/hooks/lane-stop-gate.sh:132and:135— "Stop supports additionalContext"and "A subagent finishing is delivered as SubagentStop". No basis anywhere in the file.
plugins/claude-ops/skills/plugins/SKILL.md:138,:142— userConfig substitution "only whenthe key is explicitly set", with "verified 2026-07-23 against CC 2.1.218". Partially
stamped: claim + probe basis + date, but no source URL and no recheck trigger.
plugins/context-guard/hooks/zone-gate.sh:125— "Claude starts matched tools in PARALLEL, soseveral PreToolUse hook processes run concurrently against one session's counter." The atomic
counter exists because of it.
plugins/session-flow/reference/observer.md:100— "A SessionStart hook fires on every sessionstart, including the observer's own analysis
-prun." The re-entrancy guard rests on it.Plugins with at least one firm carrier:
plugin-quality,desktop-notification,actionlint,claude-config,discovery,disk-hygiene,claude-memory,context-guard,autonomy,claude-ops,session-flow.One stamped-but-nonconforming case
plugins/discovery/skills/explore/SKILL.md:89-95carries a probe date, a documented basis, and anexpiry — but names page slugs with no URL, and its trigger is "This caveat expires 2027-02-11.
Re-fetch both pages then." That is a bare date, the exact form the observability bar rejects.
Known limitation — this is a lower bound, not a census
The citation gate was file-level: any file containing a
code.claude.comordocs.anthropic.comURL anywhere was dropped from the carrier pass. Mixed files — one stampedclaim plus several bare harness assertions — are therefore structurally under-represented. Carrier
4 is the single one found by manually reopening a stamped file; roughly 300 files were dropped this
way, densest under
claude-config/skills/audit/**,claude-memory/skills/audit/**, andcontext-guard/reference/**. Closing that needs a section-scoped rather than file-scoped pass.The sweep also did not search paraphrases. A claim worded without the vocabulary grepped for
(
PostToolUse,${CLAUDE_,settings.json,subagent, and so on) would not have been found.Verified as conforming (so the sweep is not one-sided)
Twelve files carried both a doc URL and a dated stamp; four were read in full and conform:
claude-config/skills/audit/reference/audit-checklist.md:167,claude-config/skills/audit-instructions/reference/criteria.md:444,context-guard/reference/reader-contract.md:236, anddisk-hygiene/skills/clean/reference/safety-model.md:308.Disposition
No single lane owns these. Each carrier adopts when its plugin is next touched, per the convention's
own on-touch rule; a plugin becomes an Adopters row only once it actually conforms, since that
table's third column is a promise to the reader. Enforcement was considered and deferred as a
recorded decision in
upstream-drift1.4.0 — the check the doc already named would not have caughtthe motivating case, because that surface carried no stamp for a stamp-anchored grep to match.
Related
architectureinstance, corrected and stampeddocs/conventions/upstream-drift/