From 2b06d35be84d658dce76c3725b269b6ea2733a77 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Fri, 2 Oct 2026 23:13:22 -0400 Subject: [PATCH 1/3] refactor(prerequisites): convert the 22 prerequisites.json files and move the fleet reader to the node checker Closes #5840 Converts every plugin's prerequisites.json from the retired `tools` list to the `requires` schema, ships the shared Node checker into each of those plugins, replaces the eight bash SessionStart probes with `lib/prerequisites.mjs probe`, and rewrites the harness-ops fleet reader in Node so it no longer needs python3. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 7 - docs/conventions/prerequisites/README.md | 9 +- lib/prerequisites.mjs | 29 +- lib/prerequisites.test.mjs | 111 +++- plugins/actionlint/.claude-plugin/plugin.json | 2 +- plugins/actionlint/CHANGELOG.md | 7 + .../actionlint/hooks/actionlint-check.test.sh | 4 +- plugins/actionlint/hooks/hooks.json | 7 +- .../actionlint/hooks/probe-prerequisite.sh | 58 -- plugins/actionlint/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/actionlint/lib/prerequisites.ps1 | 14 + plugins/actionlint/lib/prerequisites.sh | 17 + plugins/actionlint/prerequisites.json | 59 +- plugins/autonomy/.claude-plugin/plugin.json | 2 +- plugins/autonomy/CHANGELOG.md | 6 + plugins/autonomy/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/autonomy/lib/prerequisites.ps1 | 14 + plugins/autonomy/lib/prerequisites.sh | 17 + plugins/autonomy/prerequisites.json | 40 +- .../bash-format/.claude-plugin/plugin.json | 2 +- plugins/bash-format/CHANGELOG.md | 7 + plugins/bash-format/hooks/bash-format.test.sh | 14 +- plugins/bash-format/hooks/hooks.json | 7 +- .../bash-format/hooks/probe-prerequisite.sh | 58 -- plugins/bash-format/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/bash-format/lib/prerequisites.ps1 | 14 + plugins/bash-format/lib/prerequisites.sh | 17 + plugins/bash-format/prerequisites.json | 78 ++- .../biome-format/.claude-plugin/plugin.json | 2 +- plugins/biome-format/CHANGELOG.md | 7 + plugins/biome-format/README.md | 2 +- .../biome-format/hooks/biome-format.test.sh | 14 +- plugins/biome-format/hooks/hooks.json | 7 +- .../biome-format/hooks/probe-prerequisite.sh | 58 -- plugins/biome-format/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/biome-format/lib/prerequisites.ps1 | 14 + plugins/biome-format/lib/prerequisites.sh | 17 + plugins/biome-format/prerequisites.json | 63 +- plugins/biome-format/skills/setup/SKILL.md | 3 +- .../skills/setup/evals/evals.json | 2 +- .../context-budget/.claude-plugin/plugin.json | 2 +- plugins/context-budget/CHANGELOG.md | 6 + plugins/context-budget/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/context-budget/lib/prerequisites.ps1 | 14 + plugins/context-budget/lib/prerequisites.sh | 17 + plugins/context-budget/prerequisites.json | 21 +- .../context-guard/.claude-plugin/plugin.json | 2 +- plugins/context-guard/CHANGELOG.md | 6 + plugins/context-guard/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/context-guard/lib/prerequisites.ps1 | 14 + plugins/context-guard/lib/prerequisites.sh | 17 + plugins/context-guard/prerequisites.json | 42 +- plugins/context7/.claude-plugin/plugin.json | 2 +- plugins/context7/CHANGELOG.md | 6 + plugins/context7/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/context7/lib/prerequisites.ps1 | 14 + plugins/context7/lib/prerequisites.sh | 17 + plugins/context7/prerequisites.json | 40 +- .../.claude-plugin/plugin.json | 2 +- plugins/desktop-notification/CHANGELOG.md | 6 + .../lib/prerequisites.mjs | 597 ++++++++++++++++++ .../lib/prerequisites.ps1 | 14 + .../desktop-notification/lib/prerequisites.sh | 17 + .../desktop-notification/prerequisites.json | 40 +- .../disk-hygiene/.claude-plugin/plugin.json | 2 +- plugins/disk-hygiene/CHANGELOG.md | 6 + plugins/disk-hygiene/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/disk-hygiene/lib/prerequisites.ps1 | 14 + plugins/disk-hygiene/lib/prerequisites.sh | 17 + plugins/disk-hygiene/prerequisites.json | 21 +- .../eol-normalizer/.claude-plugin/plugin.json | 2 +- plugins/eol-normalizer/CHANGELOG.md | 6 + plugins/eol-normalizer/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/eol-normalizer/lib/prerequisites.ps1 | 14 + plugins/eol-normalizer/lib/prerequisites.sh | 17 + plugins/eol-normalizer/prerequisites.json | 40 +- plugins/go-format/.claude-plugin/plugin.json | 2 +- plugins/go-format/CHANGELOG.md | 7 + plugins/go-format/hooks/go-format.test.sh | 8 +- plugins/go-format/hooks/hooks.json | 7 +- plugins/go-format/hooks/probe-prerequisite.sh | 58 -- plugins/go-format/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/go-format/lib/prerequisites.ps1 | 14 + plugins/go-format/lib/prerequisites.sh | 17 + plugins/go-format/prerequisites.json | 59 +- plugins/guardrails/.claude-plugin/plugin.json | 2 +- plugins/guardrails/CHANGELOG.md | 6 + plugins/guardrails/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/guardrails/lib/prerequisites.ps1 | 14 + plugins/guardrails/lib/prerequisites.sh | 17 + plugins/guardrails/prerequisites.json | 41 +- .../harness-ops/.claude-plugin/plugin.json | 2 +- plugins/harness-ops/CHANGELOG.md | 7 + plugins/harness-ops/lib/prerequisites.mjs | 29 +- plugins/harness-ops/prerequisites.json | 44 +- .../harness-ops/skills/prerequisites/SKILL.md | 10 +- .../skills/prerequisites/evals/evals.json | 8 +- .../scripts/check-prerequisites.mjs | 219 +++++++ .../scripts/check-prerequisites.sh | 238 ------- .../scripts/check-prerequisites.test.sh | 158 +++-- .../.claude-plugin/plugin.json | 2 +- plugins/markdown-format/CHANGELOG.md | 8 + plugins/markdown-format/README.md | 14 +- plugins/markdown-format/hooks/hooks.json | 7 +- .../markdown-format/hooks/markdown-format.sh | 2 +- .../hooks/markdown-format.test.sh | 9 +- .../hooks/probe-prerequisite.sh | 58 -- plugins/markdown-format/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/markdown-format/lib/prerequisites.ps1 | 14 + plugins/markdown-format/lib/prerequisites.sh | 17 + plugins/markdown-format/prerequisites.json | 63 +- .../multi-agent/.claude-plugin/plugin.json | 2 +- plugins/multi-agent/CHANGELOG.md | 6 + plugins/multi-agent/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/multi-agent/lib/prerequisites.ps1 | 14 + plugins/multi-agent/lib/prerequisites.sh | 17 + plugins/multi-agent/prerequisites.json | 21 +- plugins/playwright/.claude-plugin/plugin.json | 2 +- plugins/playwright/CHANGELOG.md | 6 + plugins/playwright/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/playwright/lib/prerequisites.ps1 | 14 + plugins/playwright/lib/prerequisites.sh | 17 + plugins/playwright/prerequisites.json | 39 +- .../.claude-plugin/plugin.json | 2 +- plugins/powershell-format/CHANGELOG.md | 7 + plugins/powershell-format/hooks/hooks.json | 7 +- .../hooks/powershell-format.test.sh | 12 +- .../hooks/probe-prerequisite.sh | 58 -- .../powershell-format/lib/prerequisites.mjs | 597 ++++++++++++++++++ .../powershell-format/lib/prerequisites.ps1 | 14 + .../powershell-format/lib/prerequisites.sh | 17 + plugins/powershell-format/prerequisites.json | 59 +- .../.claude-plugin/plugin.json | 2 +- plugins/rate-limit-guard/CHANGELOG.md | 6 + .../rate-limit-guard/lib/prerequisites.mjs | 597 ++++++++++++++++++ .../rate-limit-guard/lib/prerequisites.ps1 | 14 + plugins/rate-limit-guard/lib/prerequisites.sh | 17 + plugins/rate-limit-guard/prerequisites.json | 40 +- .../ruff-format/.claude-plugin/plugin.json | 2 +- plugins/ruff-format/CHANGELOG.md | 7 + plugins/ruff-format/hooks/hooks.json | 7 +- .../ruff-format/hooks/probe-prerequisite.sh | 58 -- plugins/ruff-format/hooks/ruff-format.test.sh | 14 +- plugins/ruff-format/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/ruff-format/lib/prerequisites.ps1 | 14 + plugins/ruff-format/lib/prerequisites.sh | 17 + plugins/ruff-format/prerequisites.json | 64 +- .../session-flow/.claude-plugin/plugin.json | 2 +- plugins/session-flow/CHANGELOG.md | 6 + plugins/session-flow/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/session-flow/lib/prerequisites.ps1 | 14 + plugins/session-flow/lib/prerequisites.sh | 17 + plugins/session-flow/prerequisites.json | 40 +- .../source-control/.claude-plugin/plugin.json | 2 +- plugins/source-control/CHANGELOG.md | 6 + plugins/source-control/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/source-control/lib/prerequisites.ps1 | 14 + plugins/source-control/lib/prerequisites.sh | 17 + plugins/source-control/prerequisites.json | 44 +- plugins/testing/.claude-plugin/plugin.json | 2 +- plugins/testing/CHANGELOG.md | 6 + plugins/testing/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/testing/lib/prerequisites.ps1 | 14 + plugins/testing/lib/prerequisites.sh | 17 + plugins/testing/prerequisites.json | 45 +- .../typos-format/.claude-plugin/plugin.json | 2 +- plugins/typos-format/CHANGELOG.md | 7 + plugins/typos-format/hooks/hooks.json | 7 +- .../typos-format/hooks/probe-prerequisite.sh | 58 -- .../typos-format/hooks/typos-format.test.sh | 12 +- plugins/typos-format/lib/prerequisites.mjs | 597 ++++++++++++++++++ plugins/typos-format/lib/prerequisites.ps1 | 14 + plugins/typos-format/lib/prerequisites.sh | 17 + plugins/typos-format/prerequisites.json | 60 +- scripts/check-prerequisite-probes.test.sh | 86 --- scripts/cross-plugin-source-registry.txt | 5 - scripts/prerequisites-baseline.txt | 61 -- scripts/shared-copies.txt | 66 ++ 178 files changed, 15515 insertions(+), 1224 deletions(-) delete mode 100755 plugins/actionlint/hooks/probe-prerequisite.sh create mode 100755 plugins/actionlint/lib/prerequisites.mjs create mode 100644 plugins/actionlint/lib/prerequisites.ps1 create mode 100755 plugins/actionlint/lib/prerequisites.sh create mode 100755 plugins/autonomy/lib/prerequisites.mjs create mode 100644 plugins/autonomy/lib/prerequisites.ps1 create mode 100755 plugins/autonomy/lib/prerequisites.sh delete mode 100755 plugins/bash-format/hooks/probe-prerequisite.sh create mode 100755 plugins/bash-format/lib/prerequisites.mjs create mode 100644 plugins/bash-format/lib/prerequisites.ps1 create mode 100755 plugins/bash-format/lib/prerequisites.sh delete mode 100755 plugins/biome-format/hooks/probe-prerequisite.sh create mode 100755 plugins/biome-format/lib/prerequisites.mjs create mode 100644 plugins/biome-format/lib/prerequisites.ps1 create mode 100755 plugins/biome-format/lib/prerequisites.sh create mode 100755 plugins/context-budget/lib/prerequisites.mjs create mode 100644 plugins/context-budget/lib/prerequisites.ps1 create mode 100755 plugins/context-budget/lib/prerequisites.sh create mode 100755 plugins/context-guard/lib/prerequisites.mjs create mode 100644 plugins/context-guard/lib/prerequisites.ps1 create mode 100755 plugins/context-guard/lib/prerequisites.sh create mode 100755 plugins/context7/lib/prerequisites.mjs create mode 100644 plugins/context7/lib/prerequisites.ps1 create mode 100755 plugins/context7/lib/prerequisites.sh create mode 100755 plugins/desktop-notification/lib/prerequisites.mjs create mode 100644 plugins/desktop-notification/lib/prerequisites.ps1 create mode 100755 plugins/desktop-notification/lib/prerequisites.sh create mode 100755 plugins/disk-hygiene/lib/prerequisites.mjs create mode 100644 plugins/disk-hygiene/lib/prerequisites.ps1 create mode 100755 plugins/disk-hygiene/lib/prerequisites.sh create mode 100755 plugins/eol-normalizer/lib/prerequisites.mjs create mode 100644 plugins/eol-normalizer/lib/prerequisites.ps1 create mode 100755 plugins/eol-normalizer/lib/prerequisites.sh delete mode 100755 plugins/go-format/hooks/probe-prerequisite.sh create mode 100755 plugins/go-format/lib/prerequisites.mjs create mode 100644 plugins/go-format/lib/prerequisites.ps1 create mode 100755 plugins/go-format/lib/prerequisites.sh create mode 100755 plugins/guardrails/lib/prerequisites.mjs create mode 100644 plugins/guardrails/lib/prerequisites.ps1 create mode 100755 plugins/guardrails/lib/prerequisites.sh create mode 100644 plugins/harness-ops/skills/prerequisites/scripts/check-prerequisites.mjs delete mode 100755 plugins/harness-ops/skills/prerequisites/scripts/check-prerequisites.sh delete mode 100755 plugins/markdown-format/hooks/probe-prerequisite.sh create mode 100755 plugins/markdown-format/lib/prerequisites.mjs create mode 100644 plugins/markdown-format/lib/prerequisites.ps1 create mode 100755 plugins/markdown-format/lib/prerequisites.sh create mode 100755 plugins/multi-agent/lib/prerequisites.mjs create mode 100644 plugins/multi-agent/lib/prerequisites.ps1 create mode 100755 plugins/multi-agent/lib/prerequisites.sh create mode 100755 plugins/playwright/lib/prerequisites.mjs create mode 100644 plugins/playwright/lib/prerequisites.ps1 create mode 100755 plugins/playwright/lib/prerequisites.sh delete mode 100755 plugins/powershell-format/hooks/probe-prerequisite.sh create mode 100755 plugins/powershell-format/lib/prerequisites.mjs create mode 100644 plugins/powershell-format/lib/prerequisites.ps1 create mode 100755 plugins/powershell-format/lib/prerequisites.sh create mode 100755 plugins/rate-limit-guard/lib/prerequisites.mjs create mode 100644 plugins/rate-limit-guard/lib/prerequisites.ps1 create mode 100755 plugins/rate-limit-guard/lib/prerequisites.sh delete mode 100755 plugins/ruff-format/hooks/probe-prerequisite.sh create mode 100755 plugins/ruff-format/lib/prerequisites.mjs create mode 100644 plugins/ruff-format/lib/prerequisites.ps1 create mode 100755 plugins/ruff-format/lib/prerequisites.sh create mode 100755 plugins/session-flow/lib/prerequisites.mjs create mode 100644 plugins/session-flow/lib/prerequisites.ps1 create mode 100755 plugins/session-flow/lib/prerequisites.sh create mode 100755 plugins/source-control/lib/prerequisites.mjs create mode 100644 plugins/source-control/lib/prerequisites.ps1 create mode 100755 plugins/source-control/lib/prerequisites.sh create mode 100755 plugins/testing/lib/prerequisites.mjs create mode 100644 plugins/testing/lib/prerequisites.ps1 create mode 100755 plugins/testing/lib/prerequisites.sh delete mode 100755 plugins/typos-format/hooks/probe-prerequisite.sh create mode 100755 plugins/typos-format/lib/prerequisites.mjs create mode 100644 plugins/typos-format/lib/prerequisites.ps1 create mode 100755 plugins/typos-format/lib/prerequisites.sh delete mode 100755 scripts/check-prerequisite-probes.test.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee04a70f53..e4b73aa3d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1940,13 +1940,6 @@ jobs: run: | [ "$LEG" = 2 ] || exit 0 bash scripts/lib/read-list.test.sh - # This suite ties each plugins/*/hooks/probe-prerequisite.sh to that - # plugin's prerequisites.json; run-plugin-tests.sh does not discover scripts/. - - name: Run prerequisite-probe manifest tests - if: needs.changes.outputs.run_tests == 'true' - run: | - [ "$LEG" = 2 ] || exit 0 - bash scripts/check-prerequisite-probes.test.sh # scripts/lib/test-harness.sh is the ok/fail/report contract the # scripts/*.test.sh suites share. A recorded failure that still exits 0 # is the false-green this library exists to refuse (#3160). diff --git a/docs/conventions/prerequisites/README.md b/docs/conventions/prerequisites/README.md index 9191218201..c373a422e7 100644 --- a/docs/conventions/prerequisites/README.md +++ b/docs/conventions/prerequisites/README.md @@ -96,12 +96,19 @@ listed in `scripts/shared-copies.txt` and regenerated by `scripts/sync-shared-co | --- | --- | --- | | `check [--for ] [--data-dir ]` | Setup and check skills, and a skill's own entry point | One `PASS`, `FAIL`, `WARN` or `INFO` line per entry, with the `degrade`, `install` and `check` text on a failure, then a summary line. `--for` keeps that scope's entries plus the `plugin` ones. | | `report --plugin-root ...` | The fleet table | A TSV table (`plugin id kind need status check install`) and `missing=N present=M`. | -| `probe ` | A SessionStart hook | A notice on both hook channels for each missing entry a `hook:` scope needs, once per session. | +| `probe [--run-if-unset-or-true