docs: apply the fleet-wide prompt-audit against Claude Fable 5.1 - #3770
Conversation
…onale
The repository now uses Claude Code's default worktree base ref. A
worktree Claude Code creates, including a subagent worktree, branches
from the repository's default branch on the remote ("fresh"), per the
official worktrees page fetched 2026-09-02.
- .claude/settings.json: remove the `worktree` key.
- docs/conventions/topic-docs/README.md: drop the head-override
mechanism, its matrix row, its rationale, and the committed-settings
adoption snippet; the mechanism count is now three and the remaining
worktree row describes the default base.
- docs/conventions/topic-docs/CHANGELOG.md: add the 3.1.0 entry.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012fUT7zuZ21RT7zfEHi9JhA
Adds the durable record for the 2026-09 prompt-audit sweep (docs/specs/prompt-audit-skills-2026-09.md) with stated assumptions, corpus, wave plan, and the follow-up inventory the PR body will carry; the topic Brief under docs/topics/ (graduated into the record before the PR); and the path-scoped rule .claude/rules/skill-bodies-state-current-rules.md codifying prompt-audit Group 2 for skill and agent bodies, indexed in AGENTS.md through render-index.sh. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012fUT7zuZ21RT7zfEHi9JhA
…ock so worktree-isolated sessions can load the skills
Invoking a skill from a worktree-isolated session failed before the body
loaded: the harness composes every `!` substitution in a SKILL.md
`## Pre-computed context` block into one shell invocation, and the
isolation guard refuses a compound command that contains git. The
`{ git status --porcelain ... } | head -N` line surfaced first in
/planning:interview; the same shape sat in 50 skills.
Each affected skill now carries a "Repository context. Gather first"
body section modeled on the worktree skill's fix in #1619: individual
Bash calls, one command per call, every `| head -N` bound kept inside
its command, a failure read as an unknown value. Non-git pre-compute
lines (date, probe scripts, gh, detectors) stay where they were. Body
references to the moved values now name the gathered ones; the
overengineering lanes read the branch call's exit status instead of a
sentinel string.
Patch bumps with matching CHANGELOG entries for the 22 plugins touched:
ai-slop, architecture, bugs, claude-ops, code-tidying, codebase-health,
coupling, debugging, discovery, docs-hygiene, implementation,
improvement, mutation-testing, overengineering, planning, prototype,
provenance, repo-hygiene, review, testing, toolchain, verification.
scripts/check-skill-precompute-compose.sh --all now reports 0
violations (was 43).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
….39.52) F1 attend-queue, work-loop, triage, track, work (13 files): issue numbers and incident narration removed F2 track/SKILL.md, due.md, recheck.md, audit.md, work/SKILL.md, decompose/SKILL.md: role-label defaults silent, reference-aligned F3 triage/SKILL.md: re-anchor plugin renamed to discipline F4 track/actions/stats.md: aggregation cap defers to adapter F5 work-loop/reference/c3-ratification-queue.md, work-loop/AGENTS.md: manual gate check moved out F6 work/SKILL.md: old implementation compatibility passage deleted F7 start.md, done.md, audit.md, track/SKILL.md, work/SKILL.md, triage/SKILL.md: migration-relative phrasing states current rule F8 decompose/SKILL.md, work/SKILL.md: roadmap phrasing replaced with constraints F9 work/SKILL.md: MUST-follow thoroughness booster made plain F10 work/SKILL.md, work-loop/SKILL.md: claim-before-dispatch invariant stated once F11 track, work, decompose, ship SKILL.md: trigger lists became intent categories F12 track/SKILL.md, add.md: hardcoded group and verb counts removed F13 onboard-adapter/SKILL.md, live-exploration.md: jira archaeology became present-tense rule F14 decompose/context/container-lifecycle.md: unnamed upstream analog sentence deleted F15 track/actions/recheck.md: maintainer aside removed from pointer F16 track/actions/done.md: section number replaced by gate name setup-T1 sites 6-11 setup/SKILL.md, autonomous-apply.md, capability-tier-axis-migration.md, capability-tier-backfill.md, overlay-ignore-probes.md, setup evals: ADR and issue numbers removed setup-T2 setup/SKILL.md: stays-bespoke justification sentence deleted setup-T4 site 4 setup/SKILL.md: twelve-step count made generic setup-F2 setup/SKILL.md, providers.md: all five bundled adapters named setup-F3 setup/SKILL.md: as-before migration phrasing removed Skipped by lead: F17, F18, F19, F20, F21, F22, F23 Not applied: none Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…(0.34.21) Applied F1 through F25 of .work/prompt-audit-skills/reports/session-flow.md per the lead's decisions: F1 find-handoff rung-1 reference: issue number and deferral story removed F2 workflow continuation: issue numbers removed, reason kept F3-F8 orchestrate SKILL.md, gotchas, sources: nesting-ceiling version timeline, eleven-worker and 88-agent incidents, superseded cap entry, resolved-drift narration removed; rules restated in the present tense with dated stamps kept F9 handoff SKILL.md: past-tense gather rationale removed F10 reconcile: cut-from-V1 phrasing removed F11-F13 orchestrate sources: re-verify stamp and stale-copy rule stated plainly; failed probe narration removed F14 orchestrate SKILL.md and gotchas: clean-return rule stated without the incident F15 handoff Hard rule: caps register lowered, constraint and reason kept F16 handoff order rule: past-tense observation became mechanism F17 running-retro: anecdotal percentages removed F18 show-options buckets: earlier-design measurements removed F19 show-options SKILL.md and buckets: numeric line budget replaced by the shape; eval id 3 updated F20 show-options: sibling probe count removed F21 workflow continuation: I23 reconciliation note replaced by the mechanism paragraph F22 keep-going description: trigger list consolidated into intent categories (check 3 warned on the dropped phrases) F23 workflow philosophy: generic virtue removed F24-F25 find-handoff SKILL.md and rung-3 reference: two directive forms stated as current shapes Skipped by lead: F26 through F36 (withheld) Split out of d1426f084, where these files were swept in from the shared index. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…for the prompt-audit sweep Adds the cross-cutting commits table, the fleet decisions section, and follow-ups F5 through F18 gathered from the 22 audit reports reviewed so far. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… (0.11.15) F1 stateless/SKILL.md, context/purge.md, reference/official-guidance.md: dropped unsourced purge version floor F2 audit/reference/official-guidance.md: replaced supersession story with recheck trigger F3 audit/SKILL.md, context/audit.md, context/fix.md, evals/evals.json: removed health rename archaeology F4 audit/SKILL.md: dropped state-key resolver provenance aside F5 audit/context/audit.md: discovery comment stated present tense F6 audit/reference/criteria.md: removed migration-relative "now" from R1 F7 audit/reference/official-guidance.md: pre-2.1.211 branches restated present tense F8 audit/reference/official-guidance.md: deleted unverified instruction-count figure F9 audit/context/audit.md: per-check step list collapsed F10 audit/context/fix.md: C3 fix step list collapsed F11 stateless/context/purge.md: deleted worked purge-gate anti-pattern Skipped by lead: F12 Not applied: none Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…1 (0.55.40) F1 skills/babysit-prs/SKILL.md: pre-compute note drops issue reference F2 skills/babysit-prs/SKILL.md: autopilot merge tier stated presently F3 skills/commit/SKILL.md: pipe-bound rule without revision history F4 skills/commit/SKILL.md: git-lines pre-compute rule restated F5 skills/commit/SKILL.md: context-clause mandate story removed F6 skills/commit/SKILL.md: harness trailer example unpins models F7 skills/commit/SKILL.md: rung-3 omission narrative removed F8 skills/commit/SKILL.md: key spelling without decision record F9 skills/commit/reference/exec-bit.md: rename arm without decision record F10 skills/pull-request/SKILL.md: gather note drops issue reference F11 skills/pull-request/reference/create.md: section gate scope stated presently F12 skills/pull-request/reference/create.md: pushed mode drops migration phrasing F13 skills/pull-request/reference/merge.md: stale-base guard heading unnumbered F14 skills/pull-request/reference/readiness.md: positional-index incident sentence removed F15 skills/resolve-conflicts/SKILL.md: two pre-compute notes merged F16 skills/setup/SKILL.md: committer-date bullet drops parenthetical F17 skills/setup/reference/apply-convention.md: review-finding ids removed F18 skills/worktree/SKILL.md: two pre-compute notes merged F19 skills/worktree/SKILL.md: orchestrator named instead of issue F20 skills/worktree/SKILL.md: claim sentence drops issue reference F21 skills/babysit-loop/SKILL.md: budget and knob rules unnumbered F22 skills/babysit-loop/reference/cycle-shape.md: preset rule stated presently F23 skills/babysit-loop/reference/promotion-evidence-resolution.md: phase note becomes current rule F24 skills/babysit-loop/reference/telemetry-upsert.md: marker and read-back unnumbered F25 skills/babysit-prs/reference/freshness.md: behind-base heading unnumbered F26 skills/babysit-prs/scripts/tests/guard_contract.py: claim strings edited, markdown regenerated F27 skills/babysit-prs/reference/independent-resolution.md: structured-marker rule drops issue F28 skills/babysit-prs/reference/runbook-cycle.md: displacement rule drops tracked fix F29 skills/babysit-prs/reference/safety.md: false-report incident sentence removed F30 skills/babysit-prs/reference/safety.md: review race stated generically F31 skills/babysit-prs/reference/safety.md: extra-bot-logins limitation stated presently F32 skills/babysit-prs/reference/safety.md: settle-pair consequence restated F33 skills/babysit-prs/reference/safety.md: tier criteria drop issue number F34 skills/babysit-prs/reference/safety.md: tracked-fix sentence removed F35 skills/babysit-prs/reference/safety.md: classifier-denial rule stated presently F36 skills/babysit-prs/reference/safety.md: reachability prerequisite without ticket adjudication F37 skills/babysit-prs/reference/safety.md: never-do tier bullet stated presently F38 skills/babysit-prs/reference/safety.md: enabled-path intro stated presently F39 skills/babysit-prs/reference/stuck-checks.md: misdiagnosis confession removed F40 skills/babysit-prs/SKILL.md: gotchas restated as present rules F41 skills/pull-request/SKILL.md: gotchas intro and verification bullet rewritten F42 skills/pull-request/SKILL.md: monitor checklists at normal register F43 skills/pull-request/reference/monitor.md: autonomy statement at normal volume F44 skills/pull-request/reference/monitor.md: merge-forward rule without narration F45 skills/pull-request/reference/monitor.md: workflow gate without trait claims F46 skills/pull-request/reference/monitor.md: observed-failure sentence removed F47 skills/pull-request/reference/monitor.md: loop fallback stated currently F48 skills/pull-request/reference/readiness.md: pagination rule made portable F49 skills/pull-request/reference/readiness.md: gate incident sentence removed F50 skills/pull-request/reference/readiness.md: anti-patterns become present recap F51 skills/pull-request/reference/create.md: pre-create gate drops change markers F52 skills/pull-request/reference/create.md: attribution comment drops changelog phrasing F53 skills/babysit-prs/reference/cadence.md: fresh-session rule stated presently F54 skills/babysit-prs/reference/safety.md: readiness terminology sentence restated F55 skills/babysit-prs/reference/safety.md: denied-gate heading drops now F56 skills/babysit-prs/reference/independent-resolution.md: callers list drops today F57 skills/babysit-prs/reference/orchestration.md: worker messaging rule stated positively F58 skills/commit/SKILL.md: root-substitution rule stated presently F59 skills/commit/SKILL.md: model placeholder example unpinned F60 skills/commit/reference/exec-bit.md: advisory-prose comparison sentence removed F61 skills/worktree/SKILL.md: hook registration note without edit history F62 skills/worktree/SKILL.md: unset-root rule stated presently F63 skills/worktree/SKILL.md: reap-record class defined by mechanism F64 skills/worktree/context/audit.md: orphan-record mechanism without anecdote F65 skills/worktree/context/cleanup.md: record-reap rule without anecdote F66 skills/setup/SKILL.md: gotchas session-log intro removed F67 skills/babysit-loop/SKILL.md: description drops embedded protocol F68 skills/babysit-prs/SKILL.md: description names intent categories F69 skills/setup/SKILL.md: description tightened to intent categories F70 skills/babysit-prs/reference/freshness.md: stale-base gate made portable F71 skills/pull-request/reference/merge.md: stale-base guard made portable setup-lane T2 skills/setup/SKILL.md: bespoke-probe justification sentence removed Skipped by lead: F72 F73 F74 F75 F76 F77 F78 F79 F80 F81 Not applied: none Also: skills/babysit-prs/scripts/tests/test_skill_contract.py asserts the replacement prose for F2, F23, F35, F36, and F38 instead of the removed markers; no behavior assertion changed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
origin/main now carries a different session-flow 0.34.21, so the bump that 221e8bd introduced moves to 0.34.22 (manifest version and the changelog heading). Findings F1 to F25 and the setup-lane items (setup-T4 site 1, setup-F11) are in 221e8bd; skipped by lead: F26 to F36; not applied: none. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… (0.20.10) A dropped single-quoted trigger phrase with no sibling host now WARNs, naming each phrase and asking the reviewer to confirm the description still names the intent it carried or to restore it, instead of FAILing the run. The bundled prompt-audit guide's Group 2 "trigger-case enumeration" fix replaces near-synonym trigger lists with named intent categories, and a hard failure on every dropped phrase blocked that fix fleet-wide (record follow-up F5). scripts/check-skill.sh: check 3 err -> warn; header and inline comments state the advisory contract scripts/check-skill.test.sh: cases 5, 5c, 8, 10, 11 assert a zero exit with the warning text; 5b (sibling move) unchanged skills/check/SKILL.md, README.md: purpose, WARN list, and gotchas state the advisory contract CHANGELOG.md, plugin.json: 0.20.10 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…5.5)
F1-F7 audit-answers, design-handoff, design, devils-advocate, interview, plan, prd SKILL.md: already applied on branch
F8 interview/context/gotchas.md: dropped minute-count incident measurement
F9 interview/context/gotchas.md: dropped wall-time percentage measurement
F10 interview/context/loop.md: round-boundary rule without incident narration
F11 interview/SKILL.md: pointer no longer promises measurement
F12 questionnaire/SKILL.md: hand-off rule without now-that framing
F13 prd/SKILL.md, prd/evals/evals.json: route name is /planning:interview
F14 draft-goal-condition/SKILL.md: dated workflow-row verification record
F15 interview/context/loop.md: dated unattended-detection verification record
F16 wayfind/SKILL.md, wayfind/evals/evals.json: unattended condition declared, never sniffed
F17 draft-goal-condition/SKILL.md: dated routines research-preview label
F18 wayfind/context/tracker-mechanics.md: dated gh flag-shape verification
F19 interview/SKILL.md: handoff on signal, not self-estimate
F20 interview/SKILL.md: outgrew-session cue without context-filling
F21 interview/context/loop.md: handoff bullet fires on signal
F22 interview/templates/checklist.md: persist note without overflow cue
F23 draft-goal-condition/SKILL.md: trigger phrases collapsed to intents
F24 devils-advocate/SKILL.md: trigger phrases collapsed to intents
F25 setup/SKILL.md: migration bullet without retirement justification
F26 plan/SKILL.md: dropped unresolvable lane citation
F27 interview/context/loop.md: free-text flag without changelog aside
F28 interview/context/loop.md: capture rule scoped per mode
F29 plan/SKILL.md: Step 3 gotcha carries one instruction
F35 plan/SKILL.md: karpathy priming replaced by one sentence
L1 setup/SKILL.md: deferred-backend check states the reason
Skipped by lead: F30, F31, F32, F33, F34, F36.
Not applied: none.
Consequential edits: interview/SKILL.md Step 4 renamed its pointer from
"context-pressure-flush discipline" to "handoff discipline" so the reference
F19 emptied does not dangle; tests/interview-defenses.test.sh refreshed the
four section digests covering the sections F11, F15, F19, F27, and F28
changed (Stance, Step 4, open-question register, Unattended path), with the
pinned defenses re-read and unchanged. L1 was applied at the check flow's
step 3 ("vault_backend"), the only deferred-backend step in this file, with
its numbering kept.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…1 (0.16.2) F1 skills/implement/SKILL.md: replacement already present, unchanged F2 skills/implement/SKILL.md: drop plugin-split relative phrasing F3 skills/implement/context/gotchas.md: heading reads Failure patterns F4 skills/implement/SKILL.md: state scope discipline, drop karpathy F5 skills/implement/SKILL.md: research before declaring impossible F6 skills/implement/SKILL.md: lower caps emphasis, four sites F7 skills/implement-dispatch/SKILL.md: eight MUST markers plain prose F8 skills/implement-dispatch/SKILL.md: resident default, no context polling F9 skills/implement-dispatch/SKILL.md: drop convention-registry trigger aside F10 skills/implement/SKILL.md: keep task granularity, drop mechanics F11 skills/implement/context/gotchas.md and skills/implement/SKILL.md: remove one-line reminders block F12 skills/implement/context/gotchas.md and skills/implement/SKILL.md: route new lessons to memory slice F13 skills/implement/SKILL.md: self-review adds two items F14 skills/implement-dispatch/SKILL.md: keep working while wave runs L1 skills/implement/context/bugfix.md and skills/implement/context/refactor.md: drop absent dotnet skill pointers Eval: skills/implement/evals/evals.json case 4 asserts the new wording Skipped by lead: F15, F16, F17, F18, F19, F20 not-applied: none (F1 evidence absent because the replacement was already in place) Setup lane: no entry for implementation Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…13.13) F1 skills/check/SKILL.md: description now names Go F2 skills/check/context/dotnet.md: dropped uninstalled dotnet-msbuild skill references F3 skills/check/SKILL.md, skills/lint/SKILL.md: removed "as before" migration phrasing F4 skills/check/SKILL.md, skills/lint/SKILL.md: skip cells lose word-count ceiling F5 skills/check/SKILL.md: dropped settled-not-parked design preface F6 skills/check/SKILL.md: atomicity gotcha drops maintainer note F7 skills/lint/SKILL.md: dropped sibling-plugin precedent sentence F8 skills/check/SKILL.md: convention example cited by URL F9 skills/check/context/powershell.md: merged duplicate -notlike bullets F10 skills/check/context/python.md: dropped encoding authoring rule F11 skills/check/context/typescript.md: dropped bare-npx spawn note F12 skills/check/context/bash.md: dropped CI-failure diagnosis coaching Skipped by lead: F13, F14, F15, F16, F17, F18. Not applied: none. Setup lane: no entry for toolchain. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
F1 skills/quality-gate/context/close-out.md: rung-1 incident narrative removed F2 skills/code-review, security-review, quality-gate: eight archaeology sites cleared F3 skills/code-review, security-review: cross-repository PR number dropped F4 skills/security-review/SKILL.md: zizmor deferral stated once F5 skills/fanout/context/fix-pass-mode.md: legacy record keyed on shape F6 skills/fanout/SKILL.md: coverage clause unpins the model F7 skills/code-review, security-review: V2 heading marker dropped F8 skills/fanout/context/findings-normalization.md: stage headings drop model tiers F9 skills/security-review/SKILL.md: criteria block rewritten F10 skills/quality-gate/context/spec.md: as-of-this-writing phrasing removed F11 skills/fanout/context/findings-normalization.md: model assignment stated by role F12 skills/quality-gate/SKILL.md: allowed-tools grants match body commands F13 skills/fanout: roster count read from leaf-roster.md F14 skills/fanout/SKILL.md: description names the intent category F15 agents/ci-log-auditor.md: report length as audience framing setup-lane T2 skills/setup/SKILL.md: stays-bespoke justification sentence deleted Evals: fanout cases 28, 32, 33, 35 describe the legacy record as digest-less Skipped by lead: F16, F17, F18, F19, F20, F21 Not applied: none Landed by the lead from the applier's on-disk edit set after the applier hit a usage limit mid-gate; every gate re-run green by the lead. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…(0.6.4) F1 skills/confirm/SKILL.md: /verify invocability stated as current rule F2 skills/confirm/context/refactor.md: diff base named by rule F3 skills/measure/SKILL.md: plan-artifact tiering as the only rule F4 skills/measure/context/metrics.md: git show and count as separate calls F5 skills/measure/context/metrics.md: every count from a command F7 skills/setup/SKILL.md: deferred-backend step without roadmap promise F10, L1 skills/measure/context/metrics.md, performance.md: absent dotnet and cloudflare skill sections removed setup-lane F7 skills/setup/SKILL.md: maintainer HTML comment removed Evals: confirm case 9 asserts the reworded invocability rule Skipped by lead: F6 (superseded by L1), F8, F9 Not applied: none Landed by the lead from the applier's on-disk edit set after the applier hit a usage limit mid-gate; every gate re-run green by the lead. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ADR for the prompt-audit sweep Record: Results by wave rows for session-flow, source-control, work-items, claude-memory, planning, implementation, toolchain, review, and verification with their commits, applied and withheld ids, and the check-3 phrases each deliberately dropped; the skill-quality check-3 commit in the cross-cutting table; follow-up F19 (plugin-quality's hand-computed context zone); F6 and F10 additions from the wave-3b audits; the method note that subagents ran on Claude Opus 5 once the Fable model limit refused subagent turns. ADR 0028 supersedes ADR 0004 D-1 and D-3 for the skill-body audit lane and the ADR 0006 promotion gate (as retained by ADR 0007) for applied prompt-audit findings; leaves ADR 0005 and 0008 accepted and names the operator's PR-time call on them. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…7.4) F1 debug/SKILL.md: pressure line replaced with effort statement F2 debug/SKILL.md: priming pass and bullets removed F5 debug/SKILL.md: inert shell frontmatter key removed F6 debug/SKILL.md: description trigger list generalized to intents F7 debug/SKILL.md: duplicated load-bearing artifact paragraph removed F8 debug/SKILL.md: duplicated hypothesise gate sentence removed F9 debug/SKILL.md: hypothesis-grounding paragraph stated once F10 debug/SKILL.md: discovery glob cost paragraph removed F11 debug/SKILL.md: Boy Scout sentence replaced by focused-diff rule F12 debug/templates/checklist.md: Phase 6 skip criterion corrected F14 debug/reference/ecosystem-debugging.md and templates/checklist.md: em dashes replaced Skipped by lead: F3, F4, F13 Not applied: none Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…19.4) F1 research/SKILL.md: disciplines stated at normal volume F2 research/SKILL.md: purpose drops thoroughness booster F3 explore/SKILL.md: purpose drops read-more-code default F4 explore/reference/ecosystem-discovery.md: seam replaces hardcoded ecosystem list F5 agents/researcher.md, agents/intent-tracer.md: inherited pool described not enumerated F6 agents/explorer.md, agents/researcher.md, agents/intent-tracer.md: nesting history becomes session allowance F7 research-deep/SKILL.md: nesting history becomes session allowance F8 explore/reference/dispatch.md, research/context/dispatch.md: payload failure stated present tense F9 explore/reference/dispatch.md: ladder anecdote removed, rule kept F10 explore/SKILL.md, explore/reference/dispatch.md, research/context/dispatch.md: migration-relative phrasing removed F11 trace-intent/SKILL.md: code-shape exclusion states own reason F12 trace-intent/context/artifact-shape.md: maintainer decision record deleted F13 trace-intent/context/evidence-categories.md: provenance and future-auditor note deleted F14 agents/explorer.md, agents/researcher.md, agents/intent-tracer.md: sibling-configuration paragraphs deleted F15 agents/researcher.md, agents/intent-tracer.md: refused-Write rule carries own reason F16 research/context/discipline.md, research/context/gotchas.md, research/SKILL.md: model-trait claims replaced by behavior F17 research/context/discipline.md: Mandate restatements lowered to prose F18 research/SKILL.md: duplicate small-task principle deleted F19 explore/SKILL.md, research/SKILL.md: allowed-tools maintainer parenthetical deleted F20 agents/explorer.md: summary length guidance made qualitative F21 research-deep/SKILL.md: tier chosen from table not doubt F22 setup/SKILL.md: skill enumerations now name trace-intent F23 setup/SKILL.md: apply step stops restating gitbook constraint L1 setup/SKILL.md: check step drops roadmap phrasing setup-F7 setup/SKILL.md: maintainer HTML comment deleted setup-F8 setup/SKILL.md: spawn-depth windows lose history narration Skipped by the lead: F24, F25, F26 (all flag-only). Not applied: none. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
F1 write/SKILL.md, context/template.md: corrected stale /bugs self-name F2 scan/context/findings-report.md: severity-rubric pointer names holder F3 scan/context/lenses.md, scan/SKILL.md: folded lens 5 into Step 1 F4 scan/context/verification-gate.md: gate requirement at normal volume F5 write/SKILL.md, context/template.md: lowered caps emphasis six sites F6 write/context/template.md: deleted negative-constraint reminders list F7 write/SKILL.md: deleted body trigger-conditions section F8 write/SKILL.md: deleted duplicate investigation-boundary bullet F10 scan/SKILL.md: dropped the V1 version markers F11 write/context/template.md, write/SKILL.md: deleted the worked example F12 write/SKILL.md: consolidated description triggers into two intents F13 write/SKILL.md, context/template.md, README.md: work-items hand-off Skipped by the lead: F9, F14, F15, F16, F17. Not applied: none. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
F1 write/context/organize.md, write/context/write.md: removed undefined config key references F2 diagnose/context/loop.md: dropped Boy Scout cleanup invitation F3 run-e2e/context/e2e.md: GIF recording follows recording key F4 run-e2e/context/e2e.md: route missing CLI to user F9 run-e2e/SKILL.md: dropped the /verify release history F10 run-e2e/context/e2e-config.md: dropped preserves-current-behavior clause F11 run-e2e/context/e2e.md, run-e2e/SKILL.md: consolidated disagreeing after-testing handoff F12 run-e2e/SKILL.md, run-e2e/context/non-ui.md: dropped caps route restatements F13 run-e2e/SKILL.md: semantic-locator gotcha stated positively F14 run-e2e/context/e2e.md: dropped caps on two instructions F15 audit/SKILL.md: dropped this-cycle and not-yet F16 audit/SKILL.md: platform-skip gotcha states its boundary F17 write/context/write.md: vertical-slice rule leads positive F18 write/context/write.md: approval gate scoped to material F19 write/context/write.md: refactor stays inside the slice F20 write/context/organize.md: deleted hollow Current state section F21 diagnose/context/loop.md: regression reason stated once only F22 audit/SKILL.md: description triggers consolidated to intents F23 run-e2e/SKILL.md: description triggers consolidated to intents F24 write/SKILL.md: description triggers consolidated to intents F27 diagnose/context/investigate.md, diagnose/context/loop.md, plan/SKILL.md, run-e2e/context/e2e.md, write/context/organize.md, write/context/write.md: deleted phantom marketplace skill references Skipped by the lead: F5, F6, F7, F8, F25, F26, F28. Not applied: none. Evals: run-e2e case 1 drops the @latest install literal; diagnose case 2 lowercases ALL to all. Applied from the 2026-09 prompt-audit against Claude Fable 5.1 (docs/specs/prompt-audit-skills-2026-09.md). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
….31.3) F1 skills/setup/SKILL.md: toggle probe reads manifest defaults setup-T4-site-2 skills/setup/SKILL.md: dropped hardcoded guard count setup-T2 skills/setup/SKILL.md: removed bespoke-flow justification sentence Skipped by lead: none. Not applied: none. Version renumbered to 0.31.3 rather than a 0.30.5 patch bump because origin/main already carries guardrails 0.31.2 and the bump gate requires a strictly higher number. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
….13.2)
T1: use-your-skills, pick-for-the-problem, reason-dont-recite, sweep-all,
mind-your-maxims, do-your-research, wait-what SKILL.md - removed
maintainer-facing design and roadmap notes
T2: sweep-all/SKILL.md, reuse-or-replace/SKILL.md,
sweep-all/reference/inheritance-preflight.md - collapsed rules restated
several times per file
F1: sweep-all/SKILL.md - dropped the tracker issue number
F2: sweep-all/reference/batched-pass.md, reference/inheritance-preflight.md -
kept verification record, dropped narration
F3: sweep-all/reference/batched-pass.md - states the current cap rule
F4: sweep-all/SKILL.md - description drops degrade-token protocol detail
F5: do-your-research-deep/SKILL.md - removed unbaselined model-tier routing
clause (subsumed by F8's span)
F6: point-dont-copy/SKILL.md - threshold two without external figure
F7: sweep-all/reference/batched-pass.md - checkpoint attributed to one tier
F8: new context/fan-out.md, do-your-research-deep/SKILL.md,
recheck-against-upstream-deep/SKILL.md - shared fan-out contract extracted
F9: do-your-research/SKILL.md, do-your-research-deep/SKILL.md - consolidated
near-synonym trigger phrases
F10: setup/SKILL.md, setup/evals/evals.json - dropped pre-rename trigger
phrases
F11: tighten-your-output/SKILL.md - added the readability-over-brevity guard
Skipped by the lead: T3, T4, T5, F12.
Not applied: none.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…9.7) F1 reference/model-adaptation/fable-5-1.md: new Fable 5.1 adaptation chapter F1 skills/fable-5/SKILL.md: route and describe the new chapter F1 skills/fable-5/evals/evals.json: added case trigger-fable-5-1-adaptation-chapter F2 skills/skill-authoring/reference/precompute-context.md: documented injection failure semantics F3 skills/fable-5/context/communication.md: unbriefed-decision block in plain clauses F3 skills/fable-5/SKILL.md: same three-clause decision format F4 skills/fable-5/context/communication.md: kept search findings that explain the answer F5 skills/fable-5/context/orchestration.md: dropped the numeric delegation floor F5 skills/fable-5/SKILL.md: same delegation trigger without the floor F6 skills/boris/SKILL.md: removed the refactored-form maintainer comment F7 skills/boris/SKILL.md: removed the redundant when_to_use key F8 skills/skill-authoring/SKILL.md: trigger synonyms became intent categories F9 skills/skill-authoring/reference/precompute-context.md: dropped changelog-version archaeology F10 skills/skill-authoring/reference/verification-loops-in-skills.md: dropped pre-v2.1.216 history F11 skills/update/SKILL.md: removed the do-not-auto-fire sentence F12 skills/skill-authoring/reference/precompute-context.md: dropped the re-render version pin Skipped by the lead: F13, F14, F15, F16. Not applied: none. F1 applied as apply-modified: the live Prompting Claude Fable 5.1 page was fetched 2026-09-03 and every section of the new chapter re-verified against it. The two claims that page does not carry, retaining instructed verification and the forced tool_choice and thinking-block facts, are kept with the bundled claude-api migration reference marker the lead specified. Setup lane: no setup skill in this plugin. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
….41.12) F1 audit-install-state/reference/scope-and-handoffs.md: deleted stale zero-byte repo example F2 plugins/context/scope-semantics.md: cite PROJECT_ROOT resolution, not lines F3 audit-install-state/SKILL.md: four incident narratives become stated mechanisms F4 audit-install-state/reference/evidence-discipline.md: eight source-audit retellings become present rules F5 audit-install-state/reference/name-schemes.md: port-lock trap stated structurally, not narrated F6 audit-install-state/reference/scope-and-handoffs.md: separation and calibration rules lose archaeology F7 audit-performance/SKILL.md: allowlist explains purpose, not newness F8 audit-skill-visibility/SKILL.md: four measured counts become stated mechanisms F9 inventory/SKILL.md and reference/extraction.md: failure shapes stated in present F10 changelog/SKILL.md: Phase 4 states goal, not steps F11 changelog/context/classification-rubric.md: pinned model name becomes a placeholder F12 known-issues/context/action-search.md: gh auth prohibition reframed positively F13 known-issues/context/action-quality.md: deleted the unintegrated-sources maintainer list F14 lanes SKILL/config/refresh/restart-consumer, morning-brief/SKILL.md: every tracker reference removed F15 lanes/SKILL.md and context/config.md: prompt storage stated in present F16 lanes/SKILL.md: telemetry-upsert summary points at --help F17 lanes/SKILL.md and context/restart-consumer.md: two migration-relative sentences made current F18 lanes/context/restart-consumer.md: dropped non-shipping path citation and history F19 observability/SKILL.md: steps 2-5 name their references F20 observability/context/operator-setup-collector-daemon.md: duplicate-mechanism prohibition reframed with reason F21 observability/context/data-sources.md: three roadmap notes become current boundaries F22 observability collector-daemon and retention: dropped provisioning issue links F23 plugins/context/converge.md and sync.md: dropped brief-decision citations, kept rules F24 plugins/context/gotchas.md: dropped incident tallies and issue number F25 plugins/context/sync.md: three migration-relative diffs made current Skipped by lead: F26, F27, F28, F29, F30, F31, F32, F33, F34, F35, F36, F37, F38 Not applied: none Setup lane: no claude-ops items to apply (T5, T6, T9 all withheld) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
F1 skills/principles/SKILL.md: description drops three same-intent phrases Skipped by lead: none Not applied: none Applied by the lead directly (one hunk). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…5.1 (0.7.26) F1 skills/setup/reference/legacy-statusline-detect.md: drop wrong shim version boundary F2 reference/reader-contract.md: replace TODO tracker pointer prose F3 reference/reader-contract.md: defer consumer counts to registry F6 skills/setup/SKILL.md: fix lowercase sentence start setup-T2 skills/setup/SKILL.md and both synced references: delete ADR retirement-schema justification sentence setup-T3 skills/setup/SKILL.md and unwrap-before-compose.md: state failure mode, not incident setup-T7 skills/setup/SKILL.md and unwrap-before-compose.md: lowercase all-caps emphasis words Skipped by lead: F4, F5. Not applied: none. The two synced reference files were edited at their registered canonical source under plugins/context-guard and re-synced, per scripts/cross-plugin-source-registry.txt. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… (0.40.31) F1 audit-instructions/reference/criteria.md: Authority axis admits HOUSE value F2 audit-instructions/reference/conflict-criteria.md: dropped issue numbers and rewrite narration F3 audit-instructions/reference/criteria.md: short-orientation fence loses issue citation F4 audit/reference/audit-checklist.md: dropped stale listing-budget measurement F5 audit-permission-grants SKILL.md and reference/criteria.md: scope-filter rationale loses trackers F6 audit-pass/reference/run-state-and-resumability.md: lease bounds use declared thresholds F7 audit-pass/reference/doctor-handoff.md: skillOverrides stated as documented key F8 setup/SKILL.md and evals/evals.json: prerequisites name every calling script F9 audit-instructions/reference/criteria.md: model scope widened to fable-5-1 F10 audit-pass SKILL.md and eight reference files: removed prior-version defect narration F11 audit-instructions/reference/criteria.md: dropped scope history and ADR F12 audit-instructions/reference/conflict-criteria.md: dropped prior-edition gap narration F13 audit-instructions/SKILL.md: sibling caveat loses drift history F14 audit-instructions, audit-pass, audit-prompting-postures SKILL.md: caps downgraded to prose F15 audit-instructions/SKILL.md: description triggers become intent categories F16 audit-permission-state/SKILL.md: description triggers become intent categories F17 audit-instructions/context/persist-findings.md: dropped as-before and older phrasing F18 persist-findings.md and reference/criteria.md: gate cited as conditional warning F19 audit-instructions/context/phase-a-inventory.md: example no longer narrates its motive F20 audit SKILL.md, procedures.md, validation-categories.md, required-permissions.md: dropped Phase 1.0 before-narration F21 audit/SKILL.md: removed the observed-false-negative anecdote F22 audit-automation-gaps/SKILL.md: principles stated as principles F23 audit-automation-gaps/SKILL.md: delegation guidance no longer contradicts itself F24 audit-permission-grants/reference/criteria.md: dropped rename rationale and erratum F25 audit-permission-state SKILL.md and reference/criteria.md: gotchas stated as failure modes F26 audit-prompting-postures/SKILL.md: removed the inventory-defect anecdote F27 audit-prompting-postures/SKILL.md: removed the test-suite assertion restatement F28 draft-auto-mode-rules/SKILL.md: dropped experiment provenance and design record F29 unhobble/SKILL.md: philosophy rubric cited by URL Skipped by the lead: F30, F31, F32, F33 (withheld as flags). Not applied: none. The setup lane records no claude-config item beyond withheld T8. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
F1 skills/reduce/SKILL.md: gotchas intro drops failure-history framing F2 skills/reduce/SKILL.md: unverified-scan rule without the incident Skipped by lead: F3 (fleet gather-block wording), F4 (house style) Not applied: none Applied by the lead directly (two hunks). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ble 5.1 (0.3.2) F1 skills/curate-language/SKILL.md, README.md: planning relationship stated currently F2 skills/curate-language/SKILL.md: ladder deferred to the contract F3 skills/curate-language/SKILL.md: unreachable fallback paragraph removed Skipped by lead: F4 (house style) Not applied: none Applied by the lead directly. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… (0.7.32) F1 reference/reader-contract.md: drop issue-number provenance pointer F2 reference/reader-contract.md: drop three-release hysteresis chronology F4 reference/reader-contract.md: drop withdrawn-citation editor note F5 reference/reader-contract.md: restate floor as four-part record F6 reference/reader-contract.md: merge auto-compaction threshold paragraphs F7 reference/reader-contract.md: delete percentage-key retirement tripwire F8 reference/reader-contract.md: drop roadmap apparatus around trigger rule F9 skills/setup/SKILL.md: state stale-snapshot FAIL branch once F10 skills/setup/SKILL.md: cite hook-config convention by URL F11 both synced references: drop sync-script and registry paths F12 reader-contract.md and skills/setup/SKILL.md: drop v1-schema framing F13 reference/reader-contract.md: drop duplicated cloud measurement sentence F14 reference/reader-contract.md: lowercase all-caps emphasis words setup-T2 skills/setup/SKILL.md: delete ADR retirement-schema justification setup-T3 skills/setup/SKILL.md, statusline-edit.md: failure mode, not incident setup-T7 skills/setup/SKILL.md: lowercase all-caps emphasis words setup-F19 skills/setup/SKILL.md: drop owner-approval parenthetical Skipped by lead: F15, F16, F17. Not applied: none. Already applied by the rate-limit-guard applier in 0763a8c and not repeated here: F3, and the setup-lane T2, T3, and T7 hunks inside the two synced reference files. F7's tripwire is carried into this release's CHANGELOG entry, per the lead's apply-modified decision. The two synced reference files were edited at their canonical source under plugins/context-guard and re-synced, so the rate-limit-guard copies are in this commit's pathspec. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
107 conflicts. CHANGELOG.md (45): both sides kept, the branch's renumbered entries above main's newer ones so every file stays newest-first. plugin.json (45): the branch's higher version. Skill bodies (17): the branch's prompt-audit rewrite is the base and main's later change lands on top: the references/ to reference/ rename (kindle-dedrm, plugin-quality) applied through the branch's edits; machine-health's new argument-hint kept; code-tidying's reworked dissolve-comments gather block and trimmed gotchas taken from main; session-flow's shape-2 handoff text taken from main with the branch's present-tense path-form wording; visualization's code-shape sketches and product-UI guidance added to the branch's description and section; skill-quality's trimmed description taken from main with "advisory" restored on check 3; the planning Stance digest recomputed for the merged section. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GjdFagSG1CvQop76ZxM28k
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @kyle-sexton's task in 8m 58s —— View job Code review in progress
|
|
Claude finished @kyle-sexton's task in 3m 34s —— View job Security review complete
No security-relevant surface found. This PR is a fleet-wide documentation/prompt sweep (skill bodies, context/reference files, agent definitions, CHANGELOGs, and plugin.json version bumps across 74 plugins). I reviewed the diff for authorization/access-control gaps, injection surfaces (command, SQL, path, template), and unsafe credential/token/secret handling — none apply here. The only non-markdown/non-metadata changes are comment-only and test-assertion edits:
GitHub Actions/workflow hardening is out of scope for this lane (zizmor's advisory lane per the skill's own instructions); I did not see any workflow file changes in this diff regardless. No findings to report. |
|
Last security-reviewed head: |
|
Claude has reviewed this PR 1 time. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bbb22490dd
ℹ️ 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".
…nomy's relative citations CI lint: the mechanical merge resolution joined the branch's last CHANGELOG entry to main's next heading with no blank line in 45 files (MD022, MD032); each heading now has its blank line. CI test-linux: scripts/validate-plugin-contracts.mjs forbids the autonomy plugin naming the org or a vendor, and the audit applier had converted six convention and sibling citations in reference/guardrails.md, reference/prerequisite-resolution.md, and skills/setup/context/prerequisite-resolution-slice.md to marketplace URLs; they return to the relative form. The record's follow-up F8 notes the revert, so those sites stay under that follow-up. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GjdFagSG1CvQop76ZxM28k
…seRef rule Codex on PR #3770: code-tidying dissolve-comments still ran `git branch` in its pre-computed block after the audit moved that read into a body Bash call (the block, taken from main in the merge, tripped the #1619 composition check), so the pre-compute line goes; ai-briefing's slide-generation.md pointed at `references/audience-defaults.md` and machine-health's two porting stubs at `references/windows/check-catalog.md`, both directories that do not exist, so all three now name `reference/`. New path-scoped rule `.claude/rules/worktree-base-ref.md`, indexed in AGENTS.md: this repository sets no `worktree.baseRef` (withdrawn in topic-docs convention 3.1.0 so worktrees branch from the remote default branch), and a review comment that reads the removal as a merge regression is not grounds to restore it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GjdFagSG1CvQop76ZxM28k
…reword a prose line the portability lint reads as GNU date CI on d2ca729: docs/CATALOG.md was stale against the merged plugin descriptions (regenerated with scripts/generate-catalog.mjs); scripts/skill-count-claim-exemptions.txt still exempted "the other three skills still run" in claude-config's setup skill, a sentence the audit reworded, and the gate fails on a stale row; and scripts/check-shell-portability.sh matched "commit date falls after the requested `--since`" in improvement's hotspots.md as a `date -d` invocation, so the line now says "is dated after". Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GjdFagSG1CvQop76ZxM28k
…ted sed pattern CI shellcheck (SC2016) on the sed pattern the audit-noise detect test uses to lift the grep segment out of the skill's gather bullet: the pattern carried literal backticks inside single quotes. The anchor on ` | grep ... | head` is enough on its own, so the pattern drops the backtick matches; it still extracts `grep -E '\.md"?$'` from the current SKILL.md line. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GjdFagSG1CvQop76ZxM28k
…e sibling bumps Main's fleet-wide prompt audit (#3770) rewrote descriptions and changelog text across the plugins this branch also touches, and #3771/#3773 moved their versions past the numbers taken here. Every conflict was in a version line, a changelog heading, or prose the audit rewrote. The manifests take main's descriptions whole, since this branch changed only their version fields, and each version is renumbered strictly above main's: claude-ops 0.42.10, mutation-testing 0.3.16, verification 0.6.5. The changelogs keep both sides in order, with this branch's entry under its new number. The testing plugin's change is dropped rather than merged. Its one edit added a presence gate and a code-metrics fallback to the marketplace-skill section in `write/context/organize.md`, and the audit deleted that whole section as naming plugins no installed marketplace carries. There is nothing left to gate, so testing returns to main's content, version, and changelog exactly. The cross-plugin pointer this branch adds now lives only in `verification:measure` and `mutation-testing:principles`. The `verification:measure` metrics bullet takes both sides: main's worktree-safe `git show` sequence stays as the manual fallback, under this branch's `/code-metrics:audit-<measure>` pointer. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DVwWe4VVyx57dQ1AL7m35p
… predicate per extension (#3762) Closes #3751 ## Summary The guardrails PostToolUse `Write|Edit` row spawned its dispatcher, loaded the library and parsed the payload on every write, and all three verifiers early-exited unless the file carried one of five extensions. The row now spawns only for those files. Guardrails 0.32.4 to 0.32.5. ## Fix - `hooks.json`: the `Write|Edit` PostToolUse row carries one handler per extension the verifiers accept (`.md`, `.sh`, `.bash`, `.ps1`, `.psm1`), each with an `if: Edit(*.<ext>)` predicate. The `if` field holds exactly one rule, so one row per extension is the documented shape, the same one the six formatter plugins already use. Command, timeout and `statusMessage` are identical across rows. - `run-guards.test.sh`: pins the predicate set to the union of the three verifiers' own `case "$FILE"` gates, read from their source, in both directions. An extension added to a gate without an `if` row, or an `if` row with no gate, fails the suite. - README budget entry, CHANGELOG entry, patch bump. **The issue's other two rows take no predicate, and the README entry records why.** `typos-format` scans every file type including extensionless ones, and its README already records the absence of an extension gate as deliberate; `eol-normalizer` resolves every path through the consuming repository's `.gitattributes` with no extension list. Their cost on a `.txt` is work they are meant to do, not a spawn that early-exits, so the issue's "nothing to say about" premise holds only for the trio. ## Verification - `scripts/affected-tests.sh --run`: `run-guards.test.sh` PASS=77 FAIL=0. Against the un-gated `hooks.json` the new cases fail (5 FAILs, checked by stashing the file), so the pin is live. - Measured on this host, N = 15, spawn floor 3.2 ms, real file text in every payload: | Per tool call | before | after | |---|---|---| | PostToolUse `Write` of an in-repo `.txt` | 86.1 ms (26.9 S) | 0 processes | | PostToolUse `Write` of an in-repo `.md` | 95.8 ms (29.9 S) | unchanged | The after figure is not a faster process: the predicate is evaluated before the spawn ("The hook command only runs if the tool call matches the pattern", hooks reference `if` field, raw `hooks.md` fetched 2026-09-05). The issue's acceptance asked for a PATH-shim spawn counter per hook; a shell suite cannot observe Claude Code's pre-spawn evaluation, so the pin is on the predicate set instead, and the no-spawn rests on the quoted documented semantics and the fleet's existing measured use of the same shape. - `scripts/check-changelog-parity.sh --check-bump origin/main`, `scripts/check-killswitch-hoist.sh`, `scripts/check-hook-exec-form.sh`, `scripts/check-hook-userconfig-argv.sh`, `scripts/validate-plugins.sh`: all pass. shellcheck, shfmt, markdownlint, typos clean on the changed files. ### Renumbered 0.32.4 to 0.32.5 #3770 landed a fleet-wide prompt audit that bumped 64 plugins, taking guardrails 0.32.4 for itself. `main` was merged in, this change renumbered above it, and the CHANGELOG conflict resolved so #3770's released 0.32.4 entry stays intact with this change's entry above it. The README budget heading moved with it. All gates re-run on the merged head. ## Related - Refs #3685 (the trio's remaining cost once gated), #3749 and #3750 (where the audit figures were taken), #3770 (took 0.32.4). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019DaWEB8Daq1xAXy2Xj1Pme --- _Generated by [Claude Code](https://claude.ai/code/session_019DaWEB8Daq1xAXy2Xj1Pme)_ --------- Co-authored-by: Claude <noreply@anthropic.com>
… fills (#3765) Closes #3755 ## Summary The per-session observability report's "Rewrote" block reads a `changed` boolean that the reference sink already copies from `data.changed`, and no producer sent it, so the block rendered the no-data line in every report. The eight rewriting formatters now send it. ## Fix - **`lib/rewrite-guard.sh`** (synced into its six carriers): the take records a byte verdict in `HOOK_REWRITE_CHANGED`: `true` when the file differs from the snapshot, `false` when identical or when no rewrite was attempted (begin never ran), and empty when begin could not snapshot. The first take's verdict survives a later take, so a producer that emits after its take still reads it. Five new cases in `lib/rewrite-guard.test.sh` (22/22). - **Six carriers** (`bash-format`, `biome-format`, `eol-normalizer`, `go-format`, `powershell-format`, `ruff-format`): `build_data_json` adds `changed` from the verdict and omits the key when it is unknown, never guessing. Every arm that emitted telemetry before taking the disclosure (biome, go and ruff clean arms; go, powershell and ruff findings and tool-break arms) now takes first, with stdout unchanged. `bash-format` takes unconditionally before its emit so a run where shfmt never ran (no `.editorconfig` opt-in) reports `false` rather than nothing. - **`markdown-format`** derives it from the same "Attempted: N fixes" count line that drives its user-channel disclosure; **`typos-format`** from whether `applied` is non-empty, and its clean arm sends `false`. Both omit the key on skip arms where the tool never ran. - **Eight `docs/conventions/hook-telemetry/data/*.schema.json`** gain the optional `changed` boolean (additive rule). - **`claude-ops`**: the observability context now renders a row per `changed == true` envelope, `_nothing rewritten_` when rows carry the key and every value is false, and the no-data line only when no row carries it; the suite fixture carries one `changed: true` and one `changed: false` row, and the case that asserted the block empty now asserts the file is named (60/60). - Nine patch bumps with CHANGELOG entries: bash-format 0.7.37, biome-format 0.6.35, eol-normalizer 0.6.36, go-format 0.3.39, powershell-format 0.7.38, ruff-format 0.6.36, markdown-format 0.11.45, typos-format 0.6.43, claude-ops 0.42.10. `actionlint` is named in the issue but does not rewrite files, so it is left alone. ## Fix (2): a description regression on `main` Merging `main` after #3770 surfaced a defect that is not this change's. #3770 reverted `plugins/claude-ops/.claude-plugin/plugin.json`'s `description` to a pre-#3750 state, dropping 730 characters: the per-session hook event log, the setup action's log-root and self-ignoring-guard wording, the sink's per-session routing, and `audit-performance`'s Windows kernel-object census. Sentence-level comparison of the pre-#3770 and post-#3770 descriptions shows #3770 contributed **no new wording** to this field, so it is a clobber rather than an edit. The conflict resolution restores the full text and regenerates `docs/CATALOG.md` from it, since the catalog is generated from plugin descriptions and would otherwise fail `scripts/validate-plugins.sh`. ## Verification - `scripts/affected-tests.sh --run`: all 14 selected suites passed or were skipped. Suites run with their tool on this host: bash-format 54/54, eol-normalizer 54/54, ruff-format 63/63, typos-format 148/148, markdown-format 174/174, rewrite-guard 22/22, claude-observability 60/60. Each pins `changed` on a rewriting run and a no-op run. - Re-run on the merged head after the #3770 renumber: rewrite-guard 22/22, claude-observability 60/60, typos-format 148/148. - Not verified on this host: biome-format and go-format skip (no `biome`, no `goimports`), and powershell-format's behavioral cases skip (no PSScriptAnalyzer). Their new cases assert `false` on the existing lint-finding fixtures (already-formatted input) and `true` on a new unformatted fixture for biome and go; powershell asserts the key is a boolean, since its formatter settings decide the value. The `test-linux` lane is where those run. - `scripts/sync-rewrite-guard.sh --check`, `scripts/check-changelog-parity.sh --check-bump origin/main`, `--check` , `scripts/check-shell-portability.sh origin/main`, `scripts/validate-plugins.sh`: all pass on the merged head. shellcheck, shfmt, markdownlint, typos clean on the changed files (the one shfmt note in `markdown-format.test.sh` is a pre-existing line this PR does not touch). ### Renumbered 0.42.9 to 0.42.10 #3770 bumped 64 plugins and took claude-ops 0.42.9. `main` was merged in, this change renumbered above it, and the CHANGELOG conflict resolved so #3770's released 0.42.9 entry stays intact with this change's entry above it. None of the eight formatter plugins were touched by #3770, so their numbers are unchanged. ## Related - Refs #3750 (the report and the `changed` route), #3408 (the formatter prologue where this emission would otherwise be repeated; landing it in the shared rewrite guard is the same consolidation for the six carriers), #3410 (the schema additions are hand-maintained until that lands), #3770 (took 0.42.9 and dropped the description restored here). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019DaWEB8Daq1xAXy2Xj1Pme --------- Co-authored-by: Claude <noreply@anthropic.com>
…e at 1.1 (#3769) Closes #3758 Its two bases (#3765, #3762) have merged, `main` is merged in, and the diff is reduced to this change alone. ## Summary The reference sink files an envelope per session only when the envelope carries a session id, and only the nine claude-ops audit hooks sent one, so the per-session report's "hooks fired" table never listed the formatters or the guards. The library now puts the payload's correlation keys on the envelope spine for every producer, at contract 1.1. ## Fix - **`lib/hook-utils.sh`** (synced into its 17 carriers): `hook::emit_telemetry` reads the payload the producer buffered (`HOOK_TELEMETRY_PAYLOAD` when set, else `INPUT`, the variable every fleet hook assigns from `hook::buffer_stdin`) and copies `session_id`, `prompt_id`, `tool_use_id` and `agent_id` onto the envelope between `duration_ms` and `data`, each only when present as a plain id (`[A-Za-z0-9._-]+`), on both the builtin and the jq path. No jq, no subprocess, no producer change. `schema_version` reads `1.1`. - **`docs/conventions/hook-telemetry`**: `envelope.schema.json` gains the four optional properties; the README gains a "Correlation keys" section and rewrites the sink-routing note; the contract CHANGELOG records 1.1 as an additive minor. - **Sink** (`plugins/claude-ops/hooks/hook-telemetry-sink.sh` and the repo-local `.claude/hooks/` copy): routes on the spine `session_id` first and falls back to `data.session_id`, so envelopes from 1.0 producers keep their route. - **Seventeen carrier bumps** with CHANGELOG entries: actionlint 0.8.37, autonomy 0.22.28, bash-format 0.7.38, biome-format 0.6.36, claude-ops 0.42.11, context-guard 0.7.44, desktop-notification 0.6.31, eol-normalizer 0.6.37, go-format 0.3.40, guardrails 0.32.7, instruction-placement 0.11.28, markdown-format 0.11.46, powershell-format 0.7.39, rate-limit-guard 0.7.35, ruff-format 0.6.37, source-control 0.55.54, typos-format 0.6.44. ## The keys are selected by depth Review found that searching the raw payload takes the leftmost match anywhere in it. Two failures, both reproduced against the first version of this branch: - `{"session_id":"sess-real","tool_input":{"options":{"prompt_id":"NESTED-WRONG"}}}` emitted `"prompt_id":"NESTED-WRONG"`. - `{"tool_input":{"n":{"session_id":"NESTED-WRONG"}},"session_id":"sess-real"}` emitted `"session_id":"NESTED-WRONG"` — not a mis-join, the row lands in **another session's** `sessions/<id>.jsonl`. Cutting the search at the first nested container fixed those and broke something else: the documented payload places `tool_use_id` **after** `tool_input` (`session-event-log.sh` says so in its early-stop note, "tool_input closed, tool_use_id still to come"), so the cut dropped it on every tool event, and the fixture added alongside listed the four ids up front so it passed anyway. So the keys are selected by depth instead. Escapes are neutralized, the payload is split on the quote character, and the alternating fields are walked — even fields structure, odd fields string bodies. A string body is kept only at depth 1, so nested objects collapse to brace-and-colon rubble carrying no quotes and no nested key can match, while a root key after a container is still reached. The walk costs one step per string, not one per byte, and what it renders is short, so the four searches run over a small string whatever the payload size. ## Bounded, and the gap is filed The neutralizing passes are superlinear in escape count. Per emit, escape-bearing payload, this container: | payload | ungated walk | shipped | |---|---|---| | 16 KiB | 4 ms | 4 ms | | 64 KiB | 13 ms | 4 ms | | 128 KiB | 38 ms | 6 ms | | 512 KiB | **486 ms** | **22 ms** | The walk is gated at 65536 bytes; past it the payload takes the head cut. That stays safe at any size — nothing nested is reachable — but it is not complete: a root key after the first container is omitted above the gate, so `tool_use_id` is dropped on payloads over 64 KiB. `session_id` and `prompt_id` lead the payload, so routing is unaffected. **#3784** carries that gap with these measurements and two candidate approaches, and the code comment points at it. ## Verification - `lib/hook-utils.test.sh` **303/303**. The suite discriminates against both wrong versions: **3 failures against the un-anchored original** and **3 against the truncating fix**. New cases cover the documented key order (`tool_use_id` after `tool_input`), a nested decoy with no root key, a nested key ahead of the root one, decoys inside a root array, a multi-megabyte payload, and the size-gate boundary. - `hook-telemetry-sink.test.sh` 41/41, `api-error-audit.test.sh` 11/11, `run-guards.test.sh` 99/99, `claude-observability.test.sh` 60/60, `lib/rewrite-guard.test.sh` 22/22. - `scripts/affected-tests.sh --run`: one failure, not this PR's — `block-hook-bypass.test.sh`, "symlink: a genuine temp write in the same root stays allowed". Reproduced identically on unmodified `main` at `73eb4d98` in a clean worktree (PASS=601 FAIL=1). - `scripts/sync-hook-utils.sh --check`, `scripts/sync-rewrite-guard.sh --check`, `scripts/check-changelog-parity.sh --check-bump origin/main`, `--check`, `--check-preserved origin/main`, `scripts/validate-plugins.sh`, `scripts/check-shell-portability.sh origin/main`, `scripts/check-killswitch-hoist.sh`: all pass. shellcheck clean; the one shfmt hunk is pre-existing (`main` carries 49, this branch 1, and it is not in the changed region). ## Renumbered three times #3770 (fleet-wide prompt audit) bumped 64 plugins and took eight of the numbers this branch claimed; #3762 and #3765 then took guardrails 0.32.5 and claude-ops 0.42.10; #3781 then took guardrails 0.32.6. Every one of the seventeen was re-derived as the next patch above `origin/main` and verified against `git show origin/main:plugins/<p>/.claude-plugin/plugin.json` after each move. Each CHANGELOG conflict was resolved by keeping the released entry at its own heading and lifting this change's entry above it; `--check-preserved origin/main` passing is what proves no released entry was dropped. ## Related - Refs #930 (closed, the thread this finishes), #3750 (the nine-hook step and the sink route), #3765 and #3762 (the bases, now merged), #3770 / #3781 (took claimed numbers), #3784 (the size-gate gap), #3410, #3408. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019DaWEB8Daq1xAXy2Xj1Pme --------- Co-authored-by: Claude <noreply@anthropic.com>
…1218 pointers Two lint-lane failures, both in prose this branch wrote. check-purged-em-dashes.sh declares plugins/rate-limit-guard/README.md a purged surface, and the rewritten multi-account paragraph reintroduced two em dashes. Restructured into sentences: the four absence cases are now an explicit list introduced by a colon, and the "no consuming lane acts on it yet" clause is its own sentence. No parentheses, en dashes, or spaced hyphens substituted, as the gate's own text forbids. Three TODO(#1218) pointers are replaced with present-tense statements of what is not built, in docs/conventions/loop-lane/README.md, the reader contract's invariants bullet, and the unreleased 0.8.0 changelog entry. Issue #1218 is closed as not planned, so a TODO aimed at it is a stale pointer rather than lineage, and #3770's audit had already replaced the reader contract's original pointer for that reason. The single (Refs #1218) lineage mention in the 0.8.0 entry stays; older entries and main's own text are untouched. Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QKU99jG34EDYBz1y2g5vVF
…1218 pointers Two lint-lane failures, both in prose this branch wrote. check-purged-em-dashes.sh declares plugins/rate-limit-guard/README.md a purged surface, and the rewritten multi-account paragraph reintroduced two em dashes. Restructured into sentences: the four absence cases are now an explicit list introduced by a colon, and the "no consuming lane acts on it yet" clause is its own sentence. No parentheses, en dashes, or spaced hyphens substituted, as the gate's own text forbids. Three TODO(#1218) pointers are replaced with present-tense statements of what is not built, in docs/conventions/loop-lane/README.md, the reader contract's invariants bullet, and the unreleased 0.8.0 changelog entry. Issue #1218 is closed as not planned, so a TODO aimed at it is a stale pointer rather than lineage, and #3770's audit had already replaced the reader contract's original pointer for that reason. The single (Refs #1218) lineage mention in the 0.8.0 entry stays; older entries and main's own text are untouched. Co-authored-by: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QKU99jG34EDYBz1y2g5vVF
…ting-budget-fraction Conflict: .claude/settings.json. main removed the `worktree.baseRef` block in #3770's fleet-wide prompt audit; this branch added `skillListingBudgetFraction`. Both intents kept: the block stays removed, the new key stays. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VPLatLkg4329L8eyfxhuMa
…-floor-work-class Three conflicts, all from main advancing under the branch: - plugins/work-items/.claude-plugin/plugin.json: main shipped 0.39.64 and 0.39.65 while this branch held 0.39.63. Renumbered to 0.39.66. - plugins/work-items/CHANGELOG.md: this branch's entry moved to [0.39.66] and main's [0.39.65] / [0.39.64] entries kept beneath it, unchanged. - skills/triage/context/apply-outcome.md: this branch rewrote the work-class pairing rule to admit C1-C3 only; #3770's prompt audit rewrote the same paragraph solely to strip bare issue references. Kept this branch's rule and applied main's editorial rule to it, dropping the `(medley#1677)` reference. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VPLatLkg4329L8eyfxhuMa
…3939) No related issue: the follow-up ledger of the prompt-audit sweep is tracked by the record `docs/specs/prompt-audit-skills-2026-09.md`, not by an issue. ## Summary Closes the follow-up ledger of the 2026-09 prompt-audit sweep (#3770): every item F2 to F24 in `docs/specs/prompt-audit-skills-2026-09.md` `## Follow-ups` now names its closing commit (20 lines prefixed "Closed"), F3 and F14 are recorded as not PR deliverables with owners, and F25 is inventoried. 43 plugins change across 121 commits plus 4 merge commits from `origin/main`. The small defects are fixed directly, the mechanism changes ship as scripts with tests, the verification debt is stamped with dates and recheck triggers, and the surfaces the sweep did not audit (plugin-level `reference/` trees, hooks prompt text, the output style, `.claude/rules`, `CLAUDE.md`, `AGENTS.md`) were audited with the same method and applied the same way. Reports and decisions per follow-up are under the author's `.work/prompt-audit-follow-ups/` and are summarized in the record's `## Follow-up PR` section. ## Fix - One commit per plugin per follow-up, subjects naming the follow-up id; each carries a patch bump and a CHANGELOG bullet ending in `(prompt-audit follow-up F<n>)`. - Mechanism scripts with co-located tests: `work-items/scripts/lane-telemetry-upsert.sh` (F11), the synced `compose-statusline-wiring.sh` in context-guard and rate-limit-guard (F15), context-guard setup's pre-computed probes (F17), the synced `plugin-quality/scripts/context-zone.sh` with `sync-context-zone.sh --check` and `--check-bump` wired into CI's plugin-gate job (F19), `mutation-testing/scripts/suppression-lint.sh` (F21), pull-request Gate 5 parameterized on the discovered reviewer (F7), raw-URL cross-plugin citations and a link-free convention name in autonomy (F8). - F6: every undated harness or upstream claim the record listed is stamped with a date and a recheck trigger, pointed at a dated owner record, or removed (122 rows: 80 stamped, 32 corrected, 9 removed, 1 no edit); the fleet gather-block claim has one dated record on the worktree skill. - F10: every suite the record listed as failing on the author's Windows host now passes there after a portable fix, in five clusters; three recorded symptoms were real cross-platform defects (provenance `list-corpus`, knowledge's fence gate console encoding, education's teach workspace across worktrees) and several Windows-only test vacuums (a CRLF from jq that made checks pass without inspecting anything). One residual is verified on CI's Linux lane: repo-fleet-hygiene `audit-fleet`'s 33 load-sensitive GitHub-evidence cases. - F2: `.claude/rules`, the rendered `AGENTS.md` rules table, the one output style, and the user-facing strings of 70 hook scripts audited and applied; no `hooks.json` declares a prompt-type hook. - The topic Brief graduated into the record as `## Follow-up PR` and `docs/topics/prompt-audit-follow-ups/` was pruned. - One renumber pass lifts every branch-added CHANGELOG heading above `origin/main`'s current version for the plugins main overtook; merge commits compose both sides of every content conflict (named in each merge commit message). ## Verification - The four `scripts/check-changelog-parity.sh` modes (`--check`, `--check-bump origin/main`, `--check-preserved origin/main`, `--check-order`): pass at the branch tip. - `check-purged-em-dashes.sh`, `check-skill-precompute-compose.sh --all`, `render-index.sh check --file AGENTS.md`, `validate-plugin-contracts.mjs`, `sync-context-zone.sh --check` and `--check-bump origin/main`, `check-shell-portability.sh origin/main`, `check-docs-only-gate.sh --check`, `check-skill-count-claims.sh --check`, `check-contract-slice-prune.sh --check-diff origin/main`, `typos`, repo-wide markdownlint: pass. - `check-cross-plugin-source-drift.sh --check` reports the same 20 unregistered clusters on a clean `origin/main` checkout on the author's Windows host, so that gate's verdict is CI's Linux lane. - `scripts/affected-tests.sh --run` could not finish on the author's host under load; every suite each follow-up touched was run directly and is green there, and each dispatched change was checked by a fresh-context verifier against the diff and the run before commit (per-cluster reports name the counts). CI runs the whole corpus. - Per plugin, before its commit: `check-skill.sh` on every touched skill, `check-skill-precompute-compose.sh --paths`, `check-evals-quality.sh` where evals changed, shellcheck and the portability check on every script, markdownlint, typos, and the `ai-slop` detector on every touched file. ## Related - Record: `docs/specs/prompt-audit-skills-2026-09.md` (`## Follow-ups`, `## Follow-up PR`). - Sweep PR: #3770 (merged as f62c1b3, this branch's fork point). - ADR 0005 and ADR 0008 stay accepted; nothing here retires them. - Pre-prune commit for the contract slice: `fe3ada293f429da5416d89aa11555f4082222416` (`gh api "repos/{owner}/{repo}/contents/docs/topics/prompt-audit-follow-ups/PLAN.md?ref=fe3ada293f429da5416d89aa11555f4082222416" --jq .size`). - Not filed: two playbooks work items the F2 audit surfaced ("Explore a deliberate thinking-off lane on Opus 5" and "Revisit push-down routing lanes when Opus 5 injection data lands") sit under "Not filed" in the author's `.work/prompt-audit-follow-ups/reports/F2-playbooks-reference-applied.md` for the playbooks maintainers to file through `/playbooks:update`; filing public issues was outside this PR's ask. - F25 (`babysit-readiness-gate.sh` badge grammar) is inventoried in the record, not delivered here. - Not applied here: the F2 root-surfaces finding that `.claude/rules/pr-body-contract.md` is the one rule with no YAML frontmatter. That file is sync-manifest-managed by `melodic-software/standards` (CI's managed-files-guard refuses direct edits), so the frontmatter belongs in that repository and lands through standards-sync. ## Follow-ups (verbatim from the record) Inventoried here as they arise and shipped in the PR body verbatim. - F1. Write one superseding ADR covering every accepted ADR decision this audit contradicted (at minimum ADR 0004 D-1 and D-3, ADR 0006's applied-set gate); decide with the operator whether ADR 0005 and ADR 0008 are also retired. <!-- spellchecker:off --> - F2. Closed in 3cf0d69 (`.claude/rules` and the `AGENTS.md` row they render), b618ed3 (the one output style), c93b18c, 2ba9047, and fc0d3b7 (hooks prompt text in guardrails, disk-hygiene, and autonomy); no `hooks.json` declares a prompt-type hook, so the hooks surface was the user-facing strings of 70 hook scripts, 65 of them clean. Reports and decisions for both surfaces sit under `.work/prompt-audit-follow-ups/` beside the six reference-tree ones. In progress: the six plugin-level reference trees are audited and applied (performance 61d3eb9 and d0ce988; autonomy 67e8244; architecture 1ca9d3c; coupling cdcee0e and review 075fc0a for the same topic-docs pointer regression; playbooks 4e2a0f4; context-guard 4906eed and 3452edf; rate-limit-guard b4264ea), with reports and decisions under `.work/prompt-audit-follow-ups/`; hooks prompt text, output styles, `.claude/rules`, `CLAUDE.md`, and `AGENTS.md` are still to audit. Audit the out-of-scope prompt surfaces the same way: hooks prompt text, output styles, `.claude/rules`, `CLAUDE.md`, `AGENTS.md`, and the plugin-level `reference/` trees that skills load on invocation (`autonomy`, `architecture`, `performance`, `playbooks`, `rate-limit-guard`, `context-guard`); the performance auditor notes that `snapshot` and `verify` both mandate reading `plugins/performance/reference/harness-integrity.md`, which likely mirrors the archaeology the skill bodies shed. <!-- spellchecker:on --> - F3. Not a PR deliverable: the measurement runs through `claude-config:unhobble` on demand, and the operator owns when to run it. Behavior measurement beyond the wave-1 spot-check: route to `claude-config:unhobble`. - F4. Done before the PR: `docs/topics/prompt-audit-skills/PLAN.md` graduated into [Brief](#brief) and the slice was pruned (contract-slice prune gate); the PR body names the pre-prune commit. - F5. Closed in b8225f2 (the two residual surfaces). `plugins/skill-quality/scripts/check-skill.sh` check 3 hard-fails any trigger phrase dropped versus the base ref. That blocks prompt-audit's documented fix for trigger-case enumeration (near-synonym lists become intent categories). Change check 3 to a warning, update its tests, and record the deliberately dropped phrases per skill in this record. Must land before the PR so the skill-quality CI gate passes. Landed in a694011; two out-of-scope surfaces still describe check 3 as a hard-FAIL gate and should follow: the comment at `plugins/docs-hygiene/skills/audit-noise/scripts/emit-findings.sh:220` and the eval fixture `plugins/docs-hygiene/skills/audit-noise/evals/fixtures/negation-trigger-fence.md:9` (the docs-hygiene commit corrected the same script's header comment and its eval case 12). <!-- spellchecker:off --> - F6. Closed in six verifier groups, one commit per plugin: G1 446c276 (session-flow) and 47bace6 (source-control, which also owns the fleet gather-block record at `skills/worktree/reference/gather-block.md`, "The pre-compute block runs as one shell invocation"); G2 e564b9b (disk-hygiene), bf70d79 (performance), 4e0e4d8 (rate-limit-guard), 3ee8271 (work-items); G3 203fb36 (claude-memory), c0275b4 (claude-config, which owns the `pre-v2.1.211` record), 7659e32 (claude-ops); G4 5404ba7 (context-budget), 4c792b9 (context-guard), 4532e37 (plugin-quality), 177b179 (skill-quality), 993ce43 (instruction-placement); G5 0d49296 (computer-use), f344689 (overengineering), 875b8da (improvement), 70dfe3e (code-tidying), 69a8819 (codebase-health), 1aa1dcf (architecture), caaa69c (mcp-tools), 22d20a4 (docs-hygiene), 1fd6561 (repo-hygiene); G6 da9b14a (autonomy, basis by class), 809617c and 32ebdee (discovery, six records in `reference/parent-contract.md`), 0bb93b9 (discipline), 577c359 (testing), 16a2604 (playbooks), 634ef1b (review), 69913c1 (planning). Across 122 claim rows: 80 stamped, 32 corrected and stamped, 9 removed as unverifiable from any reachable source, 1 needing no edit; 36 skill sites outside source-control now point at the gather-block record. Reports `F6-G1.md` to `F6-G6.md` under `.work/prompt-audit-follow-ups/reports/` carry the per-claim basis and recheck trigger. Verify and stamp the undated harness-behavior claims the audit flagged as `I12` items (session-flow: `/recap` trigger and the Skill-invocable allowlist, the usage-limit reset surface, `cleanupPeriodDays` default, `/clear` transcript and scheduled-task behavior). Each becomes a four-part upstream-drift record or a doc pointer. Collected per plugin as the waves run. source-control adds: GitHub `mergeStateStatus` precedence and `baseRefOid` staleness (freshness.md), the permission-mode and wrapper-strip claims in safety.md, and the ScheduleWakeup clamp, `/loop` expiry, Monitor-on-resume, and sandboxed-GraphQL claims across babysit-prs, babysit-loop, pull-request, and worktree. disk-hygiene adds four undated harness-version claims (`safety-model.md:262`, `:313`, `:315` on 2.1.207 and 2.1.218 `pluginConfigs` scope and PowerShell hook firing; `clean/SKILL.md:382` on the v2.1.211 auto-mode prompt). performance adds the undated benchstat `-delta-test` claim at `snapshot/SKILL.md:94-96`, and `plugins/performance/reference/harness-integrity.md` (out of audit scope, mandated reading for `snapshot` and `verify`) likely carries the run archaeology the four skill bodies shed (see F2). <!-- spellchecker:on --> - F7. Closed in b37b769 and e8f2f90 (Gate 5 keys on discovered reviewer logins; vendor shapes live in `reference/reviewer-shapes.md` as dated records; `scripts/babysit-readiness-gate.sh` still couples to one vendor's badge grammar and is its own follow-up). `pull-request` hardcodes one vendor's review bot (login, emoji signalling, timing) in `reference/monitor.md` gotchas and `reference/readiness.md` Gate 5, against the file's own "discover actors, don't hardcode them" rule. Parameterize Gate 5 on the discovered reviewer login and move the vendor shapes into a dated reference-shapes note with a recheck trigger. - F8. Closed in f5d41ed (source-control), 2bd0a7c (review), 2173f85 (playbooks), and 38025be (autonomy, link-free by class). `source-control` cites sibling-plugin files by relative path (`../../../../autonomy/...`, `../../../../../prompts/...`) in `babysit-loop/reference/promotion-evidence-resolution.md` and `babysit-prs/reference/safety.md`. Those resolve only in the marketplace checkout, never in an installed plugin. Convert to the raw-URL form the plugin already uses at `babysit-loop/SKILL.md:40`. review adds: `agents/ecosystem-specialist.md:22`, `fanout/context/fix-pass-mode.md:7`, `quality-gate/context/close-out.md` (four sites), and `quality-gate/context/spec.md` (three sites) cite marketplace `docs/` paths or sibling-plugin files by relative path. review also adds two undated claims to F6: the bundled `/code-review` and managed Code Review service tiers in `quality-gate/context/pr.md` and `code.md`, and the "built-in `/security-review` is unusable in CI" claim in `security-review/SKILL.md`. The autonomy applier converted six of that plugin's own convention and sibling citations to marketplace URLs; those were reverted to the relative form before the PR because `scripts/validate-plugin-contracts.mjs` forbids the autonomy plugin naming the org or a vendor, so the autonomy sites stay under this follow-up. - F9. Closed in e6fe01a. `planning/skills/wayfind/SKILL.md` pre-compute silently coerces a non-string `container_label` to `work-map`, which `context/tracker-mechanics.md` says is a configuration error that must never proceed. Make the pre-compute fail loud or surface the raw value, matching the doc. - F11. Closed in 9dcae99 and d670543. `work-items` carries the same 60-line lane-telemetry upsert as a fenced shell block in `work-loop/reference/telemetry-upsert.md` and `attend-queue/reference/telemetry-upsert.md`, transcribed by the model on every cycle, with a classifier-fallback section asking it to re-derive gate order by hand (prompt-audit Group 4, an LLM executor for a deterministic plan). Extract it into `plugins/work-items/scripts/lane-telemetry-upsert.sh` with a co-located test, taking lane, instance, repo, issue, and body-file arguments and exiting non-zero on each refusal branch; both references then invoke it. Deferred from the audit because it is a mechanism change, not a prose hunk. work-items also adds six undated harness and `gh` claims to F6 (classifier refusals of `permissions.allow` widening and of the `reclaim` call, the compound-shell block, sandboxed GraphQL 403). - F12. Closed in the 22 plugin commits of 2026-09-05 that name F12 (51 skills; claude-memory stateless keeps the key because it injects through a fenced block). `shell: bash` frontmatter selects the shell for `!`...`` injections. Skills whose pre-compute block became empty when the git lines moved into body calls still carry the key inert (debugging F5 found one). Sweep every SKILL.md: where no injection remains, drop the key; `check-skill.sh` check 19 stays green either way. - F13. Closed in 2846cd1. `playbooks:boris` presents Fable 5 as the current top model and its launch-era classifier behavior as current (`skills/boris/SKILL.md:58,133`); upstream has not published Fable 5.1 tips. Re-sync through `/playbooks:update` when it does, and until then qualify the Model row "as of the 2026-07-24 sync". - F14. Not a PR deliverable: the whole-pack regeneration is the playbooks maintainers' separate run through `/playbooks:update`; the `fable-5-1.md` chapter exists, the F8 tail closed under F8, and the F6 tail closes under F6. The `fable-5` playbook's own regeneration trigger ("a model-version change", `skills/update/SKILL.md:39`) has fired with Fable 5.1. The audit adds the guide-backed minimum, a `fable-5-1.md` adaptation chapter; regenerating the whole pack from Fable 5.1 is the maintainers' larger call. playbooks also adds to F8: `reference/model-adaptation/opus-5.md:207-208` cites a probe record (`thinking-off-probe-2026-07-26.md`) that exists nowhere in the repository. And to F6: the cache-pricing stamp at `skills/fable-5/context/orchestration.md:97` carries a date but no recheck trigger. - F15. Closed in 8e5edcb, 63c65a4, and 920b750. The statusline compose transform in `unwrap-before-compose.md` (synced between `context-guard` and `rate-limit-guard`) is a pure function of the effective `statusLine` string that the model hand-executes over roughly a hundred lines of prose, with eight eval cases checking the arithmetic (prompt-audit Group 4). Extract it into a synced `scripts/compose-statusline-wiring.sh` with the round-trip check inside, shrink the reference to the contract, and turn those eval cases into script tests. Deferred from the audit as a mechanism change. rate-limit-guard also adds to F6: the undated "Monitors is an experimental Claude Code component" claim in `reference/reader-contract.md:206-209`. - F16. Closed by main's 39442ff (the probe re-verified against 2.1.261); its F6 and F10 tails stay under those items. `claude-ops/skills/plugins/SKILL.md:268-276` records that its own probe's recheck trigger has fired (the CLI moved from 2.1.218 to 2.1.240 with the claim un-retested). Re-run the probe and refresh the stamp. claude-ops also adds nine undated harness and upstream-issue claims to F6 (bundled `doctor` gating, `audit-native-overlap` alias examples, `inventory` command aliases, the WebFetch truncation window, the `CLAUDE_PLUGIN_DATA` export claim, the `lanes` "verified on this machine" lines, the `observability` `session_id` and Stop-hook gotchas, upstream issue states in `read-routing.md` and `sync.md`, and the triggerless `surfaces.md` stamp) and two measured figures (`backups/` retention, the 97 percent and 50 MB figures in `observability`). `plugins/repo-fleet-hygiene/skills/audit/scripts/audit-fleet.test.sh` fails 5 of 180 cases on this host (the worktree-root-unconfigured placement and header cases, the symlink discovery-root case, the intermediate-symlink case, and the unreadable discovery-root case); the scripts are untouched by the repo-fleet-hygiene commit and the finding-kind table assertion passes. - F17. Closed in dae163f and 118e4a1 (three of the four probes pre-computed; the session-snapshot probe stays a body call because an unexpanded `${CLAUDE_SESSION_ID}` must be visible to the consumer, per the reader contract). `context-guard/skills/setup/SKILL.md` runs four fixed read-only probes (jq presence, installed shim versus shipped source, session snapshot, `zones.json`) as model-issued Bash calls where a `## Pre-computed context` block would run them before the body loads (prompt-audit Group 4). Adding one is a mechanism change: the block must pass `scripts/check-skill-precompute-compose.sh` and stay inside the worktree guard's rule that a composed block expands nothing but bare `$HOME`, so it is deferred from the audit. context-guard also adds to F6: the undated `disableAllHooks` / `allowManagedHooksOnly` claims in `skills/setup/SKILL.md:93-96` and `reference/reader-contract.md:503-507`, the undated PowerShell routing note in `statusline-edit.md:106-109`, and the folklore-number paragraph at `reader-contract.md:383-391`, which is dated but has no recheck trigger. - F18. Closed in 904de7e. `autonomy/reference/autonomous-pipeline-reminder.md` (out of audit scope; cited only by the README and a hook) rewords the vendor's autonomy block under the repo's no-copy rule and omits the Fable 5.1 clause "Do not stop because the context or session is long"; the guide calls the opening sentence load-bearing as written. Weigh the no-copy rule against that claim and add the missing clause in the plugin's own words. autonomy also adds to F6: the undated `AGENTS.md`-reachability claim stated three times (`skills/setup/SKILL.md:267`, `context/prerequisite-resolution-slice.md:38-39`, `reference/prerequisite-resolution.md:86-88`), the undated empirical telemetry claims in `reference/telemetry.md`, and the "shipped first-party mechanisms today" claims in `reference/runner/escalation.md:140-152`. - F19. Closed in 81c6c0f and 8ebcf8d (the F6 additions in this line stay under F6; the reader-contract wording landed in e128c11; a CI step for `sync-context-zone.sh --check` lands in this PR's closing commits). `plugin-quality/skills/audit/SKILL.md:58-92` has the model resolve the context zone by hand from inlined band tables, a staleness window, a version floor, and a combination rule that `plugins/context-guard/scripts/context-zone.sh` already implements (prompt-audit Group 1b and Group 4). Ship a byte-identical synced copy at `plugins/plugin-quality/scripts/context-zone.sh` with its test, register it in `scripts/cross-plugin-source-registry.txt` with a `sync-context-zone.sh --check` entry, and have the gate and `setup/SKILL.md:28-30` call it. Deferred from the audit as a mechanism change. plugin-quality also adds to F6: two live doc-page titles quoted undated in `agents/auditor.md:117-119`, the `context: fork` and cloud-scoping claims in `references/component-types/skill.md:18-24`, and six dated stamps with no recheck trigger. skill-quality adds to F6: three undated harness claims outside the dated stamp in `check/SKILL.md:160-172`, and the `setup/SKILL.md:16-20` stamp that has no recheck trigger. instruction-placement adds to F6: the undated "other agents resolve nearest-wins" claim in `realign/context/apply-recipes.md:95-97`. context-budget adds to F6: the `v2.1.232` measurement at `audit/SKILL.md:226-228`, the `/doctor` availability and `disableModelInvocation` claim at `audit/SKILL.md:34-36`, the cited-but-undated mechanism claims in `audit/reference/engine.md:25-30` with the dangling "verified version" referent at `:52-53`, and the wall-clock range at `audit/SKILL.md:93`. computer-use adds to F6: the dated surface table in `diagnose/SKILL.md:62-63` and the dated basis in `diagnose/reference/windows-quirks.md:5-6`, both without a recheck trigger. overengineering adds to F6: the undated harness-behavior claim in the gather blocks of all three skills (`audit/SKILL.md:20-23`, `delta/SKILL.md:19-23`, `realign/SKILL.md:19-22`, covered by the one dated record the worktree skill will own) and the undated `/loop` capability claims in `delta/context/recurring-wiring.md:37-38,51-53`. improvement adds to F6: four undated GitHub REST and Claude Code CLI claims in `find/context/ci-health.md:32-41`, `find/SKILL.md:235-237`, and `find/context/unattended.md:74-75`. docs-hygiene adds to F6: the bundled `/batch` skill claim in `extract-ssot/actions/batch.md:35,281`, four undated external benchmark figures across `extract-ssot/SKILL.md:27`, `context/anti-patterns.md:129`, and `context/decision-framework.md:27-59`, and the undated upstream-publishing claim in `audit-encapsulation/context/public-surface-contract.md:5`. code-tidying adds to F6: the CodeScene agentic-refactoring figure in `tidy/reference/scope-budget.md` "Research lineage" has no resolvable source; the audit dropped the number and kept the qualitative claim until a publication URL and read date are recorded. repo-hygiene adds to F6: the sourced-but-undated `${CLAUDE_SKILL_DIR}` substitution-scope claim in `clean/reference/invocation-forms.md`. disk-hygiene adds to F6: four undated harness-version claims across `clean/SKILL.md` and `clean/reference/safety-model.md` (report F15). codebase-health adds to F6: the undated harness-capability claim at `audit/SKILL.md:25-28`, verified true by the auditor on 2026-09-04 and needing only its dated record. architecture adds to F6: the undated pre-compute execution claim at `improve/SKILL.md:25-28`. mcp-tools adds to F6: three cited-but-undated Claude Code client-behavior values in `audit/reference/checklist.md:38,105,106`. performance adds to F6: the undated benchstat flag-set claim in `snapshot/SKILL.md:94-96`. - F20. Closed in d84723f. `provenance/skills/audit` spells one tier two ways: `not-found` in `SKILL.md:2,82,227` and `source-not-identified` in `reference/rubric.md:297`, and `scripts/emit-findings.sh` with its test asserts both. Pick one spelling, change the script and `emit-findings.test.sh` with it, and align the markdown in the same commit. Deferred from the audit because the fix crosses into a script and its suite. - F21. Closed in 8f09c4f and 3e3dd3d. `mutation-testing/skills/setup/SKILL.md:80-89` has the model re-derive a suppression entry's `finding_id` hash from its constituents and check node-kind membership by hand (prompt-audit Group 1b and Group 4, the same shape as F19). Ship `plugins/mutation-testing/scripts/suppression-lint.sh` with a test implementing the two published derivations and the membership check, have setup call it, and retarget setup eval 5 and audit eval 3 from "the model re-derives" to the script. Deferred from the audit as a mechanism change. - F22. Closed in ea8569d. `plugins/ai-briefing/skills/setup/evals/evals.json:33` prompts `/ai-briefing:setup --with-build-deps`, but the skill's contract is `apply install-build-deps`; the case exercises a flag the skill does not accept. Retarget the prompt to the contract form. Observed by the ai-briefing auditor outside the audit's markdown scope. - F23. Closed in f871ca2. `plugins/dometrain/skills/sync/context/update.md` documents the maintainer-only `--refresh-baseline` command through `${CLAUDE_PLUGIN_ROOT}`, which resolves to the installed plugin cache in a normal session, while the next paragraph forbids running it anywhere but a working clone; the script writes next to itself either way. Give the command as a clone-relative path, or document that the flag is only safe under `--plugin-dir`. A script-safety contradiction, not a prose hunk; observed by the dometrain auditor. - F24. Closed in 52b2004. Add a criteria row to `plugins/claude-config/skills/audit-instructions/reference/criteria.md` for each recurring shape in [Catalog gaps](#catalog-gaps): dated stamps with no recheck trigger, migration-relative phrasing inside reference and context files, routing text that names a skill absent from `plugins/`, sibling-file meta-commentary, and maintainer rationale inside model-facing YAML comments; the rest are one-offs and stay listed. <!-- spellchecker:off --> - F10. Closed in 7ae8d36 (work-items), 8c0d3eb (planning), and 4f51193 (instruction-placement) for cluster C2, and in 9baa032 (repo-hygiene) for cluster C5, which captured the check-7 error after the merge of main at eba62c5 (seven fixture-side cases in three `clean` suites) and cleared it; the autonomy `lane-stop-gate` FIFO case passes on this host unchanged. One residual stays, not fixable on this host: repo-fleet-hygiene `audit-fleet`'s 33 load-sensitive GitHub-evidence cases, verified on CI's Linux lane. Reports `F10-C2.md` and `F10-C5.md` under `.work/prompt-audit-follow-ups/reports/`. The status below is as recorded on 2026-09-07 before C2 landed. In progress: clusters C1, C3, and C4 landed (C1 1c75e31 and f385946 provenance, 037552c cloud-bootstrap; C3 eab3540 claude-ops, eec9018 claude-config; C4 6d34a94 knowledge, 09c8d00 education, 944e0cb disk-hygiene, e07b89d repo-fleet-hygiene). Three of the recorded symptoms were real cross-platform defects, not host quirks: provenance `list-corpus` subtracted the corpus root as a string, knowledge's fence gate wrote to a cp1252 console, and education's teach workspace split across a repo's worktrees. Four recorded symptoms did not reproduce (docs-hygiene `emit-findings`, claude-config `emit-findings` and `permission-rule-check` 6b, claude-ops `fleet-state`, the last resolved upstream by main's rewrite). Still open: cluster C2 (work-items `generate-adapter` case 116, planning `interview-defenses` digests, instruction-placement `verify-load`), the autonomy `lane-stop-gate` FIFO case held back from C4 while a verifier held that plugin, the `interview-defenses` frontmatter digest that F12's `shell: bash` removal moved and that needs re-pinning, repo-fleet-hygiene `audit-fleet` at 33 load-sensitive GitHub-evidence failures the C4 report characterizes, and one uncaptured error in repo-hygiene `clean` check 7 with main ahead of the branch in those scripts. Not an audit finding, recorded so it is not mistaken for one: `.claude/hooks/cloud-bootstrap-plugins.test.sh` fails 15 of 32 assertions on this Windows host ("not installed at user scope") with `.claude/cloud-bootstrap.sh` and the suite byte-identical to `origin/main`. The failure is environmental or pre-existing; confirm on CI and file separately if it reproduces there. Same status for `plugins/docs-hygiene/skills/audit-noise/scripts/emit-findings.test.sh` ("tier is looked up as IMPORTANT", "Location is repo-relative") and `plugins/provenance/skills/audit/scripts/list-corpus.test.sh` and `emit-findings.test.sh` ("a directory target lists its markdown"), which fail on this host with their scripts and suites byte-identical to `origin/main`. Same again for `plugins/work-items/skills/onboard-adapter/scripts/generate-adapter.test.sh` case 116, and for the nine eval-case digest assertions in `plugins/planning/tests/interview-defenses.test.sh` (`interview/evals/evals.json` unchanged since the digests were pinned; local jq 1.8.2), and for four Windows temp-path cases in `plugins/instruction-placement/scripts/verify-load.test.sh` (selected by a basename collision on `typescript.md`; the probe and suite are unchanged on this branch), and for `plugins/claude-ops/skills/audit-install-state/scripts/install_state.test.sh` (a Windows filename-syntax error on a fixture path) and `plugins/claude-ops/skills/audit-skill-visibility/scripts/audit_skill_visibility.test.sh` (no `installed_plugins.json` in the temp config), both with scripts and suites byte-identical to HEAD, and for `plugins/claude-ops/skills/plugins/scripts/fleet-state.test.sh`, which fails a varying subset of its 74 cases on this host (six inside a check-skill run, two when run alone) with the scripts byte-identical to `origin/main`. Same again for `plugins/claude-config/skills/audit-instructions/scripts/restatement-scan.test.sh` (two I29 fixture cases, script and fixtures byte-identical to `origin/main`) and the one `emit-findings.test.sh` case downstream of it ("Action names a body cut"), which reads the same scanner's output. Same again for `plugins/claude-config/skills/audit-permission-grants/scripts/permission-rule-check.test.sh` case 6b ("vendored copies excluded, exactly one finding"), whose script and suite no branch commit touched (main has since tidied the suite in ac7eeea). The fleet gather block itself ("the harness runs a skill's whole pre-compute block as one shell invocation") is an undated harness claim in about 55 skills; one dated four-part record on the worktree skill, which owns the mechanism, with the copies pointing at it, clears every site at once. discovery adds six undated claim families across thirteen files (silent preload failure, `AskUserQuestion` and plan-mode tools filtered from non-fork subagents, the Workflow tool absent from subagents, background as the default execution mode, spawns permission-classified before launch); the fix is one dated record per claim in the plugin's `reference/parent-contract.md` with the skills pointing at it. claude-config adds the undated `pre-v2.1.211` boundary at six body sites (the dated owner is `audit-permission-state/reference/criteria.md`), dated-but-triggerless stamps across eight files, the `conflict-scan.sh` precision figures in `conflict-criteria.md`, and the "Fable 5 subpage" pointers in `audit-prompting-postures/reference/postures.md` that need a Fable 5.1 sibling once it exists. discipline adds five files of undated fork-mode harness claims (`sweep-all/SKILL.md`, its two references, `scrutinize-dont-coast/SKILL.md`, `use-your-skills/SKILL.md`). claude-memory adds the undated upstream-issue state at `audit/reference/official-guidance.md:168`. testing adds the xUnit v3 and .NET 10 framework-trap claims (`diagnose/SKILL.md:68`, `diagnose/context/investigate.md:16`, `write/SKILL.md:74`) and the `playwright-cli` version floor in `run-e2e/context/e2e.md:12`. planning also adds two undated harness claims to F6: the agent-teams "experimental, default-off" status in `plan/SKILL.md` and the "cannot read effort or advisor state" claim in `interview/context/session-config.md`. `plugins/ai-slop/skills/audit/scripts/detect.test.sh` fails its four "git absent" cases (4 of 202) on this Windows host because the test symlinks the shell builtin `printf` into a fake PATH directory (`ln: failed to create symbolic link`); the scripts are unchanged by the ai-slop commit. `plugins/disk-hygiene/skills/clean/scripts/guard_launch_monitor.test.sh` fails its two telemetry-sink cases and `hygiene.test.sh` fails `test_stash_must_exist_in_an_independent_checkout` and `test_preview_allows_root_children_os_managed_snapshot` on this host with the scripts byte-identical to HEAD; neither case reads markdown, and the frontmatter-belt assertions in `test_hygiene.py` that do read `clean/SKILL.md` pass after the disk-hygiene commit. `plugins/code-tidying/skills/audit-comment-residue/scripts/detect.test.sh` fails 4 of 53 cases on this host (embedded quote and backslash unescaping in the preview script, arrow-in-filename, tab-bearing path) with `detect.sh` and the suite byte-identical to HEAD; the code-tidying commit touches only prose the script does not read. `plugins/knowledge/skills/docpage-digest/scripts/check-fences-exact.test.sh` fails six cases on this host with a `UnicodeEncodeError` writing U+2265 to the cp1252 console, script and suite byte-identical to HEAD; the knowledge commit touches no fence, quote payload, or script. `plugins/education/skills/teach/scripts/list-workspaces.test.sh` fails "worktree lists the MAIN repo's workspace" on this worktree checkout with the script unchanged. <!-- spellchecker:on --> - F25. `plugins/source-control/scripts/babysit-readiness-gate.sh` matches `P[0-3]` severity badges, one vendor's finding-format grammar, the same coupling F7 removed from `pull-request` one skill over (it serves `babysit-prs`). Parameterize the badge grammar on the discovered reviewer shape that `pull-request/reference/reviewer-shapes.md` records, with the script's test updated in the same commit. A script change outside the F7 commit's blast radius (from the F7 applied report). <details> <summary>PLAN.md (graduated into the record and pruned; last held at fe3ada2)</summary> ### prompt-audit-follow-ups #### Brief ##### TLDR Close every open follow-up the 2026-09 prompt-audit record inventories (F2 to F24, less the two already done) in one follow-up PR on top of the merged sweep: the small defects directly, the mechanism changes as scripts with tests, the verification debt as dated records, and the unaudited surfaces with the same audit method. ##### Goal `docs/specs/prompt-audit-skills-2026-09.md` `## Follow-ups` reads as a closed ledger: each of F2 to F24 either names the commit that closed it or states, in one sentence, why it stays open and who owns it. Every skill that loads a `reference/` tree, hook prompt, output style, or rule has had those surfaces audited against Claude Fable 5.1. Every deterministic procedure the audit found the model transcribing by hand runs as a script with a test. Every undated harness or upstream claim the audit withheld is stamped with a date and a recheck trigger, pointed at a dated owner, or removed. ##### Constraints - Branch `chore/prompt-audit-follow-ups` from `main` at f62c1b3, one worktree, one PR. One commit per follow-up (or per plugin inside a follow-up that spans plugins), each naming the follow-up id in its subject. - Every touched plugin gets a patch bump and a CHANGELOG line in the same commit; versions land strictly above `origin/main`'s current version at commit time and are renumbered once before the PR if main overtakes them. - Per-plugin gates before each commit: `check-skill.sh` on every touched skill, `check-skill-precompute-compose.sh --paths`, `check-evals-quality.sh` where evals change, markdownlint, typos, the `ai-slop` detector; scripts get shellcheck and a co-located test that runs green on CI's Linux lane. - The autonomy plugin never names the org, a fleet repository, or a vendor (`scripts/validate-plugin-contracts.mjs`); its citations get a link-free convention name, never a marketplace URL. - Subagents run as Opus 5 with `general-purpose`; at most three concurrent; every dispatch held while `~/.claude/rate-limit-guard/rate-limits.json` shows `five_hour.used_percentage` above 85. - No `worktree.baseRef` in any settings file (`.claude/rules/worktree-base-ref.md`). - ADR 0005 and ADR 0008 stay accepted (operator decision 2026-09-05). ##### Acceptance criteria Direct fixes, lead: - F5 residual: `emit-findings.sh` comment and the `negation-trigger-fence.md` fixture no longer describe check 3 as a hard-FAIL gate. - F9: wayfind's pre-compute fails loud (or surfaces the raw value) on a non-string `container_label`, matching `context/tracker-mechanics.md`. - F12: no `SKILL.md` carries a `shell:` frontmatter key with no `` !` `` injection left in the file; `check-skill.sh` check 19 stays green. - F13: the boris playbook's Model row is qualified "as of the 2026-07-24 sync". - F16: recorded as closed by main's 39442ff (probe re-verified against 2.1.261); its F6 items move under F6, its test failures under F10. - F18: `autonomous-pipeline-reminder.md` carries the "do not stop because the context or session is long" clause in the plugin's own words. - F20: one spelling of the neutral provenance tier across `SKILL.md`, `reference/rubric.md`, `emit-findings.sh`, and its test. - F22: the ai-briefing setup eval prompts the contract form `apply install-build-deps`. - F23: dometrain's `--refresh-baseline` is documented as a clone-relative command or as safe only under `--plugin-dir`. - F24: `criteria.md` gains one row per recurring catalog-gap shape (dated stamp without recheck trigger; migration-relative phrasing in reference and context files; routing text naming a skill absent from `plugins/`; sibling-file meta-commentary; maintainer rationale in model-facing YAML comments). Mechanism changes, one dispatched implementer each, script plus test plus the doc wiring: - F11: `plugins/work-items/scripts/lane-telemetry-upsert.sh` with a test; both telemetry-upsert references invoke it. - F15: synced `scripts/compose-statusline-wiring.sh` in context-guard and rate-limit-guard with the round-trip check inside; `unwrap-before-compose.md` shrinks to the contract; the arithmetic eval cases become script tests. - F17: context-guard setup's four read-only probes run from a `## Pre-computed context` block that passes `check-skill-precompute-compose.sh` and the worktree guard's `$HOME`-only expansion rule. - F19: byte-identical synced `plugins/plugin-quality/scripts/context-zone.sh` with test, registry entry, and `sync-context-zone.sh --check`; the audit gate and `setup/SKILL.md` call it. - F21: `plugins/mutation-testing/scripts/suppression-lint.sh` with a test; setup calls it; setup eval 5 and audit eval 3 retarget to the script. - F7: pull-request Gate 5 parameterized on the discovered reviewer login; vendor shapes moved into a dated reference-shapes note with a recheck trigger. - F8: every cross-plugin or marketplace-`docs/` relative citation in source-control, review, and playbooks converted to the raw-URL form; the nonexistent probe record citation in `opus-5.md` removed or pointed at a real file; autonomy's six sites given a link-free convention name. Audit and verification, dispatched per surface or per plugin: - F2: the plugin-level `reference/` trees of autonomy, architecture, performance, playbooks, rate-limit-guard, and context-guard, plus hooks prompt text, output styles, `.claude/rules`, `CLAUDE.md`, and `AGENTS.md`, audited with the same brief and applied the same way; reports under `.work/prompt-audit-follow-ups/reports/`. - F6: every claim the record lists under F6 (including the per-plugin additions folded into F10, F11, F14 to F19) carries a date and a recheck trigger, points at a dated owner record, or is removed; the fleet gather-block claim gets one dated record on the worktree skill. - F10: each suite the record lists fails on this Windows host either passes here after a portable fix or is declared Linux-only in the runner's own mechanism, with the reason; `scripts/affected-tests.sh --run` over this branch's diff reports no unexplained failure. Closing: - F3 is recorded as not a PR deliverable: behavior measurement runs through `/claude-config:unhobble` on demand. - F14: the whole-pack regeneration from Fable 5.1 is recorded as the maintainers' separate run; its citation and stamp sub-items close under F8 and F6. - The record's `## Follow-ups` names the closing commit per item; this Brief graduates into the record as a `## Follow-up PR` section and the slice is pruned; the PR body carries the closed ledger and the pre-prune commit. - Static gates green: the four `check-changelog-parity.sh` modes, `check-purged-em-dashes.sh`, repo-wide markdownlint and typos, `check-skill-precompute-compose.sh --all`, `render-index.sh check --file AGENTS.md`, `validate-plugin-contracts.mjs`, `check-contract-slice-prune.sh --check-diff origin/main`, and CI on the PR. ##### Captured assumptions - Claude Code 2.1.261 is the harness version claims are verified against; the bundled `claude-api` prompt-audit guide is unchanged since the sweep. - Verification of a harness claim means reading the current official page (or the CLI's own output) on the day of the stamp; a claim that cannot be verified from a source is removed, not re-asserted. ##### Out-of-scope - Regenerating the playbooks pack from Fable 5.1 (F14's larger call) and running behavior measurement (F3). - Retiring ADR 0005 or ADR 0008. ##### Deferred questions - None; the ADR question was decided 2026-09-05 (both stay accepted). #### Plan Phase A (lead, direct): F22, F23, F9, F20, F13, F18, F5 residual, F24, F12, F16 bookkeeping. Phase B (dispatched implementers, three at a time): F11, F15, F21, then F19, F17, F7, F8. Phase C (dispatched auditors and verifiers): F2 surfaces, F6 per plugin group, F10 per suite cluster. Phase D (lead): record ledger, version renumber against current main, Brief graduation and prune, gates, PR. </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01S1Vu8qA5MKiSnXrWMEdbFW --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>

No related issue: fleet-wide docs sweep tracked by the record and ADR 0028, not by an issue.
Summary
Runs the bundled
/claude-api prompt-auditover every skill body, context and reference file, and agent definition in the marketplace against Claude Fable 5.1, and applies the high- and medium-confidence findings directly. All 74 plugins are covered: 63 took one commit each (patch bump, CHANGELOG line, evals in step) and 11 were clean. Across 64 auditor reports the lead applied 805 finding ids and withheld 207; the withheld set, the catalog gaps, the check-3 phrases each description dropped, a five-skill behavioral spot-check, and the follow-up inventory live in the record,docs/specs/prompt-audit-skills-2026-09.md. ADR 0028 records the accepted decisions the sweep contradicted (ADR 0004 D-1 and D-3, ADR 0006's applied-set gate); ADR 0005 and ADR 0008 stay accepted pending the operator's call.Fix
plugins/<plugin>/, each naming its applied, skipped, and withheld finding ids and the check-3 phrases its descriptions dropped; descriptions name intent categories with a few exact phrases kept, history and incident narration leave skill bodies for the CHANGELOG and ADRs, undated harness claims are either verified and stamped or removed, and mechanism changes the audit exposed are follow-ups, not hunks.skill-qualitycheck 3 (dropped trigger phrases) is advisory instead of failing, so a deliberate consolidation ships with the warning recorded..claude/rules/skill-bodies-state-current-rules.md, indexed inAGENTS.md.origin/main's current versions (main claimed or overtook the numbers the plugin commits carried); the record's Version cells name both numbers.## Briefsection anddocs/topics/prompt-audit-skills/was pruned.origin/mainin (107 conflicts: 45 CHANGELOG and 45 plugin.json pairs resolved mechanically with the branch's entries above main's; 17 skill bodies resolved with the branch's rewrite as the base and main's later change on top, per the merge commit message).Verification
scripts/check-changelog-parity.sh --check,--check-bump origin/main,--check-preserved origin/main,--check-order: all pass at the branch tip.scripts/check-purged-em-dashes.sh,scripts/check-skill-precompute-compose.sh --all(251 skills, 0 violations),bash plugins/instruction-placement/scripts/render-index.sh check --file AGENTS.md(IN-SYNC),scripts/check-contract-slice-prune.sh --check-diff origin/main: pass.scripts/affected-tests.sh --runover the branch diff was still running on the author's Windows host when this PR opened (its selection step alone takes about fifty minutes there); the suites run individually first all pass (skill-quality/scripts/check-skill.test.sh,docs-hygiene/.../detect.test.sh197 checks,source-controltest_skill_contract.py25 tests) except the nineplanning/tests/interview-defenses.test.shdigest assertions that fail on that host withinterview/evals/evals.jsonbyte-identical toorigin/main(record follow-up F10). The full result lands as a PR comment; CI runs the whole corpus regardless.check-skill.shon every touched skill (check 3 advisory, dropped phrases recorded),check-skill-precompute-compose.sh --paths,check-evals-quality.shwhere evals changed, markdownlint, typos, and theai-slopdetector on every touched file.## Behavioral spot-check).Related
docs/specs/prompt-audit-skills-2026-09.md.docs/adr/0028-audit-skill-bodies-fleet-wide-against-the-current-model-and-apply-directly.md(supersedes ADR 0004 D-1 and D-3 and ADR 0006's applied-set gate for this lane).f675afa1b2df6ab55036d7be3fff0f9bf97725d9(gh api "repos/{owner}/{repo}/contents/docs/topics/prompt-audit-skills/PLAN.md?ref=f675afa1b2df6ab55036d7be3fff0f9bf97725d9" --jq .size); the Brief graduated into the record's## Briefsection and the follow-ups are inventoried below.Follow-ups (verbatim from the record)
Inventoried here as they arise and shipped in the PR body verbatim.
.claude/rules,CLAUDE.md,AGENTS.md, and the plugin-levelreference/trees that skills load on invocation (autonomy,architecture,performance,playbooks,rate-limit-guard,context-guard); the performance auditor notes thatsnapshotandverifyboth mandate readingplugins/performance/reference/harness-integrity.md, which likely mirrors the archaeology the skill bodies shed.claude-config:unhobble.docs/topics/prompt-audit-skills/PLAN.mdgraduated into Brief and the slice was pruned (contract-slice prune gate); the PR body names the pre-prune commit.plugins/skill-quality/scripts/check-skill.shcheck 3 hard-fails any trigger phrase dropped versus the base ref. That blocks prompt-audit's documented fix for trigger-case enumeration (near-synonym lists become intent categories). Change check 3 to a warning, update its tests, and record the deliberately dropped phrases per skill in this record. Must land before the PR so the skill-quality CI gate passes. Landed in a694011; two out-of-scope surfaces still describe check 3 as a hard-FAIL gate and should follow: the comment atplugins/docs-hygiene/skills/audit-noise/scripts/emit-findings.sh:220and the eval fixtureplugins/docs-hygiene/skills/audit-noise/evals/fixtures/negation-trigger-fence.md:9(the docs-hygiene commit corrected the same script's header comment and its eval case 12).I12items (session-flow:/recaptrigger and the Skill-invocable allowlist, the usage-limit reset surface,cleanupPeriodDaysdefault,/cleartranscript and scheduled-task behavior). Each becomes a four-part upstream-drift record or a doc pointer. Collected per plugin as the waves run. source-control adds: GitHubmergeStateStatusprecedence andbaseRefOidstaleness (freshness.md), the permission-mode and wrapper-strip claims in safety.md, and the ScheduleWakeup clamp,/loopexpiry, Monitor-on-resume, and sandboxed-GraphQL claims across babysit-prs, babysit-loop, pull-request, and worktree. disk-hygiene adds four undated harness-version claims (safety-model.md:262,:313,:315on 2.1.207 and 2.1.218pluginConfigsscope and PowerShell hook firing;clean/SKILL.md:382on the v2.1.211 auto-mode prompt). performance adds the undated benchstat-delta-testclaim atsnapshot/SKILL.md:94-96, andplugins/performance/reference/harness-integrity.md(out of audit scope, mandated reading forsnapshotandverify) likely carries the run archaeology the four skill bodies shed (see F2).pull-requesthardcodes one vendor's review bot (login, emoji signalling, timing) inreference/monitor.mdgotchas andreference/readiness.mdGate 5, against the file's own "discover actors, don't hardcode them" rule. Parameterize Gate 5 on the discovered reviewer login and move the vendor shapes into a dated reference-shapes note with a recheck trigger.source-controlcites sibling-plugin files by relative path (../../../../autonomy/...,../../../../../prompts/...) inbabysit-loop/reference/promotion-evidence-resolution.mdandbabysit-prs/reference/safety.md. Those resolve only in the marketplace checkout, never in an installed plugin. Convert to the raw-URL form the plugin already uses atbabysit-loop/SKILL.md:40. review adds:agents/ecosystem-specialist.md:22,fanout/context/fix-pass-mode.md:7,quality-gate/context/close-out.md(four sites), andquality-gate/context/spec.md(three sites) cite marketplacedocs/paths or sibling-plugin files by relative path. review also adds two undated claims to F6: the bundled/code-reviewand managed Code Review service tiers inquality-gate/context/pr.mdandcode.md, and the "built-in/security-reviewis unusable in CI" claim insecurity-review/SKILL.md. The autonomy applier converted six of that plugin's own convention and sibling citations to marketplace URLs; those were reverted to the relative form before the PR becausescripts/validate-plugin-contracts.mjsforbids the autonomy plugin naming the org or a vendor, so the autonomy sites stay under this follow-up.planning/skills/wayfind/SKILL.mdpre-compute silently coerces a non-stringcontainer_labeltowork-map, whichcontext/tracker-mechanics.mdsays is a configuration error that must never proceed. Make the pre-compute fail loud or surface the raw value, matching the doc.work-itemscarries the same 60-line lane-telemetry upsert as a fenced shell block inwork-loop/reference/telemetry-upsert.mdandattend-queue/reference/telemetry-upsert.md, transcribed by the model on every cycle, with a classifier-fallback section asking it to re-derive gate order by hand (prompt-audit Group 4, an LLM executor for a deterministic plan). Extract it intoplugins/work-items/scripts/lane-telemetry-upsert.shwith a co-located test, taking lane, instance, repo, issue, and body-file arguments and exiting non-zero on each refusal branch; both references then invoke it. Deferred from the audit because it is a mechanism change, not a prose hunk. work-items also adds six undated harness andghclaims to F6 (classifier refusals ofpermissions.allowwidening and of thereclaimcall, the compound-shell block, sandboxed GraphQL 403).shell: bashfrontmatter selects the shell for!...`` injections. Skills whose pre-compute block became empty when the git lines moved into body calls still carry the key inert (debugging F5 found one). Sweep every SKILL.md: where no injection remains, drop the key;check-skill.shcheck 19 stays green either way.playbooks:borispresents Fable 5 as the current top model and its launch-era classifier behavior as current (skills/boris/SKILL.md:58,133); upstream has not published Fable 5.1 tips. Re-sync through/playbooks:updatewhen it does, and until then qualify the Model row "as of the 2026-07-24 sync".fable-5playbook's own regeneration trigger ("a model-version change",skills/update/SKILL.md:39) has fired with Fable 5.1. The audit adds the guide-backed minimum, afable-5-1.mdadaptation chapter; regenerating the whole pack from Fable 5.1 is the maintainers' larger call. playbooks also adds to F8:reference/model-adaptation/opus-5.md:207-208cites a probe record (thinking-off-probe-2026-07-26.md) that exists nowhere in the repository. And to F6: the cache-pricing stamp atskills/fable-5/context/orchestration.md:97carries a date but no recheck trigger.unwrap-before-compose.md(synced betweencontext-guardandrate-limit-guard) is a pure function of the effectivestatusLinestring that the model hand-executes over roughly a hundred lines of prose, with eight eval cases checking the arithmetic (prompt-audit Group 4). Extract it into a syncedscripts/compose-statusline-wiring.shwith the round-trip check inside, shrink the reference to the contract, and turn those eval cases into script tests. Deferred from the audit as a mechanism change. rate-limit-guard also adds to F6: the undated "Monitors is an experimental Claude Code component" claim inreference/reader-contract.md:206-209.claude-ops/skills/plugins/SKILL.md:268-276records that its own probe's recheck trigger has fired (the CLI moved from 2.1.218 to 2.1.240 with the claim un-retested). Re-run the probe and refresh the stamp. claude-ops also adds nine undated harness and upstream-issue claims to F6 (bundleddoctorgating,audit-native-overlapalias examples,inventorycommand aliases, the WebFetch truncation window, theCLAUDE_PLUGIN_DATAexport claim, thelanes"verified on this machine" lines, theobservabilitysession_idand Stop-hook gotchas, upstream issue states inread-routing.mdandsync.md, and the triggerlesssurfaces.mdstamp) and two measured figures (backups/retention, the 97 percent and 50 MB figures inobservability).plugins/repo-fleet-hygiene/skills/audit/scripts/audit-fleet.test.shfails 5 of 180 cases on this host (the worktree-root-unconfigured placement and header cases, the symlink discovery-root case, the intermediate-symlink case, and the unreadable discovery-root case); the scripts are untouched by the repo-fleet-hygiene commit and the finding-kind table assertion passes.context-guard/skills/setup/SKILL.mdruns four fixed read-only probes (jq presence, installed shim versus shipped source, session snapshot,zones.json) as model-issued Bash calls where a## Pre-computed contextblock would run them before the body loads (prompt-audit Group 4). Adding one is a mechanism change: the block must passscripts/check-skill-precompute-compose.shand stay inside the worktree guard's rule that a composed block expands nothing but bare$HOME, so it is deferred from the audit. context-guard also adds to F6: the undateddisableAllHooks/allowManagedHooksOnlyclaims inskills/setup/SKILL.md:93-96andreference/reader-contract.md:503-507, the undated PowerShell routing note instatusline-edit.md:106-109, and the folklore-number paragraph atreader-contract.md:383-391, which is dated but has no recheck trigger.autonomy/reference/autonomous-pipeline-reminder.md(out of audit scope; cited only by the README and a hook) rewords the vendor's autonomy block under the repo's no-copy rule and omits the Fable 5.1 clause "Do not stop because the context or session is long"; the guide calls the opening sentence load-bearing as written. Weigh the no-copy rule against that claim and add the missing clause in the plugin's own words. autonomy also adds to F6: the undatedAGENTS.md-reachability claim stated three times (skills/setup/SKILL.md:267,context/prerequisite-resolution-slice.md:38-39,reference/prerequisite-resolution.md:86-88), the undated empirical telemetry claims inreference/telemetry.md, and the "shipped first-party mechanisms today" claims inreference/runner/escalation.md:140-152.plugin-quality/skills/audit/SKILL.md:58-92has the model resolve the context zone by hand from inlined band tables, a staleness window, a version floor, and a combination rule thatplugins/context-guard/scripts/context-zone.shalready implements (prompt-audit Group 1b and Group 4). Ship a byte-identical synced copy atplugins/plugin-quality/scripts/context-zone.shwith its test, register it inscripts/cross-plugin-source-registry.txtwith async-context-zone.sh --checkentry, and have the gate andsetup/SKILL.md:28-30call it. Deferred from the audit as a mechanism change. plugin-quality also adds to F6: two live doc-page titles quoted undated inagents/auditor.md:117-119, thecontext: forkand cloud-scoping claims inreferences/component-types/skill.md:18-24, and six dated stamps with no recheck trigger. skill-quality adds to F6: three undated harness claims outside the dated stamp incheck/SKILL.md:160-172, and thesetup/SKILL.md:16-20stamp that has no recheck trigger. instruction-placement adds to F6: the undated "other agents resolve nearest-wins" claim inrealign/context/apply-recipes.md:95-97. context-budget adds to F6: thev2.1.232measurement ataudit/SKILL.md:226-228, the/doctoravailability anddisableModelInvocationclaim ataudit/SKILL.md:34-36, the cited-but-undated mechanism claims inaudit/reference/engine.md:25-30with the dangling "verified version" referent at:52-53, and the wall-clock range ataudit/SKILL.md:93. computer-use adds to F6: the dated surface table indiagnose/SKILL.md:62-63and the dated basis indiagnose/reference/windows-quirks.md:5-6, both without a recheck trigger. overengineering adds to F6: the undated harness-behavior claim in the gather blocks of all three skills (audit/SKILL.md:20-23,delta/SKILL.md:19-23,realign/SKILL.md:19-22, covered by the one dated record the worktree skill will own) and the undated/loopcapability claims indelta/context/recurring-wiring.md:37-38,51-53. improvement adds to F6: four undated GitHub REST and Claude Code CLI claims infind/context/ci-health.md:32-41,find/SKILL.md:235-237, andfind/context/unattended.md:74-75. docs-hygiene adds to F6: the bundled/batchskill claim inextract-ssot/actions/batch.md:35,281, four undated external benchmark figures acrossextract-ssot/SKILL.md:27,context/anti-patterns.md:129, andcontext/decision-framework.md:27-59, and the undated upstream-publishing claim inaudit-encapsulation/context/public-surface-contract.md:5. code-tidying adds to F6: the CodeScene agentic-refactoring figure intidy/reference/scope-budget.md"Research lineage" has no resolvable source; the audit dropped the number and kept the qualitative claim until a publication URL and read date are recorded. repo-hygiene adds to F6: the sourced-but-undated${CLAUDE_SKILL_DIR}substitution-scope claim inclean/reference/invocation-forms.md. disk-hygiene adds to F6: four undated harness-version claims acrossclean/SKILL.mdandclean/reference/safety-model.md(report F15). codebase-health adds to F6: the undated harness-capability claim ataudit/SKILL.md:25-28, verified true by the auditor on 2026-09-04 and needing only its dated record. architecture adds to F6: the undated pre-compute execution claim atimprove/SKILL.md:25-28. mcp-tools adds to F6: three cited-but-undated Claude Code client-behavior values inaudit/reference/checklist.md:38,105,106. performance adds to F6: the undated benchstat flag-set claim insnapshot/SKILL.md:94-96.provenance/skills/auditspells one tier two ways:not-foundinSKILL.md:2,82,227andsource-not-identifiedinreference/rubric.md:297, andscripts/emit-findings.shwith its test asserts both. Pick one spelling, change the script andemit-findings.test.shwith it, and align the markdown in the same commit. Deferred from the audit because the fix crosses into a script and its suite.mutation-testing/skills/setup/SKILL.md:80-89has the model re-derive a suppression entry'sfinding_idhash from its constituents and check node-kind membership by hand (prompt-audit Group 1b and Group 4, the same shape as F19). Shipplugins/mutation-testing/scripts/suppression-lint.shwith a test implementing the two published derivations and the membership check, have setup call it, and retarget setup eval 5 and audit eval 3 from "the model re-derives" to the script. Deferred from the audit as a mechanism change.plugins/ai-briefing/skills/setup/evals/evals.json:33prompts/ai-briefing:setup --with-build-deps, but the skill's contract isapply install-build-deps; the case exercises a flag the skill does not accept. Retarget the prompt to the contract form. Observed by the ai-briefing auditor outside the audit's markdown scope.plugins/dometrain/skills/sync/context/update.mddocuments the maintainer-only--refresh-baselinecommand through${CLAUDE_PLUGIN_ROOT}, which resolves to the installed plugin cache in a normal session, while the next paragraph forbids running it anywhere but a working clone; the script writes next to itself either way. Give the command as a clone-relative path, or document that the flag is only safe under--plugin-dir. A script-safety contradiction, not a prose hunk; observed by the dometrain auditor.plugins/claude-config/skills/audit-instructions/reference/criteria.mdfor each recurring shape in Catalog gaps: dated stamps with no recheck trigger, migration-relative phrasing inside reference and context files, routing text that names a skill absent fromplugins/, sibling-file meta-commentary, and maintainer rationale inside model-facing YAML comments; the rest are one-offs and stay listed..claude/hooks/cloud-bootstrap-plugins.test.shfails 15 of 32 assertions on this Windows host ("not installed at user scope") with.claude/cloud-bootstrap.shand the suite byte-identical toorigin/main. The failure is environmental or pre-existing; confirm on CI and file separately if it reproduces there. Same status forplugins/docs-hygiene/skills/audit-noise/scripts/emit-findings.test.sh("tier is looked up as IMPORTANT", "Location is repo-relative") andplugins/provenance/skills/audit/scripts/list-corpus.test.shandemit-findings.test.sh("a directory target lists its markdown"), which fail on this host with their scripts and suites byte-identical toorigin/main. Same again forplugins/work-items/skills/onboard-adapter/scripts/generate-adapter.test.shcase 116, and for the nine eval-case digest assertions inplugins/planning/tests/interview-defenses.test.sh(interview/evals/evals.jsonunchanged since the digests were pinned; local jq 1.8.2), and for four Windows temp-path cases inplugins/instruction-placement/scripts/verify-load.test.sh(selected by a basename collision ontypescript.md; the probe and suite are unchanged on this branch), and forplugins/claude-ops/skills/audit-install-state/scripts/install_state.test.sh(a Windows filename-syntax error on a fixture path) andplugins/claude-ops/skills/audit-skill-visibility/scripts/audit_skill_visibility.test.sh(noinstalled_plugins.jsonin the temp config), both with scripts and suites byte-identical to HEAD, and forplugins/claude-ops/skills/plugins/scripts/fleet-state.test.sh, which fails a varying subset of its 74 cases on this host (six inside a check-skill run, two when run alone) with the scripts byte-identical toorigin/main. Same again forplugins/claude-config/skills/audit-instructions/scripts/restatement-scan.test.sh(two I29 fixture cases, script and fixtures byte-identical toorigin/main) and the oneemit-findings.test.shcase downstream of it ("Action names a body cut"), which reads the same scanner's output. Same again forplugins/claude-config/skills/audit-permission-grants/scripts/permission-rule-check.test.shcase 6b ("vendored copies excluded, exactly one finding"), whose script and suite no branch commit touched (main has since tidied the suite in ac7eeea). The fleet gather block itself ("the harness runs a skill's whole pre-compute block as one shell invocation") is an undated harness claim in about 55 skills; one dated four-part record on the worktree skill, which owns the mechanism, with the copies pointing at it, clears every site at once. discovery adds six undated claim families across thirteen files (silent preload failure,AskUserQuestionand plan-mode tools filtered from non-fork subagents, the Workflow tool absent from subagents, background as the default execution mode, spawns permission-classified before launch); the fix is one dated record per claim in the plugin'sreference/parent-contract.mdwith the skills pointing at it. claude-config adds the undatedpre-v2.1.211boundary at six body sites (the dated owner isaudit-permission-state/reference/criteria.md), dated-but-triggerless stamps across eight files, theconflict-scan.shprecision figures inconflict-criteria.md, and the "Fable 5 subpage" pointers inaudit-prompting-postures/reference/postures.mdthat need a Fable 5.1 sibling once it exists. discipline adds five files of undated fork-mode harness claims (sweep-all/SKILL.md, its two references,scrutinize-dont-coast/SKILL.md,use-your-skills/SKILL.md). claude-memory adds the undated upstream-issue state ataudit/reference/official-guidance.md:168. testing adds the xUnit v3 and .NET 10 framework-trap claims (diagnose/SKILL.md:68,diagnose/context/investigate.md:16,write/SKILL.md:74) and theplaywright-cliversion floor inrun-e2e/context/e2e.md:12. planning also adds two undated harness claims to F6: the agent-teams "experimental, default-off" status inplan/SKILL.mdand the "cannot read effort or advisor state" claim ininterview/context/session-config.md.plugins/ai-slop/skills/audit/scripts/detect.test.shfails its four "git absent" cases (4 of 202) on this Windows host because the test symlinks the shell builtinprintfinto a fake PATH directory (ln: failed to create symbolic link); the scripts are unchanged by the ai-slop commit.plugins/disk-hygiene/skills/clean/scripts/guard_launch_monitor.test.shfails its two telemetry-sink cases andhygiene.test.shfailstest_stash_must_exist_in_an_independent_checkoutandtest_preview_allows_root_children_os_managed_snapshoton this host with the scripts byte-identical to HEAD; neither case reads markdown, and the frontmatter-belt assertions intest_hygiene.pythat do readclean/SKILL.mdpass after the disk-hygiene commit.plugins/code-tidying/skills/audit-comment-residue/scripts/detect.test.shfails 4 of 53 cases on this host (embedded quote and backslash unescaping in the preview script, arrow-in-filename, tab-bearing path) withdetect.shand the suite byte-identical to HEAD; the code-tidying commit touches only prose the script does not read.plugins/knowledge/skills/docpage-digest/scripts/check-fences-exact.test.shfails six cases on this host with aUnicodeEncodeErrorwriting U+2265 to the cp1252 console, script and suite byte-identical to HEAD; the knowledge commit touches no fence, quote payload, or script.plugins/education/skills/teach/scripts/list-workspaces.test.shfails "worktree lists the MAIN repo's workspace" on this worktree checkout with the script unchanged.PLAN.md (graduated into the record and pruned; last held at f675afa)
prompt-audit-skills
Brief
TLDR
Run the bundled
/claude-api prompt-auditover every skill in this marketplace against Claude Fable 5.1, apply the high and medium confidence findings in waves, and ship one PR with a durable record, per-plugin version bumps, updated evals, and an inventoried follow-up list.Goal
Every skill body, its context and reference files, and every agent definition has been audited for dated prompting patterns using
shared/prompt-audit.md(Groups 1a to 1f, 2, 3, 4 and the keep list), with Claude Fable 5.1 as the target model. Findings at high or medium confidence are applied; low-confidence and flag items are recorded. Findings are mapped to the in-repo catalog row (claude-config:audit-instructionsI1 to I29) where one exists so catalog gaps are visible.Constraints
check-skill.sh, and repo conventions are not binding on the audit. When one blocks a warranted change it is updated or removed in the same commit, and a superseding ADR is written at the end for every accepted decision the audit contradicted.plugins/*/skills/**/*.mdexcludingvendor/andevals/, plusplugins/*/agents/*.md. Hooks prompt text, output styles,.claude/rules,CLAUDE.mdandAGENTS.mdare out of audit scope except for edits that codify the Group 2 history rule.check-skill.shcheck 3 rejects means the check is updated, not the phrase restored.fleetorfable-5-1. Both labels are applied at high and medium confidence; the label is recorded so a consumer on another model can read what changed.evals/evals.jsonis updated in the same commit whenever its body changes.docs/prompt-audit-skills), one PR.Acceptance criteria
docs/specs/prompt-audit-skills-2026-09.mdexists with: stated assumptions (scope, target model), corpus, per-wave findings tables (file:line, evidence, pattern, why obsolete, confidence, action, label, catalog row), applied versus withheld, catalog gaps, and a## Follow-upssection.clean..work/prompt-audit-skills/reports/<plugin>.md; accepted hunks applied; evals in step;bash plugins/skill-quality/scripts/check-skill.sh <skill-dir>passes (or the check was updated and its test updated); plugin commit landed with bump and CHANGELOG entry. Per wave: every plugin closed, record updated, handoff written.scripts/affected-tests.sh --run,scripts/check-changelog-parity.sh --check,--check-bump origin/main,--check-preserved origin/main,--check-order,scripts/check-purged-em-dashes.sh, markdownlint,scripts/check-skill-precompute-compose.sh --all..claude/rules/states the Group 2 history rule forplugins/*/skills/**and is indexed in AGENTS.md's on-demand table.docs/topics/prompt-audit-skills/PLAN.mdis graduated into the record and removed before the PR, so the contract-slice prune gate passes.Captured assumptions
claude-apiskill at Claude Code 2.1.258 is the current authority for prompt-audit; its guide and the Fable 5.1 migration sections are read from the session's bundled-skills directory.skillUsagecounts from one machine are the usage signal; they rank session-flow, planning, and source-control first.claude-config:unhobble.Out-of-scope
.claude/rules,CLAUDE.md,AGENTS.mdas audit targets.docs/except the record, the new rule, the ADR, and conventions that tell skill bodies to carry archaeology.Deferred questions
Plan
(empty; execution runs directly from the Brief's execution contract)
🤖 Generated with Claude Code
https://claude.ai/code/session_01GjdFagSG1CvQop76ZxM28k