Skip to content

refactor(toolchain): move the ratchet skill from review to toolchain and delete three empty baselines #8543

Open

Description

@kyle-sexton

Refs: #7584
Depended on PR #8182 (merged 2026-10-20T06:19:51Z); start from main after it.

Agent Brief

Type: Task
Summary: Move /review:ratchet to /toolchain:ratchet with every reference updated, add the rule that a baseline or allowlist reaching zero entries is deleted with its reading code, and apply that rule to the three empty baselines no workflow file reads.

Current behavior:

  • The skill lives at plugins/review/skills/ratchet/ (SKILL.md, evals/evals.json, scripts/ratchet.py, scripts/suppression-scan.py). Both scripts are generated copies: plugins/performance/scripts/ratchet.py and lib/suppression-scan.py are their sources (scripts/shared-copies.txt:155, 455).
  • Plugin-level evals and probes sit in review: plugins/review/evals/ratchet-{lint-count,refuses-duration,existing-performance-file,zero-lands-rule}/, plugins/review/probes/ratchet.json.
  • A search of plugins and docs for review:ratchet, leaving out every CHANGELOG.md and .changes/**, finds references in: plugins/review/skills/audit-enforceability/ (SKILL.md:186, context/stub-shape.md:38, 99, scripts/emit-stubs.sh:1267, scripts/emit-stubs.test.sh:1039-1040, evals/evals.json), plugins/review/skills/setup/SKILL.md:59, plugins/review/README.md:95, 199, 219, plugins/review/.claude-plugin/plugin.json:30 (ratchet_offer), plugins/review/schemas/review.schema.json:11, plugins/review/probes/{audit-enforceability,quality-gate,fanout,explain-change}.json, plugins/performance/skills/protect/ (SKILL.md:45, 215, 233, evals/evals.json), plugins/performance/probes/protect.json, plugins/performance/evals/pr-ratchets-verified-spawn-count/case.yaml, plugins/code-metrics/skills/audit-suppressions/ (SKILL.md:117, 159, evals/evals.json), docs/skill-cheat-sheet.md:174 (generated) and docs/upstream/cursor-pstack.md:98.
  • Five baselines have zero entries. Three are read only by scripts and docs: scripts/changelog-parity-baseline.txt (read at scripts/check-changelog-parity.sh:114, 149; test scripts/check-changelog-parity.test.sh:31), scripts/hook-userconfig-argv-allowlist.txt (scripts/check-hook-userconfig-argv.sh:24, 47; test scripts/check-hook-userconfig-argv.test.sh:165-202; doc docs/conventions/hook-config-delivery/README.md:140), scripts/skill-description-cap-baseline.txt (scripts/check-changed-skills.sh:78-79; test scripts/check-changed-skills.test.sh:449-521). Comments naming them: scripts/check-silent-revert.sh:245, scripts/check-shell-portability.sh:446.
  • The other two, scripts/test-tmp-cleanup-baseline.txt and scripts/verb-contract-baseline.txt, are named in .github/workflows/pr-require-checks.yml:415, 448, 2255.

Desired behavior:

  • git mv the skill directory to plugins/toolchain/skills/ratchet/, the four eval cases to plugins/toolchain/evals/, and the probe to plugins/toolchain/probes/ratchet.json. The name stays ratchet; its invocation becomes /toolchain:ratchet.
  • scripts/shared-copies.txt:155, 455 name the new copy paths, and scripts/sync-shared-copies.sh regenerates them.
  • Every reference above names /toolchain:ratchet and the new path. ratchet_offer stays a review setting (audit-enforceability makes the offer); only its description text changes.
  • The moved skill gains a reference file stating the zero-entry rule: a baseline or allowlist that reaches zero entries is deleted in the same change, with the code that reads it and the tests of that code. SKILL.md gains one line pointing to it. Inside the skill text the checked-in limit is called "the ceiling".
  • The three script-only baselines are deleted, with their reading code, their test cases and the doc and comment lines naming them.
  • The skill body text is moved, not cut: apart from the invocation name, paths and the one added pointer line, SKILL.md is unchanged.
  • The generated docs (the catalog and docs/skill-cheat-sheet.md) match the moved skill; the PR's CI checks they are current.

Key interfaces:

  • plugins/toolchain/skills/ratchet/ (new home), plugins/toolchain/evals/, plugins/toolchain/probes/.
  • scripts/shared-copies.txt, scripts/sync-shared-copies.sh.
  • scripts/check-changelog-parity.sh, scripts/check-hook-userconfig-argv.sh, scripts/check-changed-skills.sh and their tests.

Acceptance criteria:

  • The directory plugins/toolchain/skills/ratchet exists and plugins/review/skills/ratchet does not.
  • No file under plugins or docs mentions review:ratchet, leaving out every CHANGELOG.md and .changes/**.
  • scripts/changelog-parity-baseline.txt, scripts/hook-userconfig-argv-allowlist.txt and scripts/skill-description-cap-baseline.txt do not exist, and no file under scripts, plugins or docs/conventions mentions changelog-parity-baseline, hook-userconfig-argv-allowlist, skill-description-cap-baseline, CHANGELOG_PARITY_BASELINE or SKILL_DESC_CAP_BASELINE.
  • The reference file under plugins/toolchain/skills/ratchet states the zero-entry rule and uses the words "zero entries".
  • scripts/sync-shared-copies.sh --check exits 0. The PR's CI runs the version-bump check and scripts/validate-plugins.sh (which includes the catalog and cheat sheet currency checks) and they pass.
  • scripts/check-changelog-fragments.sh --check passes. The PR's CI runs the required-fragment check and it passes, with fragments: review major (a skill leaves the plugin), toolchain minor, performance patch, code-metrics patch.
  • CI's check-plugins (copies, fragments, plugin validation), check-skills (skill gate, eval sets) and test-bash (the three changed check suites and emit-stubs.test.sh) pass.

Out of scope:

  • Deleting scripts/test-tmp-cleanup-baseline.txt and scripts/verb-contract-baseline.txt: their removal needs edits to .github/workflows/pr-require-checks.yml, a protected path; file a follow-up for the owner.
  • The stale comment at .github/workflows/pr-require-checks.yml:1687 that names changelog-parity-baseline.txt (same reason; name it in the follow-up).
  • The per-file baseline mode, lint rollout rule and break-glass team setting (later ratchet slice).
  • Running the ratchet's model-graded evals; the move changes no behavior, and check-skills validates the eval sets.
  • /review:fanout changes (sibling slices fanout-spec-first, fanout-eval-and-cap).
  • ADR 0043's mention of the description-cap baseline; an accepted ADR is a dated record.

Origin:

  • /review:ratchet moves to /toolchain:ratchet, name kept: owner's, D63, D81.
  • The limit is called "the ceiling" inside the skill: owner's, D81, Q513.
  • Delete any baseline or allowlist that reaches zero entries, with its reading code, starting with the empty ones; the rule lives in the ratchet reference: ours, Q181, D82, B8.
  • Hold the three .github-named baselines for a follow-up: ours, this triage (protected path).

Do not run with: #7573 (corrections moves audit-enforceability, which this slice edits); the pstack-recheck slice of #7588 (both edit docs/upstream/cursor-pstack.md); the ladder-v2 slice of #7572 (both edit audit-enforceability and plugins/review/README.md).


Slice of #7584, drafted by the Issue Triage session from the thread's recorded decisions.

Activity

  1. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Oct 20, 2026
  2. added theissue type on Oct 20, 2026
  3. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 20, 2026
  4. kyle-sexton commented on Oct 20, 2026

    @kyle-sexton
    MemberAuthor

    The issue lane skipped this before any model turn, because Size is Large and the lane's size config maps Large to split (.github/actions/resolve-config/dimensions.mjs:69, skip: "split-required"). Run 39465320495 posted no outcome, so the issue was left with agent-ready. A separate bug covers that silent skip.

    Next step: split this into Small or Medium slices with /work-items:decompose, then admit the slices. Until then it carries needs-human, and agent-ready is removed.

  5. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 20, 2026
  6. kyle-sexton commented on Oct 25, 2026

    @kyle-sexton
    MemberAuthor

    Released for re-triage under the owner's 2026-10-24 rule: an issue stops for a person only for an intent or vision question, a security call, a host or attended run, or spend outside prepaid credit. The hold label came off and intake triage runs again now; it re-applies a hold, with a numbered question, when one of those applies.

    To hold this issue again, add needs-human (or status: needs-decision) and say why in a comment.

  7. github-actions commented on Oct 26, 2026

    @github-actions
    Contributor

    Intake triage did not triage this issue after 2 dispatches, so the sweep no longer dispatches it and labeled it needs-triage for a maintainer. Triage it by hand, and read the runs for why intake did not:

  8. github-actions commented on Oct 26, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: structural
    Basis: automated intake triage; the lanes App applied this class.

    Size: Large
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Understood: move the ratchet skill from review to toolchain (name kept, invocation becomes /toolchain:ratchet), update every reference, add a reference file stating the zero-entry rule, and delete the three script-only empty baselines along with their reading code, tests and doc lines. The outcome and acceptance criteria are exact, so no decision is open. The work touches four plugins, shared-copy generation, generated docs and several check suites, so it is too big for one change and needs splitting into slices. The three workflow-named baselines are explicitly out of scope. I found no likely duplicates.

    Automated triage, applied by the lanes App.

  9. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triageNot yet classified. Floor until a type and one priority tier are set.priority: mediumReal value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions