feat(claude-config): extend the audit-instructions catalog with checks I12-I14 - #1349
Conversation
…s I12-I14
Folds the context-engineering criteria work into the incumbent
`audit-instructions` catalog rather than standing up a second one. The
catalog already carried the three axes, eleven seeded checks I1-I11, the
surface partition, and the source list; its consuming skill is already
report-only, so "never auto-applied" is inherited, not built.
Three rows added, each cited to a page re-fetched this session:
- **I12** (behavioral / warning / all surfaces) flags an instruction
asserting a Claude Code *harness* behavior the current official page
contradicts. The subject is the product, not the model, which is what
separates it from I8; `claude-memory`'s C7 checks references against
the repo, never against a vendor page.
- **I13** (mechanical / warning / non-memory) flags an `@path` written
where `@` carries no import meaning, so the cited content silently
never arrives. Import syntax is a property of the CLAUDE.md family;
the skills page defines none. Distinct from `check-skill.sh` check 5,
which verifies that backtick-cited internal files resolve.
- **I14** (mechanical / info / agent definitions and skill bodies) flags
an instruction telling a subagent to read a surface its own startup
context already contains.
Each row carries its must-not-flag cases. Three official sources join
the catalog's list: CLI reference, subagents, skills.
A fourth candidate was drafted and then eliminated by the incumbent
gate. "Flag a positive-form absolute pinning a style value the working
context already exhibits" is covered on non-memory surfaces by I4
("content the model can derive from the code, standard language
conventions it already knows") and on memory surfaces by
`claude-memory`'s C5, which carries the identical official quote. It is
also refuted rather than merely unbacked: the memory page's Specificity
section holds up *"Use 2-space indentation" instead of "Format code
properly"* as the good example -- the exact phrasing the check would
have flagged.
With that candidate gone, the `Default state` axis and the widened
`OPINION` gloss drafted alongside it had no consumer, so they are not
shipped. The `Authority` gloss instead states the rule the gate applied:
a candidate whose only backing is a practitioner's claim earns a row
when an official page states the behavior it asserts, and is eliminated
when the search finds none. All fourteen checks remain `ANTHROPIC-DOCS`
and the axis stays a closed three-value set.
Version: `0.9.2` -> `0.10.0` (new backward-compatible checks are a MINOR
bump under the semver the plugin's own CHANGELOG header declares).
Catalog header `1.0.0` -> `1.1.0`.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 43s —— View job PR Review: feat(claude-config): extend audit-instructions catalog with checks I12-I14Status: Review complete Tasks:
OverviewThe PR is well-structured and internally consistent. Three checks with clear, non-overlapping scope are added to the incumbent catalog. The PR description documents the gate process thoroughly, including the eliminated candidate. No security or correctness blockers. Two items worth discussing before merge: Finding 1 — "Full catalog I1–I14" in SKILL.md is slightly imprecise for non-memory surfacesFile: Observation:
But I14's row in The existing pattern uses "full catalog" as shorthand with the per-check scope in This is a low-severity precision nit, not a correctness bug — Finding 2 — No evals for the three new checksFile: Observation:
I12 is Not blocking, since the PR description notes I13/I14 as recorded Everything else looks good
|
|
Claude finished @kyle-sexton's task in 1m 28s —— View job Security Review — PR #1349
FindingsNo security vulnerabilities found. This PR is a documentation-only catalog expansion. All six changed files are markdown content or JSON metadata — no scripts, no workflow files, no code execution surfaces. Coverage checklist:
Nothing in the changes creates an injection surface, weakens an access boundary, introduces a supply-chain dependency, or expands automated behavior. Security posture is unchanged from pre-PR state. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 118855a1c8
ℹ️ 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".
Recheck triggers watched three pages while the catalog cites nine. Every check cites a page in the source list, so the trigger set is now the source list — a subset left the new harness-behavior rows depending on pages nothing watched. I12 treated a page that no longer documents a behavior as evidence the behavior drifted. Documentation silence is not evidence: pages are rewritten, condensed and reorganized, and this repository deliberately keeps empirical tests for behaviors the official pages never specified. Detection now requires an incompatible statement on the current page or a failed version-matched reproduction, and silence is called out as a must-not-flag rather than left implicit. I14 treated every CLAUDE.md and project rule as already resident, but the subagent guarantee it cites covers the hierarchy the main conversation loads. Nested CLAUDE.md files and path-scoped rules load lazily when work reaches their scope, so an instruction to read a package-local file before operating there can be doing real work. Detection is bounded to the startup-loaded set and the lazy-loaded surfaces are an explicit must-not-flag, with the memory page's own lazy-loading line carried in the source row as the bound. Also restates the Authority gloss descriptively: "all fourteen checks are currently ANTHROPIC-DOCS" is a statement about present contents, not a rule that would foreclose a future TALK or OPINION row.
|
Claude finished @kyle-sexton's task in 2m 15s —— View job PR Review: feat(claude-config): extend audit-instructions catalog with checks I12-I14Tasks:
Codex Findings — All Three Closed in
|
|
Claude finished @kyle-sexton's task in 1m 24s —— View job Security Review — PR #1349Tasks:
FindingsNo security vulnerabilities found. This PR makes exclusively documentation and metadata changes across six files. Full coverage checklist below.
Nothing in the changes creates an injection surface, weakens an access boundary, introduces a supply-chain dependency, expands automated behavior, or touches any execution path. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8faced0e0a
ℹ️ 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".
…me forms The startup list named CLAUDE.local.md without qualification while the must-not-flag exception covered only nested CLAUDE.md, so an instruction to open a package-local CLAUDE.local.md was flaggable. Lazy loading is a property of the location, not the name: both forms load when work reaches their subdirectory. The startup list now says root-level explicitly and the exception covers both forms.
|
Claude finished @kyle-sexton's task in 2m 34s —— View job PR Review: feat(claude-config): extend audit-instructions catalog with checks I12-I14Tasks:
Review at HEAD
|
|
Claude finished @kyle-sexton's task in 1m 32s —— View job Security Review — PR #1349Tasks:
FindingsNo security vulnerabilities found. This PR is an exclusively documentation and metadata change across six files. Full coverage below.
Nothing in the changes creates an injection surface, weakens an access boundary, introduces a supply-chain dependency, expands automated behavior, or touches any execution path. Security posture is unchanged from pre-PR state. |
The execution record described lanes by what sat uncommitted in a worktree, which is unreachable from a clone and therefore not a citation. Every lane has since published, so each row now names the PR or issue that carries its result: L2 as #1343, L3 as #1349 with the UNBACKED-to-OPINION mapping stated so the claim set does not need to survive as a separate list, L4 as #1385 closed with recovery on #1403, L1 as #1286 closed with the fold on #1271 and gate defects on #1404. The source article is named with its URL rather than left as "a practitioner article", so a reader auditing this ADR's premises can reach the thing the digests measured. The digests themselves prune with the contract slice, which is why the pointer replaces them rather than supplementing them.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 494b96993c
ℹ️ 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".
Detection compared a harness claim against the current page even when the claim was scoped to a pinned or supported older release, so an accurate version-gated instruction could be flagged and rewritten wrong. That contradicted I12's own remediation, which asks authors to carry a minimum version with such a claim. The comparison is now scoped to the version the claim is about, and a successful version-matched reproduction settles it — newer behavior on the latest page is then evidence of a version difference rather than of an inaccurate instruction. A claim carrying no version is about current behavior and is still measured against the current page.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: aee49bfb21
ℹ️ 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".
Resolves the claude-config version and changelog collision: main landed 0.9.3 (setup evals) while this branch was on 0.10.0. Both sections are kept, 0.10.0 stays the version this branch ships, and the 0.9.3 entry takes its place beneath it.
|
Claude finished @kyle-sexton's task in 3m 12s —— View job PR Review: feat(claude-config): extend audit-instructions catalog with checks I12-I14Tasks:
Review at HEAD
|
|
Claude finished @kyle-sexton's task in 1m 28s —— View job Security Review — PR #1349Tasks:
FindingsNo security vulnerabilities found. This PR is an exclusively documentation and metadata change across six files. Full coverage below.
Nothing in the changes creates an injection surface, weakens an access boundary, introduces a supply-chain dependency, expands automated behavior, or touches any execution path. Security posture is unchanged from pre-PR state. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4f8b860641
ℹ️ 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".
The description framed the skill purely as finding instructions the model no longer needs, and only the description is available during skill selection. A request about a stale harness claim, a non-loading @path, or a redundant startup-surface read would not have selected the fourteen-check catalog that answers it. The description now names those three shapes and carries their trigger phrases; all six base-ref phrases are preserved. I13 treated the citation form itself as content loss, but an inert @path is still a legible path in the loaded prompt: "follow @reference/rules.md" works, and warning on it would flag a working instruction. Detection now requires prose asserting the file has already arrived, and the distinction is stated as a must-not-flag so a later edit does not widen it back.
|
Claude finished @kyle-sexton's task in 3m 46s —— View job PR Review: feat(claude-config): extend audit-instructions catalog with checks I12-I14Tasks:
Review at HEAD
|
|
Claude finished @kyle-sexton's task in 1m 26s —— View job Security Review — PR #1349Tasks:
FindingsNo security vulnerabilities found. This PR is exclusively a documentation and metadata expansion across six files. The latest commit (
Nothing in the changes creates an injection surface, weakens an access boundary, introduces a supply-chain dependency, expands automated behavior, or touches any execution path. Security posture is unchanged from pre-PR state. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 96bcb8c85c
ℹ️ 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".
…dings Five review findings, all cases where a row was broader than the evidence supporting it. I12's reproduction arm matched only the version, so replaying a claim that is conditional on OS, a setting, an account tier, a feature flag or launch mode could fail for the wrong reason and be read as drift. It now requires every stated precondition to match, and treats a failure without them as inconclusive. I13's remediation changed the citation syntax while leaving the false assertion in place. Neither a backticked path nor a markdown link imports anything either, so the agent could still proceed without the content. The remediation now rewrites the assertion into an explicit read. I14 hardcoded ~/.claude/CLAUDE.md, but CLAUDE_CONFIG_DIR moves the whole config tree — the hardcoded path flags a read that is now necessary and misses the redundant read of the configured one. It resolves the variable, matching what Phase A already does. It also exempts any read where the file is the operation's subject: the startup copy is a launch-time snapshot, so cutting a pre-edit read patches stale text. The surface partition claimed the full catalog applies on non-memory surfaces while I13 and I14 declare narrower sets, so a lane could emit I14 findings on hooks and output styles the row excludes. Each row's own declaration now bounds it. The changelog entry is restructured to describe the checks as they ship rather than as a sequence of corrections to them.
|
Claude encountered an error after 2s —— View job I'll analyze this and get back to you. |
|
Claude encountered an error after 2s —— View job I'll analyze this and get back to you. |
|
Warning Automated review did not complete — this is an infrastructure failure, not a review verdict. Treat any Claude comment on this PR (including a placeholder like "I'll analyze this and get back to you") as incomplete, not "no findings."
Re-running the job, or pushing a new commit, will retry the review. |
|
Warning Automated security review did not complete — this is an infrastructure failure, not a review verdict. Treat any Claude comment on this PR (including a placeholder like "I'll analyze this and get back to you") as incomplete, not "no findings."
Re-running the job, or pushing a new commit, will retry the review. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 90ac21f923
ℹ️ 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".
| skill bodies. | ||
|
|
||
| - **Detect:** an instruction directing the agent to go read a surface the main conversation loads at | ||
| startup and therefore already carries — the **root** `CLAUDE.md`, the user `CLAUDE.md` at the |
There was a problem hiding this comment.
Include the alternate project-memory path in I14
In projects that use ./.claude/CLAUDE.md instead of ./CLAUDE.md, this startup-loaded set omits the active project instructions, so a skill or agent that redundantly reads that file will escape I14. Phase A explicitly inventories both alternatives at SKILL.md:81, so include ./.claude/CLAUDE.md in this detection set as well.
Useful? React with 👍 / 👎.
| - **Must NOT flag:** an instruction to read a surface that is *not* auto-loaded — `AGENTS.md`, | ||
| contributing guides, ADRs, CI workflow files, per-ecosystem convention docs. Those are ordinary |
There was a problem hiding this comment.
Resolve active imports before exempting supporting documents
When the startup CLAUDE.md imports a supporting file such as @docs/CONTRIBUTING.md, its contents are already loaded at launch—the repository's captured official guidance states this at plugins/claude-memory/skills/audit/reference/official-guidance.md:66. This unconditional exemption therefore misses exactly the redundant retrieval I14 is intended to detect; exempt these documents only when they are not reached through an active startup import, or add resolved imports to the loaded set.
Useful? React with 👍 / 👎.
#1349 landed checks I12-I14 as claude-config 0.10.0, so this branch becomes 0.11.0 and its changelog section sits above that one. Both branches edited the skill description and argument hint. The merged frontmatter keeps every trigger phrase from each: the harness-claim, @path and startup-read vocabulary from I12-I14, and the conflict vocabulary from this pass, plus the `conflicts` scope in the hint. Also states that the pre-scan is a priority ordering rather than the work list. It only reaches directives naming a tool-shaped entity, so an ordinary pair like "Always run tests before committing" against "Never run tests before committing" emits nothing at all. Widening the entity pattern is not the fix -- precision is already 28% on the rows it does emit -- so the lane reads the in-scope surfaces for pairs the scan cannot shape-match, and a pass that reports only what the scanner emitted has not run this check.
…g row Both lanes claimed I12. #1349 landed first with I12 as the stale harness-capability claim, so this pass's conflict check was pointing at a row that exists and means something else. It becomes I15. The row itself was missing, which is the substance of the review finding: conflict-criteria.md deliberately does not restate the definition, comparison set, @path and symlink resolution, AGENTS.md exclusion, remediation-by-scope rules or must-not-flag cases, on the grounds that the catalog entry owns them -- and the catalog entry did not exist. I15 now carries all of it, and conflict-criteria.md stays what it says it is: the adjudication procedure.
main reached claude-config 0.10.0 via #1349 (audit-instructions checks I12-I14), so this branch's 0.11.0 is the next rung and the manifest keeps it. Both CHANGELOG sections are kept -- 0.11.0 above main's 0.10.0 -- rather than losing a released entry to the resolution. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdF74i18gkGtHC9fjZyDrU
…instructions and setup (#2003) ## Summary Discharges nine verifier-confirmed review findings against `claude-config`'s `audit-instructions` and `setup` skills, and bumps the plugin to `0.21.10` with a changelog entry. Seven of the nine are instruction-surface defects in `audit-instructions` — a skill that audits other people's instruction surfaces and was violating its own rules on three of them. One is a scanner false negative reproduced and fixed with tests. One is a prerequisite the docs understated by two skills. ## What changed, per finding | # | Complaint | Discharge | |---|---|---| | 1 | The skill forbids hardcoding `~/.claude`, then hardcodes it | `SKILL.md:45`, `:75`, `:197`, `:219-222` now resolve against the user root Phase A establishes | | 2 | I3 rejects `@path` imports as non-deferring, then names a `skills:` preload as a valid destination | `criteria.md:196-201` strikes the preload; only conditional runtime invocation qualifies | | 3 | A subagent's own `memory` is graded real but never inventoried | Inventory bullet at `SKILL.md:216-229`; co-residency row at `conflict-criteria.md:98` | | 4 | The liveness gate resolved a closed five-input list with no hook enablement | `SKILL.md:175-185` and `conflict-criteria.md:270-292` resolve `disableAllHooks` per scope plus `allowManagedHooksOnly` | | 5 | A nested project memory pair routed to a check that cannot discover the file | `SKILL.md:413-417` narrows the boundary to **root-level** project; `.claude/rules/**` deliberately unchanged | | 6 | `BOUNDARY_ERE` omits `and`, dropping a real conflict | `COORD_ERE` / `COORD_HEAD_ERE` at `conflict-scan.sh:131-143`, three new test cases | | 7 | The requirements list names only `jq`/`curl` | `README.md:163-177` and `setup/SKILL.md:28-33,46-52,106-108` name `awk`/`sort` across all three skills that use them | | 8 | I14's startup set omits `./.claude/CLAUDE.md` | `criteria.md:612-621` covers both supported root locations | | 9 | I14's supporting-document exemption ignores startup `@path` imports | `criteria.md:636-642` resolves imports first, to four hops | ### Finding 6, reproduced `conflict-scan.sh --count` on the finding's exact strings: | Case | `origin/main` | this branch | |---|---|---| | "Always use `Read` and never use `Bash`" vs "Never use `Read`" | 0 | **1** | | "Always use `Read` but never use `Bash`" vs "Never use `Read`" | 1 | 1 | A **bare** `and` boundary would also return 1 for the first row while creating a new false negative: "Never use `Bash` and `Grep`" is one directive over two objects, and cutting at the coordinator strips the `never` governing `Grep`. The boundary therefore requires a polarity token after `and`, and is consumed asymmetrically — a leading window resumes after the coordinator alone so that token still classifies its entity. Case 35 is the must-not-flag test and fails under a bare-`and` boundary. ### Citations re-verified against the live docs Every citation this batch introduced was diffed character-for-character against the raw markdown of `hooks`, `memory`, and `sub-agents` (fetched 2026-08-08). Three did not survive and were corrected: - **`disableAllHooks` has no documented "own settings level and below" cascade.** The docs say "Disable all hooks", with exactly one carve-out: set in user, project, or local settings it cannot reach managed hooks. The earlier wording invented a directional cascade. Rewritten. - **The `skills:` citation was a splice** of the frontmatter-table sentence and the body sentence, quotable as neither. Replaced with the real one: "The full content of each listed skill is injected into the subagent's context at startup." - **Imports recurse "with a maximum depth of four hops"** — the text pointed at a "hop limit" the page never names. Now states the figure and quotes the wording. Also corrected: the `AGENTS.md` import is *recommended* (a symlink is a co-equal alternative, and the import is mandated only on Windows), not prescribed; subagent memory paths take upstream's `<name-of-agent>` placeholder; and the auto-memory gate now names what the subagent actually loses — "the memory instructions or the memory tool access". ### Also fixed in passing `conflict-scan.test.sh:378` had unescaped backticks inside a double-quoted assertion message, so the suite ran `and` as a command (`and: command not found` on stderr) and printed the label with a hole in it. Exit status stayed 0, so no gate saw it. Now single-quoted, matching the file's existing idiom. ### Deliberately not changed - `${CLAUDE_CONFIG_DIR:-~/.claude}` — that form *is* the correct resolver, not a hardcode. - `~/.claude` inside quoted upstream text (`criteria.md:651`, `conflict-criteria.md:111`) — altering a quotation is a worse defect than the one it would resolve. - `.claude/rules/**` routing to `claude-memory`'s C6 — C6's rules discovery is recursive, so nested rules do not leak. Finding 5 is narrower than filed. ## Testing - `conflict-scan.test.sh` — 46/46, no stderr noise - All 7 `claude-config` plugin tests — PASS - `check-changelog-parity.sh` `--check` / `--check-bump origin/main` / `--check-order` — PASS - `check-changed-skills.sh origin/main` — 4 skills, 0 failed (`audit-instructions` 281/500 lines) - `check-shell-portability.sh` / `check-skill-portability.sh` — PASS - `shellcheck`, `markdownlint-cli2`, `typos` — clean - `validate-plugins.sh`, `check-contract-slice-prune.sh`, `check-contract-clause-coverage.py`, `check-silent-skips.sh`, `check-cross-plugin-source-drift.sh`, `check-skill-leaf-names.sh`, `check-orphaned-fixtures.sh` — PASS ## Related Discharges review findings filed on #1316, #1343, and #1349. No linked issue --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
No linked issue — this PR is lane L3 of the
context-engineering-rightsizingtopic effort,which is tracked in
docs/topics/context-engineering-rightsizing/rather than as a filed GitHubissue. See Related for the issues this work defers to.
Summary
Folds the context-engineering criteria work into the incumbent
audit-instructionscatalograther than standing up a second one.
plugins/claude-config/skills/audit-instructions/reference/criteria.mdalready carried the three axes, eleven seeded checks I1–I11, the surface partition, and the source
list, and its consuming skill is already report-only (
SKILL.md:25-29, "There is no--fix"), so"never auto-applied" is inherited rather than built.
Three rows added. Every cited page was re-fetched during this session and quoted verbatim.
behavioralwarningmechanicalwarning@pathwritten where@carries no import meaning, so the cited content silently never arrivesmechanicalinfoEach row carries its must-not-flag cases. Three official sources join the catalog's list:
CLI reference,
subagents,
skills.
Why each row survived the incumbent gate, which eliminated 44 of 47 enumerated candidates (94%):
Not covered by
claude-memory's C7 (Currency), which checks references, versions and countsagainst the repo, never against a vendor page, and is memory-surface-only.
check-skill.shcheck 5 — check 5 verifies that backtick-cited internal filesresolve. I13's target is an un-backticked
@pathon a surface where@is inert. Thememory page defines
@path/to/importfor the CLAUDE.md family; the skills page defines no importsyntax at all, and instead says supporting files are referenced "so Claude knows what each file
contains and when to load it".
must-not-flag list is anchored on the same page's statement that "Explore and Plan are the only
subagents that omit CLAUDE.md and git status. There is no frontmatter field or per-agent setting
to change which agents skip them".
A fourth candidate was drafted and then eliminated. "Flag a positive-form absolute pinning a
style value the working context already exhibits" is covered on non-memory surfaces by I4
("content the model can derive from the code, standard language conventions it already knows")
and on memory surfaces by
claude-memory's C5, which carries the identical official quote.It is also refuted rather than merely unbacked: the memory page's Specificity section holds
up "'Use 2-space indentation' instead of 'Format code properly'" as the good example — the
exact phrasing the check would have flagged.
claude-memory's C4 already cites it.With that candidate gone, the
Default stateaxis and the widenedOPINIONgloss draftedalongside it had no consumer, so they are not shipped — an unused axis a consuming
SKILL.mdmust then explain is speculative structure. The
Authoritygloss instead states the rule the gateactually applied: a candidate whose only backing is a practitioner's claim earns a row when an
official page states the behavior it asserts, and is eliminated when the search finds none. All
fourteen checks remain
ANTHROPIC-DOCSand the axis stays a closed three-value set, so noexisting consumer of the axis breaks.
Version.
claude-config0.9.2→0.10.0. New backward-compatible checks added to anexisting catalog are a MINOR bump under the semver the plugin's own
CHANGELOG.md:3-4declares;the repo root
CLAUDE.md:47mandates only that an explicit semverversionexist. Catalog header1.0.0→1.1.0.origin/maincarries0.9.2after rebase, so0.10.0is unclaimed.Test plan
Every command below was run from the branch worktree after rebasing onto
origin/mainatf4627e7172.plugins/skill-quality/scripts/check-skill.sh audit-instructions(
CHECK_SKILL_SKILLS_ROOT=plugins/claude-config/skills) — PASS, 0 errors, 0 warnings.SKILL.md 166/500 lines; all 6 base-ref trigger phrases preserved; markdownlint clean;
scripts/instruction-scan.test.shpassed.npx markdownlint-cli2 "plugins/claude-config/**/*.md"— 17 files, 0 errors.scripts/check-changelog-parity.sh --checkand--check-bump origin/main— exit 0 (themanifest bump has a matching
## [0.10.0]entry).eleven/I1–I11/I6–I11/I15/fifteen-check: the onlysurvivors are historical
CHANGELOG.mdentries for0.9.x, which are correctly immutable.Source verification. All four official pages were fetched in-session and the quoted lines read
off the live fetch, not carried forward from an earlier agent:
cli-reference/doctor."memory@path/to/importsyntax"; "wrap it in backticks"; "'Use 2-space indentation' instead of 'Format code properly'"skillsSKILL.mdso Claude knows what each file contains and when to load it" — no import syntax defined anywhere on the pagesub-agents~/.claude/CLAUDE.md, project rules,CLAUDE.local.md, and managed policy files"; "There is no frontmatter field or per-agent setting to change which agents skip them"scripts/run-plugin-tests.sh claude-configwas started locally but did not complete inside thesession's window — the machine was saturated by concurrent work. It is left to CI, which runs the
same gate. Nothing was suppressed or skipped to make a check pass.
Related
Report-only ceiling.
claude-configis report-only, so none of these rows gates a merge —a row tiered
mechanicalstill only produces advice.CI-gate backlog: automatable conformance checks surfaced by the #313 fleet audit #445 candidates: I13 and I14. Both are deterministic and are recorded (not built) as
candidates for CI-gate backlog: automatable conformance checks surfaced by the #313 fleet audit #445's lane shape (
scripts/check-*.sh+.test.sh+ aci.ymllane), where theycould actually fail a build. I13 is worth materially more as a gate than as advice — a broken
@citation silently drops content, and a report-only warning does not stop it landing.I12 is not a CI-gate backlog: automatable conformance checks surfaced by the #313 fleet audit #445 candidate: detecting that prose contradicts a live vendor page needs a fetch
and a judgement, so it stays advice.
Scope held:
plugins/playbooks/skills/fable-5/**was not targeted (D-6);plugins/skill-quality/scripts/check-skill.shanddocs/PLUGIN-PHILOSOPHY.mdwere not touched(D-8, PR feat(skill-quality): fresh-eyes delegation doctrine + conformance gate (check 21) #1096 owns them) and no check slot was consumed; no row assumes the comment criteria stay
in the user-global
CLAUDE.md(code-tidying: newself-documentskill — comments → self-documenting code (audit + apply modes) #1245).Refs CI-gate backlog: automatable conformance checks surfaced by the #313 fleet audit #445 — the deterministic-check lane shape I13 and I14 are recorded against.
Refs feat(skill-quality): fresh-eyes delegation doctrine + conformance gate (check 21) #1096 — owns
check-skill.shanddocs/PLUGIN-PHILOSOPHY.md; untouched here.