feat(docs-hygiene): add audit-progressive-disclosure skill (0.16.0) - #2888
Conversation
…pic slice Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
…interview ledger Q1-Q7 locked (docs-hygiene home, load-tier corpus, audit-progressive-disclosure name, single taxonomy, read-only v1, detect.sh+judgment split, advisory thresholds); research dispatch baseline touched. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
The discovery memory root now carries its self-ignoring .gitignore guard, and the topic-docs convention keeps the memory tier out of version control. The two earlier stop-hook-driven commits pre-dated the guard; remove those files from the index only — they remain on disk for the session. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
…audit skill Contract for /docs-hygiene:audit-progressive-disclosure, closed over a 16-question interview (register: 16 answered, 0 open) and a verified /discovery:research run (criteria 4/7 PASS by fresh-context verifier, project fit PASS): 7-shape/2-lane findings taxonomy over a three-tier load-cost model, read-only v1, detect.sh facts + model judgment, advisory Anthropic-prescribed thresholds with the two-band TOC treatment, and the docs-hygiene 0.16.0 integration set. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
Read-only classifier grading agent-facing instruction markdown against a three-tier load-cost model (always-loaded / invocation-loaded / on-demand). Seven finding shapes in two lanes: split opportunities (oversize, mixed-concerns, tier-mismatch) and hub/spoke structure defects (blind-pointer, orphan-spoke, deep-nesting, missing-toc), with audit-noise-style tier semantics and per-shape treatment guidance. Ships a deterministic detect.sh fact emitter (sizes, heading census, load-tier classification, pointer inventory with source-line context, orphan/chain detection; corpus exclusions scan-root-relative so explicit fixture descent still works) with a 28-case contract test, a context/tier-model.md spoke carrying the official numbers, split triggers, pointer-quality criteria and citation posture, evals with three fixture sets (mixed-concern instruction file, healthy hub/spoke, broken hub/spoke), and the shared clean-tree fallback row. Postures per the locked Brief (docs/topics/progressive-disclosure-skill/ PLAN.md): thresholds advisory and Anthropic-prescribed (ceilings, not targets; "approaching" is the split trigger), two-band TOC treatment for the official 100-vs-300-line inconsistency, no "should have spokes" shape for small single-file skills, pointer chains beyond one level flagged. Grounded in a verified multi-source research pass. Integration: plugin 0.16.0, README row, CHANGELOG, marketplace tags (progressive-disclosure, context-engineering), allowed-tools pairing roster. Gates: check-skill PASS (0 errors, 0 warnings), evals schema + quality lint PASS, detect.test.sh 28/28, pairing test PASS, markdownlint/typos/shellcheck/shfmt clean. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
…reatments First live run of the new skill against its own plugin surfaced two Tier 1 missing-toc findings (rename-references patterns.md at 723 lines, extract-ssot actions/identify.md at 314) and fifteen awareness-tier spokes in the contested 100-300-line band. Apply the treatments across the board, aligning on the stricter official reading: - Fence-aware Contents sections (anchor-validated by markdownlint MD051) on all sixteen enumerable reference spokes, headings inside fenced output examples excluded. - patterns.md additionally gets a jump-by-form grep recipe (it is lookup-shaped). - lessons.md gets the drift-safe alternative instead of a list: a jump-by-number grep recipe with the append-only rationale stated — an enumerated TOC would drift on every append. Re-verified: markdownlint 49 files clean, detect.sh shows every 100-plus-line enumerable spoke toc=yes, check-skill PASS on all four touched skills, typos clean. Findings from the live run now clear. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Claude finished @kyle-sexton's task in 4m 2s —— View job Claude finished the code review
Review scopeThis repo carries a FindingsOne inline comment posted:
Everything else held up under inspection: |
|
Claude finished @kyle-sexton's task in 1m 24s —— View job Security Review —
|
…merge The contract-slice-prune-gate red-lines any change set leaving paths under docs/topics/ — Contract tier lives on the task branch only. The durable outcomes are already graduated (the skill body, tier-model spoke, and CHANGELOG carry the design); delete the slice and repoint the CHANGELOG's contract citation at the PR instead of the pruned path. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
|
Last security-reviewed head: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6c3d67e80d
ℹ️ 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".
|
Claude has reviewed this PR 5 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
|
Claude finished @kyle-sexton's task in 4m 2s —— View job /review:code-review
Reviewed the diff ( Note: this environment's Bash access for this lane is scoped to Posted 2 inline findings:
Everything else checked out: the eval fixtures ( |
… detector Codex (4) and the Claude review lane (1) each surfaced real defects; all five verified against the code and fixed: - Tier classification now takes the path relative to its scan root: a root-level CLAUDE.md/AGENTS.md stays always-loaded, but the same basename nested deeper is a subtree file and classifies invocation — matching the skill's own tier-model spoke instead of contradicting it. - Orphan detection is now hub-rooted reachability (BFS from SKILL.md over markdown links plus backtick path mentions) rather than an any-inbound-mention test, so a disconnected spoke cycle no longer evades detection; lexical normalization mirrors the sibling audit-encapsulation resolver (no realpath, Git Bash parity). - The TOC heuristic counts anchor-link occurrences (grep -o) within the first 40 lines instead of matching lines anywhere: a compact one-line TOC now registers, and three scattered deep anchors no longer false-pass. - The pre-computed uncommitted-files line is labeled as a 10-entry sample and the empty-arg route now says to re-derive the full list in-session — the sample is orientation, never the corpus. - The Auto-detect list renders as five items again (items 3 and 4 were merged on one source line). detect.test.sh grows to 34 cases covering each fix: nested CLAUDE.md tier, disconnected-cycle orphans, backtick-mention reachability, deep scattered anchors, and the compact one-line TOC. Regression run against the plugin corpus is unchanged (0 orphans, 22 chains). Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
|
Claude finished @kyle-sexton's task in 1m 10s —— View job Security Review —
|
|
Claude finished @kyle-sexton's task in 3m 24s —— View job Claude finished @kyle-sexton's task — Todo list
Review scope
FindingsOne inline comment posted:
The other four fixes in this commit held up under trace-verification:
No other issues found in the delta introduced by this commit. |
…te catalog Two independent reds: - Review finding (third pass): the nested-CLAUDE.md tier fix was a no-op in single-file mode — TROOTS held dirname(arg), so rel always collapsed to the basename and a directly-targeted packages/api/CLAUDE.md still classified always. File args now use root "." so the AS-TYPED path is the tier-relevant form: a bare CLAUDE.md is the invoker's working-dir file (always), a nested relative path keeps its subtree nesting (invocation) — matching the memory docs' cwd semantics. Absolute file args classify by their full path; the judgment layer owns that ambiguity. Two new single-file-mode test cases (36 total). - plugin-gate: docs/CATALOG.md is generated from plugin descriptions and went stale when docs-hygiene's description gained the new skill; regenerated via scripts/generate-catalog.mjs. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
|
Claude finished @kyle-sexton's task in 1m 33s —— View job /review:code-review
Review scopeSkip-gate: this head (
FindingsNone. This commit ( Previously: Fix verified by hand-tracing the new logic:
I could not execute No other findings. All five issues raised across the prior review rounds on this PR (numbered-list formatting, nested- |
|
Claude finished @kyle-sexton's task in 53s —— View job /review:security-reviewTask list
Scope reviewed: this lane already posted clean security reviews at heads What changed in that delta (3 files, +17/-2):
No No security issues found. The delta since the last reviewed head is a self-contained bug-fix (path-prefix logic) to a local, read-only shell fact-emitter, plus test-only and documentation-only changes — same posture as the prior clean reviews on this PR: no new injection surface, no trust-boundary changes, no CI/workflow changes. |
Second generated artifact behind plugin-gate: docs/SKILL-CHEAT-SHEET.md is generated from skill metadata.summary values and went stale when the new skill landed. Regenerated via scripts/generate-cheatsheet.mjs; all three generators (catalog, cheat sheet, identity-prerequisites) now run clean and scripts/validate-plugins.sh passes locally end to end. Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa
|
Claude finished @kyle-sexton's task in 1m 43s —— View job /review:code-review
Review scopeNote: this PR merged into That's the entire delta: one commit ( FindingsNone. Verified the addition against its sources:
All five substantive findings raised across earlier review rounds on this PR (numbered-list formatting, nested- |
Catching the branch up to the current main before push. The commit this brings in adds a docs-hygiene skill and touches none of the canary's files, so the reconciliation resolved in the previous merge stands unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwdkpWf6bptu3AqTMoeg2H
No linked issue
Summary
Adds
/docs-hygiene:audit-progressive-disclosure— a read-only classifier that grades agent-facing instruction markdown against a three-tier load-cost model (always-loaded / invocation-loaded / on-demand), finding both split opportunities (oversized, mixed-concern, or tier-inappropriate content) and hub/spoke disclosure defects (blind pointers, orphan spokes, deep nesting, missing TOCs). Bumps docs-hygiene to 0.16.0 and applies the treatments from the skill's first live run against its own plugin.Fix
plugins/docs-hygiene/skills/audit-progressive-disclosure/: SKILL.md hub (154 lines) with a 7-shape/2-lane findings taxonomy and audit-noise-style Tier 1/2/3 semantics;context/tier-model.mdspoke carrying the official numbers (500-line SKILL.md cap with "approaching" as the split trigger, 200-line CLAUDE.md target, listing caps/budgets), split triggers, pointer-quality criteria, and an explicit citation posture (Anthropic-prescribed vs independently corroborated vs community-advisory).scripts/detect.shdeterministic fact emitter (sizes, heading census, load-tier classification, pointer inventory with source-line context, orphan/chain detection) with scan-root-relative corpus exclusions so explicit fixture descent still works; 28-casedetect.test.sh.8bb24ac9); its durable outcomes live in the skill body, the tier-model spoke, and the CHANGELOG entry.6c3d67e8): the skill's first run against docs-hygiene itself found 2 Tier-1missing-tocfindings (723-linepatterns.md, 314-lineidentify.md) and 15 awareness-band spokes — all 16 enumerable spokes got fence-aware, anchor-validated Contents sections;patterns.mda jump-by-form grep recipe; append-onlylessons.mda drift-safe grep recipe instead of a list that would drift on every append.progressive-disclosure,context-engineering), shared clean-tree-fallback row, allowed-tools pairing-test roster.Verification
check-skill.sh audit-progressive-disclosure: PASS — 0 errors, 0 warnings (description 1154/1536 chars, 154/500 lines, summary 80/100 codepoints).detect.test.sh: 28/28 cases pass;check-evals-quality.sh: PASS, 0 warnings;evals.jsonvalidates against the bundled schema.allowed-tools-pairing.test.sh: all checks pass with the new skill in the roster.toc=yes; the two Tier-1 findings clear;check-skillPASS on all four touched skills.contract-slice-prune-gate: initially red on the Brief slice, green after the prune commit8bb24ac9(the gate's intended lifecycle — slice on branch, pruned before merge).Related
docs/conventions/topic-docs/README.md) — governs the Contract-tier slice lifecycle this PR followed; the pruned Brief remains readable in branch history atb5ff2b31.🤖 Generated with Claude Code
https://claude.ai/code/session_01WNJdbHgak9WnA46CVedYEa