From edf0a2810e46da8d24ee18ce844598338ed7f3a0 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Fri, 2 Oct 2026 23:25:14 -0400 Subject: [PATCH 1/3] fix: gate cross-plugin routing on enabled, not installed #5897 turned 44 plugins off by default. An installed but disabled plugin exposes no skills, so a default-on plugin's "if installed" gate on one of them now passes when the target is unusable. Change those gates, and the shared hook library's harness-ops notice, to "enabled". Wording only. Closes #5934 Co-Authored-By: Claude Opus 5.5 --- lib/hook-utils.sh | 4 ++-- plugins/actionlint/.claude-plugin/plugin.json | 2 +- plugins/actionlint/CHANGELOG.md | 6 ++++++ plugins/actionlint/hooks/hook-utils.sh | 4 ++-- plugins/animation/.claude-plugin/plugin.json | 2 +- plugins/animation/CHANGELOG.md | 6 ++++++ plugins/animation/hooks/hook-utils.sh | 4 ++-- plugins/autonomy/.claude-plugin/plugin.json | 2 +- plugins/autonomy/CHANGELOG.md | 6 ++++++ plugins/autonomy/hooks/hook-utils.sh | 4 ++-- plugins/bash-format/.claude-plugin/plugin.json | 2 +- plugins/bash-format/CHANGELOG.md | 6 ++++++ plugins/bash-format/hooks/hook-utils.sh | 4 ++-- plugins/biome-format/.claude-plugin/plugin.json | 2 +- plugins/biome-format/CHANGELOG.md | 6 ++++++ plugins/biome-format/hooks/hook-utils.sh | 4 ++-- plugins/context-guard/.claude-plugin/plugin.json | 2 +- plugins/context-guard/CHANGELOG.md | 6 ++++++ plugins/context-guard/hooks/hook-utils.sh | 4 ++-- .../desktop-notification/.claude-plugin/plugin.json | 2 +- plugins/desktop-notification/CHANGELOG.md | 6 ++++++ plugins/desktop-notification/hooks/hook-utils.sh | 4 ++-- plugins/docs-hygiene/.claude-plugin/plugin.json | 2 +- plugins/docs-hygiene/CHANGELOG.md | 6 ++++++ .../docs-hygiene/skills/rename-references/SKILL.md | 4 ++-- .../docs-hygiene/skills/write-for-agents/SKILL.md | 4 ++-- plugins/eol-normalizer/.claude-plugin/plugin.json | 2 +- plugins/eol-normalizer/CHANGELOG.md | 6 ++++++ plugins/eol-normalizer/hooks/hook-utils.sh | 4 ++-- plugins/go-format/.claude-plugin/plugin.json | 2 +- plugins/go-format/CHANGELOG.md | 6 ++++++ plugins/go-format/hooks/hook-utils.sh | 4 ++-- plugins/guardrails/.claude-plugin/plugin.json | 2 +- plugins/guardrails/CHANGELOG.md | 6 ++++++ plugins/guardrails/hooks/hook-utils.sh | 4 ++-- plugins/harness-ops/.claude-plugin/plugin.json | 2 +- plugins/harness-ops/CHANGELOG.md | 6 ++++++ plugins/harness-ops/hooks/hook-utils.sh | 4 ++-- .../instruction-placement/.claude-plugin/plugin.json | 2 +- plugins/instruction-placement/CHANGELOG.md | 6 ++++++ plugins/instruction-placement/hooks/hook-utils.sh | 4 ++-- plugins/markdown-format/.claude-plugin/plugin.json | 2 +- plugins/markdown-format/CHANGELOG.md | 6 ++++++ plugins/markdown-format/hooks/hook-utils.sh | 4 ++-- plugins/planning/.claude-plugin/plugin.json | 2 +- plugins/planning/CHANGELOG.md | 6 ++++++ plugins/planning/README.md | 2 +- plugins/powershell-format/.claude-plugin/plugin.json | 2 +- plugins/powershell-format/CHANGELOG.md | 6 ++++++ plugins/powershell-format/hooks/hook-utils.sh | 4 ++-- plugins/rate-limit-guard/.claude-plugin/plugin.json | 2 +- plugins/rate-limit-guard/CHANGELOG.md | 6 ++++++ plugins/rate-limit-guard/hooks/hook-utils.sh | 4 ++-- plugins/review/.claude-plugin/plugin.json | 2 +- plugins/review/CHANGELOG.md | 6 ++++++ plugins/review/skills/audit-enforceability/SKILL.md | 2 +- .../skills/audit-enforceability/context/crosswalk.md | 6 +++--- .../evals/fixtures/classification-one-per-rung.tsv | 2 +- plugins/review/skills/fanout/evals/evals.json | 2 +- .../review/skills/quality-gate/context/downstream.md | 8 ++++---- plugins/ruff-format/.claude-plugin/plugin.json | 2 +- plugins/ruff-format/CHANGELOG.md | 6 ++++++ plugins/ruff-format/hooks/hook-utils.sh | 4 ++-- plugins/session-flow/.claude-plugin/plugin.json | 2 +- plugins/session-flow/CHANGELOG.md | 6 ++++++ plugins/session-flow/README.md | 2 +- plugins/session-flow/output-styles/brain-fried.md | 2 +- plugins/session-flow/skills/keep-going/SKILL.md | 4 ++-- plugins/session-flow/skills/orchestrate/SKILL.md | 2 +- .../session-flow/skills/reanchor/evals/evals.json | 4 ++-- plugins/session-flow/skills/retro/context/session.md | 2 +- plugins/session-flow/skills/running-retro/SKILL.md | 4 ++-- plugins/session-flow/skills/show-options/SKILL.md | 2 +- .../skills/show-options/context/candidate-ladder.md | 4 ++-- .../skills/show-options/evals/evals.json | 2 +- .../skills/workflow/context/continuation.md | 4 ++-- .../session-flow/skills/workflow/context/wrap-up.md | 4 ++-- .../session-flow/skills/workflow/evals/evals.json | 2 +- plugins/source-control/.claude-plugin/plugin.json | 2 +- plugins/source-control/CHANGELOG.md | 7 +++++++ plugins/source-control/hooks/hook-utils.sh | 4 ++-- plugins/source-control/skills/babysit-loop/SKILL.md | 2 +- .../skills/babysit-prs/reference/orchestration.md | 2 +- .../skills/pull-request/reference/prep.md | 8 ++++---- plugins/tdd/.claude-plugin/plugin.json | 2 +- plugins/tdd/CHANGELOG.md | 6 ++++++ plugins/tdd/skills/principles/SKILL.md | 2 +- .../principles/reference/code-coverage-khorikov.md | 2 +- .../principles/reference/four-pillars-khorikov.md | 2 +- .../tdd/skills/principles/reference/test-doubles.md | 2 +- plugins/testing/.claude-plugin/plugin.json | 2 +- plugins/testing/CHANGELOG.md | 6 ++++++ plugins/testing/hooks/hook-utils.sh | 4 ++-- plugins/typos-format/.claude-plugin/plugin.json | 2 +- plugins/typos-format/CHANGELOG.md | 6 ++++++ plugins/typos-format/hooks/hook-utils.sh | 4 ++-- plugins/verification/.claude-plugin/plugin.json | 2 +- plugins/verification/CHANGELOG.md | 6 ++++++ plugins/verification/skills/confirm/SKILL.md | 2 +- plugins/verification/skills/measure/SKILL.md | 2 +- .../verification/skills/measure/context/metrics.md | 12 ++++++------ plugins/visualization/.claude-plugin/plugin.json | 2 +- plugins/visualization/CHANGELOG.md | 6 ++++++ plugins/visualization/skills/visualize/SKILL.md | 6 +++--- plugins/work-items/.claude-plugin/plugin.json | 2 +- plugins/work-items/CHANGELOG.md | 6 ++++++ plugins/work-items/reference/work-class-labels.md | 2 +- plugins/work-items/skills/decompose/SKILL.md | 2 +- plugins/work-items/skills/onboard-adapter/SKILL.md | 2 +- plugins/work-items/skills/work-loop/SKILL.md | 2 +- plugins/writing/.claude-plugin/plugin.json | 2 +- plugins/writing/CHANGELOG.md | 6 ++++++ plugins/writing/skills/be-concise/SKILL.md | 6 +++--- plugins/writing/skills/be-concise/evals/evals.json | 2 +- .../writing/skills/be-concise/reference/doctrine.md | 2 +- 115 files changed, 301 insertions(+), 132 deletions(-) diff --git a/lib/hook-utils.sh b/lib/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/lib/hook-utils.sh +++ b/lib/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/actionlint/.claude-plugin/plugin.json b/plugins/actionlint/.claude-plugin/plugin.json index c7f2261b45..77a96d9531 100644 --- a/plugins/actionlint/.claude-plugin/plugin.json +++ b/plugins/actionlint/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "actionlint", - "version": "0.11.12", + "version": "0.11.13", "description": "Lint GitHub Actions workflow files on edit via actionlint, surfacing findings as advisory context.", "author": { "name": "Melodic Software", diff --git a/plugins/actionlint/CHANGELOG.md b/plugins/actionlint/CHANGELOG.md index 1b327507a1..8ed7d8ca88 100644 --- a/plugins/actionlint/CHANGELOG.md +++ b/plugins/actionlint/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `actionlint` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.11.13] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.11.12] - 2026-10-02 ### Changed diff --git a/plugins/actionlint/hooks/hook-utils.sh b/plugins/actionlint/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/actionlint/hooks/hook-utils.sh +++ b/plugins/actionlint/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/animation/.claude-plugin/plugin.json b/plugins/animation/.claude-plugin/plugin.json index 50547f48a4..daa572038d 100644 --- a/plugins/animation/.claude-plugin/plugin.json +++ b/plugins/animation/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "animation", - "version": "0.2.1", + "version": "0.2.2", "description": "Hand-drawn-style 2D animation as code, rendered in headless Chromium through a deterministic ink brush engine. The rotoscope skill copies a reference clip drawing by drawing: it traces each drawing to vector paths, renders them through the brush engine, measures every drawing against its source (XOR against a codec-noise floor, SSIM, paper color), fits per-shot brush overrides kept in a tool-neutral override file, reviews 1:1 crops, and logs learnings that a retro step promotes into defaults. A shipped regression reproduces the shfred0 study drawing for drawing. The learn-style skill measures a traced clip into a style pack (palette, style knobs, and bands for edge softness, stroke widths, roughness, gray inside the ink, boil and holds) and checks any new film against it; it ships the woodcut-ink pack. The produce skill turns a brief and those packs into boards the user approves, then a shot list, rendered frames, a delivered file, and a review against the pack; shots.json is the only cut list. The setup skill checks the prerequisites (ffmpeg with libx264, Node, playwright-core with Chromium, the pinned numpy and opencv) and prints one remedy per missing one.", "author": { "name": "Melodic Software", diff --git a/plugins/animation/CHANGELOG.md b/plugins/animation/CHANGELOG.md index 30e901236f..f7c95d15ca 100644 --- a/plugins/animation/CHANGELOG.md +++ b/plugins/animation/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `animation` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.2.2] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.2.1] - 2026-10-02 ### Changed diff --git a/plugins/animation/hooks/hook-utils.sh b/plugins/animation/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/animation/hooks/hook-utils.sh +++ b/plugins/animation/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/autonomy/.claude-plugin/plugin.json b/plugins/autonomy/.claude-plugin/plugin.json index cd54fc1a0a..cb71255cdc 100644 --- a/plugins/autonomy/.claude-plugin/plugin.json +++ b/plugins/autonomy/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "autonomy", - "version": "0.25.7", + "version": "0.25.8", "description": "Governed autonomous agent operation: role-topology, binding-seam, wiring-vs-advisor, telemetry, return-accounting, trigger-dispatch, per-work-class guardrail-matrix, standing-routine-catalog, and design-only runner-charter contracts for climbing the AI-adoption ladder, plus a guided-setup skill that discovers an adopting org's state, writes its schema-versioned binding, wires standards-pinned OTLP emission with a zero-cost file-artifact default, wires human-attested return capture at the task boundary, wires signal adapters with one governed dispatch entrypoint, binds the five-class guardrail matrix to an org's isolation substrates with an in-boundary live-validation probe before recording each fail-closed binding, and stands up standing-routine-catalog classes as scheduled temporal signal adapters behind the one governed queue with free scheduling defaults wired as reviewable changes and each routine's work-class mapping homed on the security surface.", "author": { "name": "Melodic Software", diff --git a/plugins/autonomy/CHANGELOG.md b/plugins/autonomy/CHANGELOG.md index 01f8988528..feb1e15045 100644 --- a/plugins/autonomy/CHANGELOG.md +++ b/plugins/autonomy/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `autonomy` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.25.8] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.25.7] - 2026-10-02 ### Changed diff --git a/plugins/autonomy/hooks/hook-utils.sh b/plugins/autonomy/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/autonomy/hooks/hook-utils.sh +++ b/plugins/autonomy/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/bash-format/.claude-plugin/plugin.json b/plugins/bash-format/.claude-plugin/plugin.json index 3f6d80ce7b..fca809a30f 100644 --- a/plugins/bash-format/.claude-plugin/plugin.json +++ b/plugins/bash-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "bash-format", - "version": "0.9.11", + "version": "0.9.12", "description": "Auto-format and lint shell scripts on edit via shfmt + ShellCheck, using the consuming repo's own .editorconfig and .shellcheckrc.", "author": { "name": "Melodic Software", diff --git a/plugins/bash-format/CHANGELOG.md b/plugins/bash-format/CHANGELOG.md index 350c7111e4..67aba01d5b 100644 --- a/plugins/bash-format/CHANGELOG.md +++ b/plugins/bash-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `bash-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.9.12] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.9.11] - 2026-10-02 ### Changed diff --git a/plugins/bash-format/hooks/hook-utils.sh b/plugins/bash-format/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/bash-format/hooks/hook-utils.sh +++ b/plugins/bash-format/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/biome-format/.claude-plugin/plugin.json b/plugins/biome-format/.claude-plugin/plugin.json index b3c014415a..298e4035aa 100644 --- a/plugins/biome-format/.claude-plugin/plugin.json +++ b/plugins/biome-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "biome-format", - "version": "0.7.20", + "version": "0.7.21", "description": "Auto-format and lint JS/TS/JSX/JSON on edit via Biome, only when a biome.json governs the repo, using the consuming repo's own Biome config.", "author": { "name": "Melodic Software", diff --git a/plugins/biome-format/CHANGELOG.md b/plugins/biome-format/CHANGELOG.md index 305e819727..442bc16951 100644 --- a/plugins/biome-format/CHANGELOG.md +++ b/plugins/biome-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `biome-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.21] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.7.20] - 2026-10-02 ### Changed diff --git a/plugins/biome-format/hooks/hook-utils.sh b/plugins/biome-format/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/biome-format/hooks/hook-utils.sh +++ b/plugins/biome-format/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/context-guard/.claude-plugin/plugin.json b/plugins/context-guard/.claude-plugin/plugin.json index 6696f2bae4..f548e2b0c0 100644 --- a/plugins/context-guard/.claude-plugin/plugin.json +++ b/plugins/context-guard/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "context-guard", - "version": "0.9.1", + "version": "0.9.2", "description": "Per-session context-window observability plus the first shipped consumer: a statusline wrapper tees each session's context_window fields to a per-session snapshot file, a zone resolver classifies usage into smart/acceptable/dumb bands (percentage bands plus window-class token bands, conservative-min combination, zones.json SSOT with shipped defaults), a reader contract fixes how consuming sessions interpret the snapshots, and zone-crossing hooks report once per transition into a worse zone across two channels: the continuation menu to the operator, who owns that choice, and to the model only the zone determination plus the counter-steer that a zone word is not a decay signal (advisory by default; an optional blocking mode gates new mutating work on a fresh dumb-zone snapshot with handoff-writing exempt), with a PostCompact hook persisting an evidence-degraded marker.", "author": { "name": "Melodic Software", diff --git a/plugins/context-guard/CHANGELOG.md b/plugins/context-guard/CHANGELOG.md index 09e7b4fc27..7eae435a10 100644 --- a/plugins/context-guard/CHANGELOG.md +++ b/plugins/context-guard/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to the `context-guard` plugin. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.9.2] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.9.1] - 2026-10-02 ### Changed diff --git a/plugins/context-guard/hooks/hook-utils.sh b/plugins/context-guard/hooks/hook-utils.sh index 8c880a558e..4327545cef 100755 --- a/plugins/context-guard/hooks/hook-utils.sh +++ b/plugins/context-guard/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/desktop-notification/.claude-plugin/plugin.json b/plugins/desktop-notification/.claude-plugin/plugin.json index b891b57a40..ca8d71480c 100644 --- a/plugins/desktop-notification/.claude-plugin/plugin.json +++ b/plugins/desktop-notification/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "desktop-notification", - "version": "0.7.6", + "version": "0.7.7", "description": "Alert you when Claude Code needs input: an audible terminal bell, an OSC 9 terminal notification, and an OS-native toast (macOS/Linux) on permission and idle prompts.", "author": { "name": "Melodic Software", diff --git a/plugins/desktop-notification/CHANGELOG.md b/plugins/desktop-notification/CHANGELOG.md index bac1a56b11..9ceb235a1a 100644 --- a/plugins/desktop-notification/CHANGELOG.md +++ b/plugins/desktop-notification/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `desktop-notification` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.7] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.7.6] - 2026-10-02 ### Changed diff --git a/plugins/desktop-notification/hooks/hook-utils.sh b/plugins/desktop-notification/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/desktop-notification/hooks/hook-utils.sh +++ b/plugins/desktop-notification/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/docs-hygiene/.claude-plugin/plugin.json b/plugins/docs-hygiene/.claude-plugin/plugin.json index 0e7f3f45e3..5e922eb1ef 100644 --- a/plugins/docs-hygiene/.claude-plugin/plugin.json +++ b/plugins/docs-hygiene/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "docs-hygiene", - "version": "0.25.0", + "version": "0.25.1", "description": "Documentation-hygiene toolkit: compress (flavor-trim markdown with a semantic-diff safety net), audit-noise (classify markdown noise), extract-ssot (deduplicate repeated content into a single source of truth), audit-encapsulation (detect citations into skill-private surfaces), rename-references (sweep stale references after renames), audit-derivability (classify whether a whole document earns its existence: could a fresh agent re-derive it from the code?), audit-progressive-disclosure (grade instruction files against a load-tier model for split opportunities and hub/spoke disclosure defects), write-for-agents (authoring-time doctrine that fires while agent-consumed markdown is being written), and write-for-humans (the same moment for the other reader, covering end-user READMEs, RFCs, release notes and guides, and resolving the consuming project's own style guide first); the setup check verifies the markdownlint-cli2 that compress requires.", "author": { "name": "Melodic Software", diff --git a/plugins/docs-hygiene/CHANGELOG.md b/plugins/docs-hygiene/CHANGELOG.md index 9798b2e51c..03f83d7c27 100644 --- a/plugins/docs-hygiene/CHANGELOG.md +++ b/plugins/docs-hygiene/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog: docs-hygiene plugin +## [0.25.1] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.25.0] - 2026-10-02 ### Changed diff --git a/plugins/docs-hygiene/skills/rename-references/SKILL.md b/plugins/docs-hygiene/skills/rename-references/SKILL.md index d97014f20e..e3343db545 100644 --- a/plugins/docs-hygiene/skills/rename-references/SKILL.md +++ b/plugins/docs-hygiene/skills/rename-references/SKILL.md @@ -1,5 +1,5 @@ --- -description: "Sweep stale references after a rename, including forms token-only grep misses (slash-tokens, paths, chain prose, table rows, frontmatter globs). Use when: 'rename X to Y', 'I renamed X', 'audit rename', 'find stale refs', 'check for stragglers', 'after git mv', 'sweep references', 'rename impact preview', 'find half-renamed state', 'broken refs after rename', 'pre-PR rename check'. A whole tree against a casing rule is docs-naming:audit-file-names, if installed." +description: "Sweep stale references after a rename, including forms token-only grep misses (slash-tokens, paths, chain prose, table rows, frontmatter globs). Use when: 'rename X to Y', 'I renamed X', 'audit rename', 'find stale refs', 'check for stragglers', 'after git mv', 'sweep references', 'rename impact preview', 'find half-renamed state', 'broken refs after rename', 'pre-PR rename check'. A whole tree against a casing rule is docs-naming:audit-file-names, if enabled." argument-hint: "[audit|preview|blocklist] [ [to ]] [--container|--identifier|--include-historical…]" user-invocable: true disable-model-invocation: false @@ -160,7 +160,7 @@ Paths skipped from sweeps automatically: - **Does not rename git branches**. Use `git branch -m`. Operates on file content, not git refs. - **Does not handle framework version migrations**. Use dedicated migration tooling. Different concern: behavioral upgrade, not text rename. - **Does not auto-fix conversation history or memory entries**. Past mentions of the old name in conversation/memory are deliberately preserved as historical record. Future renames are the user's responsibility to invoke this skill for. -- **Does not audit a whole tree against a casing rule**. If `docs-naming` is installed, `/docs-naming:audit-file-names` does. Without it, list the tree with `git ls-files`, compare each name against the rule by hand, and run `audit` here once per pair you decide to rename. +- **Does not audit a whole tree against a casing rule**. If `docs-naming` is enabled, `/docs-naming:audit-file-names` does. Without it, list the tree with `git ls-files`, compare each name against the rule by hand, and run `audit` here once per pair you decide to rename. - **Does not run builds or tests**. Hand off to the consuming repository's build/test/verification workflow after the rename completes. - **Does not perform general dead-reference scanning**. `audit orphans` is STRICTLY pair-driven (post-rename hygiene only). For repo-wide dead-link / dead-reference checks unrelated to a specific rename, use a codebase-audit workflow or documentation link checker if your environment provides one. Charter boundary preserves single responsibility. diff --git a/plugins/docs-hygiene/skills/write-for-agents/SKILL.md b/plugins/docs-hygiene/skills/write-for-agents/SKILL.md index 1b3b22286b..25d595b04a 100644 --- a/plugins/docs-hygiene/skills/write-for-agents/SKILL.md +++ b/plugins/docs-hygiene/skills/write-for-agents/SKILL.md @@ -73,7 +73,7 @@ text alone, without opening the target. cohesion problem. Before adding it, consider restructuring so the things that change together live together, a pointer papering over low cohesion outlives the reorganization that would have removed it. (Audit-side remediation home: `harness-memory:audit`'s C5 fix guidance, if - that plugin is installed.) + that plugin is enabled.) The full pointer-quality criteria are owned by the sibling audit skill. Invoke `/docs-hygiene:audit-progressive-disclosure` via the Skill tool to grade a draft against them, @@ -149,7 +149,7 @@ rationale in two or three sentences or the evidence as a list. already exists? Invoke `/docs-hygiene:extract-ssot` via the Skill tool. Creating a new shared home still waits for the third occurrence; below that it remedies the repetition in place. - Resolved or coined a term in the **consuming project's** domain? Invoke - `/domain-driven-design:curate-language` via the Skill tool (if that plugin is installed) rather + `/domain-driven-design:curate-language` via the Skill tool (if that plugin is enabled) rather than hand-writing the entry. A skill defining its own working vocabulary is out of that skill's scope and stays where it is. - Editing exposed pre-existing problems in the surrounding doc? Invoke the fitting audit diff --git a/plugins/eol-normalizer/.claude-plugin/plugin.json b/plugins/eol-normalizer/.claude-plugin/plugin.json index d83e6fd666..d019ff7d2e 100644 --- a/plugins/eol-normalizer/.claude-plugin/plugin.json +++ b/plugins/eol-normalizer/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "eol-normalizer", - "version": "0.8.6", + "version": "0.8.7", "description": "Normalize a written file's working-tree line endings to its .gitattributes eol value on edit: symmetric CRLF/LF driven by git check-attr, advisory and never blocking.", "author": { "name": "Melodic Software", diff --git a/plugins/eol-normalizer/CHANGELOG.md b/plugins/eol-normalizer/CHANGELOG.md index a866a56fc6..3e5f1e85ab 100644 --- a/plugins/eol-normalizer/CHANGELOG.md +++ b/plugins/eol-normalizer/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `eol-normalizer` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.8.7] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.8.6] - 2026-10-02 ### Changed diff --git a/plugins/eol-normalizer/hooks/hook-utils.sh b/plugins/eol-normalizer/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/eol-normalizer/hooks/hook-utils.sh +++ b/plugins/eol-normalizer/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/go-format/.claude-plugin/plugin.json b/plugins/go-format/.claude-plugin/plugin.json index 49fa73f9fb..8dc23b7055 100644 --- a/plugins/go-format/.claude-plugin/plugin.json +++ b/plugins/go-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "go-format", - "version": "0.4.23", + "version": "0.4.24", "description": "Auto-fix Go formatting and import management on edit via goimports. Runs unconditionally (no consumer-config gate), skipping generated files.", "author": { "name": "Melodic Software", diff --git a/plugins/go-format/CHANGELOG.md b/plugins/go-format/CHANGELOG.md index c855278641..397eedd748 100644 --- a/plugins/go-format/CHANGELOG.md +++ b/plugins/go-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `go-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.4.24] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.4.23] - 2026-10-02 ### Changed diff --git a/plugins/go-format/hooks/hook-utils.sh b/plugins/go-format/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/go-format/hooks/hook-utils.sh +++ b/plugins/go-format/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/guardrails/.claude-plugin/plugin.json b/plugins/guardrails/.claude-plugin/plugin.json index 0bc9ee275e..c4e4f08962 100644 --- a/plugins/guardrails/.claude-plugin/plugin.json +++ b/plugins/guardrails/.claude-plugin/plugin.json @@ -171,5 +171,5 @@ "min": 1 } }, - "version": "0.46.9" + "version": "0.46.10" } diff --git a/plugins/guardrails/CHANGELOG.md b/plugins/guardrails/CHANGELOG.md index 7a5baa310a..dcdc6dfca2 100644 --- a/plugins/guardrails/CHANGELOG.md +++ b/plugins/guardrails/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `guardrails` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.46.10] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.46.9] - 2026-10-02 ### Changed diff --git a/plugins/guardrails/hooks/hook-utils.sh b/plugins/guardrails/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/guardrails/hooks/hook-utils.sh +++ b/plugins/guardrails/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/harness-ops/.claude-plugin/plugin.json b/plugins/harness-ops/.claude-plugin/plugin.json index b1ccb21eba..ffc31b84fa 100644 --- a/plugins/harness-ops/.claude-plugin/plugin.json +++ b/plugins/harness-ops/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "harness-ops", - "version": "3.1.0", + "version": "3.1.1", "description": "Claude Code operations toolkit. Fifteen skills: audit-skill-visibility (audit whether each installed skill is actually VISIBLE to the model, and diagnose why most of a fleet never gets used: a skill is invisible when its description is dropped by Claude Code's skill-listing context budget, which sheds descriptions lowest-score-first so an unused skill loses the keywords that would let it be matched, from skills genuinely not wanted, from skills the run cannot observe at all; computes whether the listing overflows from documented settings, and withholds every cold verdict the data cannot support rather than reporting absence of data as absence of use), inventory (read-only enumeration of the complete invocable surface: every built-in CLI command with aliases and hidden/gated status, every bundled skill, every built-in subagent and tool, every built-in plugin with its components, and every component of every installed plugin across all marketplaces; reads the shipped binary because upstream publishes no built-in command list, and carries an integrity verdict so a drifted build reports counts as floors rather than silently short totals), audit-install-state (read-only audit of the machine-scope ~/.claude installation directory and ~/.claude.json: full inventory split into an authored surface and rolled-up bulk trees, product-managed retention vs genuinely unmanaged state, filename-scheme resolution before any process-liveness check, and deliberate/mid-experiment detection; reports, never deletes), audit-performance (read-only slowness-diagnostic capture run at the moment the machine or a session feels slow: CLI version, retention-sweep health including the unparsable-settings pause, which warns in /status, a timed census walk of the install tree as a sweep-cost proxy, active-session and plugin-fleet counts, a process census, and the fan-out layer, which covers a load-labeled no-op spawn baseline, every hook that will fire bucketed per-tool-call versus per-turn with its invocation shape, the configured statusline, subagent concurrency and spawn-depth ceilings against documented defaults, whether running sessions predate the settings file they are judged by, and orphan attribution by parent liveness rather than age, plus on Windows a kernel-object census (Token objects against uptime, paged pool) that names a host-level leak beneath all four suspects; read against a bundled known-performance-issues reference that also records the causes tested and cleared; separates the four documented suspects of accumulated state, version regression, component bloat, and per-spawn fan-out cost, and routes remediation out; reports, never mutates, and never executes a discovered hook or statusline command), audit-native-overlap (map native Claude Code surfaces, namely built-in CLI commands, bundled skills, plugin-backed built-ins, and session-provided skills, against the current repo's plugin skills and agents, so a custom component never silently duplicates what Claude Code itself ships; bare invocation is a read-only overlap report carrying the extraction's integrity floors and a shared-listing-budget exposure section, verdicts are human-gated in a committed store rendered into a generated registry whose every row carries an observable recheck trigger, and only an explicit apply step bakes presence-gated native references into descriptions and Boundary sections), observability (read locally captured telemetry from the OTEL store, the collector, the per-session hook event log and hook-event JSONL, and ccusage, with trend reports, a per-session report of what fired, what was blocked and the event timeline, and store pruning), known-issues (search known Claude product GitHub bugs, check service health, maintain a persistent tracked-issue registry), changelog (ingest Claude Code changelog entries and turn them into decisions: apply executes those in scope one PR per owner plugin and hands larger ones off as work items, then re-extract the native surface and file its drift as work items), prerequisites (read-only table of external binaries declared by enabled plugins; never installs), check (read-only check that node and jq resolve for the harness-ops hooks; never installs), machine-profile (discover this machine's facts and per-tree identity domains, store them as a re-runnable profile with the observation behind every value, and diff the stored profile against the host now; read-only unless the operator confirms a write, never installs and never reapplies a stored value on its own), plugins (bring a machine's plugin fleet current on demand: marketplace refresh, effective-scope updates including in-repo project/local installs, new-plugin install per policy, scope-divergence detection and explicit convergence), morning-brief (read-only gh-based operator morning view: queue-label counts, merge-ready PRs, parked decisions with their RECOMMENDED lines, and loop-lane telemetry freshness), lanes (start/restart/stop/status loop lanes as named background Claude Code sessions seeded from canonical prompt files, with per-lane model/effort, a repo-pull + marketplace-refresh launch step, and a consume-restarts action, an OS-schedulable reader that relaunches stopped lanes whose telemetry carries a restart_request), and a re-runnable setup action that settles where the known-issues registry, the skill-usage log and the hook log root live, places the root's self-ignoring guard, and detects retired conventions. Plus an opt-in, default-off per-session hook event log (one JSON line per hook event on every event the generated registry marks observable, written to /sessions/.jsonl, with SessionEnd retention by session count or age and an optional detached pre-prune command), a family of eight advisory *-audit hooks (API errors, config changes, instruction loads, permission denials, pre-compaction, skill usage, tool failures, and unsurfaced hook failures. The last also warns the user via systemMessage, since a hook that fails to launch enforces nothing and Claude Code surfaces the failure to nobody) that emit the shared hook-telemetry envelope, and a reference sink that routes envelopes under the same root: per session when the envelope carries a session id, else into the shared hook-events.jsonl the observability skill reads.", "author": { "name": "Melodic Software", diff --git a/plugins/harness-ops/CHANGELOG.md b/plugins/harness-ops/CHANGELOG.md index 278f8874bb..526cc1f87c 100644 --- a/plugins/harness-ops/CHANGELOG.md +++ b/plugins/harness-ops/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `harness-ops` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [3.1.1] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [3.1.0] - 2026-10-02 ### Added diff --git a/plugins/harness-ops/hooks/hook-utils.sh b/plugins/harness-ops/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/harness-ops/hooks/hook-utils.sh +++ b/plugins/harness-ops/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/instruction-placement/.claude-plugin/plugin.json b/plugins/instruction-placement/.claude-plugin/plugin.json index e6bdb57992..2074a1c68d 100644 --- a/plugins/instruction-placement/.claude-plugin/plugin.json +++ b/plugins/instruction-placement/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "instruction-placement", - "version": "0.19.2", + "version": "0.19.3", "description": "Routes agent-instruction content to the surface that loads it at the right moment. The audit skill sweeps a repository's instruction layer and its ordinary markdown for content whose scope is narrower than the surface carrying it, meaning conventions keyed to one file type or one subtree sitting in an always-loaded CLAUDE.md or AGENTS.md, and for normative conventions stranded in documentation Claude never loads at all, then classifies each against a routing rubric and proposes a destination whose `paths:` glob is machine-validated before it is ever offered. Safety-class content (irreversible actions, secrets, data integrity, external publication, compliance, agent authority) is hard-denied from demotion and reported as held back rather than proposed, because demotion trades guaranteed presence for conditional presence: a deferred surface is absent until a read matches it, absent after a compaction until that trigger recurs, and never inherited by a subagent, which re-acquires it only by reading a covered path itself. Every accepted move regenerates an always-loaded index of deferred surfaces, which is what keeps a demoted rule discoverable from any context that has not happened to touch a path it covers. The audit is read-only and emits a diffable findings artifact; realignment is a separate skill gated per item with no blanket-approve path; a deterministic check skill gates that every rule glob still resolves and the index is current; a migrate skill moves a repository to AGENTS.md as the content home and keeps a CLAUDE.md shim while one is needed; and a setup skill verifies the one thing no other gate can see: that nothing in the repository stops Claude Code reading the index target, since a CLAUDE.md in the working directory or above it is read instead of the AGENTS.md beside it.", "author": { "name": "Melodic Software", diff --git a/plugins/instruction-placement/CHANGELOG.md b/plugins/instruction-placement/CHANGELOG.md index eaf234139c..b59fb9d4f6 100644 --- a/plugins/instruction-placement/CHANGELOG.md +++ b/plugins/instruction-placement/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `instruction-placement` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.19.3] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.19.2] - 2026-10-02 ### Changed diff --git a/plugins/instruction-placement/hooks/hook-utils.sh b/plugins/instruction-placement/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/instruction-placement/hooks/hook-utils.sh +++ b/plugins/instruction-placement/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/markdown-format/.claude-plugin/plugin.json b/plugins/markdown-format/.claude-plugin/plugin.json index 9f90dcf78d..3f85033d37 100644 --- a/plugins/markdown-format/.claude-plugin/plugin.json +++ b/plugins/markdown-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "markdown-format", - "version": "0.11.94", + "version": "0.11.95", "description": "Auto-format and lint Markdown on edit via markdownlint-cli2, only in repos that carry their own markdownlint config.", "author": { "name": "Melodic Software", diff --git a/plugins/markdown-format/CHANGELOG.md b/plugins/markdown-format/CHANGELOG.md index cd0c163e73..868cdca7cb 100644 --- a/plugins/markdown-format/CHANGELOG.md +++ b/plugins/markdown-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `markdown-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.11.95] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.11.94] - 2026-10-02 ### Changed diff --git a/plugins/markdown-format/hooks/hook-utils.sh b/plugins/markdown-format/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/markdown-format/hooks/hook-utils.sh +++ b/plugins/markdown-format/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/planning/.claude-plugin/plugin.json b/plugins/planning/.claude-plugin/plugin.json index 2c3b390826..5de46ee255 100644 --- a/plugins/planning/.claude-plugin/plugin.json +++ b/plugins/planning/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "planning", - "version": "0.62.2", + "version": "0.62.3", "userConfig": { "surface": { "type": "string", diff --git a/plugins/planning/CHANGELOG.md b/plugins/planning/CHANGELOG.md index 677833e1db..ddfb2cf06a 100644 --- a/plugins/planning/CHANGELOG.md +++ b/plugins/planning/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `planning` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.62.3] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.62.2] - 2026-10-02 ### Fixed diff --git a/plugins/planning/README.md b/plugins/planning/README.md index 3f0796b7d4..a8cd80c52b 100644 --- a/plugins/planning/README.md +++ b/plugins/planning/README.md @@ -28,7 +28,7 @@ is too big to hold at once, then `brainstorm → prd → interview → design design-handoff → plan` with `devils-advocate` attacking the plan before approval, while `/domain-driven-design:curate-language` is invoked whenever those workflows resolve vocabulary, when the `domain-driven-design` plugin is -installed; without it, resolved terms are recorded in the design artifacts +enabled; without it, resolved terms are recorded in the design artifacts themselves. Every skill also works standalone. ## Workflows diff --git a/plugins/powershell-format/.claude-plugin/plugin.json b/plugins/powershell-format/.claude-plugin/plugin.json index 8f4e8036b5..6b7cf69888 100644 --- a/plugins/powershell-format/.claude-plugin/plugin.json +++ b/plugins/powershell-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "powershell-format", - "version": "0.9.11", + "version": "0.9.12", "description": "Auto-format and lint PowerShell on edit via PSScriptAnalyzer, only when a PSScriptAnalyzerSettings.psd1 governs the repo, using the consuming repo's own analyzer settings.", "author": { "name": "Melodic Software", diff --git a/plugins/powershell-format/CHANGELOG.md b/plugins/powershell-format/CHANGELOG.md index 113d8d717c..6557e6c260 100644 --- a/plugins/powershell-format/CHANGELOG.md +++ b/plugins/powershell-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `powershell-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.9.12] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.9.11] - 2026-10-02 ### Changed diff --git a/plugins/powershell-format/hooks/hook-utils.sh b/plugins/powershell-format/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/powershell-format/hooks/hook-utils.sh +++ b/plugins/powershell-format/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/rate-limit-guard/.claude-plugin/plugin.json b/plugins/rate-limit-guard/.claude-plugin/plugin.json index 6bed051a4b..0fb017076f 100644 --- a/plugins/rate-limit-guard/.claude-plugin/plugin.json +++ b/plugins/rate-limit-guard/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "rate-limit-guard", - "version": "0.10.6", + "version": "0.10.7", "description": "Shared rate-limit guard for loop lanes: a statusline wrapper tees the subscription rate-limit windows to a fixed machine-scope file, a StopFailure hook records rate-limit stops reactively, and a reader contract fixes how consuming sessions pause and resume.", "author": { "name": "Melodic Software", diff --git a/plugins/rate-limit-guard/CHANGELOG.md b/plugins/rate-limit-guard/CHANGELOG.md index 1f40603aae..606b7b33bc 100644 --- a/plugins/rate-limit-guard/CHANGELOG.md +++ b/plugins/rate-limit-guard/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `rate-limit-guard` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.10.7] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.10.6] - 2026-10-02 ### Changed diff --git a/plugins/rate-limit-guard/hooks/hook-utils.sh b/plugins/rate-limit-guard/hooks/hook-utils.sh index 8c880a558e..4327545cef 100755 --- a/plugins/rate-limit-guard/hooks/hook-utils.sh +++ b/plugins/rate-limit-guard/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/review/.claude-plugin/plugin.json b/plugins/review/.claude-plugin/plugin.json index 7683350c0a..671badb1c4 100644 --- a/plugins/review/.claude-plugin/plugin.json +++ b/plugins/review/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "review", - "version": "0.36.1", + "version": "0.36.2", "description": "Code-review toolkit: six reviewer agents, read-only over the reviewed code (code, security, architecture, doc drift, build/test/lint, CI-log audit), plus orchestration skills for the quality gate, fan-out, and enforceability audit (/review:audit-enforceability), an offered HTML pull-request explainer (/review:pr-explainer), a fan-out sweep workflow (/review:fanout-sweep), and CI lane commands (/review:code-review, /review:security-review) for org reusable workflows.", "author": { "name": "Melodic Software", diff --git a/plugins/review/CHANGELOG.md b/plugins/review/CHANGELOG.md index bc00431d78..916a9b9884 100644 --- a/plugins/review/CHANGELOG.md +++ b/plugins/review/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `review` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.36.2] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.36.1] - 2026-10-02 ### Changed diff --git a/plugins/review/skills/audit-enforceability/SKILL.md b/plugins/review/skills/audit-enforceability/SKILL.md index 2a59a07196..b74428e2cb 100644 --- a/plugins/review/skills/audit-enforceability/SKILL.md +++ b/plugins/review/skills/audit-enforceability/SKILL.md @@ -151,7 +151,7 @@ with its gate and its fallback: and the dependency-cruiser repository docs () for JS/TS. - **`hook`**: run `/harness-config:audit-automation-gaps hooks` (if the `harness-config` plugin is - installed) and present the stub as a candidate in its candidate-list step, which is + enabled) and present the stub as a candidate in its candidate-list step, which is self-generated and takes no findings input; otherwise the stub records the candidate with the evidence that skill's gates ask for (frequency, incident history, the enforcement level already covering it) and stops. diff --git a/plugins/review/skills/audit-enforceability/context/crosswalk.md b/plugins/review/skills/audit-enforceability/context/crosswalk.md index 5638e09ca5..75954a3733 100644 --- a/plugins/review/skills/audit-enforceability/context/crosswalk.md +++ b/plugins/review/skills/audit-enforceability/context/crosswalk.md @@ -12,7 +12,7 @@ cheapest rung whose check can actually assert it, never on a rung that merely co | `dotnet-invariant` (a project-specific API or usage invariant in C# expressible over syntax or the semantic model: a banned API, a required attribute, a misuse pattern) | `custom-analyzer` | Microsoft Learn, "Tutorial: Write your first analyzer and code fix" () | | `syntactic-pattern` (a code pattern expressible as a syntactic match in any language: a dangerous call, an injection sink, a secret shape, a cross-language invariant; also `dotnet-invariant` in a non-.NET ecosystem) | `semgrep-rule` | the `semgrep-rule-creator` plugin when installed; otherwise Semgrep's rule-writing documentation () | | `structure` (dependency direction, layering, namespace-to-layer naming, forbidden references) | `architecture-test` | ArchUnitNET () for .NET; dependency-cruiser () for JS/TS | -| `process` (commit shape, file placement, generated-file freshness, session behavior: anything observed at tool-call or commit time rather than in source) | `hook` | the `harness-config` plugin's automation-gaps audit when installed; otherwise record the candidate and stop | +| `process` (commit shape, file placement, generated-file freshness, session behavior: anything observed at tool-call or commit time rather than in source) | `hook` | the `harness-config` plugin's automation-gaps audit when enabled; otherwise record the candidate and stop | | `design-judgment` (readability, correctness reasoning, prose quality) and `unclassified` | `llm-only` | none; the finding stays a review-time judgment | The `custom-analyzer` rung is .NET-only. The same invariant in any other ecosystem is @@ -29,9 +29,9 @@ The one id form the detector-findings contract allows is `//rule- match here is byte-exact on the whole id. Every owner cell below reading "already deterministic: keep the `:` detector" is -gated on that plugin still being installed in the consuming repo; where it is not, the finding has +gated on that plugin still being enabled in the consuming repo; where it is not, the finding has no deterministic rung there and falls back to `llm-only`, a review-time judgment, until the -detector is reinstalled. The same gate and the same fallback bind the rule-family rows. +detector is enabled again. The same gate and the same fallback bind the rule-family rows. | Rule id | Class | Rung | Owner or pointer | Basis | |---|---|---|---|---| diff --git a/plugins/review/skills/audit-enforceability/evals/fixtures/classification-one-per-rung.tsv b/plugins/review/skills/audit-enforceability/evals/fixtures/classification-one-per-rung.tsv index f4a91459af..41564ea242 100644 --- a/plugins/review/skills/audit-enforceability/evals/fixtures/classification-one-per-rung.tsv +++ b/plugins/review/skills/audit-enforceability/evals/fixtures/classification-one-per-rung.tsv @@ -3,5 +3,5 @@ 3 dotnet-invariant judgment custom-analyzer Microsoft Learn, Tutorial: Write your first analyzer and code fix (https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/tutorials/how-to-write-csharp-analyzer-code-fix) 4 syntactic-pattern dimension semgrep-rule invoke /semgrep-rule-creator:semgrep-rule-creator (if the semgrep-rule-creator plugin is installed); otherwise Semgrep's rule-writing documentation (https://docs.semgrep.dev/writing-rules/overview) and stop 5 structure dimension architecture-test ArchUnitNET (https://archunitnet.readthedocs.io/) for .NET; dependency-cruiser (https://github.com/sverweij/dependency-cruiser) for JS/TS -6 process judgment hook run /harness-config:audit-automation-gaps hooks (if the harness-config plugin is installed) and present this stub as a candidate; otherwise record the candidate with frequency, incident history, and the enforcement level already covering it, and stop +6 process judgment hook run /harness-config:audit-automation-gaps hooks (if the harness-config plugin is enabled) and present this stub as a candidate; otherwise record the candidate with frequency, incident history, and the enforcement level already covering it, and stop 7 design-judgment judgment llm-only none; the finding stays a review-time judgment diff --git a/plugins/review/skills/fanout/evals/evals.json b/plugins/review/skills/fanout/evals/evals.json index d5583cc506..96dc5334e8 100644 --- a/plugins/review/skills/fanout/evals/evals.json +++ b/plugins/review/skills/fanout/evals/evals.json @@ -459,7 +459,7 @@ { "id": 37, "name": "fix-pass-producer-owned-surface-unavailable", - "prompt": "[Scenario: the same ai-slop:audit findings file, but the ai-slop plugin is NOT installed in this session, so /ai-slop:audit fix cannot be invoked.] /review:fanout fix --yes", + "prompt": "[Scenario: the same ai-slop:audit findings file, but the ai-slop plugin is NOT enabled in this session, so /ai-slop:audit fix cannot be invoked.] /review:fanout fix --yes", "expected_output": "The producer-owned rows are surfaced with the invocation the producer asked for; nothing is applied directly and nothing is installed.", "files": [], "expectations": [ diff --git a/plugins/review/skills/quality-gate/context/downstream.md b/plugins/review/skills/quality-gate/context/downstream.md index ce8d37facd..1236290de3 100644 --- a/plugins/review/skills/quality-gate/context/downstream.md +++ b/plugins/review/skills/quality-gate/context/downstream.md @@ -117,9 +117,9 @@ This skill does not run builds or tests (see the parent skill's "What this skill claim resting on an unrun check is stated as **"assessed, not verified because Y"**, naming Y. That formula and the discipline behind it are owned by `/playbooks:fable-5 verification` when the -`playbooks` plugin is installed. Invoke it **with the chapter name**, rather than reading into the +`playbooks` plugin is enabled. Invoke it **with the chapter name**, rather than reading into the plugin's files, and rather than bare, which arms that playbook's entire doctrine as standing session -instructions for the rest of the run. When it is not installed, the rule stands on its own as +instructions for the rest of the run. When it is not enabled, the rule stands on its own as written here. Do not invent a grading scale for it. The unverified claim is marked in words, and its confidence is the shared `confidence` axis. @@ -130,9 +130,9 @@ write it here. This mode reports. - Authoring the test routes to `/testing:write` when the `testing` plugin is installed. - Proving the test actually catches the bug routes to `/mutation-testing:audit` when the - `mutation-testing` plugin is installed, which is stronger than asserting it will, because the + `mutation-testing` plugin is enabled, which is stronger than asserting it will, because the mutant is re-run and the agent that wrote the test does not grade itself into a pass. -- Neither installed: state the test in enough detail that a reader can write it, and say that its +- Neither enabled: state the test in enough detail that a reader can write it, and say that its existence is unverified. ## Skip conditions: when this is the wrong mode diff --git a/plugins/ruff-format/.claude-plugin/plugin.json b/plugins/ruff-format/.claude-plugin/plugin.json index 6e50867d00..4221cd75fb 100644 --- a/plugins/ruff-format/.claude-plugin/plugin.json +++ b/plugins/ruff-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "ruff-format", - "version": "0.8.11", + "version": "0.8.12", "description": "Auto-format and lint Python on edit via Ruff, only when a Ruff config governs the repo, using the consuming repo's own Ruff config.", "author": { "name": "Melodic Software", diff --git a/plugins/ruff-format/CHANGELOG.md b/plugins/ruff-format/CHANGELOG.md index fec27a4ff2..eac12e8838 100644 --- a/plugins/ruff-format/CHANGELOG.md +++ b/plugins/ruff-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `ruff-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.8.12] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.8.11] - 2026-10-02 ### Changed diff --git a/plugins/ruff-format/hooks/hook-utils.sh b/plugins/ruff-format/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/ruff-format/hooks/hook-utils.sh +++ b/plugins/ruff-format/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/session-flow/.claude-plugin/plugin.json b/plugins/session-flow/.claude-plugin/plugin.json index 73daac5aaf..1dc00b919b 100644 --- a/plugins/session-flow/.claude-plugin/plugin.json +++ b/plugins/session-flow/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "session-flow", - "version": "0.45.0", + "version": "0.45.1", "description": "Session-lifecycle toolkit of sixteen skills: workflow (navigate a staged dev workflow and suggest the next stage), handoff (write a save-point and resume prompt for /clear-and-resume), continue-in-background (delegate the task to a fresh background agent that continues it now, using the same save-point engine as handoff, delivered by launching a detached claude --bg session seeded with the resume prompt; launches only on explicit user request), keep-going (recover and continue after any interruption OR when live off-thread work looks stalled: inventory off-thread work, inspect its real output, act only on evidence, then continue; after a usage limit lifts it continues rather than summarizing-and-stalling), find-handoff (recover a lost handoff after /clear, when the resume prompt was written but never copied, via a read-only detection ladder: known-location glob of the handoffs dir, then a bounded, recency-ranked transcript scan for the handoff directive and dashed-rail markers, then a confirm-before-resume gate; surfaces only the resume prompt + metadata, never raw transcript content), clean-stop (get to a durable, linked stopping point before the machine may go away: sweep every repo/worktree for uncommitted, unpushed, or PR-less work, push it durable, put breadcrumbs in PR/issue bodies, then give a free-and-clear verdict), retro (structured end-of-session retrospective with transcript metrics and learning codification), running-retro (in-flight retrospective checkpoints that spawn a subagent to analyze the transcript so far and append classified findings to a cumulative running ledger, which captures and routes only, the live counterpart to retro; also owns a detached-observer substrate that can watch a session out-of-band and run the checkpoint autonomously after the session ends), orient (read-only session orientation: synthesize where the session stands, what it is doing, and why, from durable + off-thread state the built-in /recap never sees: ledgers, handoffs, workflow checklists, running-retro ledgers, open PRs and work-items, and git), orchestrate (arm a session or worker with proactive-orchestration imperatives), reanchor (verify a session's working assumptions are still true against live reality, checking referenced PRs/issues/branches, base-branch drift, renamed/version-drifted surfaces, stale memory-tier files, and the goal a handoff records, compared across the chain so a re-derived goal reports as drift, before building on them), reconcile (retire finished off-thread work and reconcile this session's task ledger with reality, the prune-and-reconcile counterpart to keep-going's resume: inventory the work this session spawned, inspect its real state, retire the finished and close proven-done tasks, auto-settling the finished and gating any kill of still-running work; sibling sessions in the project are reported read-only), check (read-only check that node and jq resolve for the observer hook), setup (check-centric verification of the observer's runtime prerequisites and configuration), show-options (lay out which skills fit this moment as a ranked, nothing-hidden menu: a shortlist per bucket plus the complete remainder by name, resolved from the full installed catalog rather than the truncated in-context listing, so the human decides and no option is withheld for looking already-done), and tidy-work (opt-in inventory of the gitignored .work memory tiers: report age, size, kind, and in-flight status, normalize misplaced handoffs and retros, and remove stale known items behind one confirmation; unknown and in-flight items are always kept).", "author": { "name": "Melodic Software", diff --git a/plugins/session-flow/CHANGELOG.md b/plugins/session-flow/CHANGELOG.md index 42eee94090..527c54ec0a 100644 --- a/plugins/session-flow/CHANGELOG.md +++ b/plugins/session-flow/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog: session-flow plugin +## [0.45.1] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.45.0] - 2026-10-02 ### Added diff --git a/plugins/session-flow/README.md b/plugins/session-flow/README.md index 6248b8d165..bf2050816f 100644 --- a/plugins/session-flow/README.md +++ b/plugins/session-flow/README.md @@ -314,7 +314,7 @@ complete remainder by bare name with an explicit count, so nothing is off-screen Its contract is two rules: **never omit a candidate's name**, and **never invent one**. A skill the evidence says already ran is ranked normally and annotated `(ran this session)`, the model's judgment reaches rank and annotations, never presence. Candidates resolve from the full installed catalog -(`/harness-ops:inventory` when installed, else a project-supplied catalog, else the in-context listing +(`/harness-ops:inventory` when enabled, else a project-supplied catalog, else the in-context listing *with its truncation disclosed*), because that listing omits every manual-only skill and drops descriptions starting with the least-invoked ones, the very skills worth surfacing. Durable state is the primary signal; it builds no probe of its own and routes to `orient` for that. diff --git a/plugins/session-flow/output-styles/brain-fried.md b/plugins/session-flow/output-styles/brain-fried.md index d4451af43e..5fc59fb21e 100644 --- a/plugins/session-flow/output-styles/brain-fried.md +++ b/plugins/session-flow/output-styles/brain-fried.md @@ -20,5 +20,5 @@ Rephrase for clarity; do not dumb down the work or skip load-bearing detail. Cut operator needs to act correctly costs more than one more short sentence. For a one-shot deep explanation, invoke `/education:explain` when the `education` plugin is -installed; otherwise explain inline in this simplified register instead of relying on this style +enabled; otherwise explain inline in this simplified register instead of relying on this style alone. diff --git a/plugins/session-flow/skills/keep-going/SKILL.md b/plugins/session-flow/skills/keep-going/SKILL.md index cdd4aa6a6b..7d32a9a3f5 100644 --- a/plugins/session-flow/skills/keep-going/SKILL.md +++ b/plugins/session-flow/skills/keep-going/SKILL.md @@ -100,13 +100,13 @@ itself the thing this skill removes. Step 5 continues the main task in **this** session, and that is only right when this session's context is still fit for the work. When the -`context-guard` plugin is installed, resolve this session's zone word per +`context-guard` plugin is enabled, resolve this session's zone word per its reader contract before continuing (the contract owns the snapshot path, staleness rule, and bands. Read them there; this skill consumes only the resulting word and inlines no band values). Never substitute your own estimate of the remaining window for the instrument's reading, a resumed session's sense of its own budget is exactly the guess the -instrument exists to replace. Absent plugin, absent snapshot, or +instrument exists to replace. Plugin not enabled, absent snapshot, or `unknown` → judge from response quality alone, conservatively. A degraded zone, or context-guard's evidence-degraded marker for this session, does not stop the recovery (steps 1-4 are reads and evidence-gated actions diff --git a/plugins/session-flow/skills/orchestrate/SKILL.md b/plugins/session-flow/skills/orchestrate/SKILL.md index a497d0a4ca..d708620060 100644 --- a/plugins/session-flow/skills/orchestrate/SKILL.md +++ b/plugins/session-flow/skills/orchestrate/SKILL.md @@ -49,7 +49,7 @@ told: Recheck trigger: that section moves or starts stating its own multiplier, or a docs page starts covering fan-out sizing. "Would flood context" is a measurement, not a hunch, when the instrument exists: with the - `context-guard` plugin installed, resolve this session's zone word per its reader contract + `context-guard` plugin enabled, resolve this session's zone word per its reader contract before a fan-out decision (the contract owns the snapshot path, staleness rule, and bands. Read them there; this imperative consumes only the word, no band values). Never estimate your own remaining window, diff --git a/plugins/session-flow/skills/reanchor/evals/evals.json b/plugins/session-flow/skills/reanchor/evals/evals.json index 47189ea673..a7e425fd6d 100644 --- a/plugins/session-flow/skills/reanchor/evals/evals.json +++ b/plugins/session-flow/skills/reanchor/evals/evals.json @@ -75,11 +75,11 @@ "id": 7, "name": "negative-routing-rule-discipline-is-discipline-plugin", "prompt": "You've been drifting from the no-assumptions rule mid-task — re-anchor to that standing rule and audit the work in flight against it.", - "expected_output": "Re-anchoring a standing behavioral rule and auditing in-flight work against it is a separate discipline concern (the discipline plugin's, when installed); session-flow:reanchor does not load — it re-anchors factual session assumptions against live reality, not behavioral doctrine.", + "expected_output": "Re-anchoring a standing behavioral rule and auditing in-flight work against it is a separate discipline concern (the discipline plugin's, when enabled); session-flow:reanchor does not load — it re-anchors factual session assumptions against live reality, not behavioral doctrine.", "files": [], "expectations": [ "session-flow:reanchor is not invoked for behavioral-rule re-anchoring", - "Standing-rule/discipline correction routes to the discipline plugin when installed, else is treated as outside reanchor's scope", + "Standing-rule/discipline correction routes to the discipline plugin when enabled, else is treated as outside reanchor's scope", "Distinguishes factual-premise freshness (reanchor) from rule discipline" ] }, diff --git a/plugins/session-flow/skills/retro/context/session.md b/plugins/session-flow/skills/retro/context/session.md index 12531d1357..8f8d2c1d65 100644 --- a/plugins/session-flow/skills/retro/context/session.md +++ b/plugins/session-flow/skills/retro/context/session.md @@ -224,7 +224,7 @@ candidates" with a one-line explanation of what was considered. **Name where an accepted candidate goes.** Invoke `/playbooks:skill-authoring` via the Skill tool to read its doctrine, draft the candidate against it, then gate the result on -`/skill-quality:check`, when those are installed; otherwise say the candidate has no authoring +`/skill-quality:check`, when those are enabled; otherwise say the candidate has no authoring route here and leave it recorded. A candidate with no destination is a finding that evaporates between sessions, and a skill written ad hoc at the end of a retro is the one most likely to miss the conventions that playbook exists to carry. It is a knowledge surface with no arguments diff --git a/plugins/session-flow/skills/running-retro/SKILL.md b/plugins/session-flow/skills/running-retro/SKILL.md index 5199100fcb..0137d2c8a8 100644 --- a/plugins/session-flow/skills/running-retro/SKILL.md +++ b/plugins/session-flow/skills/running-retro/SKILL.md @@ -58,7 +58,7 @@ disk holds what *happened*; it does not hold the acting agent's present read of only signal the analysis subagent cannot get for itself. It seeds the analysis. **Ground the note in the instrument when one is present.** When the `context-guard` plugin is -installed, resolve this session's zone word per its reader contract (the contract owns the +enabled, resolve this session's zone word per its reader contract (the contract owns the snapshot path, staleness rule, and bands, read them there; this note carries only the resulting word, no band values) and include it in the note. A self-impression of the window is a guess and can sit far from the instrument's reading, and the analysis subagent judging degradation deserves @@ -137,7 +137,7 @@ Present the checkpoint findings, then OFFER the forward routes; act only on the `CLAUDE.md`, rules, or memory itself). - **File follow-up work** → offer the consumer's work-item tracker; never file automatically. - **Build the new-skill candidate** → read `/playbooks:skill-authoring` for the authoring doctrine - and draft against it, then gate the result on `/skill-quality:check`, when those are installed; + and draft against it, then gate the result on `/skill-quality:check`, when those are enabled; otherwise say the candidate has no authoring route here and leave it recorded. The checkpoint already emits a "New-skill candidates" line, and a candidate with no named destination is a finding that evaporates. Read the doctrine before drafting rather than inventing a shape from diff --git a/plugins/session-flow/skills/show-options/SKILL.md b/plugins/session-flow/skills/show-options/SKILL.md index 8dc0d9c543..0a1b87c0a8 100644 --- a/plugins/session-flow/skills/show-options/SKILL.md +++ b/plugins/session-flow/skills/show-options/SKILL.md @@ -60,7 +60,7 @@ acceptable sole source: it omits every `disable-model-invocation: true` skill ou listing overflows its budget it drops descriptions **starting with the least-invoked skills**, the forgotten ones this skill exists to surface. Ladder: -1. `/harness-ops:inventory`, if that plugin is installed. It owns whole-fleet enumeration and its +1. `/harness-ops:inventory`, if that plugin is enabled. It owns whole-fleet enumeration and its bundled script already reports every installed skill including manual-only ones; reuse it rather than walking the plugin cache, whose layout is undocumented and version-keyed. **Read its output from stdout, never pass `--out` into the consuming project**, whose documented example writes diff --git a/plugins/session-flow/skills/show-options/context/candidate-ladder.md b/plugins/session-flow/skills/show-options/context/candidate-ladder.md index dd18bc47dc..f3fce47cf8 100644 --- a/plugins/session-flow/skills/show-options/context/candidate-ladder.md +++ b/plugins/session-flow/skills/show-options/context/candidate-ladder.md @@ -28,7 +28,7 @@ precisely where the operator needs it most, and it cannot tell that it is blind. | Rung | Source | Gate | Yields | |---|---|---|---| -| 1 | `/harness-ops:inventory` | if that plugin is installed | Every **installed** skill across every marketplace, manual-only included; reconcile against the enabled set, below | +| 1 | `/harness-ops:inventory` | if that plugin is enabled | Every **installed** skill across every marketplace, manual-only included; reconcile against the enabled set, below | | 2 | An operator-supplied catalog file | if the consuming project provides one | Whatever the project chose to publish | | 3 | The in-context listing | always available | Every *name*, minus manual-only skills | @@ -104,7 +104,7 @@ Whenever the pool came from Ladder A rung 3, or Ladder B could not enrich, the o briefly, once, near the top. For example: ```text -Pool: in-context listing only (harness-ops:inventory not installed). Manual-only skills are not +Pool: in-context listing only (harness-ops:inventory not enabled). Manual-only skills are not visible here, and descriptions for rarely-invoked skills may be missing. ``` diff --git a/plugins/session-flow/skills/show-options/evals/evals.json b/plugins/session-flow/skills/show-options/evals/evals.json index 68dfb00a62..3f46d63207 100644 --- a/plugins/session-flow/skills/show-options/evals/evals.json +++ b/plugins/session-flow/skills/show-options/evals/evals.json @@ -46,7 +46,7 @@ { "id": 4, "name": "discloses-a-degraded-pool", - "prompt": "What should I run next? (harness-ops is not installed in this session and no project catalog is configured.)", + "prompt": "What should I run next? (harness-ops is not enabled in this session and no project catalog is configured.)", "expected_output": "The skill falls back to the in-context listing and says so in the output — naming that manual-only skills are not visible from that source and that descriptions for rarely-invoked skills may have been dropped. It does not present the truncated pool as a complete catalog.", "files": [], "narration": true, diff --git a/plugins/session-flow/skills/workflow/context/continuation.md b/plugins/session-flow/skills/workflow/context/continuation.md index 37879c13c8..f926166731 100644 --- a/plugins/session-flow/skills/workflow/context/continuation.md +++ b/plugins/session-flow/skills/workflow/context/continuation.md @@ -16,9 +16,9 @@ only entrance and is the router's one non-terminal edge. ## Zone input (presence-gated, conservative) -When the `context-guard` plugin is installed, resolve this session's zone word per its reader +When the `context-guard` plugin is enabled, resolve this session's zone word per its reader contract (the contract owns the snapshot path, staleness rule, and bands, so read them there; this -router consumes only the resulting word, and inlines no band values). Absent plugin, absent +router consumes only the resulting word, and inlines no band values). Plugin not enabled, absent snapshot, or `unknown` → assume degraded and lean on the judgment tests below (window position and response quality). If context-guard's evidence-degraded marker exists for this session, or the session is otherwise known to have been compacted, treat the context as degraded regardless diff --git a/plugins/session-flow/skills/workflow/context/wrap-up.md b/plugins/session-flow/skills/workflow/context/wrap-up.md index 493bf74669..ef18cb52ce 100644 --- a/plugins/session-flow/skills/workflow/context/wrap-up.md +++ b/plugins/session-flow/skills/workflow/context/wrap-up.md @@ -16,7 +16,7 @@ Don't wait to be asked. Suggest as soon as primary work is done. context is limited, `/session-flow:retro codify` when a specific learning surfaced mid-session 4. **Plugin audit offer.** If the session invoked at least one plugin skill and `plugin-quality` is - installed, offer `/plugin-quality:audit session` in one line. Offer only; the operator runs it + enabled, offer `/plugin-quality:audit session` in one line. Offer only; the operator runs it ## When to suggest each item @@ -27,4 +27,4 @@ Don't wait to be asked. Suggest as soon as primary work is done. | Work unfinished, session ending | `/session-flow:handoff` | | Any session with substantive work | `/session-flow:retro` (full or quick based on context budget) | | Session had errors or surprises | `/session-flow:retro codify` (capture specific learnings immediately) | -| Session invoked at least one plugin skill, `plugin-quality` installed | One-line offer of `/plugin-quality:audit session` (never run it) | +| Session invoked at least one plugin skill, `plugin-quality` enabled | One-line offer of `/plugin-quality:audit session` (never run it) | diff --git a/plugins/session-flow/skills/workflow/evals/evals.json b/plugins/session-flow/skills/workflow/evals/evals.json index 2b55baf2bb..4bd0571a81 100644 --- a/plugins/session-flow/skills/workflow/evals/evals.json +++ b/plugins/session-flow/skills/workflow/evals/evals.json @@ -175,7 +175,7 @@ { "id": 15, "name": "wrap-up-offers-plugin-audit-after-plugin-skill", - "prompt": "/workflow wrap-up — this session ran /source-control:commit and /verification:confirm. plugin-quality is installed.", + "prompt": "/workflow wrap-up — this session ran /source-control:commit and /verification:confirm. plugin-quality is enabled.", "expected_output": "The wrap-up checklist includes a one-line offer of `/plugin-quality:audit session` because the session invoked plugin skills. It is an offer only; the router does not run the audit.", "files": [], "expectations": [ diff --git a/plugins/source-control/.claude-plugin/plugin.json b/plugins/source-control/.claude-plugin/plugin.json index eee31347d8..9065d9b9ab 100644 --- a/plugins/source-control/.claude-plugin/plugin.json +++ b/plugins/source-control/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "source-control", - "version": "0.76.0", + "version": "0.76.1", "description": "Git and GitHub delivery workflow: /commit (Conventional Commits + Co-authored-by trailer via safe heredoc mechanics), /pull-request (prep, create, CI monitoring, review-comment triage, merge, CI-log fetch), /babysit-prs (self-pacing fleet loop, safe by default; opt-in worker/autopilot tiers add gate-checked merge and thread resolution behind a deterministic Python engine), /babysit-loop (the loop-lane merge lane: a standing or drain loop that invokes babysit-prs per cycle, configured through repo-scoped babysit_loop_* keys on the layered source-control.md seam, with merge authority human-only until the target repo's tracked config adopts the lane, a gate-proven C2-mechanical baseline once adopted, and standing merge-rung raises binding from the team-tracked layer only, with one named exception, where an invocation line explicitly typing both the autopilot tier keyword and the dedicated raise argument --merge c3-this-run widens that single invocation's merge authority up to C3 behind a fresh independent frontier-tier resolver, while C4-structural and C5-untrusted-provenance stay unconditionally human-merge), /worktree (create, status, cleanup, audit for parallel-session isolation), /setup (check the effective commit-subject / PR-title convention merged across its config layers and the babysit-prs config, or apply, which interviews the repo and writes the convention config to a chosen layer), and /resolve-conflicts (intent-first merge/rebase conflict resolution with a semantic-conflict sweep, never --abort). The commit-subject / PR-title convention is configurable via a source-control.md config written by a re-runnable setup skill, layered across a ~/.claude user-global file, the tracked team file, and a gitignored .claude/source-control.local.md personal overlay merged per key; Conventional Commits is the default when no convention is declared.", "author": { "name": "Melodic Software", diff --git a/plugins/source-control/CHANGELOG.md b/plugins/source-control/CHANGELOG.md index d12d356d3d..1515f73101 100644 --- a/plugins/source-control/CHANGELOG.md +++ b/plugins/source-control/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to the `source-control` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.76.1] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.76.0] - 2026-10-02 ### Changed diff --git a/plugins/source-control/hooks/hook-utils.sh b/plugins/source-control/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/source-control/hooks/hook-utils.sh +++ b/plugins/source-control/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/source-control/skills/babysit-loop/SKILL.md b/plugins/source-control/skills/babysit-loop/SKILL.md index 05a4e89eda..01768c4aa1 100644 --- a/plugins/source-control/skills/babysit-loop/SKILL.md +++ b/plugins/source-control/skills/babysit-loop/SKILL.md @@ -417,7 +417,7 @@ above). A plugin version-bump collision (`.claude-plugin/plugin.json`, `CHANGELO conflict worker or the inline freshness merge meets it, is resolved by `${CLAUDE_PLUGIN_ROOT}/scripts/resolve-version-bump-conflict.sh`, per `/source-control:resolve-conflicts` step 3. This loop adds two lane rules, per the convention: the subagent runs at the **frontier capability tier** (order-defined, resolved at runtime by model alias only, never a hard-coded -model ID), and every dispatch prompt carries the subagent discipline preamble, when the `discipline` plugin is installed, invoke its sweep skill, which resolves its own membership (never a hand-copied list, which drifts from the plugin owning it); when absent, inline the equivalent standing instructions (verify claims against authoritative sources, prefer installed skills, re-check against active conventions), per the convention. +model ID), and every dispatch prompt carries the subagent discipline preamble, when the `discipline` plugin is enabled, invoke its sweep skill, which resolves its own membership (never a hand-copied list, which drifts from the plugin owning it); when absent, inline the equivalent standing instructions (verify claims against authoritative sources, prefer installed skills, re-check against active conventions), per the convention. The explicit-`autopilot` pre-escalation dispatch (Escalation, above) adds one further requirement: **context independence**, per the convention's §3, the dispatched subagent must share no diff --git a/plugins/source-control/skills/babysit-prs/reference/orchestration.md b/plugins/source-control/skills/babysit-prs/reference/orchestration.md index 035cec37d4..4dc77ca8fa 100644 --- a/plugins/source-control/skills/babysit-prs/reference/orchestration.md +++ b/plugins/source-control/skills/babysit-prs/reference/orchestration.md @@ -752,7 +752,7 @@ convention's capability table security-surface work, matching the merge-lane prompt's conflict path. Every dispatch prompt also carries the subagent discipline preamble (when the -`discipline` plugin is installed, invoke its sweep skill; when absent, inline the +`discipline` plugin is enabled, invoke its sweep skill; when it is not, inline the equivalent standing instructions), per the same convention. `/source-control:babysit-loop` documents the lane-level binding; this skill inherits it for every fan-out it performs. diff --git a/plugins/source-control/skills/pull-request/reference/prep.md b/plugins/source-control/skills/pull-request/reference/prep.md index 74ede83c2f..0a37428a93 100644 --- a/plugins/source-control/skills/pull-request/reference/prep.md +++ b/plugins/source-control/skills/pull-request/reference/prep.md @@ -22,7 +22,7 @@ Classify the branch's changed files by the table below and run the steps each cl **The order of the steps is not this file's to set.** It is the fleet's pre-PR order, owned by [`docs/conventions/pre-pr-ordering/README.md`](https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/conventions/pre-pr-ordering/README.md). Read the order there; this file cites it rather than restating it. -Every skill named below is invoked through the Skill tool when its plugin is installed, and replaced by the inline fallback stated beside it when it is not. Report each fallback and what it covered. +Every skill named below is invoked through the Skill tool when its plugin is enabled, and replaced by the inline fallback stated beside it when it is not. Report each fallback and what it covered. **No `code` class?** Skip 1.2 to 1.4; the verify gate (1.5) reduces to lint. The other classes still owe their audits, so a docs-only branch is not exempt: it owes the prose audits in 1.2.1. If the consuming project layers extra prep requirements on PR creation (hooks, gates), satisfy those per its own docs. @@ -37,10 +37,10 @@ Run **one** fresh-context review over the branch diff: `/review:quality-gate` un Run the audit each detected class owes, over the changed files of that class only: -- **`markdown`**: `/ai-slop:audit` when the `ai-slop` plugin is installed, otherwise read the changed markdown against the project's own prose rules; and `/docs-hygiene:audit-noise` when the `docs-hygiene` plugin is installed, otherwise read it for stale citations, dead references, and conversational residue +- **`markdown`**: `/ai-slop:audit` when the `ai-slop` plugin is enabled, otherwise read the changed markdown against the project's own prose rules; and `/docs-hygiene:audit-noise` when the `docs-hygiene` plugin is installed, otherwise read it for stale citations, dead references, and conversational residue - **`renames`**: `/docs-hygiene:rename-references audit` when `docs-hygiene` is installed, otherwise grep the old path and the old name for every surviving reference. The class fires only when the diff reports a rename -- **`skills`**: `/skill-quality:check` when the `skill-quality` plugin is installed, otherwise run the project's own skill lint, or read each changed skill's frontmatter against the contract the project documents -- **`rules`**: `/instruction-placement:check` when the `instruction-placement` plugin is installed, otherwise confirm each changed rule's `paths:` glob still matches a tracked file +- **`skills`**: `/skill-quality:check` when the `skill-quality` plugin is enabled, otherwise run the project's own skill lint, or read each changed skill's frontmatter against the contract the project documents +- **`rules`**: `/instruction-placement:check` when the `instruction-placement` plugin is enabled, otherwise confirm each changed rule's `paths:` glob still matches a tracked file - **`security`**: not here. It reviews the pull request's own diff, so it runs in the ready step Audits that persist findings hand them to one `/review:fanout fix` pass when the `review` plugin is installed, and are applied by hand otherwise. Either way each finding goes through 1.3 first. diff --git a/plugins/tdd/.claude-plugin/plugin.json b/plugins/tdd/.claude-plugin/plugin.json index 6f01bee881..3fbe6a370b 100644 --- a/plugins/tdd/.claude-plugin/plugin.json +++ b/plugins/tdd/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "tdd", - "version": "0.4.9", + "version": "0.4.10", "description": "A TDD knowledge base distilled from cover-to-cover readings of Kent Beck's Test-Driven Development: By Example and Vladimir Khorikov's Unit Testing: Principles, Practices, and Patterns. Fourteen author-attributed reference files behind a routing table, plus a no-load quick decision guide, answer the WHY behind test design decisions.", "author": { "name": "Melodic Software", diff --git a/plugins/tdd/CHANGELOG.md b/plugins/tdd/CHANGELOG.md index 9a9c6f1ed3..c62cd59735 100644 --- a/plugins/tdd/CHANGELOG.md +++ b/plugins/tdd/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `tdd` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.4.10] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.4.9] ### Changed diff --git a/plugins/tdd/skills/principles/SKILL.md b/plugins/tdd/skills/principles/SKILL.md index b7f697e38d..c53e04b1f4 100644 --- a/plugins/tdd/skills/principles/SKILL.md +++ b/plugins/tdd/skills/principles/SKILL.md @@ -53,7 +53,7 @@ Load the most relevant file first. Load a second only if the first doesn't fully - **Beck**: Kent Beck, *Test-Driven Development: By Example* (2003) - **Khorikov**: Vladimir Khorikov, *Unit Testing: Principles, Practices, and Patterns* (2020) - **Ousterhout** (secondary, cross-referenced only): John Ousterhout, *A Philosophy of Software Design*, cited in one editorial-synthesis section of [test-doubles.md](reference/test-doubles.md) -- **Mutation-testing literature** (secondary, cross-referenced only): the primary sources on mutation testing, cited in one clearly-labeled editorial note in each of [code-coverage-khorikov.md](reference/code-coverage-khorikov.md) and [four-pillars-khorikov.md](reference/four-pillars-khorikov.md), where a claim of Khorikov's has a measurable partial exception he does not cover. Both notes are marked as outside his text and leave his claim standing. The material itself is owned by `/mutation-testing:principles` when the `mutation-testing` plugin is installed; without it, each note carries its own one-line fallback. +- **Mutation-testing literature** (secondary, cross-referenced only): the primary sources on mutation testing, cited in one clearly-labeled editorial note in each of [code-coverage-khorikov.md](reference/code-coverage-khorikov.md) and [four-pillars-khorikov.md](reference/four-pillars-khorikov.md), where a claim of Khorikov's has a measurable partial exception he does not cover. Both notes are marked as outside his text and leave his claim standing. The material itself is owned by `/mutation-testing:principles` when the `mutation-testing` plugin is enabled; without it, each note carries its own one-line fallback. ## Naming convention diff --git a/plugins/tdd/skills/principles/reference/code-coverage-khorikov.md b/plugins/tdd/skills/principles/reference/code-coverage-khorikov.md index 5720539894..142fc0fc5b 100644 --- a/plugins/tdd/skills/principles/reference/code-coverage-khorikov.md +++ b/plugins/tdd/skills/principles/reference/code-coverage-khorikov.md @@ -135,7 +135,7 @@ There's no automated way to measure test suite quality. You must evaluate each t > it says nothing about the other properties this chapter names, its ceiling is unknowable because > equivalent mutants cannot all be removed, and targeting the number reproduces exactly the perverse > incentive described above. For the operators, the metric family, and why not to gate on it, invoke -> `/mutation-testing:principles` when the `mutation-testing` plugin is installed; without it, the +> `/mutation-testing:principles` when the `mutation-testing` plugin is enabled; without it, the > one-line version is that the metric to read is the *covered-code* mutation score (PIT calls it > test strength, Infection calls it Covered Code MSI), because the plain score mixes weak tests with > absent tests, and that it belongs beside coverage as an indicator rather than as a target. diff --git a/plugins/tdd/skills/principles/reference/four-pillars-khorikov.md b/plugins/tdd/skills/principles/reference/four-pillars-khorikov.md index 563acf4bf7..26bdb21542 100644 --- a/plugins/tdd/skills/principles/reference/four-pillars-khorikov.md +++ b/plugins/tdd/skills/principles/reference/four-pillars-khorikov.md @@ -99,7 +99,7 @@ Test accuracy = Signal (bugs found) / Noise (false alarms raised) > measurement is deliberately lopsided, and a suite optimized for mutation score alone will trade > away the other three pillars, which is the reason it is an indicator here and not a target. For > the metric family and its limits, invoke `/mutation-testing:principles` via the Skill tool when the -> `mutation-testing` plugin is installed; without it, the short version is that the number to read +> `mutation-testing` plugin is enabled; without it, the short version is that the number to read > is the *covered-code* mutation score, that its ceiling is unknowable because equivalent mutants > cannot all be removed, and that a suite with known flaky tests reports a score inflated by an > unknown margin. diff --git a/plugins/tdd/skills/principles/reference/test-doubles.md b/plugins/tdd/skills/principles/reference/test-doubles.md index 589c72c59d..e5d195f32a 100644 --- a/plugins/tdd/skills/principles/reference/test-doubles.md +++ b/plugins/tdd/skills/principles/reference/test-doubles.md @@ -159,6 +159,6 @@ Mock/stub taxonomy and CQS in full: [observable-behavior-khorikov.md](observable > Editorial synthesis, drawing on Ousterhout, not from either source book. -When merging shallow modules behind a deeper interface ("deepening" per Ousterhout's *A Philosophy of Software Design*), the test surface moves to the deepened interface. The discipline: write new tests at the deepened interface, delete the old shallow-module tests, assert observable outcomes not internal state. If the `architecture` plugin is installed, `/architecture:improve` covers the wider deepening workflow ("Replace, don't layer"); when it is absent, the summary above is the full guidance. +When merging shallow modules behind a deeper interface ("deepening" per Ousterhout's *A Philosophy of Software Design*), the test surface moves to the deepened interface. The discipline: write new tests at the deepened interface, delete the old shallow-module tests, assert observable outcomes not internal state. If the `architecture` plugin is enabled, `/architecture:improve` covers the wider deepening workflow ("Replace, don't layer"); when it is absent, the summary above is the full guidance. This complements Khorikov's "observable behavior" principle: the deepened interface IS the observable behavior surface, so tests behind it are implementation-detail tests by definition. diff --git a/plugins/testing/.claude-plugin/plugin.json b/plugins/testing/.claude-plugin/plugin.json index 56fbbd3a08..f79fc00013 100644 --- a/plugins/testing/.claude-plugin/plugin.json +++ b/plugins/testing/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "testing", - "version": "0.21.0", + "version": "0.21.1", "description": "Test-stage discipline across all ecosystems: coverage-gap analysis and test planning (`/testing:plan`), TDD test authoring and placement (`/testing:write`), live E2E plus non-UI smoke verification (`/testing:run-e2e`), failing-test root-cause diagnosis with the reproduce → isolate → fix → retest loop (`/testing:diagnose`), which offers a fix-until-green workflow when several tests fail across files, a deterministic can't-fail test audit with a fail-closed gate mode and opt-in findings persistence (`/testing:audit`), a cleanup that rewrites, quarantines or, on approval, deletes low-value tests in one folder behind a mutation gate (`/testing:cleanup`), its configuration (`/testing:setup`), and opt-in hooks that scan each test file Claude writes and question edits that weaken tests.", "author": { "name": "Melodic Software", diff --git a/plugins/testing/CHANGELOG.md b/plugins/testing/CHANGELOG.md index 8fe83e5a3f..15bf2a9f45 100644 --- a/plugins/testing/CHANGELOG.md +++ b/plugins/testing/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `testing` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.21.1] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.21.0] - 2026-10-02 ### Added diff --git a/plugins/testing/hooks/hook-utils.sh b/plugins/testing/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/testing/hooks/hook-utils.sh +++ b/plugins/testing/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/typos-format/.claude-plugin/plugin.json b/plugins/typos-format/.claude-plugin/plugin.json index c28e0ddbe3..acf7d8fe28 100644 --- a/plugins/typos-format/.claude-plugin/plugin.json +++ b/plugins/typos-format/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "typos-format", - "version": "0.8.12", + "version": "0.8.13", "description": "Spell-check on edit via typos-cli, unconditionally. Report-only by default, honoring the consuming repo's own typos configuration when one is present.", "author": { "name": "Melodic Software", diff --git a/plugins/typos-format/CHANGELOG.md b/plugins/typos-format/CHANGELOG.md index d2e791eaa0..8438424665 100644 --- a/plugins/typos-format/CHANGELOG.md +++ b/plugins/typos-format/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `typos-format` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.8.13] - 2026-10-03 + +### Changed + +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.8.12] - 2026-10-02 ### Changed diff --git a/plugins/typos-format/hooks/hook-utils.sh b/plugins/typos-format/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/typos-format/hooks/hook-utils.sh +++ b/plugins/typos-format/hooks/hook-utils.sh @@ -442,7 +442,7 @@ hook::require_jq() { local event="$1" plugin="$2" input="${3:-}" if hook::notice_once "${plugin}-jq" "$input"; then hook::emit_skip_notice "$event" \ - "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." + "$plugin: jq not found on PATH — hook skipped for this session. Install jq (https://jqlang.org/download/) to enable it. If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." fi exit 0 } @@ -483,7 +483,7 @@ hook::require_jq_blocking() { else echo "Install jq (https://jqlang.org/download/) to restore the guard." >&2 fi - echo "If the harness-ops plugin is installed, run /harness-ops:prerequisites to list every missing prerequisite." >&2 + echo "If the harness-ops plugin is enabled, run /harness-ops:prerequisites to list every missing prerequisite." >&2 exit 2 } diff --git a/plugins/verification/.claude-plugin/plugin.json b/plugins/verification/.claude-plugin/plugin.json index 7320ed252f..036135ef41 100644 --- a/plugins/verification/.claude-plugin/plugin.json +++ b/plugins/verification/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "verification", - "version": "0.7.2", + "version": "0.7.3", "description": "Outcome-verification stage: prove a change achieved its intended outcome (`/verification:confirm`: a mechanical build/test/lint prerequisite gate, then intent-match + evidence + verdict with the criterion auto-detected by change type), and verify measurable-improvement claims against a planning-time baseline (`/verification:measure`), never fabricating numbers.", "author": { "name": "Melodic Software", diff --git a/plugins/verification/CHANGELOG.md b/plugins/verification/CHANGELOG.md index 3f2a1ba1ca..8206552f26 100644 --- a/plugins/verification/CHANGELOG.md +++ b/plugins/verification/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `verification` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.3] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.7.2] - 2026-10-02 ### Fixed diff --git a/plugins/verification/skills/confirm/SKILL.md b/plugins/verification/skills/confirm/SKILL.md index 06eab4c5a6..4e668045a5 100644 --- a/plugins/verification/skills/confirm/SKILL.md +++ b/plugins/verification/skills/confirm/SKILL.md @@ -138,7 +138,7 @@ For "run the live app and watch it behave," beyond automated `/testing:run-e2e`, - **No git changes but user runs `/verification:confirm all`**: run Stage 1 across all ecosystems anyway (useful after a rebase or pull), then outcome verification if intent is in scope. - **Changed file outside any known ecosystem**: Stage 1 skips it with a note; Stage 2 still assesses intent match. - **Missing tools or dependencies**: `/toolchain:check` / `/toolchain:lint` report a named environment skip with the install hint, not a failure. It is never reported as done: it holds the verdict below `CONFIRMED` (Gate result, step 4), or stops the run when nothing else ran (step 3). -- **Invoked from a PR-prep flow**: treat the verdict as a hard gate. Any FAIL or unresolved CRITICAL gap blocks PR creation. A comprehension layer (an `education:quiz-me` report, when that plugin is installed) may precede this gate and inform it; the merge gate itself lives here, one mechanism per concern. +- **Invoked from a PR-prep flow**: treat the verdict as a hard gate. Any FAIL or unresolved CRITICAL gap blocks PR creation. A comprehension layer (an `education:quiz-me` report, when that plugin is enabled) may precede this gate and inform it; the merge gate itself lives here, one mechanism per concern. ## Skill chaining diff --git a/plugins/verification/skills/measure/SKILL.md b/plugins/verification/skills/measure/SKILL.md index 7939b52832..f761d0e83c 100644 --- a/plugins/verification/skills/measure/SKILL.md +++ b/plugins/verification/skills/measure/SKILL.md @@ -66,5 +66,5 @@ Measuring broken code is meaningless, and a baseline captured on a broken tree p - **Baseline BEFORE the change, compared under the SAME conditions after.** Condition drift invalidates the comparison, the run/warm-up/conditions methodology is owned by [context/performance.md](context/performance.md). - **Noise floor first.** If the projected saving sits within run-to-run variance, the change is unmeasurable. Surface that before the work, not after (detail: [context/performance.md](context/performance.md)). -- **A drifting host needs more than a noise-floor warning.** When the machine's own spread makes a wall-clock comparison meaningless (a bimodal no-op-spawn signature, arms that cannot be run in one pass, no drift-immune counter agreed), route to `/performance:snapshot` when the `performance` plugin is installed: it qualifies the host before measuring, interleaves the arms within one run, ranks a drift-immune counter above any duration, and refuses a wall-clock claim this skill would still report with a warning. This skill remains SSOT for baseline capture, storage, and the compare mechanics that plugin builds on. +- **A drifting host needs more than a noise-floor warning.** When the machine's own spread makes a wall-clock comparison meaningless (a bimodal no-op-spawn signature, arms that cannot be run in one pass, no drift-immune counter agreed), route to `/performance:snapshot` when the `performance` plugin is enabled: it qualifies the host before measuring, interleaves the arms within one run, ranks a drift-immune counter above any duration, and refuses a wall-clock claim this skill would still report with a warning. This skill remains SSOT for baseline capture, storage, and the compare mechanics that plugin builds on. - **Never fabricate numbers.** No baseline, high variance, or differing conditions → INCONCLUSIVE / NOT CONFIRMED, stated plainly. diff --git a/plugins/verification/skills/measure/context/metrics.md b/plugins/verification/skills/measure/context/metrics.md index 50d70c9b00..faa375b75a 100644 --- a/plugins/verification/skills/measure/context/metrics.md +++ b/plugins/verification/skills/measure/context/metrics.md @@ -10,12 +10,12 @@ Quality is partly subjective, but some aspects ARE measurable: | Quality aspect | Measurable proxy | How to check | |---------------|-----------------|--------------| -| Complexity | Cyclomatic complexity, nesting depth | `/code-metrics:audit-complexity --json` when the `code-metrics` plugin is installed (treat the pair as INCONCLUSIVE when `status` is `empty` on either side, or when the two documents' `schema` values or `root.path` differ; a baseline taken before `code-metrics/v2` is a v1 document and must be re-taken); otherwise count conditionals, measure max nesting | -| Size | Lines of code, file count, method length | `/code-metrics:audit-size --json` when the `code-metrics` plugin is installed (same INCONCLUSIVE rule); otherwise a line counter (`wc -l` on POSIX/Git Bash, `Measure-Object -Line` in PowerShell), `git diff --stat` | +| Complexity | Cyclomatic complexity, nesting depth | `/code-metrics:audit-complexity --json` when the `code-metrics` plugin is enabled (treat the pair as INCONCLUSIVE when `status` is `empty` on either side, or when the two documents' `schema` values or `root.path` differ; a baseline taken before `code-metrics/v2` is a v1 document and must be re-taken); otherwise count conditionals, measure max nesting | +| Size | Lines of code, file count, method length | `/code-metrics:audit-size --json` when the `code-metrics` plugin is enabled (same INCONCLUSIVE rule); otherwise a line counter (`wc -l` on POSIX/Git Bash, `Measure-Object -Line` in PowerShell), `git diff --stat` | | Coupling | Dependency count, import count | Count import/dependency declarations (`import`/`require`/`using`, package or project references) | | Cohesion | Methods per class, related functionality | Inspect class responsibility | -| Duplication | Repeated code blocks | `/code-metrics:audit-duplication --json` when the `code-metrics` plugin is installed (same INCONCLUSIVE rule); otherwise grep for similar patterns | -| Test coverage | Test count, assertion count, covered lines per function | `/code-metrics:audit-coverage --json` over the build's existing coverage artifact when the `code-metrics` plugin is installed (same INCONCLUSIVE rule); otherwise your test runner's output, test inventory | +| Duplication | Repeated code blocks | `/code-metrics:audit-duplication --json` when the `code-metrics` plugin is enabled (same INCONCLUSIVE rule); otherwise grep for similar patterns | +| Test coverage | Test count, assertion count, covered lines per function | `/code-metrics:audit-coverage --json` over the build's existing coverage artifact when the `code-metrics` plugin is enabled (same INCONCLUSIVE rule); otherwise your test runner's output, test inventory | | Test fault-detection | Covered-code mutation score | Your ecosystem's mutation tool, diff-scoped (see below) | | API surface | Public member count | Count `public` declarations | @@ -24,7 +24,7 @@ Produce every count with a command or script whose output goes into the report ( ## `baseline` phase (at planning time) 1. **Map the claim to a proxy:** "simpler" → fewer lines / lower complexity / less nesting; "cleaner" → better naming / less duplication; "more maintainable" → fewer deps / better cohesion / more tests; "better organized" → feature-aligned structure / reduced coupling. -2. **Capture pre-change metrics** for the chosen proxies. Invoke the matching `/code-metrics:audit- --json --base ` when the `code-metrics` plugin is installed and keep the document (the comparison is INCONCLUSIVE under the rule in the table above); otherwise the manual counts (line count of each file at the base revision, with `git show :` run on its own and its output written to a scratch file and counted in a second call, since a worktree-isolated session refuses a pipe around git; complexity count, dependency count). Store in the topic's memory-tier baselines directory (SKILL.md "Two-phase model", machine-bound, never committed) and record in the plan. +2. **Capture pre-change metrics** for the chosen proxies. Invoke the matching `/code-metrics:audit- --json --base ` when the `code-metrics` plugin is enabled and keep the document (the comparison is INCONCLUSIVE under the rule in the table above); otherwise the manual counts (line count of each file at the base revision, with `git show :` run on its own and its output written to a scratch file and counted in a second call, since a worktree-isolated session refuses a pipe around git; complexity count, dependency count). Store in the topic's memory-tier baselines directory (SKILL.md "Two-phase model", machine-bound, never committed) and record in the plan. ## `compare` phase (at `/verification:measure metrics`) @@ -71,7 +71,7 @@ strength*, Infection names it *Covered Code MSI*): the share of injected faults counting only faults in code the tests actually reach. Report it beside coverage, and report the *delta* diff-scoped to the change. A whole-repo score moves too slowly to attribute to one change. -To collect it, invoke `/mutation-testing:audit` via the Skill tool when the `mutation-testing` plugin is installed; it +To collect it, invoke `/mutation-testing:audit` via the Skill tool when the `mutation-testing` plugin is enabled; it owns the run and the metric vocabulary. Without that plugin, run your ecosystem's own mutation tool (StrykerJS, Stryker.NET, PIT, Infection, mutmut) scoped to the diff with its own since/incremental flag, and read the covered-code figure rather than the headline one. When the language has no such diff --git a/plugins/visualization/.claude-plugin/plugin.json b/plugins/visualization/.claude-plugin/plugin.json index a049093a83..763736792e 100644 --- a/plugins/visualization/.claude-plugin/plugin.json +++ b/plugins/visualization/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "visualization", - "version": "0.9.2", + "version": "0.9.3", "description": "On-demand visualization router: infers what in the current conversation should be shown visually, then decides the best FORM (a mermaid diagram, a markdown table, a hand-authored SVG/CSS chart, ASCII/Unicode art, or a rich rendered page) and the best MEDIUM (inline terminal, a local HTML file, or a published Artifact) via a decision matrix over content shape, complexity, and a configurable medium preference. Renders good defaults and asks only when the target is genuinely ambiguous and no form was named. A form-and-medium decision layer in front of the craft capabilities. It routes chart craft and artifact-design fundamentals to those capabilities when installed and never restates them.", "author": { "name": "Melodic Software", diff --git a/plugins/visualization/CHANGELOG.md b/plugins/visualization/CHANGELOG.md index 645fd52542..e80b03f043 100644 --- a/plugins/visualization/CHANGELOG.md +++ b/plugins/visualization/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `visualization` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.9.3] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.9.2] - 2026-10-02 ### Fixed diff --git a/plugins/visualization/skills/visualize/SKILL.md b/plugins/visualization/skills/visualize/SKILL.md index fd295e7d32..cd46a75cff 100644 --- a/plugins/visualization/skills/visualize/SKILL.md +++ b/plugins/visualization/skills/visualize/SKILL.md @@ -255,8 +255,8 @@ An **interactive parameter explorer whose output returns as a prompt** (controls beside a live preview with a copy-out prompt, the "playground" shape) is not a form this skill renders. When the first-party `playground` plugin is installed, route the request to its `playground` skill, or to the `playgrounds` wrapper's `/playgrounds:use` -when that wrapper is installed, which also owns the install uplift and cloud delivery -guidance. When neither is installed, say the capability exists as an installable +when that wrapper is enabled, which also owns the install uplift and cloud delivery +guidance. When neither is enabled, say the capability exists as an installable plugin and continue with this skill's closest static form (a rich page without the round-trip controls), never a hand-built imitation of the explorer. @@ -321,6 +321,6 @@ report the refusal and never retry around it. The four-part records live in - **Does not teach artifact-design fundamentals**. Those route to an artifact-design capability and the Artifact tool's contract. - **Does not restate rendering-surface facts**. They live once in the catalog spoke. - **Does not digest or re-explain dense text**. That is a comprehension concern, not a form concern. -- **Does not explain a topic from zero prior knowledge**. A one-idea-per-diagram picture explainer that assumes the reader knows nothing is `education:eli5` (if installed). This skill picks a form for what is already in the conversation. +- **Does not explain a topic from zero prior knowledge**. A one-idea-per-diagram picture explainer that assumes the reader knows nothing is `education:eli5` (if enabled). This skill picks a form for what is already in the conversation. - **Does not render a pull-request diff, fetched content, or another repository's files to HTML** until this lane is wired through the rendered-views escape helper. Those stay terminal fences. - **Does not publish an Artifact when that surface is absent or when the preference is `file`**. It degrades to a local file or terminal. diff --git a/plugins/work-items/.claude-plugin/plugin.json b/plugins/work-items/.claude-plugin/plugin.json index 475e1a4327..5ce51f4178 100644 --- a/plugins/work-items/.claude-plugin/plugin.json +++ b/plugins/work-items/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "work-items", - "version": "0.45.1", + "version": "0.45.2", "description": "Manages development work items through a provider-neutral tracker seam that ships with the plugin (bundled dispatcher plus github, local-markdown, jira, gitea, and linear adapters; seam plugin-dir canonical, adapters consumer-local-first): dashboard, taxonomy-labeled creation, a race-safe assignee-plus-lease claim protocol, recurring-schedule checks, TODO scanning, stale-lease auditing, plan decomposition into vertical-slice items, a macro-journey router over spec containers (rollup, per-container execution shape, next-step routing), raw-intake triage (issues and unsolicited PRs through raw, verified, briefed, autonomous-eligible states), plus the two work-items loop lanes of the loop-lane convention: a self-paced autonomous work-loop drain (work-class admission gate, adaptive item cap, PR-only) and an attended attend-queue escalation lane. The re-runnable setup skill binds the provider (.work-item-tracker.json), seeds the recurring-schedule seam (.github/recurring-schedule.json), and remaps canonical role labels.", "author": { "name": "Melodic Software", diff --git a/plugins/work-items/CHANGELOG.md b/plugins/work-items/CHANGELOG.md index 3b460c2537..2041487cdd 100644 --- a/plugins/work-items/CHANGELOG.md +++ b/plugins/work-items/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `work-items` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.45.2] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.45.1] - 2026-10-02 ### Changed diff --git a/plugins/work-items/reference/work-class-labels.md b/plugins/work-items/reference/work-class-labels.md index feae9edcad..3d032d3032 100644 --- a/plugins/work-items/reference/work-class-labels.md +++ b/plugins/work-items/reference/work-class-labels.md @@ -25,7 +25,7 @@ Discover live members through the bound adapter's label listing (GitHub: `work-class: structural` (C4) and `work-class: untrusted-provenance` (C5) are human-gated **regardless of any other signal** (the admission-gate table in [`../skills/work-loop/SKILL.md`](../skills/work-loop/SKILL.md) "Admission gate", which binds -whether or not the `autonomy` plugin is installed). The autonomous-eligible role label +whether or not the `autonomy` plugin is enabled). The autonomous-eligible role label (default `agent-ready`) asserts the opposite, so **an item must never carry both**. Applying that role label to a C4 or C5 item is a triage defect, not an operator override: no label lifts the floor. diff --git a/plugins/work-items/skills/decompose/SKILL.md b/plugins/work-items/skills/decompose/SKILL.md index c19a121103..270dda25a3 100644 --- a/plugins/work-items/skills/decompose/SKILL.md +++ b/plugins/work-items/skills/decompose/SKILL.md @@ -80,7 +80,7 @@ The human-gated label (default `needs-human`) is what keeps a slice out of auton | Investigation type | Resolves | Routes to | |--------------------|----------|-----------| | research | External unknown (best practice, library choice, API behavior) | `/discovery:research` | -| prototype | Feasibility or design-feel unknown | `/prototype:pressure-test` (feasibility, logic) or `/prototype:explore-directions` (design feel), when that plugin is installed | +| prototype | Feasibility or design-feel unknown | `/prototype:pressure-test` (feasibility, logic) or `/prototype:explore-directions` (design feel), when that plugin is enabled | | interview | Scope/contract ambiguity only the user can settle | `/planning:interview` | Build slices blocked on an unresolved decision list the investigation ticket in "Blocked by". Investigation tickets are HITL by default (their output is a decision a human confirms). Label them `needs-human`, never `agent-ready`. diff --git a/plugins/work-items/skills/onboard-adapter/SKILL.md b/plugins/work-items/skills/onboard-adapter/SKILL.md index 58b06d53e8..70f504bdfe 100644 --- a/plugins/work-items/skills/onboard-adapter/SKILL.md +++ b/plugins/work-items/skills/onboard-adapter/SKILL.md @@ -31,7 +31,7 @@ fixing an existing adapter (ordinary implementation work). ## The split Deterministic work is scripted; judgment is not -(`/discipline:script-the-deterministic-work` if installed). Concretely: +(`/discipline:script-the-deterministic-work` if enabled). Concretely: | Judgment, you, in this flow | Mechanical, `scripts/generate-adapter.sh` | |---|---| diff --git a/plugins/work-items/skills/work-loop/SKILL.md b/plugins/work-items/skills/work-loop/SKILL.md index 8a1dec9635..421014d182 100644 --- a/plugins/work-items/skills/work-loop/SKILL.md +++ b/plugins/work-items/skills/work-loop/SKILL.md @@ -331,7 +331,7 @@ owns the steps. A resume clears `rate_limit_latch`, `paused_until`, and `latched Class vocabulary and admission policy are governing policy owned by the `autonomy` plugin's guardrail references (its `work-classes.md` and `admission-policy.md`), per the convention; when -that plugin is installed, read those references for classification. Installed or not, these +that plugin is enabled, read those references for classification. Enabled or not, these dispositions bind: | Class | Disposition | diff --git a/plugins/writing/.claude-plugin/plugin.json b/plugins/writing/.claude-plugin/plugin.json index 0c00513199..e6ee1eeb25 100644 --- a/plugins/writing/.claude-plugin/plugin.json +++ b/plugins/writing/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "writing", - "version": "0.1.3", + "version": "0.1.4", "description": "Write prose a scanning reader can actually use. One skill, be-concise (/writing:be-concise): reshape any text so the bottom line comes first, no more words than the meaning needs survive, the structure holds up under scanning, and the tone stays factual. Invoked bare it sets a standing posture for everything written afterwards; given a target it reshapes that text and reports before and after word counts. Built for the prose an agent writes into systems people read, tracker tickets and comments, pull-request descriptions, changelogs, READMEs and status updates for product owners and executives, where a wall of text is the failure. Completeness is a hard floor: no decision, number, ask, error or warning is ever dropped, a destination's own structural contract survives the rewrite, and an already-posted record is never edited in place unless the user says so. The rules are paraphrased with drift stamps from Nielsen Norman Group's concise/scannable/objective research, GOV.UK content design, the US federal plain-language guidelines, Google's and Microsoft's style guides, and BLUF; no upstream article text is vendored.", "author": { "name": "Melodic Software", diff --git a/plugins/writing/CHANGELOG.md b/plugins/writing/CHANGELOG.md index 8b7b1ce8e1..3b16ad7bbe 100644 --- a/plugins/writing/CHANGELOG.md +++ b/plugins/writing/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to the `writing` plugin are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.1.4] - 2026-10-03 + +### Changed + +- Cross-plugin routing to plugins that now install disabled says "enabled" where it said "installed": an installed but disabled plugin exposes no skills ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). + ## [0.1.3] - 2026-10-02 ### Fixed diff --git a/plugins/writing/skills/be-concise/SKILL.md b/plugins/writing/skills/be-concise/SKILL.md index aa824a4005..6c3bf1a616 100644 --- a/plugins/writing/skills/be-concise/SKILL.md +++ b/plugins/writing/skills/be-concise/SKILL.md @@ -127,12 +127,12 @@ lets the user see the size of the change without rereading both versions. A rewrite that loses a decision has failed even if it halves the word count. - **Does not run in flight on chat or code.** Terseness in the current conversation, and code written in fewer lines, is - `discipline:tighten-your-output` when the `discipline` plugin is installed. + `discipline:tighten-your-output` when the `discipline` plugin is enabled. - **Does not trim repo markdown word by word.** That is `docs-hygiene:compress` when the `docs-hygiene` plugin is installed. - **Does not restructure a dense message without shortening it.** Chunking a decision-heavy artifact one decision at a time is `adhd:clarify` when the - `adhd` plugin is installed. + `adhd` plugin is enabled. - **Does not reshape agent-facing instruction prose.** A skill body, a rules file, or any text written for a model to follow is `docs-hygiene:write-for-agents` when the `docs-hygiene` plugin is installed. @@ -142,7 +142,7 @@ lets the user see the size of the change without rereading both versions. `docs-hygiene:write-for-humans` when the `docs-hygiene` plugin is installed. - **Does not detect AI-writing tells.** Em dashes, chatbot phrasing and the rest of that catalog are `ai-slop:audit` when the `ai-slop` plugin is - installed. This skill inherits whatever that plugin's config says; it adds no + enabled. This skill inherits whatever that plugin's config says; it adds no punctuation rule of its own. - **Ships no detector script and gates nothing in CI.** Judgment plus the word count. A deterministic detector is a recorded post-V1 item. diff --git a/plugins/writing/skills/be-concise/evals/evals.json b/plugins/writing/skills/be-concise/evals/evals.json index 2e6295e1ca..edc8cb7d90 100644 --- a/plugins/writing/skills/be-concise/evals/evals.json +++ b/plugins/writing/skills/be-concise/evals/evals.json @@ -79,7 +79,7 @@ "evals/fixtures/wall-of-text-migration-decisions.md" ], "expectations": [ - "Output routes to `adhd:clarify` by name, gated on the `adhd` plugin being installed", + "Output routes to `adhd:clarify` by name, gated on the `adhd` plugin being enabled", "Output states the distinguishing reason: clarify restructures without shortening, while this skill shortens", "No condensed or reshaped version of the memo is produced", "No before and after word counts are reported, because no reshape happened", diff --git a/plugins/writing/skills/be-concise/reference/doctrine.md b/plugins/writing/skills/be-concise/reference/doctrine.md index 81ac985a89..63429e8301 100644 --- a/plugins/writing/skills/be-concise/reference/doctrine.md +++ b/plugins/writing/skills/be-concise/reference/doctrine.md @@ -125,7 +125,7 @@ The seven revision techniques below are the practical how for this property. line it sits on.** This bound is written to stay inside the boundaries the `ai-slop` catalog already records, so that promoting either rule later does not fire on prose written to this doctrine. When the `ai-slop` plugin is - installed, `/ai-slop:audit` owns both: `rule-bold-overuse` records "excessive + enabled, `/ai-slop:audit` owns both: `rule-bold-overuse` records "excessive bolding of terms beyond emphasis convention" as a density candidate, and `rule-inline-header-lists` draws the boundary at "a bold label whose colon restates the line", while treating "a bold lead-in that ends in a period, From abfdf3f57192352c7c662bb4392bda9fe7635c05 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Sat, 3 Oct 2026 00:31:21 -0400 Subject: [PATCH 2/3] fix(autonomy): cite #5934 without naming the org in the changelog Co-Authored-By: Claude Opus 5.5 --- plugins/autonomy/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/autonomy/CHANGELOG.md b/plugins/autonomy/CHANGELOG.md index 524d30aa9e..8fa3059389 100644 --- a/plugins/autonomy/CHANGELOG.md +++ b/plugins/autonomy/CHANGELOG.md @@ -7,7 +7,7 @@ All notable changes to the `autonomy` plugin are documented here. Format follows ### Changed -- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled ([#5934](https://github.com/melodic-software/claude-code-plugins/issues/5934)). +- The shared hook library's missing-prerequisite notice says to run `/harness-ops:prerequisites` if the `harness-ops` plugin is enabled, where it said installed: an installed but disabled plugin exposes no skills, and `harness-ops` now installs disabled (#5934). ## [0.25.8] - 2026-10-02 From 6f90ccc16cb0c5ad6ecbadf55638b367d1f66a1f Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Sat, 3 Oct 2026 00:46:27 -0400 Subject: [PATCH 3/3] fix: say enabled for every gate in prep.md and the downstream test fallback prep.md's governing sentence now says "enabled", so its per-item gates on docs-hygiene, review and verification say it too; downstream.md's "Neither enabled" now summarizes two conditions worded the same way. Co-Authored-By: Claude Opus 5.5 --- .../review/skills/quality-gate/context/downstream.md | 2 +- .../skills/pull-request/reference/prep.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/review/skills/quality-gate/context/downstream.md b/plugins/review/skills/quality-gate/context/downstream.md index 1236290de3..c5be211def 100644 --- a/plugins/review/skills/quality-gate/context/downstream.md +++ b/plugins/review/skills/quality-gate/context/downstream.md @@ -128,7 +128,7 @@ its confidence is the shared `confidence` axis. Name the smallest test or reproduction that fails if the most serious confirmed risk is real. Do not write it here. This mode reports. -- Authoring the test routes to `/testing:write` when the `testing` plugin is installed. +- Authoring the test routes to `/testing:write` when the `testing` plugin is enabled. - Proving the test actually catches the bug routes to `/mutation-testing:audit` when the `mutation-testing` plugin is enabled, which is stronger than asserting it will, because the mutant is re-run and the agent that wrote the test does not grade itself into a pass. diff --git a/plugins/source-control/skills/pull-request/reference/prep.md b/plugins/source-control/skills/pull-request/reference/prep.md index 0a37428a93..f79e1bea69 100644 --- a/plugins/source-control/skills/pull-request/reference/prep.md +++ b/plugins/source-control/skills/pull-request/reference/prep.md @@ -28,7 +28,7 @@ Every skill named below is invoked through the Skill tool when its plugin is ena ## 1.2 Review the changes (the `code` class) -Run **one** fresh-context review over the branch diff: `/review:quality-gate` under 50 changed lines, `/review:fanout` above it, when the `review` plugin is installed. +Run **one** fresh-context review over the branch diff: `/review:quality-gate` under 50 changed lines, `/review:fanout` above it, when the `review` plugin is enabled. - Without that plugin: review the diff inline for correctness, error handling, security-sensitive surfaces, test coverage for new logic, and convention adherence against the project's own rules. Review agents (code-reviewer, security-reviewer, architecture-reviewer) serve the same purpose when your environment ships them - Auto-scale aspects to the diff: always check code errors; add test-focused review when test files changed; add type-design review for new type-heavy files. Collect findings @@ -37,13 +37,13 @@ Run **one** fresh-context review over the branch diff: `/review:quality-gate` un Run the audit each detected class owes, over the changed files of that class only: -- **`markdown`**: `/ai-slop:audit` when the `ai-slop` plugin is enabled, otherwise read the changed markdown against the project's own prose rules; and `/docs-hygiene:audit-noise` when the `docs-hygiene` plugin is installed, otherwise read it for stale citations, dead references, and conversational residue -- **`renames`**: `/docs-hygiene:rename-references audit` when `docs-hygiene` is installed, otherwise grep the old path and the old name for every surviving reference. The class fires only when the diff reports a rename +- **`markdown`**: `/ai-slop:audit` when the `ai-slop` plugin is enabled, otherwise read the changed markdown against the project's own prose rules; and `/docs-hygiene:audit-noise` when the `docs-hygiene` plugin is enabled, otherwise read it for stale citations, dead references, and conversational residue +- **`renames`**: `/docs-hygiene:rename-references audit` when `docs-hygiene` is enabled, otherwise grep the old path and the old name for every surviving reference. The class fires only when the diff reports a rename - **`skills`**: `/skill-quality:check` when the `skill-quality` plugin is enabled, otherwise run the project's own skill lint, or read each changed skill's frontmatter against the contract the project documents - **`rules`**: `/instruction-placement:check` when the `instruction-placement` plugin is enabled, otherwise confirm each changed rule's `paths:` glob still matches a tracked file - **`security`**: not here. It reviews the pull request's own diff, so it runs in the ready step -Audits that persist findings hand them to one `/review:fanout fix` pass when the `review` plugin is installed, and are applied by hand otherwise. Either way each finding goes through 1.3 first. +Audits that persist findings hand them to one `/review:fanout fix` pass when the `review` plugin is enabled, and are applied by hand otherwise. Either way each finding goes through 1.3 first. ## 1.3 Verify every finding @@ -70,7 +70,7 @@ Unless `quick` or `review-only` scope: ## 1.5 Verify gate (HARD: blocks PR creation) -Run the project's full build + test + lint surface, via `/verification:confirm` when the `verification` plugin is installed (or `/toolchain:check` for the mechanical half alone) and otherwise the ecosystem-native commands (`dotnet build && dotnet test`, `npm test`, `pytest`, shellcheck, markdownlint, …) for every ecosystem the branch touches. **All results must be clean before proceeding to PR creation.** +Run the project's full build + test + lint surface, via `/verification:confirm` when the `verification` plugin is enabled (or `/toolchain:check` for the mechanical half alone) and otherwise the ecosystem-native commands (`dotnet build && dotnet test`, `npm test`, `pytest`, shellcheck, markdownlint, …) for every ecosystem the branch touches. **All results must be clean before proceeding to PR creation.** **Run the full cross-cutting surface, not just the "obvious" ecosystem.** A branch that "looks dotnet-only" can still break CI through a touched README, an unmarked `.sh` script, or a modified workflow file. Mirror locally whatever CI will run. The project's CI workflows are the canonical list of what must pass.