docs(encapsulation): remediate audit-encapsulation sweep findings + add no-scope confirmation to the skill - #2703
Conversation
…acts Remediates 10 of the 16 confirmed violations from a repo-wide /docs-hygiene:audit-encapsulation sweep (plus one same-shape prose cite the sweep's grep cannot see): - Path B re-points: loop-lane and pr-body-convention docs, machine-health's Windows check catalog, and code-tidying's tidy SKILL.md now cite owning skills by slash invocation instead of private paths and heading anchors. - Path A promotion: the <state-key> scheme's canonical definition moves to docs/conventions/plugin-data-report-keying/ (all six extract-ssot verify gates passed); audit-pass's reference defers to it, no dual-maintenance. - Path A refused at Rule of Three for the untrusted-content fence (two consumers): work-items now states its constraint self-contained with the babysit-prs alignment named in prose, per the contract's intentional- duplication technique. - The 7 facade-blocked hits keep their cites and gain TODO(audit-encapsulation) markers pointing at #2701 / #2702. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
A bare invocation with no inherited working set now asks one confirmation presenting prescribed defaults (repo-wide scope, detect-only, worker fan-out off, 2-3 concurrent workers when the user opts into fan-out and no rate-limit telemetry is readable). New sweep action skips the confirmation for an explicit repo-wide run. Eval cases 7-8 pin both behaviors; 0.12.0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
|
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. |
…uched plugins The changelog-parity gate caught two defects in the previous commits: the docs-hygiene 0.12.0 entry accidentally absorbed the 0.11.3 release heading, and claude-config, code-tidying, machine-health, and work-items were edited without version bumps. Restores the heading; bumps to 0.38.2 / 0.10.2 / 0.10.3 / 0.35.23 with Keep-a-Changelog entries describing the encapsulation remediation in each. All three parity checks pass locally. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
|
Claude encountered an error after 0s —— View job I'll analyze this and get back to you. |
Removes the last unblocked violation from the encapsulation sweep: conflict-criteria.md cited claude-memory:audit's private criteria file via a cross-plugin relative link. Path A promotion refused honestly at Rule of Three (the boundary's other reproductions are immutable ADRs), so the sibling is now named by skill + check id with the question quoted inline. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c14a4e220d
ℹ️ 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 encountered an error after 0s —— View job I'll analyze this and get back to you. |
…ed copies Codex review caught that the §3 deferral linked the repo-level convention doc by relative path, which dangles in a marketplace install (only the plugin dir is cached). The one-line grammar now stays inline as a marked intentional duplicate naming the convention as source, with lib/state-key.sh as the in-plugin operational definition; the cross-boundary path link is gone. Full segment derivations remain only in the convention doc. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
|
Claude encountered an error after 1s —— View job I'll analyze this and get back to you. |
|
Claude encountered an error after 1s —— View job I'll analyze this and get back to you. |
A fresh-context verification pass over the full PR diff surfaced six defects; this applies all of them: - The shared lib/state-key.sh header (canonical + claude-memory copy, re-synced via scripts/sync-state-key.sh) now names the plugin-data-report-keying convention as the scheme's source instead of audit-pass §3, which stopped specifying it after the promotion; claude-memory bumped to 0.9.1 per the carrier-bump contract. - audit-instructions and audit-prompting-postures attribute the scheme to the convention rather than audit-pass §3. - The claude-config changelog claim is corrected: canonical prose lives in the convention doc; the lib header keeps a named operational duplicate. - loop-lane's remaining reference/loop.md path cite is re-pointed to public naming, matching the treatment its twin received in the same PR. - ci.yml TODO markers now state they cover every reaching line in the job. - audit-encapsulation's no-scope rule states that a scope worded in the invocation suppresses the confirmation (resolves the eval-1 collision). - work-items' fence paragraph leads with the merge-lane alignment so 'merge-lane phrasing' keeps its antecedent. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
|
Claude finished @kyle-sexton's task in 1m 13s —— View job Security Review —
|
|
Claude finished @kyle-sexton's task in 3m 23s —— View job Claude's review —
|
|
Last security-reviewed head: |
|
Claude has reviewed this PR 3 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
…2701/#2702 Resolves the 7 facade-blocked violations by conforming (resolution 1 of #2701) rather than amending the contract, which makes the authoring-repo CI carve-out question moot: - knowledge 0.12.2: youtube-digest and course-digest each gain scripts/run-tests.sh (install|build|test|all) delegating into their private extraction/ packages. - ai-briefing 0.7.2: generate gains scripts/run-tests.sh (install|test|all) delegating into its private output/build/ package. - machine-health (0.10.3 entry extended): audit gains scripts/run-tests.ps1, a pass-through wrapper over the private Pester runner in tests/; the README invokes the wrapper. - ci.yml: the three npm lanes invoke the facades; the remaining cache-dependency-path lines are KIND-2 data references for cache keying, commented as such at the site. - CLOUD-SESSIONS.md: on-demand install instructions route through the facades. - All TODO(audit-encapsulation) markers removed; detector raw count drops 78 -> 74 and the contract-adjudicated illegal count reaches 0. Verification: shellcheck + shfmt clean on the three bash facades; the usage error path exercised; actionlint clean; changelog parity --check-bump green; markdownlint clean on touched docs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
…udit-encapsulation-h8oh20 # Conflicts: # plugins/docs-hygiene/.claude-plugin/plugin.json # plugins/docs-hygiene/CHANGELOG.md # plugins/knowledge/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 1m 58s —— View job Security Review —
|
|
Claude finished @kyle-sexton's task in 3m 5s —— View job Claude's review —
|
…bstone plugin-gate failed on the facades commit: validate-plugin-contracts.mjs tombstones skills/generate/scripts entirely (it once held the legacy automated-X collectors), and the new public test entry facade landed on that path. The carve-out allows exactly run-tests.sh there and keeps the ban on every other file plus all of seed/; the automatedXTokens content scan already covers the carved-out file, so a collector cannot return under the allowed name. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
|
Claude finished @kyle-sexton's task in 1m 1s —— View job Security Review —
|
|
Claude finished @kyle-sexton's task in 2m 30s —— View job Claude's review —
|
… state-key claim (#2763) Closes #2729 ## Summary Keeps the `audit-pass` non-git target refusal, but drops the stale "no no-git state key" justification now that `lib/state-key.sh` keys `nonrepo/`. The gate is re-argued from the four remaining real losses. ## Fix - In `plugins/claude-config/skills/audit-pass/SKILL.md`, remove the false state-key bullet and recount "five places / all five branches" → four (HEAD baseline, Class 3 worktree derivation, `git status --porcelain` assertion 2.1, tracked-team suppression). - Align eval 30 expected output and the "do not invent fallbacks" expectation with that four-reason framing. - Bump `claude-config` to `0.38.3` with a CHANGELOG entry for changelog-parity. ## Verification - `bash scripts/check-changelog-parity.sh --check` and `--check-bump origin/main` pass. - `bash plugins/claude-config/lib/state-key.test.sh` — 23/23, including `nonrepo/` case 5. - Grep of live skill + eval 30 shows no remaining "five places" / "no no-git state key" claims. ## Related Refs #2703 (state-key promotion that surfaced the drift); `docs/conventions/plugin-data-report-keying/` (`nonrepo/` rung). Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Kyle Sexton <kyle-sexton@users.noreply.github.com>
Composes both sides' intent across the youtube-digest -> video-digest rename: - Version supremacy: plugin.json stays 0.13.0 (> main's 0.12.6) with this branch's widened description; CHANGELOG keeps main's 0.12.1-0.12.6 entries verbatim below the 0.13.0 entry, which now notes the 0.12.6 <slice-slug> resume argument carries forward under /knowledge:video-digest. - Resume-arg port (main #2821): the <slice-slug> rename is ported into the renamed hub's SKILL.md (description, argument-hint, action router, resume block, handoff message), run-resume.js usage strings, and the resume eval expectation - main's breaking change is preserved, not reverted. - Liveness relocation (main #2817): extraction/liveness/ and the #2703 scripts/run-tests.sh facade are git mv'd into video-digest/ with every path reference updated (LIVENESS.md, probes.json, the source-liveness workflow, ci.yml facade calls); the harness's VIDEO_DIGEST_-first cookie env resolution and its legacy YOUTUBE_ fallback are kept as designed. - ADR renumber: main owns 0010/0011 by merge order; this branch's ADRs move to 0012/0013 (dispatch-video-sources, keep-storage-format). - check-rename-sweep allowlists the two rename ADRs (historical-record class, same rationale as the CHANGELOG); main-side stale skill refs in knowledge/reference and docs-hygiene are updated to video-digest. Gates: tsc clean, vitest 486/486 (71 files, +19 liveness), rename sweep + self-test green, check-skill PASS (video-digest, course-digest), markdownlint clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Closes #2701
Closes #2702
Summary
A repo-wide
/docs-hygiene:audit-encapsulationrun classified 85 candidate cites (fresh-context adjudication on the 8 borderline ones) and confirmed 16 violations. This PR remediates all 16: the 9 unblocked violations plus one same-shape prose cite the detector's grep cannot see, and the 7 formerly facade-blocked hits, resolved by building thescripts/entry surfaces #2701/#2702 called for. It also gives the skill the no-scope confirmation fallback +sweepaction so a bare invocation confirms scope before running repo-wide.Fix
Remediation (commit 1):
docs/conventions/loop-lane(3 cites incl. twoSKILL.md#heading anchors),docs/conventions/pr-body-convention,machine-health's Windows check catalog, andcode-tidying's tidy SKILL.md (§2.4.1 parenthetical + a §2.6 prose cite) now reference owning skills by slash invocation instead of private paths/anchors.<state-key>scheme's canonical definition moved todocs/conventions/plugin-data-report-keying/after all sixextract-ssot verifygates passed;audit-pass's reference §3 now defers to it (no dual-maintenance).work-items/reference/item-content-trust.mdnow states its constraint self-contained, with thebabysit-prsalignment named in prose per the contract's intentional-duplication technique — themain-pinned raw-GitHub deep link is gone.Skill update (commit 2):
audit-encapsulationgains the no-scope confirmation — a bare invocation with no inherited working set asks ONE confirmation presenting prescribed defaults (repo-wide scope, detect-only, fan-out off; 2–3 concurrent workers when fan-out is opted into and no rate-limit telemetry is readable, resolving pacing fromrate-limit-guard's reader contract when it is); newsweepaction skips the confirmation; eval cases 7–8 pin both behaviors.Verifier fixes (commits 3–6): changelog-parity repairs, the Codex-flagged cross-plugin link removed from
run-state-and-resumability.md, and six fresh-context-verifier findings applied — including re-syncing bothlib/state-key.shheaders (claude-memory 0.9.1) so attribution follows the promoted convention. The four sites that cited §3 by relative path are all re-pointed; only legal intra-skill self-cites remain.Facades (commit 7 — closes #2701, #2702): conform rather than carve out.
knowledge(youtube-digest + course-digestscripts/run-tests.shfacades over their privateextraction/packages),ai-briefing0.7.2 (generatefacade overoutput/build/),machine-health(auditscripts/run-tests.ps1wrapper over the private Pester runner). The three ci.yml npm lanes andCLOUD-SESSIONS.mdinvoke the facades; the remainingcache-dependency-pathlines are KIND-2 data references, commented as such. AllTODO(audit-encapsulation)markers removed; the authoring-repo CI carve-out question is moot.Post-merge reconciliation (final commits): main released its own docs-hygiene 0.12.0 and knowledge 0.12.2 mid-review, which both conflicted and silently suppressed the
pull_requestworkflows (no test-merge commit); the merge from main renumbers this PR's releases to docs-hygiene 0.12.1 and knowledge 0.12.3, takes main's newer plugin description, and carves exactlyrun-tests.shout ofvalidate-plugin-contracts.mjs's ai-briefing scripts tombstone (the collector-token content scan still covers the carved-out file). Plus a grammar fix and a conflict-marker cleanup.Verification
detect.shregression suite: all 36 checks pass;allowed-tools-pairing.test.shpasses;state-key.test.shall 23 checks pass;validate-plugin-contracts.mjs, catalog, and cheatsheet checks pass post-carve-out.shellcheck+shfmtclean on the three bash facades; facade usage error path exercised.markdownlint-cli2clean on every touched markdown file;actionlintclean onci.yml;plugin.jsonvalidates;evals.jsonparses with sequential ids 1–8; changelog parity--check-bumpgreen for all eight bumped plugins (ai-briefing 0.7.2, claude-config 0.38.2, claude-memory 0.9.1, code-tidying 0.10.2, docs-hygiene 0.12.1, knowledge 0.12.3, machine-health 0.10.3, work-items 0.35.23).Related
Every thread this work opened is either fixed in this PR or tracked: #2697 (cloud rate-limit telemetry gap the skill's fixed concurrency default works around), #2716 (detector misses relative-path cites), #2728 (plugin-quality audit of the skill itself: detector/adjudication divergence, no terminal state for acknowledged hits, filter/scope gaps), #2729 (
audit-pass's non-git refusal narrative cites a state-key limitation the shared executable no longer has — surfaced by this PR's promotion).🤖 Generated with Claude Code
https://claude.ai/code/session_01FDxmoBKkwCsHPgsu93mw2m
Generated by Claude Code