Skip to content

refactor(plugins): delete the 10 external-tool check and check-prerequisites skills (*:check wave 3) #12488

Closed

Description

@kyle-sexton

Refs #7582

Blocked by #12486

Outcome

This wave deletes the 10 external-tool prerequisite skills sized in #11956:

  • six check skills: context7, disk-hygiene, explainer-video, knowledge, playwright and speech;
  • four check-prerequisites skills: animation, instruction-placement, skill-quality and toolchain.

Each plugin's hook or skill notice then names its own bundled checker (#12485). #11956 measured the deletions at a git diff --no-renames of 44,175 bytes.

All 10 plugins already ship a prerequisites.json and lib/prerequisites.mjs, checked on origin/main at b000bb5. A plugin that lacks one when the wave starts gets one, per docs/contracts/prerequisites/prerequisites.schema.json, before its skill is deleted. context7:check also reports CONTEXT7_API_KEY auth and MCP server state. Its prerequisites.json declares only a cli and a runtime entry today. The schema already has env and mcp kinds (prerequisites.schema.json:43), so this wave adds those entries or lists the loss.

Done when

  • Before any edit, a comment here gives the measured git diff --no-renames byte size of the full wave. The size must be under 262144 bytes.
  • ls -d plugins/*/skills/check | wc -l goes from 9 to 3. ls -d plugins/*/skills/check-prerequisites 2>/dev/null | wc -l goes from 4 to 0.
  • Both of these print nothing:
    • git grep -c -E '/(context7|disk-hygiene|explainer-video|knowledge|playwright|speech):check([^a-z0-9-]|$)' -- . ':!**/CHANGELOG.md' ':!.changes/**'
    • git grep -c -E '/[a-z0-9-]+:check-prerequisites\b' -- . ':!**/CHANGELOG.md' ':!.changes/**'
  • docs/contracts/prerequisites/README.md no longer describes a check-prerequisites skill (today at :156-158).
  • Eval evidence of no loss of notice behavior, per plugins/playbooks/skills/skill-authoring/reference/skill-criteria.md ("Cutting text", /evals:plugin-eval --baseline <before.json> --margin <m>):
    • The baseline is context7/evals/ck-install-routed and context7/evals/ck-read-only on main, rewritten to name the bundled checker. They still assert a read-only run with no install.
    • Each of the other 9 plugins gets one plugin-level case with that assertion.
    • The run posted here shows non-inferiority at the stated margin.
  • scripts/validate-plugins.sh passes, and so does bash scripts/sync-shared-copies.sh --check-bump origin/main.
  • A merge probe is posted per D82/Q186: after merge, the skill picker lists none of these 10 skills, and one hidden tool produces a notice whose command runs.

Out of scope

  • Renaming the three non-prerequisite check skills (naming slice), waves 1 and 2, and /harness-ops:prerequisites.

Related

Activity

  1. added
    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.
    host-runNeeds an agent run or builder session on a host; not a person or the issue lane.
    on Nov 2, 2026
  2. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    Lane 1 decision, made from evidence: context7's auth and MCP-server probes move into its prerequisites.json under the schema's existing env and mcp kinds, so nothing is lost. Any probe still left over stays as a script inside the plugin, as decided on #12486.

  3. github-actions commented on Nov 2, 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: #12486, #12485

    Understood: delete 10 external-tool prerequisite skills (six check, four check-prerequisites) across their plugins. Each plugin's notice would then name its bundled checker. The issue also asks for updated contract docs, eval evidence and a post-merge probe.

    The done-when items are specific. The host-only items (merge probe, eval runs) are handled by admission routing. Sequencing depends on #12486 (named in the body) and on the notice contract #12485, which is still open.

    Related open issues: #12485, #12486. The wave 1 and wave 2 issues cover other skills, so they are not duplicates.

    Automated triage, applied by the lanes App.

  4. added
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 2, 2026
  5. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: it carries host-run; Size large: the split into sub-issues at intake is pending (owner Q93). Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).

  6. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: admission moved the issue to status: confirmed; its comment says why.

  7. self-assigned this
    on Nov 3, 2026
  8. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  9. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    AI-generated by the lane 4 session.

    Measured size of the full wave: 260,828 bytes of git diff --no-renames, under the 262,144-byte cap by 1,316 bytes. No further split. Nothing is committed yet.

    Method: a staged dry build of all of it (the 10 skill deletions, 5 probe deletions, reference edits, prerequisites.json changes, 11 eval cases, 11 fragments, the regenerated cheat sheet), then git diff --cached --no-renames <base> | wc -c, with base the wave 2 head 2365708 (#12640). In that build plugins/*/skills/check reads 3, plugins/*/skills/check-prerequisites reads 0, and both done-when greps print nothing.

    The first build came to 307,504 bytes. Two things moved out to fit:

    • The hook::prerequisite_fields_to fallback in lib/hook-utils.sh and its 20 copies, with the 15 fragments those copies need: about 34 KB. Nothing reads the name it derives, so it is dead code, and it goes in a follow-up.
    • A stale playwright:check in 4 eval sample files, where it is only an example of "a different skill". It goes in the same follow-up.

    The rest of the reduction is smaller eval samples. If a smoke run corrects an eval case, this figure moves by a few hundred bytes. The PR carries the final number.

  10. kyle-sexton commented on Nov 3, 2026

    @kyle-sexton
    MemberAuthor

    Merge probe. Wave 3 merged as #12770 (dcae0f5e03). Run against main at dcae0f5, from copies outside any repository.

    • plugins/*/skills/check on main: 3: instruction-placement, skill-quality and toolchain, the non-prerequisite checks refactor(plugins): give the three non-prerequisite check skills distinct names so no check leaf remains #12489 renames. plugins/*/skills/check-prerequisites: 0. Both done-when greps print nothing, checked on the PR head.

    • Skill picker: one live claude -p session with --plugin-dir for all 10 plugins, user settings excluded. Its init line lists 54 skills. context7, disk-hygiene, explainer-video, knowledge, playwright, speech and animation list no check or check-prerequisites leaf. The 3 left are the gate checks above.

    • Hidden tool: disk-hygiene's PreToolUse guard (run-python-hook.sh with destructive_guard.py), with every Python off PATH. Exit 0, with this notice:

      disk-hygiene: no usable Python 3 (python3, python, py -3); hygiene.py commands are denied this session. Install Python 3 ahead of WindowsApps on PATH; diagnose with: node '<root>/plugins/disk-hygiene/lib/prerequisites.mjs' check '<root>/plugins/disk-hygiene'
      

      The printed command runs as written and reports it, exit 1:

      PASS  node (runtime, required): <root>/bin/node
      FAIL  python3 (runtime, required): python3 or python or py was not found on PATH. [...]
      disk-hygiene: failed=1 warned=0 passed=1
      

    Limits

    #12489 is unblocked. Closing.

    Posted by the lane 4 session. This was generated by AI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

host-runNeeds an agent run or builder session on a host; not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

Type

Fields

Work status

confirmed

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions