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 73643528be..34df64a279 100644 --- a/plugins/actionlint/.claude-plugin/plugin.json +++ b/plugins/actionlint/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "actionlint", - "version": "0.11.13", + "version": "0.11.14", "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 cb1cbcbe07..df683036fa 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.14] - 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.13] - 2026-10-02 ### Fixed 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 0af40dd40b..d6e849763c 100644 --- a/plugins/animation/.claude-plugin/plugin.json +++ b/plugins/animation/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "animation", - "version": "0.2.2", + "version": "0.2.3", "description": "Hand-drawn-style 2D animation as code, rendered in headless Chromium by an ink brush engine. rotoscope copies a reference clip drawing by drawing: trace to vector paths, render, measure against the source (XOR, SSIM), and fit per-shot brush overrides. learn-style measures a clip into a style pack (ships woodcut-ink) and checks films against it. produce turns a brief into approved boards, a shot list, frames, and a delivered file. setup checks ffmpeg, Node, Chromium, and Python.", "author": { "name": "Melodic Software", diff --git a/plugins/animation/CHANGELOG.md b/plugins/animation/CHANGELOG.md index cd922cd9f1..4df807fc3c 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.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.2.2] - 2026-10-02 ### Fixed 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 aff072a5e3..21d8c761b9 100644 --- a/plugins/autonomy/.claude-plugin/plugin.json +++ b/plugins/autonomy/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "autonomy", - "version": "0.25.8", + "version": "0.25.9", "description": "Contracts for governed autonomous agent operation: role topology, binding seam, telemetry, return accounting, trigger dispatch, a per-work-class guardrail matrix, a standing-routine catalog, and a runner charter. A guided setup skill writes an org's binding, wires OTLP telemetry (file default), human-attested return capture, and signal adapters behind one governed dispatch entrypoint, binds the guardrail matrix to isolation substrates after a live probe, and schedules routines.", "author": { "name": "Melodic Software", diff --git a/plugins/autonomy/CHANGELOG.md b/plugins/autonomy/CHANGELOG.md index 3e3562a8be..8fa3059389 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.9] - 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). + ## [0.25.8] - 2026-10-02 ### Fixed 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 21f8cf74bc..d5a224cee6 100644 --- a/plugins/bash-format/.claude-plugin/plugin.json +++ b/plugins/bash-format/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "bash-format", - "version": "0.9.12", + "version": "0.9.13", "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 725e3a62bb..0036ec8b7d 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.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.9.12] - 2026-10-02 ### Fixed 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 fc1df5cc89..03dfba1199 100644 --- a/plugins/biome-format/.claude-plugin/plugin.json +++ b/plugins/biome-format/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "biome-format", - "version": "0.7.21", + "version": "0.7.22", "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 6d5abe2048..c019283fd6 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.22] - 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.21] - 2026-10-02 ### Fixed 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 74215944e2..ce2fbca6c8 100644 --- a/plugins/context-guard/.claude-plugin/plugin.json +++ b/plugins/context-guard/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "context-guard", - "version": "0.9.2", + "version": "0.9.3", "description": "Per-session context-window observability. A statusline wrapper writes each session's context_window fields to a snapshot file; a resolver classifies usage into smart, acceptable, and dumb zones from zones.json. Hooks report each move into a worse zone once: the continuation menu to the operator, and only the zone to the model, noting a zone is not a decay signal. Optional blocking mode gates new mutating work in the dumb zone, except handoffs. A PostCompact hook leaves a marker.", "author": { "name": "Melodic Software", diff --git a/plugins/context-guard/CHANGELOG.md b/plugins/context-guard/CHANGELOG.md index c8c1bea21b..2980aa1923 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.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.9.2] - 2026-10-02 ### Fixed 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 9320672647..7cc20726fb 100644 --- a/plugins/desktop-notification/.claude-plugin/plugin.json +++ b/plugins/desktop-notification/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "desktop-notification", - "version": "0.7.7", + "version": "0.7.8", "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 a4dfe063ac..034520882e 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.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.7.7] - 2026-10-02 ### Fixed 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 317ec2003a..36ad5fc97b 100644 --- a/plugins/docs-hygiene/.claude-plugin/plugin.json +++ b/plugins/docs-hygiene/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "docs-hygiene", - "version": "0.25.1", + "version": "0.25.2", "description": "Documentation-hygiene toolkit: compress (trim markdown with a semantic-diff check), audit-noise (classify markdown noise), extract-ssot (deduplicate into a single source of truth), audit-encapsulation (citations into skill-private files), rename-references (stale references after renames), audit-derivability (does a doc earn its existence), audit-progressive-disclosure (load tiers), write-for-agents and write-for-humans (authoring). Setup checks markdownlint-cli2.", "author": { "name": "Melodic Software", diff --git a/plugins/docs-hygiene/CHANGELOG.md b/plugins/docs-hygiene/CHANGELOG.md index 8ce319dacd..d334483ceb 100644 --- a/plugins/docs-hygiene/CHANGELOG.md +++ b/plugins/docs-hygiene/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog: docs-hygiene plugin +## [0.25.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.25.1] - 2026-10-02 ### Fixed 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 ce41a5b34a..d7c6cdff2f 100644 --- a/plugins/eol-normalizer/.claude-plugin/plugin.json +++ b/plugins/eol-normalizer/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "eol-normalizer", - "version": "0.8.7", + "version": "0.8.8", "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 65338caeb0..fc3f986e3d 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.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.8.7] - 2026-10-02 ### Fixed 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 94b7532e98..7199db8274 100644 --- a/plugins/go-format/.claude-plugin/plugin.json +++ b/plugins/go-format/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "go-format", - "version": "0.4.24", + "version": "0.4.25", "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 233de8e3f4..188252156d 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.25] - 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.24] - 2026-10-02 ### Fixed 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 2641a6e73e..03f01459ae 100644 --- a/plugins/guardrails/.claude-plugin/plugin.json +++ b/plugins/guardrails/.claude-plugin/plugin.json @@ -170,5 +170,5 @@ "min": 1 } }, - "version": "0.46.11" + "version": "0.46.12" } diff --git a/plugins/guardrails/CHANGELOG.md b/plugins/guardrails/CHANGELOG.md index 7508b146aa..2a98665f37 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.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.46.11] - 2026-10-03 ### Fixed 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 24bf2e07ac..9822f32267 100644 --- a/plugins/harness-ops/.claude-plugin/plugin.json +++ b/plugins/harness-ops/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "harness-ops", - "version": "3.3.0", + "version": "3.3.1", "description": "Claude Code operations: audit-skill-visibility (skills the listing budget hides), inventory (all commands, skills, agents, tools, plugins), audit-install-state (~/.claude), audit-performance (slowness), audit-native-overlap (skills duplicating built-ins), observability (telemetry), known-issues (Claude bugs, status), changelog, prerequisites, check, machine-profile, plugins (update the fleet), morning-brief, lanes (background loop sessions), setup. Plus opt-in hook event logs.", "author": { "name": "Melodic Software", diff --git a/plugins/harness-ops/CHANGELOG.md b/plugins/harness-ops/CHANGELOG.md index 5bc49d1634..e2b521d338 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.3.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.3.0] - 2026-10-03 ### 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 8ed040cc1d..ba8503a53b 100644 --- a/plugins/instruction-placement/.claude-plugin/plugin.json +++ b/plugins/instruction-placement/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "instruction-placement", - "version": "0.19.3", + "version": "0.19.4", "description": "Routes agent instructions to the surface that loads them at the right time. audit finds conventions narrower than the always-loaded CLAUDE.md or AGENTS.md holding them, or stranded in docs Claude never loads, and proposes a destination with a validated paths glob; safety-class content is never demoted. realign applies moves item by item and regenerates an index. check verifies globs and index. migrate moves content to AGENTS.md with a CLAUDE.md shim. setup checks the index is readable.", "author": { "name": "Melodic Software", diff --git a/plugins/instruction-placement/CHANGELOG.md b/plugins/instruction-placement/CHANGELOG.md index ac629b1cb9..dee0e7eea6 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.4] - 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.3] - 2026-10-02 ### Fixed 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 0d4018b41b..f52d4430ae 100644 --- a/plugins/markdown-format/.claude-plugin/plugin.json +++ b/plugins/markdown-format/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "markdown-format", - "version": "0.11.95", + "version": "0.11.96", "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 a4cb1ee9f3..58c3f73173 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.96] - 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.95] - 2026-10-02 ### Fixed 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 27659b401c..3e6b3214d5 100644 --- a/plugins/planning/.claude-plugin/plugin.json +++ b/plugins/planning/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "planning", - "version": "0.63.1", + "version": "0.63.2", "userConfig": { "surface": { "type": "string", diff --git a/plugins/planning/CHANGELOG.md b/plugins/planning/CHANGELOG.md index 006227ed48..cf6ad4d582 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.63.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.63.1] - 2026-10-03 ### Changed 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 a216fd0c06..8d620bb764 100644 --- a/plugins/powershell-format/.claude-plugin/plugin.json +++ b/plugins/powershell-format/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "powershell-format", - "version": "0.9.12", + "version": "0.9.13", "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 1d3ef90a7d..0752cdf8cd 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.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.9.12] - 2026-10-02 ### Fixed 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 46d678448f..4b9fb40ae8 100644 --- a/plugins/rate-limit-guard/.claude-plugin/plugin.json +++ b/plugins/rate-limit-guard/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "rate-limit-guard", - "version": "0.10.7", + "version": "0.10.8", "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 d0712a869c..9fe57434be 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.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.10.7] - 2026-10-02 ### Fixed 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 4c4167237a..b5377fd998 100644 --- a/plugins/review/.claude-plugin/plugin.json +++ b/plugins/review/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "review", - "version": "0.36.3", + "version": "0.36.4", "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 6db5902069..823d520089 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.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.36.3] - 2026-10-02 ### Fixed 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..c5be211def 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. @@ -128,11 +128,11 @@ 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 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 17ee46d0be..57e092dab4 100644 --- a/plugins/ruff-format/.claude-plugin/plugin.json +++ b/plugins/ruff-format/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "ruff-format", - "version": "0.8.12", + "version": "0.8.13", "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 a8805efd5a..96e73345a6 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.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 ### Fixed 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 71012d584b..944d0cd5a9 100644 --- a/plugins/session-flow/.claude-plugin/plugin.json +++ b/plugins/session-flow/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "session-flow", - "version": "0.47.0", + "version": "0.47.1", "description": "Session lifecycle: workflow (next stage), handoff (save-point, resume prompt), continue-in-background, keep-going (resume after interruption or stall), find-handoff (recover a lost handoff), clean-stop (durable stopping point), retro and running-retro (retrospectives), audit-sessions, orient (where the session stands), orchestrate (delegation imperatives), reanchor (verify assumptions), reconcile (retire finished work), show-options (ranked skill menu), tidy-work (.work tiers), check, setup.", "author": { "name": "Melodic Software", diff --git a/plugins/session-flow/CHANGELOG.md b/plugins/session-flow/CHANGELOG.md index c5037a253a..5bbb22eeeb 100644 --- a/plugins/session-flow/CHANGELOG.md +++ b/plugins/session-flow/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog: session-flow plugin +## [0.47.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.47.0] - 2026-10-03 ### Changed diff --git a/plugins/session-flow/README.md b/plugins/session-flow/README.md index 511e4042ac..5bff1844ad 100644 --- a/plugins/session-flow/README.md +++ b/plugins/session-flow/README.md @@ -333,7 +333,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 ab1aefaf36..81716a70b1 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 2571109e27..ee8e86b030 100644 --- a/plugins/source-control/.claude-plugin/plugin.json +++ b/plugins/source-control/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "source-control", - "version": "0.77.0", + "version": "0.77.1", "description": "Git and GitHub delivery: /commit (convention-checked subject, Co-authored-by trailer, surgical staging), /pull-request (prep, create, CI monitoring, review triage, merge, CI logs), /babysit-prs (safe-by-default PR fleet loop, opt-in worker and autopilot tiers), /babysit-loop (merge lane; merge is human until the repo adopts it), /worktree, /resolve-conflicts (intent-first), /check, and /setup (layered source-control.md convention config; Conventional Commits by default).", "author": { "name": "Melodic Software", diff --git a/plugins/source-control/CHANGELOG.md b/plugins/source-control/CHANGELOG.md index 334654b2a2..a5a76b8b33 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.77.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.77.0] - 2026-10-03 ### Added 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 0e6e37182a..e1d378d7af 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 5b9776c1ea..d0b2ba4769 100644 --- a/plugins/source-control/skills/babysit-prs/reference/orchestration.md +++ b/plugins/source-control/skills/babysit-prs/reference/orchestration.md @@ -761,7 +761,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..f79e1bea69 100644 --- a/plugins/source-control/skills/pull-request/reference/prep.md +++ b/plugins/source-control/skills/pull-request/reference/prep.md @@ -22,13 +22,13 @@ 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. ## 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 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 -- **`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 +- **`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. diff --git a/plugins/speech/.claude-plugin/plugin.json b/plugins/speech/.claude-plugin/plugin.json index 9d3337642b..a00e040628 100644 --- a/plugins/speech/.claude-plugin/plugin.json +++ b/plugins/speech/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "speech", - "version": "0.1.0", + "version": "0.1.1", "description": "Text-to-speech narration. The narrate skill turns a script into narration.wav plus words.json, a start and end time for every word. The kokoro backend runs Kokoro-82M (Apache-2.0) locally through onnxruntime, with timings from the model's own durations. espeak-ng (GPL-3.0) is installed by you, never by the plugin. A SessionStart hook installs the locked Python packages, setup downloads the pinned model files, and check reports each missing prerequisite.", "author": { "name": "Melodic Software", diff --git a/plugins/speech/CHANGELOG.md b/plugins/speech/CHANGELOG.md index 36d01d32ee..a0f71f14f3 100644 --- a/plugins/speech/CHANGELOG.md +++ b/plugins/speech/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `speech` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.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)). + ## [0.1.0] - 2026-10-02 ### Added diff --git a/plugins/speech/hooks/hook-utils.sh b/plugins/speech/hooks/hook-utils.sh index 8c880a558e..4327545cef 100644 --- a/plugins/speech/hooks/hook-utils.sh +++ b/plugins/speech/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/tdd/.claude-plugin/plugin.json b/plugins/tdd/.claude-plugin/plugin.json index fa5271ddc7..2cfee0de37 100644 --- a/plugins/tdd/.claude-plugin/plugin.json +++ b/plugins/tdd/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "tdd", - "version": "0.4.10", + "version": "0.4.11", "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 a6780612e7..dcac0f9022 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.11] - 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.10] - 2026-10-02 ### Fixed 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 7b682b831d..c15f8c7d95 100644 --- a/plugins/testing/.claude-plugin/plugin.json +++ b/plugins/testing/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "testing", - "version": "0.21.1", + "version": "0.21.2", "description": "Test-stage discipline: /testing:plan (coverage gaps, test plans), /testing:write (TDD authoring), /testing:run-e2e (live E2E and smoke checks), /testing:diagnose (failing-test root cause, with a fix-until-green workflow across files), /testing:audit (can't-fail test audit with a fail-closed gate), /testing:cleanup (rewrite, quarantine, or delete low-value tests behind a mutation gate), /testing:setup, and opt-in hooks that scan test files Claude writes and flag edits that weaken tests.", "author": { "name": "Melodic Software", diff --git a/plugins/testing/CHANGELOG.md b/plugins/testing/CHANGELOG.md index c1810b0af5..32c2540df9 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.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.21.1] - 2026-10-02 ### Fixed 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 4a67e2e479..d6a6b261ec 100644 --- a/plugins/typos-format/.claude-plugin/plugin.json +++ b/plugins/typos-format/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "typos-format", - "version": "0.8.13", + "version": "0.8.14", "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 08a29e26d3..07b31623d8 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.14] - 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.13] - 2026-10-02 ### Fixed 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 b8bf47b461..5307d64374 100644 --- a/plugins/verification/.claude-plugin/plugin.json +++ b/plugins/verification/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "verification", - "version": "0.7.3", + "version": "0.7.4", "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 b27863a835..2545a15c4b 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.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.7.3] - 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 22ac3df243..76a045dc83 100644 --- a/plugins/visualization/.claude-plugin/plugin.json +++ b/plugins/visualization/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "visualization", - "version": "0.9.3", + "version": "0.9.4", "description": "On-demand visualization router (visualization:visualize): infers what in the conversation to show, then picks the form (mermaid diagram, markdown table, SVG/CSS chart, ASCII/Unicode art, or a rendered page) and the medium (inline terminal, local HTML file, or published Artifact) from content shape and a configurable preference. Asks only when the target is ambiguous and no form was named. Routes chart craft and artifact design to those capabilities when installed.", "author": { "name": "Melodic Software", diff --git a/plugins/visualization/CHANGELOG.md b/plugins/visualization/CHANGELOG.md index 26cc43673a..a2acfd3897 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.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.9.3] - 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 cd8dc980d7..b2bc045410 100644 --- a/plugins/work-items/.claude-plugin/plugin.json +++ b/plugins/work-items/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "work-items", - "version": "0.45.2", + "version": "0.45.3", "description": "Work items through a provider-neutral tracker seam (github, local-markdown, jira, gitea, linear adapters): track (dashboard, creation, race-safe claims, recurring-schedule checks, stale-lease audits), scan-todos, decompose (plans into vertical-slice items), ship (route a spec container), triage (raw intake and unsolicited PRs), work, work-loop (autonomous PR-only drain), attend-queue (escalations), onboard-adapter (new tracker adapter), and setup (binds the provider).", "author": { "name": "Melodic Software", diff --git a/plugins/work-items/CHANGELOG.md b/plugins/work-items/CHANGELOG.md index cc71e01374..985ea6d264 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.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.45.2] - 2026-10-02 ### Fixed 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 15ae0ccc70..d38c9b3158 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 aa45c0dcd7..157b3e4ee0 100644 --- a/plugins/writing/.claude-plugin/plugin.json +++ b/plugins/writing/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "writing", - "version": "0.1.4", + "version": "0.1.5", "description": "Prose a scanning reader can use. /writing:be-concise puts the bottom line first, cuts words the meaning does not need, and keeps structure scannable and tone factual. Bare, it sets a standing posture; given a target, it reshapes it and reports word counts. For tickets, PR descriptions, changelogs, READMEs, and status updates. Never drops a decision, number, ask, error, or warning. Paraphrases NN/g, GOV.UK, US plain-language guidelines, Google and Microsoft style guides, and BLUF.", "author": { "name": "Melodic Software", diff --git a/plugins/writing/CHANGELOG.md b/plugins/writing/CHANGELOG.md index 1b47b02497..e260dbc8a3 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.5] - 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.4] - 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,