feat(claude-config): add audit-instructions skill, superseding audit-model-fit (0.9.0)#870
Conversation
Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
…s Brief Attribution (pruning bar = Anthropic docs, not Boris), positive-reframing target form, sourced behavioral-tier caution (80%-cut postmortem). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Six phases; complementary partition with claude-memory:audit after fresh-context review verified check overlap; 11 findings applied. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
…spine) New /claude-config:audit-instructions skill: a read-only sweep of the locally-owned Claude Code instruction surfaces (user + project CLAUDE.md, .claude/rules, skill bodies, agent definitions, prompt-type hooks, output styles) for instructions current models no longer need, cited to current official prompting doctrine and gated to the human as proposed diffs. Phases 1-3 (one commit unit — check-skill needs the SKILL.md refs to resolve): - SKILL.md: purpose, read-only contract, memory-layer scope-boundary partition (I1-I5 hygiene route out to claude-memory:audit; I6-I11 all surfaces), Phase A inventory / B per-surface lanes / C fresh-context verify pass / D report persisted to CLAUDE_PLUGIN_DATA with the delete-and-watch follow-through. - reference/criteria.md: eleven checks I1-I11, each with evidence tier, authority tag, severity, surface applicability, and one decisive sourced line (point-don't-copy) verified against the live best-practices, prompting, and Fable 5 pages this session. - scripts/instruction-scan.sh (+ hermetic .test.sh): advisory grep-only spine marking I6 (bare prohibitions lacking rationale) and I10 (reasoning-echo) candidates; file:line:check-id rows, --count, always exit 0, exit 2 on missing grep. - setup/SKILL.md: one tool-inventory line for the new grep-only scanner. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Fresh-context verifier passed all nine acceptance criteria against commit acf6a46. Align D1's memory-layer check range to the shipped I6-I11 reading (Phase 2's applicability spec; I11 CLI-over-MCP is an all-surface check — D1's I6-I10 was the internal outlier). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Five eval cases for the audit-instructions skill, validated against plugins/skill-quality/reference/evals.schema.json: - bare-invocation-stays-read-only: report + proposed diffs, no Edit/Write of audited files, no --fix. - scope-boundary-routes-out: memory-layer hygiene routes to claude-memory:audit; only I6-I11 run on memory surfaces. - plugin-cache-finding-routed-not-edited: upstream-owned cache excluded from the editable set; findings route to the owning repo. - example-block-nuance: format/tone-steering examples (I9) not flagged; only approach-pinning scaffolding is. - verify-pass-demotion: fresh-context non-fork verifier demotes a defended proposal to info, never a confident removal. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Fresh-context verifier passed all five Phase 4 criteria against commit 14f7de5 (schema-valid evals, five plan-specified cases, no hardcoded org/machine strings). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Wire the audit-instructions skill into the plugin and bump to 0.8.0. - plugin.json: version 0.7.1 -> 0.8.0; description extended from three to four audit skills. - CHANGELOG.md: new [0.8.0] entry — Added (audit-instructions) and Fixed (stale claude-memory health -> audit references across the plugin's skills and README). - README.md: audit-instructions one-question table row + "What each skill does" subsection, distinguished from claude-memory:audit per the D1 partition (content = capability question; hygiene routes out). - Corrected stale claude-memory skill-name references (health -> audit) in the audit, audit-automation-gaps, and audit-permission-grants route-out notes and the README's instruction-layer and migration sections; the claude-memory memory-layer skill was renamed health -> audit. - reference/criteria.md: deduplicated the findings-table header — Output format now points at the Phase D table in SKILL.md (point-don't-copy). - Root README.md regenerated via scripts/generate-catalog.mjs. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Fresh-context verifier passed all eight Phase 5 criteria against the integration commit (0.8.0 bump, CHANGELOG entry, README row, generated catalog, health-to-audit route-out sweep, criteria.md table dedup). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
The setup skill's prerequisite notes still assumed three audit skills, all jq-backed. audit-instructions ships a grep-only scanner (no jq), so several statements were inaccurate: - Frontmatter description: "jq (all audit scripts)" -> "jq (the JSON-parsing audit scripts)"; instruction-scan.sh needs only grep. - jq check: "blocks all three skills" -> blocks the three JSON-parsing audit skills (audit, audit-automation-gaps, audit-permission-grants), with audit-instructions exempted (grep-only). - curl check: "the other two skills still run" -> "the other three skills". - "What this skill does NOT do": added /claude-config:audit-instructions to the audit-skill list. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Working docs (Brief, plan, design resolution) served their purpose; the approved plan rides in the PR description. Pruned pre-merge per the topic-docs lifecycle. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0d2911a4dc
ℹ️ 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".
## What Folds the four naming-tournament lessons recorded during the running-retro naming round (batch ledger, "Naming-skill lessons this round") into `name-it-better`; naming 0.2.0 → 0.3.0. - **Terms-of-art brief field** — the field's established names for the act with researched, not recalled, meanings. Evidence: running-retro r4 found `reflect` (agent-lit: output-critique-retry), `introspect` (type inspection), and `self-review` (repo-colonized for diff review) all misleading; the honest field term was `retrospective` minus cadence. - **Blocklist provenance** — every word-level blocklist entry records user-stated vs agent-inferred origin; inferred entries are proposals to confirm. Evidence: the "retro" blocklist entry was agent-assumed, never user-decided, and was reversed on re-derivation. - **Sentence-form test** as an early merge filter for utterance names (skills/commands): the imperative you would actually say, cold-readable. Evidence: filtered contentless idioms (`take-stock`, bare `check`) across r1-r2. - **Temporal-neutrality constraint** for skills loadable as primed context: name must read valid before any work exists (`critique-your-own-run` failure class). ## Gates - `claude plugin validate .` — PASS - `markdownlint-cli2` — 0 errors - `skill-quality check name-it-better` — PASS (0 errors; 1 pre-existing soft line-target warning, file was already over 200 before this change) ## Related - No linked issue — ledger-tracked follow-up (re-anchor round 2 ledger, task #4); closes nothing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…y trial (#871) ## What Flips the last open phase tag in `docs/topics/boris-video-absorption/PLAN.md` — Phase 8 (post-merge trial) — to `[DONE]`, with a short trial record. ## Trial summary (medley, 2026-07-21, local-only) - Config surface resolved with per-key provenance (local overlay `.claude/testing/e2e.local.md`; team + user-global layers absent) - `recording: video` honored — WebM artifact on disk (gitignored in consumer repo) - Induced prereq failure (run before orchestrator start) → hard STOP + structured verification-environment gap report - Evidence table carried session artifacts (recording path, playwright session ID, transcript pointers) - Bonus: explicit "run this headed" prompt beat the overlay's `browser_mode: headless` - Operator reviewed the recording Docs-only; no plugin content changes. ## Related No linked issue. Related: #845 (phases 1–7 of the same PLAN, merged). Co-authored-by: Claude <noreply@anthropic.com>
…ions ## What Fleet sweep: every SKILL.md using `` !`command` `` dynamic-context injection now declares `shell: bash` in frontmatter — 65 skills across 26 plugins, each plugin patch-bumped with a CHANGELOG entry. ## Why The pinned precompute convention (`plugins/playbooks/skills/skill-authoring/reference/precompute-context.md`, "Windows / `shell:` awareness") requires portable injection commands or an explicit `shell:` declaration. The fleet's injections are bash-only (`||` fallbacks, `2>/dev/null`, pipes), and with `shell:` undeclared they fall through to the PowerShell tool on a Windows host without Git Bash, silently inlining broken output into every skill load. Originally surfaced against `knowledge:youtube-digest`; a census showed the same gap in all 64 injection-bearing skills, so the sweep fixes the class, not the instance. `shell` is the official frontmatter key (`bash` default | `powershell`), verified against the skills documentation this session. ## Gates - `claude plugin validate .` — PASS - `markdownlint-cli2` — 0 errors on all changed CHANGELOGs - `scripts/check-changelog-parity.sh --check` — PASS (all 26 bumps carry CHANGELOG entries) - `skill-quality check` sample (youtube-digest) — PASS ## Follow-up Enforcement (skill-quality check: injections present ⇒ `shell:` declared or commands portable) tracked separately. ## Related - No linked issue — fleet hygiene sweep from a carried handoff item; closes nothing. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Automated exact-file synchronization from [`melodic-software/standards@b89f1b408f887d3c6273aa3920c99fb537a58fe9`](melodic-software/standards@b89f1b4) (requested ref `main`). No linked issue — recurring automated distribution, not tied to a tracked change. Managed component mappings applied to `melodic-software/claude-code-plugins`: - **agent-orientation**: `components/agent-orientation/orientation.md` → `AGENTS.md` (mode `100644`) - **editorconfig-checker**: `.editorconfig-checker.json` → `.editorconfig-checker.json` (mode `100644`) - **gitleaks**: `.gitleaks.toml` → `.gitleaks.toml` (mode `100644`) - **lychee**: `lychee.toml` → `lychee.toml` (mode `100644`) - **markdownlint**: `.markdownlint-cli2.jsonc` → `.markdownlint-cli2.jsonc` (mode `100644`) - **node-runtime**: `.node-version` → `.node-version` (mode `100644`) - **path-detection-guardrails**: `components/path-detection/machine-path-patterns.sh` → `plugins/guardrails/lib/path-detection/machine-path-patterns.sh` (mode `100644`) - **repository-text**: `.editorconfig` → `.editorconfig` (mode `100644`) - **repository-text**: `.gitattributes` → `.gitattributes` (mode `100644`) - **review-instructions**: `REVIEW.md` → `REVIEW.md` (mode `100644`) - **runner-policy**: `components/runner-policy/package-lock.json` → `.github/standards/runner-policy/package-lock.json` (mode `100644`) - **runner-policy**: `components/runner-policy/package.json` → `.github/standards/runner-policy/package.json` (mode `100644`) - **runner-policy**: `components/runner-policy/policy.json` → `.github/standards/runner-policy/policy.json` (mode `100644`) - **runner-policy**: `components/runner-policy/policy.schema.json` → `.github/standards/runner-policy/policy.schema.json` (mode `100644`) - **runner-policy**: `components/runner-policy/repository-policy.schema.json` → `.github/standards/runner-policy/repository-policy.schema.json` (mode `100644`) - **runner-policy**: `components/runner-policy/runner-policy.mjs` → `.github/standards/runner-policy/runner-policy.mjs` (mode `100755`) - **shellcheck**: `.shellcheckrc` → `.shellcheckrc` (mode `100644`) - **typos**: `_typos.toml` → `_typos.toml` (mode `100644`) Review and merge this PR normally. Do not hand-edit these managed files downstream; change their standards source instead. ## Related - [`melodic-software/standards@b89f1b408f887d3c6273aa3920c99fb537a58fe9`](melodic-software/standards@b89f1b4) — source commit this sync distributes. Co-authored-by: melodic-standards-sync[bot] <300666570+melodic-standards-sync[bot]@users.noreply.github.com>
Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
…s Brief Attribution (pruning bar = Anthropic docs, not Boris), positive-reframing target form, sourced behavioral-tier caution (80%-cut postmortem). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Six phases; complementary partition with claude-memory:audit after fresh-context review verified check overlap; 11 findings applied. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
…spine) New /claude-config:audit-instructions skill: a read-only sweep of the locally-owned Claude Code instruction surfaces (user + project CLAUDE.md, .claude/rules, skill bodies, agent definitions, prompt-type hooks, output styles) for instructions current models no longer need, cited to current official prompting doctrine and gated to the human as proposed diffs. Phases 1-3 (one commit unit — check-skill needs the SKILL.md refs to resolve): - SKILL.md: purpose, read-only contract, memory-layer scope-boundary partition (I1-I5 hygiene route out to claude-memory:audit; I6-I11 all surfaces), Phase A inventory / B per-surface lanes / C fresh-context verify pass / D report persisted to CLAUDE_PLUGIN_DATA with the delete-and-watch follow-through. - reference/criteria.md: eleven checks I1-I11, each with evidence tier, authority tag, severity, surface applicability, and one decisive sourced line (point-don't-copy) verified against the live best-practices, prompting, and Fable 5 pages this session. - scripts/instruction-scan.sh (+ hermetic .test.sh): advisory grep-only spine marking I6 (bare prohibitions lacking rationale) and I10 (reasoning-echo) candidates; file:line:check-id rows, --count, always exit 0, exit 2 on missing grep. - setup/SKILL.md: one tool-inventory line for the new grep-only scanner. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Fresh-context verifier passed all nine acceptance criteria against commit acf6a46. Align D1's memory-layer check range to the shipped I6-I11 reading (Phase 2's applicability spec; I11 CLI-over-MCP is an all-surface check — D1's I6-I10 was the internal outlier). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Five eval cases for the audit-instructions skill, validated against plugins/skill-quality/reference/evals.schema.json: - bare-invocation-stays-read-only: report + proposed diffs, no Edit/Write of audited files, no --fix. - scope-boundary-routes-out: memory-layer hygiene routes to claude-memory:audit; only I6-I11 run on memory surfaces. - plugin-cache-finding-routed-not-edited: upstream-owned cache excluded from the editable set; findings route to the owning repo. - example-block-nuance: format/tone-steering examples (I9) not flagged; only approach-pinning scaffolding is. - verify-pass-demotion: fresh-context non-fork verifier demotes a defended proposal to info, never a confident removal. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Fresh-context verifier passed all five Phase 4 criteria against commit 14f7de5 (schema-valid evals, five plan-specified cases, no hardcoded org/machine strings). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Wire the audit-instructions skill into the plugin and bump to 0.8.0. - plugin.json: version 0.7.1 -> 0.8.0; description extended from three to four audit skills. - CHANGELOG.md: new [0.8.0] entry — Added (audit-instructions) and Fixed (stale claude-memory health -> audit references across the plugin's skills and README). - README.md: audit-instructions one-question table row + "What each skill does" subsection, distinguished from claude-memory:audit per the D1 partition (content = capability question; hygiene routes out). - Corrected stale claude-memory skill-name references (health -> audit) in the audit, audit-automation-gaps, and audit-permission-grants route-out notes and the README's instruction-layer and migration sections; the claude-memory memory-layer skill was renamed health -> audit. - reference/criteria.md: deduplicated the findings-table header — Output format now points at the Phase D table in SKILL.md (point-don't-copy). - Root README.md regenerated via scripts/generate-catalog.mjs. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Fresh-context verifier passed all eight Phase 5 criteria against the integration commit (0.8.0 bump, CHANGELOG entry, README row, generated catalog, health-to-audit route-out sweep, criteria.md table dedup). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
The setup skill's prerequisite notes still assumed three audit skills, all jq-backed. audit-instructions ships a grep-only scanner (no jq), so several statements were inaccurate: - Frontmatter description: "jq (all audit scripts)" -> "jq (the JSON-parsing audit scripts)"; instruction-scan.sh needs only grep. - jq check: "blocks all three skills" -> blocks the three JSON-parsing audit skills (audit, audit-automation-gaps, audit-permission-grants), with audit-instructions exempted (grep-only). - curl check: "the other two skills still run" -> "the other three skills". - "What this skill does NOT do": added /claude-config:audit-instructions to the audit-skill list. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
Working docs (Brief, plan, design resolution) served their purpose; the approved plan rides in the PR description. Pruned pre-merge per the topic-docs lifecycle. Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
…s (0.9.0) Remove the audit-model-fit skill (merged concurrently via #809), superseded by audit-instructions. Both answer the same question — locally-owned instruction surfaces vs current model capability — and repo doctrine (one question per skill) admits only one. Grounds for keeping audit-instructions: - fuller catalog: eleven checks (I1-I11) with authority tags and evidence tiers vs audit-model-fit's four (C1-C4, which our I6/I8/I9 + partition cover); - the claude-memory:audit hygiene partition (routes memory-layer hygiene out); - an adversarial fresh-context verify pass over every removal proposal; - the user-locked `audit-instructions` name and the user-approved plan (D1-D7). plugin.json (0.9.0, four-skill description) and the CHANGELOG 0.9.0 Removed note landed in the preceding integration commit during the rebase onto main; main's 0.8.0 audit-model-fit changelog entry is kept as history. Root README catalog regenerated (in sync). Refs #800 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
…ed; PR squash-merge collapses history)
|
Claude finished @kyle-sexton's task in 4m 33s —— View job PR Review — feat(claude-config): add audit-instructions skill
Overall this is a well-structured PR. The partition design, check catalog, deterministic spine, and evals are sound. One confirmed ambiguity in the fallback path warrants a small clarification before merge; everything else is clean. Confirmed issue: Codex P2 — ambiguous fallback wording for I1–I5 on memory-layer surfacesThe Codex finding is confirmed. In The phrase "and report them here" is ambiguous. "Them" most naturally refers back to the last plural noun — "checks I1–I5" — making it readable as "run the hygiene checks and surface findings here in the fallback path." A model following this literally could perform the full I1–I5 hygiene audit on Eval case 2 (expectation 3) makes the intent clear — only a pointer should be emitted — but the skill text and the eval diverge.
Suggested fix (one-line change in SKILL.md): -when it is not installed, fall back to the one-line pointer to the official
-CLAUDE.md include/exclude guidance recorded with checks I1–I5 in
-[reference/criteria.md](reference/criteria.md) and report them here.
+when it is not installed, emit only a one-line pointer to the official
+CLAUDE.md include/exclude guidance (recorded with checks I1–I5 in
+[reference/criteria.md](reference/criteria.md)) in the report's Routing
+subsection — do not run I1–I5 on memory-layer surfaces.Minor: PR title version mismatchThe PR title reads Everything else looks goodPartition design (SKILL.md + criteria.md). The I1–I5 / I6–I11 split between Check catalog (criteria.md). All 11 seeds are present, each cites a single decisive line from the official source rather than copying prose, and the recheck triggers are concretely worded (model release, page change). I10's Deterministic spine (instruction-scan.sh). The script is correctly advisory (always Test coverage (instruction-scan.test.sh). Nine cases / 22 assertions covering the key edges: bare prohibitions, rationale-bearing prohibitions (not flagged), I10 phrasing, clean files, multi-file aggregation, nonexistent paths, no-arg invocation, and the missing- Evals (evals.json). Five cases cover the core behavioral boundaries: read-only contract, memory-layer scope routing, plugin-cache exclusion, example-block nuance (format steering vs behavioral scaffolding), and verify-pass demotion. The expectations are binary and unambiguous — they will catch the partition confusion the Codex finding flags if it manifests. Verify pass design. Non-fork subagents (correct — fork would inherit producer context), batch per surface not per finding (keeps dispatch count bounded), counted under the shared ~20-gate. Sound. Stale route-out fix. No remaining
Org-agnostic managed-seam detection. The scope boundary describes managed files without naming specific publishers or manifest paths — correctly implements the repo-agnostic design rule. SummaryOne confirmed ambiguity ( |
|
Claude finished @kyle-sexton's task in 3m 24s —— View job Security Review — PR #870
ScopeReviewed the net diff between FindingsNo security vulnerabilities found. Detail by surface below.
|
|
Merge-drive lane: cannot compose — design collision with already-merged While driving this DIRTY PR's conflict against current
The two skills are functionally the same: identical instruction surfaces (user + project Merging as-is would ship two near-duplicate skills under Leaving for a human/orchestrator decision: dedupe vs. differentiate vs. close-as-superseded. No merge resolution pushed. Note the two skills trace to different issues (#800 here vs. #809's motivation), so whether the split was ever intentional is part of the call. |
An unrelated claude-ops docs PR (#877, closing #864) merged since this branch's last rebase and landed at exactly 0.17.3 — the same version this branch was claiming. Re-bumped claude-ops to 0.17.4 to clear the exact collision (plugin.json auto-merged to an identical-looking "0.17.3" string without flagging a conflict, since both sides happened to write the same literal text for unrelated reasons; caught by diffing main's version history directly, not by trusting a clean auto-merge). CHANGELOG.md split into two sections (0.17.3 for #877's actual change, 0.17.4 for this PR's). Also swept for new open PRs against all 5 plugins post-merge: #870 (feat/800-audit-instructions) newly touches repo-hygiene (claims 0.4.5) and claude-ops (claims 0.17.2) — both below this branch's current claims (0.4.6 / 0.17.4), no collision. source-control (0.15.11), work-items (0.19.1), and guardrails (0.9.6) re-confirmed against current main and every live open PR (#840 0.15.10, #844 0.17.2, #861 0.19.0) — unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K1V3gkrfSf75isB8MiDy3o
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 22a7be5e5c
ℹ️ 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".
…er review
Two P2 review findings on audit-instructions/SKILL.md:
- Scope boundary: the memory-layer fallback contradicted the D1 partition —
"report them here" implied this skill would perform I1-I5 hygiene audits when
claude-memory is absent. Reworded: on memory-layer surfaces the skill runs
ONLY the model-era checks I6-I11 and never runs or reports I1-I5. When
claude-memory is not installed the fallback is a single one-line pointer to
the official include/exclude guidance so the operator knows where that audit
lives — the skill still does not perform it. No reading yields hygiene
findings from this skill.
- Phase A inventory: resolve user-level surfaces under
${CLAUDE_CONFIG_DIR:-~/.claude} (CLAUDE_CONFIG_DIR relocates the whole
~/.claude tree — never hardcode it), and walk the project tree for nested
CLAUDE.md / CLAUDE.local.md in subdirectories, which Claude loads on demand
when it reads files there.
Reworded body only; frontmatter description untouched (666/1536).
Refs #800
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y4RMR3G1rHAdNjxTqenVJL
|
Claude finished @kyle-sexton's task in 4m 13s —— View job PR Review — feat(claude-config): add audit-instructions skill
P2 fixes verified (25c4de1)Both Codex P2 findings flagged in the initial review are correctly resolved. Fallback wording (P2-A). The pre-fix
The backstop
Minor: criteria.md fallback wording is slightly impreciseSKILL.md is now the authoritative spec and is unambiguous. The criteria.md phrasing here ("fall back to … guidance") could still be read as "follow the guidance to produce findings," rather than "emit a pointer and stop." It's secondary context and a reader of both files would get the right picture, but a one-word tightening would make the catalog fully self-consistent: -fall back to the official include/exclude guidance (I1–I5 source below) when it is not.
+fall back to a one-line pointer to the official include/exclude guidance (I1–I5 source below) when it is not — no I1–I5 findings are produced.Not a blocker — SKILL.md governs — but worth a follow-up tightening. Low:
|
|
Claude finished @kyle-sexton's task in 1m 36s —— View job Security Review — PR #870 (HEAD
|
…structions (0.3.2) (#893) Adds the reciprocal scope-boundary note to `claude-memory:audit`: model-era instruction-content findings now route to `claude-config:audit-instructions`, completing the one-way partition that skill declared toward claude-memory in #800. Deliberately split out of the #800 PR to keep each PR single-plugin. Closes #868 ## What ships - **`audit` SKILL.md — new "Scope boundary (route out)" section**: claude-memory owns instruction-layer health (structure, size, placement, index integrity); model-era content fit (prior-model workarounds, over-prescriptive scaffolding, bare prohibitions without rationale, reasoning-echo directives, stale example scaffolding) routes to `/claude-config:audit-instructions`. Seam-phrased per `docs/conventions/seam-phrasing/README.md`: install gate ("when that plugin is installed"), stated fallback (observations stay in the report criteria-free — never a checklist finding, never silently dropped), ownership framing on both sides. - **claude-memory 0.3.2** + CHANGELOG entry per changelog-parity. ## Verification - Local gates green: check-changed-skills (check-skill PASS, 0 errors; 1 pre-existing no-Gotchas warning), changelog-parity `--check` + `--check-bump`, generate-catalog `--check`, validate-plugin-contracts, skill-portability lint, markdownlint. - Fresh-context acceptance verifier: 5/5 criteria PASS — seam-phrasing shape (gate + fallback + ownership) confirmed against the convention doc; zero literal trigger-phrase collisions with audit-instructions' description and no check-ID enumeration; partition texts mirror without contradiction. ## Related - #800 / #870 — the audit-instructions skill and the PR that declared the one-way partition this completes. - `docs/conventions/seam-phrasing/README.md` — phrasing shape followed at the reference site. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Resolves the `library_dir` portability collision: the seam only took literal paths, so pointing it at a corpus root outside the project and home directories (the intended knowledge-corpus consolidation flow) forced a machine-specific literal into user-level settings — exactly the value class the guardrails `hardcoded-path-check` blocks. The two plugins were in direct conflict for the primary supported use case. Closes #798 ## Decision (the issue's open scheme fork) **Env-var indirection + tilde expansion** (options 1 + 2 combined). Machine variance lives in OS user env vars or under home; the stored configuration value stays portable. **ghq-derived scheme (option 3) rejected** as a seam mechanism: it would couple the seam to ghq presence — the same undeclared-hard-dep defect class #531 flags on #438. A ghq-convention user gets the identical outcome by pointing the env var at the ghq-derived path. ## What ships - **`expandPathValue`** (new pure helper, `extraction/lib/run-args.js`): expands a leading `~` (home-relative, incl. `~\` on Windows) and `${NAME}` / `%NAME%` env-var references anywhere in the value. Fail-loud contract: an unset/empty referenced variable throws, and a value that used either form must expand to an absolute path; literal values pass through byte-identical (back-compat). `~user` forms stay literal. - **Launcher wiring** (`run.mjs`): applies the expansion to `--work-root` before building the child env — single expansion point; `YOUTUBE_WORK_ROOT` stays an internal launcher-to-child interface. Errors route through the existing exit-2 + usage path. - **Contract docs**: youtube-digest SKILL.md artifact-landing section documents the portable forms — passed verbatim in single quotes (literal in bash AND PowerShell, so the launcher expands and fails loud where shell-level expansion would silently substitute empty) — and requires agent-written artifact paths to resolve the root once (`printenv NAME` / `$env:NAME`). README option table, plugin manifest option description, and setup mismatch guidance updated to match. - **knowledge 0.9.0** + CHANGELOG entry per changelog-parity. ## Verification - Unit tests: 18/18 in `run-args.test.js` (tilde variants, both env-ref syntaxes, embedded refs, Windows-backslash substitution integrity, unset-var throw, non-absolute throw, literal passthrough). Full extraction suite: 256 passed; the 3 failing suites are the pre-existing `imghash` vendor module-resolution gap, identical on the base commit (249 passed there, delta = the 7 new cases). `tsc --noEmit` clean. - **Acceptance sketch verified empirically** against `plugins/guardrails/lib/path-detection`: `${KNOWLEDGE_CORPUS_DIR}`, `%KNOWLEDGE_CORPUS_DIR%`, and `~/knowledge-corpus` all scan CLEAN; the literal `D:/repos/...` machine path is FLAGGED. - Local gates green: changelog-parity `--check` + `--check-bump`, generate-catalog `--check`, validate-plugin-contracts, check-changed-skills (0 failed), skill-portability lint, markdownlint. - Fresh-context acceptance verifier: 7/7 criteria PASS (back-compat, test coverage, fail-loud path, guardrail acceptance, doc coherence, version/CHANGELOG parity, commit scope). ## Related - #531 — portability umbrella that carried this member; the scheme decision above is recorded there. - #870 — sibling claude-config effort referencing this as the separate `library_dir` indirection item. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tions (0.9.1) (#892) Adds the step-list-culling eval case to `claude-config:audit-instructions` — the second of two absorb candidates recorded in #870 when `audit-model-fit` was superseded. Closes #889 ## What ships - **New eval case `step-list-culled-not-preserved`** (`evals/evals.json`, id 6): a mechanical 9-step numbered procedure must be flagged as an I8 (Model-era re-audit) over-prescriptive finding and culled to intent plus hard constraints — steps encoding genuine ordering, safety gates, or external contracts kept — never preserved verbatim. Modeled on the superseded suite's C2 analog, re-phrased against the I8 catalog. - **claude-config 0.9.1** + CHANGELOG entry per changelog-parity. ## Verification - `check-jsonschema` against `plugins/skill-quality/reference/evals.schema.json`: ok. - Local gates green: check-changed-skills (check-skill PASS, 0 errors), changelog-parity `--check` + `--check-bump`, generate-catalog `--check`, validate-plugin-contracts, markdownlint. - Fresh-context acceptance verifier: 5/5 criteria PASS (case shape/uniqueness, I8 mapping confirmed against `reference/criteria.md`, no mojibake from the historical source, bump + CHANGELOG parity, commit subject). ## Related - #870 — supersede PR that recorded this absorb candidate as follow-up material. - #888 — sibling absorb candidate (`!`-injected surface inventory), tracked separately. - #800 / #809 — originating issue and the superseded `audit-model-fit` PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
New
/claude-config:audit-instructionsskill: a read-only audit of the locally-owned Claude Code instruction surfaces — user + project CLAUDE.md,.claude/rules, skill bodies + context files, agent definitions, prompt-type hooks, output styles — proposing removals/rewrites of instructions current models no longer need, each finding cited to current official prompting doctrine and gated to the human as proposed diffs.Closes #800
What ships
plugins/claude-config/skills/audit-instructions/SKILL.md): Phase A inventory of locally-owned surfaces (plugin cache and managed materializations excluded — findings route to the owning repo), Phase B per-surface subagent lanes with bounded concurrency and a ~20-dispatch cost gate, Phase C fresh-context non-fork adversarial verify pass ("would removing this cause mistakes?"), Phase D report persisted to${CLAUDE_PLUGIN_DATA}/audit-instructions/last-audit.mdwith proposed diffs and a delete-and-watch follow-through section. Report-only; no--fix.reference/criteria.md, v1.0.0, dated, recheck triggers): eleven checks I1–I11 seeded from official doctrine, each with evidence tier (mechanical/behavioral), authority tag, severity default, per-surface applicability, and source URL. Memory-layer partition: hygiene checks I1–I5 route toclaude-memory:auditon CLAUDE.md/rules surfaces (that plugin's C1–C8 own the hygiene layer); model-era checks I6–I11 apply everywhere.scripts/instruction-scan.sh+ test): advisory grep pre-scan seeding I6 (bare prohibitions without rationale) and I10 (reasoning-echo directives) candidates; always exit 0, exit 2 on missing dep,--count; no jq.evals/evals.json, 5 cases): read-only bare invocation, scope-boundary route-out, plugin-cache routing, example-block nuance, verify-pass demotion.audit-model-fit(merged concurrently in feat(claude-config): add audit-model-fit unhobbling audit #809 from the same underlying issue claude-config: add model-upgrade unhobbling audit — sweep instruction surfaces for constraints newer models no longer need #800, racing this branch's live work-item lease): both skills answered the same question — instruction surfaces vs current model capability — and the repo's one-question-per-skill doctrine forbids shipping both.audit-instructionssurvives on grounds recorded in the CHANGELOG### Removedentry: the user-locked name from the naming pipeline (the "constraints/unhobbling" framing was explicitly rejected there), the user-approved plan (D1–D7) versus automated triage only, and a strictly-covering catalog (their C1–C4 ≈ I6/I8/I9 plus the claude-memory hygiene partition, authority tags, evidence tiers, and the adversarial verify pass). Absorb candidates from audit-model-fit (pre-computed inventory injection, a dedicated step-list-culling eval) are noted below as follow-up material.health-skill route-out reference (claude-memory's skill is namedaudit) corrected across audit, audit-automation-gaps, audit-permission-grants, and the plugin README; setup skill prerequisite notes reconciled for the fourth (grep-only) skill.Verification
--check, scanner test 22/22, evals schema validation, full plugin test suite.Related
audit-model-fitPR this change supersedes (its 0.8.0 CHANGELOG entry is preserved as history; absorb candidates —!-injected surface inventory, step-list-culling eval — are follow-up material).library_dirindirection effort (separate item, not folded in).claude-memory:audit(separate-plugin change split out of this PR).Approved PLAN.md (topic slice pruned pre-merge; snapshot as executed)
claude-config-audit-instructions
Brief
TLDR
/claude-config:audit-instructions(issue claude-config: add model-upgrade unhobbling audit — sweep instruction surfaces for constraints newer models no longer need #800): read-only audit sweeping thelocally-owned Claude Code instruction surfaces — user + project CLAUDE.md, skill bodies +
context files, agent definitions,
.claude/rules/**/*.md, prompt-type hooks, output styles —proposing removals/rewrites of instructions current models no longer need.
.work/youtube-watch/how-i-plan-build-and-run-loops-with-clau-aVO6E181cNU/research/findings/context-trimming.md,each check cited to its official source.
without rationale, inferable/redundant content, misplaced only-sometimes-relevant content,
rule-to-hook candidates, show-your-thinking instructions, non-steering example blocks) vs
behavioral (pruning-bar counterfactuals — "would removing this cause mistakes?" — whose
ground truth is observed behavior, not static analysis).
fan out further. Every removal proposal passes an adversarial "would removing this cause
mistakes?" verify pass before reaching the human-gated diff.
findings route out (standards-managed materializations → melodic-software/standards per
sync-manifest; marketplace plugin content → claude-code-plugins issues), never edited in place.
Goal
A claude-config audit-family skill that, on demand or after a model-generation upgrade, tells the
operator exactly which instruction lines across their locally-owned Claude Code configuration are
no longer earning their context cost — with each finding cited to current official prompting
doctrine, classified by how confident the evidence can be, and packaged as a proposed diff the
human approves or rejects — so instruction surfaces shrink as models improve instead of accreting
prior-model-era scar tissue.
Constraints
audit-instructions(this session, via naming pipeline). Family grammar:audit= read-only findings report; mutation never on bare invocation(
docs/PLUGIN-PHILOSOPHY.mdnaming table).--fixin scope for this issue.
CLAUDE.md,
~/.claude/rules, project.claude/). Marketplace plugin cache content isupstream-owned — findings there route to claude-code-plugins issues, never local cache edits.
melodic-software/standards per
standards/distribution/sync-manifest.ymlownership.skill-quality:check(structural lint),docs-hygiene:compress(token brevity),claude-config:audit(config-file mechanics —settings.json, .mcp.json, hooks wiring). This skill owns instruction content vs current
model capability; no overlap restated.
(code.claude.com best-practices, platform.claude.com Fable 5 + prompting best-practices pages)
with verified date and a recheck trigger — model-specific pages get superseded per release.
validate-plugin-contracts gate, commit via
git commit -F - --cleanup=verbatim.Acceptance criteria
plugins/claude-config/skills/audit-instructions/ships; frontmatter description carries thediscovery triggers (post-model-upgrade, "prune my CLAUDE.md", "are my instructions holding
the model back") and the distinguishing object in its first clause.
official source and declares its surface applicability per the claude-memory partition
(hygiene checks I1–I5 route to claude-memory:audit on memory-layer surfaces when that
plugin is installed).
carries the adversarial verify verdict before it is surfaced.
from the editable set and their findings emitted as routing recommendations instead.
is the documented default flow.
entry; PR closes claude-config: add model-upgrade unhobbling audit — sweep instruction surfaces for constraints newer models no longer need #800.
Captured assumptions
docs this session (research pass) — revisit on next frontier model release or when either
prompting page changes (recheck trigger recorded in the skill's sources).
Claude to make mistakes?" and the delete-and-watch loop ("test changes by observing whether
Claude's behavior actually shifts") are Anthropic best-practices doctrine. Boris Cherny's
documented practice is the additive write-it-down loop plus
/checkup(dedup, split bigCLAUDE.md into nested files + skills); a periodic full-delete ritual is unconfirmed in any
primary source — the skill must not cite it as his.
reframing ("tell Claude what to do instead of what not to do"); adding rationale is
separately supported ("give the reason, not only the request"). The check offers positive
rewrite first, prohibition-plus-rationale as the fallback where a genuine hard "never"
survives.
models including Fable-class — the audit flags example blocks only when they are behavioral
scaffolding pinning the model's approach, never format steering; revisit if the
best-practices page drops the recommendation.
cut (InfoQ/VentureBeat coverage) records that narrow evals missed a ~3% regression —
grounding why behavioral findings ship as proposals with the delete-and-watch loop, never
as confident removals.
Out-of-scope
library_dirindirection) — separate item, not folded in.empirical loop; shipping tooling for it is not this issue).
Deferred questions
re-add-on-mistake loop (and cheap A/B for example blocks) as its recommended follow-through,
or stop at the human-gated diff? — defer until /planning:plan; arbiter: USER-RESERVED
(changes report shape and acceptance criterion 3's follow-through).
trigger vs any automation/hook seam) — defer until /planning:plan; arbiter: /architect
(issue text already sanctions "upgrade-triggered or on-demand"; execution-shape decision).
Plan
Standards grounding: repo
CLAUDE.md(fresh-docs mandate, design rules),docs/PLUGIN-PHILOSOPHY.md(naming, config ownership, fresh-eyes checkpoints, two-lane convention posture, prerequisites/degrade,
cross-platform), skill-quality 18-check gate,
scripts/validate-plugin-contracts.mjs, portability-lint,changelog-parity. Precedent map: memory slice
EXPLORE.md(canonical checkout,.work/claude-config-audit-instructions/).Open Decisions (resolved pre-plan; override any at the gate)
claude-memory:auditC1–C8 already implement the hygiene seeds for CLAUDE.md/rules: C2 =deletion test, C1 = line budget, C3 = placement, C5 = inferable content, C8 = enforcement
hierarchy). Partition, not overlap-with-disclaimer:
.claude/rules): this skill runs ONLYthe model-era checks (I6–I11); hygiene checks route out to
claude-memory:audit(gated"when installed", fallback = one-line pointer to the official include/exclude table).
output styles): FULL catalog applies — no incumbent auditor (
skill-quality:checkisstructural lint only).
upgrade', 'too prescriptive', 'instructions the model no longer needs', 'holding the
model back') — NOT 'prune my CLAUDE.md'/'audit CLAUDE.md' ('prune instructions' family is
claude-memory:audit's claimed trigger space).
audit-permission-grants/SKILL.md(names a nonexistent claude-memoryhealthskill;actual name
audit) — same plugin, this PR (Phase 5). A reciprocal boundary note inclaude-memory:audit itself is a separate-plugin change → follow-up issue filed at PR time
(cited in
## Related).reference/criteria.md, versioned + dated, per-check authority tag(mcp-tools idiom) — 11 checks don't warrant machine-health JSONC machinery. Escape hatch
recorded: graduate to
catalog/checks.jsonc+ schema if the catalog grows past ~20 checksor gains self-maintenance counters.
error/warning/infoseverity axis (family precedent) +independent authority tag (
ANTHROPIC-DOCS/TALK/OPINION) + independentevidence tier (
mechanical/behavioral). Three orthogonal axes, no conflation.lines and reasoning-echo phrases), always exit 0,
exit 2on missing dep,--countflag,co-located test — claude-memory deterministic-spine + permission-grants script idiom. It
seeds the mechanical tier; the model layer refines its hits (a grep cannot judge rationale
presence reliably — the script marks candidates, the lane classifies).
new
## [0.8.0]entry)."Recommended follow-through" section prescribing the official behavioral loop
(delete-and-watch: "test changes by observing whether Claude's behavior actually shifts";
re-add-on-mistake as the compounding safety net; cheap A/B against the no-example default
for example blocks). Prose guidance only — no eval tooling shipped (Brief out-of-scope).
Ratified by approving this plan.
phrases carry the post-upgrade moment; no hook/automation (native-first: no lifecycle event
exists for "model changed"; a consumer can pair with /loop or a scheduled routine —
documented as a one-line note, not built).
Phase 1: Skill core — SKILL.md [DONE]
Create
plugins/claude-config/skills/audit-instructions/SKILL.md:name: audit-instructions;descriptionwith distinguishing object in firstclause + single-quoted 'Use when' triggers per D1's capability-framed set ('after a model
upgrade', 'are my instructions holding the model back', 'instructions the model no longer
needs', 'audit instructions', 'instruction audit', 'too prescriptive') + trailing
"Report-only." note;
argument-hint: "[scope] — scope: claude-md|rules|skills|agents|hooks|output-styles|all (default: all)";user-invocable: true;disable-model-invocation: false. Description+when_to_use ≤1536chars (check 2).
boundary (route out) per D1 — every cross-plugin route seam-phrased per
docs/conventions/seam-phrasing/README.md(gate "when is installed" + statedfallback); Arguments; Phase A Inventory — enumerate locally-owned surfaces: user
CLAUDE.md, user rules dir, user skills (
~/.claude/skills) and agents, project CLAUDE.md,project
.claude/(rules, skills, agents, output styles), prompt-type hooks — exactuser-level paths (
~/.claude/ruleset al.) doc-verified at implementation per thefresh-docs mandate; EXCLUDE plugin cache (upstream-owned → findings become routing
recommendations to the owning repo's tracker) and managed materializations
(detection-first, org-agnostic: when the consuming repo's own docs declare a
managed/locally-owned distribution seam — any sync-manifest convention — route managed-file
findings upstream; no such declaration → no exclusion; no publisher names or hardcoded
manifest paths in the skill); Phase B Per-surface lanes — fresh read-only subagent per
surface sharing
reference/criteria.mdwith D1's per-surface check partition, boundedconcurrency 3–5, skills lane fans out per skill, cost gate: confirm with user before total
dispatches (lanes + verifiers) exceed ~20, tier-transparency line naming surfaces run AND
skipped; Phase C Verify pass — removal/rewrite proposals re-judged by fresh-context
NON-FORK subagents prompted to refute ("would removing this cause mistakes? argue the
instruction is still load-bearing") — self-grade class, fresh-eyes mandatory; batched one
verifier per surface (not per finding), counted under the same ~20 dispatch gate; refuted
proposals demoted to
info/kept; Phase D Report — findings table| # | Check | Surface:Line | Severity | Tier | Authority | Finding | Proposed change |,proposed diffs as fenced blocks per finding, "a clean audit is a valid outcome",
"Recommended follow-through" per D6, routing subsection for out-of-scope surfaces; report
persisted to
${CLAUDE_PLUGIN_DATA}/audit-instructions/last-audit.md(claude-memorypersistence idiom) + chat summary; Gotchas (inline
## Gotchas— check 11); What thisskill does NOT do (never edits, never auto-files, not a brevity pass, not memory-layer
hygiene).
--fix: instruction files arethe operator's voice — every change is applied by the human (or explicitly delegated
afterwards), never by this skill."
Sanity Check (runs at the Phase 1–3 commit boundary — check 5 needs criteria.md and the
script to exist before check-skill passes):
CHECK_SKILL_SKILLS_ROOT="$PWD/plugins/claude-config/skills" bash plugins/skill-quality/scripts/check-skill.sh audit-instructionsexits 0 with no FAIL;grep -c "Scope boundary" plugins/claude-config/skills/audit-instructions/SKILL.md≥ 1;grep -Ec "^## Gotchas" SKILL.md= 1.Phase 2: Check catalog — reference/criteria.md [DONE]
Create
plugins/claude-config/skills/audit-instructions/reference/criteria.md:Version: 1.0.0,Last updated: 2026-07-21, recheck triggers (next frontier modelrelease; change to either prompting page; best-practices page change), source URL list.
I1–I11mapping the seeds: I1 line-necessity bar; I2 length/skimmability; I3broad-applicability placement (CLAUDE.md vs skill); I4 inferable/redundant content
(include/exclude table); I5 rule-to-hook conversion; I6 bare prohibition → positive
reframing first, prohibition-plus-rationale fallback for genuine hard nevers; I7
reason-with-request; I8 model-era re-audit (prior-model workarounds, too-prescriptive
skills); I9 example hygiene (keep 3–5 format/tone steering; flag behavioral scaffolding);
I10 reasoning-echo instructions (
reasoning_extractionhazard); I11 CLI-over-MCP.default, surface applicability per D1's partition (I1–I5: non-memory surfaces only,
memory-layer occurrences route to claude-memory:audit when installed; I6–I11: all
surfaces), detection guidance, remediation form, source URL. Point-don't-copy: quote only
the decisive line per source.
Sanity Check:
grep -Ec "^### I(10|11|[1-9]):" reference/criteria.md= 11;grep -c "https://" reference/criteria.md≥ 5; check-skill.sh check 5 resolves the SKILL.md →criteria.md reference (exit 0 overall).
Phase 3: Deterministic spine — scripts [DONE]
Create
plugins/claude-config/skills/audit-instructions/scripts/instruction-scan.sh+…/scripts/instruction-scan.test.sh(skill-local, sibling idiom — NOT repo-rootscripts/) (per D4): scansgiven file paths for I6 candidates (bare
never|do not|don'tlines lackingbecause/since/so-that rationale markers) and I10 candidates (show-your-thinking phrases);
outputs
file:line:check-idadvisory rows;--countflag; always exit 0 (advisory), exit 2if a required tool is missing; POSIX-lean bash, no jq requirement; Windows path via Git Bash
documented in SKILL.md prerequisites. Add the script to
skills/setup/SKILL.mdtoolinventory.
Sanity Check:
bash plugins/claude-config/skills/audit-instructions/scripts/instruction-scan.test.shexits 0;
bash …/instruction-scan.sh --count <fixture>prints an integer and exits 0.Phase 4: Evals [DONE]
Create
evals/evals.json(schemaplugins/skill-quality/reference/evals.schema.json): cases —(1) bare invocation stays read-only (expectations: no Edit/Write of audited files, report
produced); (2) scope-boundary-routes-out (memory-health request → points at claude-memory);
(3) plugin-cache finding routed not edited; (4) example-block nuance (format-steering examples
NOT flagged); (5) verify-pass demotion (refuted removal not presented as error).
Sanity Check:
pipx run check-jsonschema --schemafile plugins/skill-quality/reference/evals.schema.json plugins/claude-config/skills/audit-instructions/evals/evals.jsonexits 0 — the Python toolCI uses (
check-jsonschemais NOT an npm package; prior session verified npx form fails).Phase 5: Plugin integration [DONE]
plugins/claude-config/.claude-plugin/plugin.json: version → 0.8.0; description stringextended to four skills.
plugins/claude-config/CHANGELOG.md: new## [0.8.0]→### Addedentry (+### Fixedfor the stale route-out reference below).
plugins/claude-config/README.md: one-question table row + "What each skill does"subsection.
plugins/claude-config/skills/audit-permission-grants/SKILL.md: fix stale route-out —"
healthskill in theclaude-memoryplugin" → the actualauditskill (D1reconciliation, same plugin).
node scripts/generate-catalog.mjsafter theplugin.json description change (hand-editing drifts; CI runs
--check).Sanity Check:
bash scripts/check-changelog-parity.sh --check-bump origin/mainexits 0;grep -c "audit-instructions" plugins/claude-config/README.md≥ 2;node scripts/validate-plugin-contracts.mjsexits 0;node scripts/generate-catalog.mjs --checkexits 0;
grep -c "health" plugins/claude-config/skills/audit-permission-grants/SKILL.mdreturns 0 for the stale-reference form.
Phase 6: Gates, review, PR [DOING]
Full local gate run (check-skill, contracts, portability, markdownlint, changelog parity,
plugin tests), independent review pass (fresh-context reviewer per repo doctrine), then PR:
title Conventional Commits; body
Closes #800, non-empty## Related(#798 sibling effort,knowledge-corpus#3 digest provenance), approved PLAN.md in
<details>; prune topic slice infinal pre-merge commit. Merge surfaced to user per never-merge boundary.
Sanity Check: all listed gate commands exit 0 locally;
gh pr view --json bodycontainsCloses #800and a## Relatedsection; ci-status green.Appendix: pinned seed catalog (durable copy — source repo's
.work/slice is ephemeral)Source: knowledge-corpus, memory slice
.work/youtube-watch/how-i-plan-build-and-run-loops-with-clau-aVO6E181cNU/research/findings/context-trimming.md(committed in knowledge-corpus#3). Pinned 2026-07-21 so AC2 stays verifiable if that slice
moves:
reasoning_extractionrefusal)Blast radius
LOW — additive markdown skill + one advisory script inside one plugin; no runtime code paths
of other skills touched; plugin.json description/version edits are metadata. Cross-plugin
surface limited to README/catalog rows. No consumer-breaking contract changes.
Stress-test summary
Fresh-context plan reviewer (Step 3) returned 1 CRITICAL / 6 IMPORTANT / 4 SUGGESTION; all
verified against the repo before applying. Applied: D1 rewritten as a complementary partition
(claude-memory:audit C1–C8 verified to already cover the hygiene seeds on memory-layer
surfaces), capability-framed trigger set, seam-phrased route-outs, stale
healthreferencefix folded into Phase 5,
pipx run check-jsonschema(npm package does not exist),generated-catalog regen +
--checksanity, Phase 1–3 single commit unit (check 5 referenceresolution), skill-local script path, pinned seed appendix, org-agnostic managed-seam
detection, verify-pass batching under the shared ~20-dispatch gate, surface enumeration
completed (user skills/agents) with user-path doc-verification note, report persistence to
${CLAUDE_PLUGIN_DATA}. Formal /devils-advocate skipped: blast radius LOW, no triggersmatched.
Execution shape
Sequential, single scope-fenced implementation worker in this worktree (orchestrator never
edits source; work-items:work dispatch posture). Phases 1–3 are ONE commit unit (skill-quality
check 5 requires SKILL.md's criteria.md and script references to resolve), then 4, 5 as
separate commits; 6 closes. No parallel wave: file sets are small and Phase 5 depends on 1–4
outputs.
Sequential fallback: n/a (already sequential).
Open questions
None unresolved — D1–D7 locked above pending gate approval; D6 was USER-RESERVED and is
ratified by plan approval.
Handoff to implementation
User-approval gates
claude-config).
babysit worker tier.
Execution shape ([EXEC-SHAPE] tagged)
shape.
plugins/claude-config/**(includes the audit-permission-grants stale-reffix), root
README.mdONLY vianode scripts/generate-catalog.mjs(generated, neverhand-edited). FORBIDDEN: other plugins' files except read;
.github/**;docs/topics/**(PLAN.md status tags are orchestrator-only).Mechanical work
Commit per phase boundary with
-F - --cleanup=verbatim; run Phase sanity checks at eachgreen checkpoint; divergence from plan → back to /planning:plan review, never push through.
🤖 Generated with Claude Code