diff --git a/plugins/ai-briefing/.claude-plugin/plugin.json b/plugins/ai-briefing/.claude-plugin/plugin.json index 86a4ca6222..53f1f0a732 100644 --- a/plugins/ai-briefing/.claude-plugin/plugin.json +++ b/plugins/ai-briefing/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "ai-briefing", - "version": "0.7.41", + "version": "0.7.42", "description": "Build source-backed AI-industry briefings from official vendor publications, configured RSS/Atom feeds, GitHub releases, reputable secondary reporting, and user-supplied URLs. Deduplicate, rank, and present results as markdown or optional HTML/PPTX decks, with repository-owned profile, audience, and brand configuration. Automated X/Twitter collection is disabled; Playwright is used only for deterministic local rendering.", "author": { "name": "Melodic Software", diff --git a/plugins/ai-briefing/CHANGELOG.md b/plugins/ai-briefing/CHANGELOG.md index bf13d3813c..a97699abc2 100644 --- a/plugins/ai-briefing/CHANGELOG.md +++ b/plugins/ai-briefing/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `ai-briefing` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.7.42] - 2026-09-27 + +### Changed + +- `generate` states three rules in normal register instead of all caps: every bullet renders all its source URLs (`slide-generation.md`), and `meta`/`theme` and the default brand tokens are not redefined per run (`build-pipeline.md`, two sites). The rules are unchanged, and `validate.js` still enforces the URL rule at gate time (#4120). + ## [0.7.41] - 2026-09-27 ### Fixed diff --git a/plugins/ai-briefing/skills/generate/reference/build-pipeline.md b/plugins/ai-briefing/skills/generate/reference/build-pipeline.md index 01ae2a7153..2d38930baa 100644 --- a/plugins/ai-briefing/skills/generate/reference/build-pipeline.md +++ b/plugins/ai-briefing/skills/generate/reference/build-pipeline.md @@ -157,7 +157,7 @@ export const slides = [ ]; ``` -`meta` and `theme` start from the neutral brand in `output/build/brand.js`. DO NOT redefine them per run. A consumer rebrand belongs in the selected profile's schema-validated `brand.json`; `meta.meetingNumber`, `meta.date`, and `meta.window` are the only meeting-specific fields. +`meta` and `theme` start from the neutral brand in `output/build/brand.js`. Do not redefine them per run. A consumer rebrand belongs in the selected profile's schema-validated `brand.json`; `meta.meetingNumber`, `meta.date`, and `meta.window` are the only meeting-specific fields. ## Slide types (11 total) @@ -309,7 +309,7 @@ node validate.js `node run.js` chains steps 1+3+4 in one shot when no pause needed. Use granular form when an overseer judgment call is pending. -Default brand tokens (colors, fonts, logo paths) live in `output/build/brand.js` and are imported by `emit-slides-data.js`. Do NOT redefine per run. +Default brand tokens (colors, fonts, logo paths) live in `output/build/brand.js` and are imported by `emit-slides-data.js`. Do not redefine per run. **Fallback path** (`/document-skills:pptx` skill): only when in-tree pipeline cannot run (Node missing, etc.). See `slide-generation.md` "Fallback skill paths" for skill-stack delegation. Default = in-tree. diff --git a/plugins/ai-briefing/skills/generate/reference/slide-generation.md b/plugins/ai-briefing/skills/generate/reference/slide-generation.md index 6c582a70ff..e2542b9cd1 100644 --- a/plugins/ai-briefing/skills/generate/reference/slide-generation.md +++ b/plugins/ai-briefing/skills/generate/reference/slide-generation.md @@ -144,7 +144,7 @@ Eyebrow text is small uppercase periwinkle. The presenter sees the tier, and aud ### URL rendering rule -**EVERY bullet renders ALL its source URLs.** Never drop URLs after the first. Source markdown's `" · "` separator splits multiple URLs; render each as a clickable line under the bullet body. +Every bullet renders all its source URLs. Never drop URLs after the first. Source markdown's `" · "` separator splits multiple URLs; render each as a clickable line under the bullet body. `validate.js` enforces this at gate time. Every URL in `slides-data.js` `bullets[].urls[]` must appear in DOM as `.news-url` anchor. diff --git a/plugins/claude-config/.claude-plugin/plugin.json b/plugins/claude-config/.claude-plugin/plugin.json index 538d2f027e..579f5a0ddb 100644 --- a/plugins/claude-config/.claude-plugin/plugin.json +++ b/plugins/claude-config/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "claude-config", - "version": "0.49.1", + "version": "0.49.2", "description": "Nine configuration-health skills (plus setup) for a repo's Claude Code configuration: audit (settings.json / .mcp.json / hooks / plugins / permissions drift), audit-automation-gaps (evidence-gated verdicts on automation gaps), audit-permission-grants (allow-rule / allowed-tools grants for auto-mode durability and portability), audit-permission-state (the permission rules actually in effect: every settings scope merged with per-rule provenance, what auto mode drops on entry, config written where nothing reads it, and which managed intents are enforced versus loosenable), draft-auto-mode-rules (interview and draft a paste-ready autoMode classifier block; prints only, never writes), audit-instructions (locally-owned instruction surfaces vs current model capability, proposing removals/rewrites of instructions the model no longer needs, and detecting cross-surface instruction conflicts), audit-prompting-postures (the additive lane: posture guidance the prompting guide says a component's purpose needs but the component does not carry), audit-pass (one coordinated, ordered, resumable pass over a named target: three-scope inventory, run-time-derived exclusion set, stable finding identity, suppression memory, resume, one human gate, delegating every check to the plugin that owns it), and unhobble (the empirical bare-baseline experiment: reversibly strip a repo's standing instructions, log real stumbles against the current model, re-add only what evidence earns).", "author": { "name": "Melodic Software", diff --git a/plugins/claude-config/CHANGELOG.md b/plugins/claude-config/CHANGELOG.md index d95be3d34a..3d75a28719 100644 --- a/plugins/claude-config/CHANGELOG.md +++ b/plugins/claude-config/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `claude-config` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.49.2] - 2026-09-27 + +### Changed + +- `audit`'s env-var checklist row drops its `**MANDATORY**:` prefix. The row still requires reading `code.claude.com/docs/en/env-vars` verbatim and searching it for each env var name, and still says WebSearch alone is insufficient (#4120). + ## [0.49.1] - 2026-09-27 ### Changed diff --git a/plugins/claude-config/skills/audit/reference/audit-checklist.md b/plugins/claude-config/skills/audit/reference/audit-checklist.md index c4a5d79468..2ee3306952 100644 --- a/plugins/claude-config/skills/audit/reference/audit-checklist.md +++ b/plugins/claude-config/skills/audit/reference/audit-checklist.md @@ -113,7 +113,7 @@ taken, the finding is stated conditionally, not asserted. | Check | Severity | How to verify | | --- | --- | --- | -| Env vars in settings.json are documented CC vars | warning | **MANDATORY**: read `code.claude.com/docs/en/env-vars` and search it for each env var name. WebSearch alone is insufficient. **Read it verbatim, not through a summarizer.** The page is long (315 variable rows on 2026-08-10) and a summarizing fetch truncates it, then reports the rows past the cutoff as absent: `curl https://code.claude.com/docs/en/env-vars.md` to a file and grep the file, per the [fetch route](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/upstream-drift/README.md#reading-the-basis-the-fetch-route). A truncated read supports NO finding. Say so and move on. **Absence from this page is not "unrecognized" either:** it is not the whole env-var surface, and `CLAUDE_CODE_ENTRYPOINT`, `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA`, and `CLAUDE_CODE_EXPERIMENTAL_OBSERVER_AGENTS` are all real and all absent from it (verified 2026-08-10 on a full verbatim read). A name missing here is at most "not documented on `env-vars`". Check `monitoring-usage`, `mcp`, and `settings` before writing anything stronger | +| Env vars in settings.json are documented CC vars | warning | Read `code.claude.com/docs/en/env-vars` and search it for each env var name. WebSearch alone is insufficient. **Read it verbatim, not through a summarizer.** The page is long (315 variable rows on 2026-08-10) and a summarizing fetch truncates it, then reports the rows past the cutoff as absent: `curl https://code.claude.com/docs/en/env-vars.md` to a file and grep the file, per the [fetch route](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/upstream-drift/README.md#reading-the-basis-the-fetch-route). A truncated read supports NO finding. Say so and move on. **Absence from this page is not "unrecognized" either:** it is not the whole env-var surface, and `CLAUDE_CODE_ENTRYPOINT`, `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA`, and `CLAUDE_CODE_EXPERIMENTAL_OBSERVER_AGENTS` are all real and all absent from it (verified 2026-08-10 on a full verbatim read). A name missing here is at most "not documented on `env-vars`". Check `monitoring-usage`, `mcp`, and `settings` before writing anything stronger | | No secrets in settings.json (tokens, keys, passwords) | error | Scan for patterns: `ghp_`, `eyJ`, `sk-`, `AKIA`, common token prefixes | | Secrets are in settings.local.json only | error | settings.local.json is gitignored | diff --git a/plugins/codebase-health/.claude-plugin/plugin.json b/plugins/codebase-health/.claude-plugin/plugin.json index 25534cefb6..f89162bd03 100644 --- a/plugins/codebase-health/.claude-plugin/plugin.json +++ b/plugins/codebase-health/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "codebase-health", - "version": "0.10.1", + "version": "0.10.2", "description": "Repo-wide drift audit between docs, config, code, and architecture: verifies every factual claim against reality via parallel subagent fan-out, severity-rates findings, and reports read-only, delegating remediation to the implementation/verification lanes. Audit dimensions are configurable through a tracked .claude/codebase-health.md config file written by the setup skill.", "author": { "name": "Melodic Software", diff --git a/plugins/codebase-health/CHANGELOG.md b/plugins/codebase-health/CHANGELOG.md index 584a5293c0..9ca44f9dcc 100644 --- a/plugins/codebase-health/CHANGELOG.md +++ b/plugins/codebase-health/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `codebase-health` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.10.2] - 2026-09-27 + +### Changed + +- `audit`'s discovery method reads "Verify all claims, not just some" instead of "Critical: verify ALL claims". Each claim on a line is still verified independently (#4120). + ## [0.10.1] - 2026-09-27 ### Changed diff --git a/plugins/codebase-health/skills/audit/context/discovery-method.md b/plugins/codebase-health/skills/audit/context/discovery-method.md index 3ebd750023..994e6d0be1 100644 --- a/plugins/codebase-health/skills/audit/context/discovery-method.md +++ b/plugins/codebase-health/skills/audit/context/discovery-method.md @@ -19,7 +19,7 @@ Not a checklist to browse. Read every line. The audit config's per-dimension `ex actually see in THIS repo. Apply the same pattern to every claim encountered: extract the claim, identify the verification path, run it. -**Critical: verify ALL claims, not just some.** A single line or bullet list often contains multiple +**Verify all claims, not just some.** A single line or bullet list often contains multiple factual claims. Finding one issue on a line does NOT mean other claims on that line are correct. Verify each one independently. For example: diff --git a/plugins/context7/.claude-plugin/plugin.json b/plugins/context7/.claude-plugin/plugin.json index 3bbf15a518..c277da39f9 100644 --- a/plugins/context7/.claude-plugin/plugin.json +++ b/plugins/context7/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "context7", - "version": "0.5.8", + "version": "0.5.9", "description": "Looks up current library documentation, API references, and code examples via Context7 (ctx7 CLI or the Context7 MCP server) with a two-step resolve-then-query workflow: a lookup skill (default lookup plus an upstream drift-check action) and a setup skill for CLI install, auth, and MCP configuration.", "author": { "name": "Melodic Software", diff --git a/plugins/context7/CHANGELOG.md b/plugins/context7/CHANGELOG.md index e96a9b87d2..506d8e6fe5 100644 --- a/plugins/context7/CHANGELOG.md +++ b/plugins/context7/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `context7` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.5.9] - 2026-09-27 + +### Changed + +- `lookup`'s philosophy line drops the anti-laziness clause "even for libraries you 'know.'" It still says to verify against Context7 before claiming how a library works (#4120). + ## [0.5.8] - 2026-09-25 ### Changed diff --git a/plugins/context7/skills/lookup/SKILL.md b/plugins/context7/skills/lookup/SKILL.md index 9defdd33fc..63b2707801 100644 --- a/plugins/context7/skills/lookup/SKILL.md +++ b/plugins/context7/skills/lookup/SKILL.md @@ -23,7 +23,7 @@ MCP availability: check your own tool list. If `mcp__context7__resolve-library-i A primary source of up-to-date library documentation. Two equivalent interfaces: CLI (`ctx7`) via npm, and the Context7 HTTP MCP server (`mcp__context7__*`) when the consuming project has it configured. Both read the same backend. Pick by workflow (see [When to use CLI vs MCP](#when-to-use-cli-vs-mcp)). -**Philosophy**: training data is stale by the time you use it. Library APIs, framework defaults, best practices change. Before claiming how a library works, verify against Context7, even for libraries you "know." +**Philosophy**: training data is stale by the time you use it. Library APIs, framework defaults, best practices change. Before claiming how a library works, verify against Context7. ## Actions diff --git a/plugins/discovery/.claude-plugin/plugin.json b/plugins/discovery/.claude-plugin/plugin.json index d5d3422e96..a6119e716a 100644 --- a/plugins/discovery/.claude-plugin/plugin.json +++ b/plugins/discovery/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "discovery", - "version": "0.24.4", + "version": "0.24.5", "description": "Structured discovery before changes: explore the local codebase, run disciplined multi-source external research, and reconstruct why a past decision was made from evidence outside the code. Each dispatches a purpose-built subagent by default so the reading stays out of the main conversation, with source tiers, falsification, recency gates, an intent-evidence tier, and a corpus-coverage ledger, and each persists EXPLORE.md / RESEARCH.md / INTENT.md index-plus-sidecar handoff artifacts.", "author": { "name": "Melodic Software", diff --git a/plugins/discovery/CHANGELOG.md b/plugins/discovery/CHANGELOG.md index e27b77fa6c..f52deeefa6 100644 --- a/plugins/discovery/CHANGELOG.md +++ b/plugins/discovery/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog: discovery plugin +## [0.24.5] - 2026-09-27 + +### Changed + +- `research-deep` states two routing rules without bold caps: N ≥ 2 separable topics are not dispatched to an engine as one blob, and an engine's return is neither re-run inline nor surfaced as-is. Both rules and their reasons are unchanged (#4120). + ## [0.24.4] - 2026-09-27 ### Fixed diff --git a/plugins/discovery/skills/research-deep/SKILL.md b/plugins/discovery/skills/research-deep/SKILL.md index 35d8b28c0d..817bb57deb 100644 --- a/plugins/discovery/skills/research-deep/SKILL.md +++ b/plugins/discovery/skills/research-deep/SKILL.md @@ -38,7 +38,7 @@ If no topic was provided, infer it from the current conversation. Identify the t ## Dispatch decision (multi-topic check, then three tiers) -**Multi-topic check. Run FIRST, before any tier.** Count the independent sub-topics in the ask (numbered list, enumerated questions, separable subjects that share no claims). **N ≥ 2 separable topics → do NOT dispatch an engine on the combined blob.** An engine decomposes ONE question into generic research *angles*; fed a multi-topic blob, every broad agent researches all N topics shallowly. N× the wall-clock and tokens for worse depth. Instead: spawn **N parallel `discovery:researcher` agents** (Agent tool, one per topic), each dispatched with the full envelope below. **Cap N at roughly a dozen**. Past that, narrow the ask with the user before dispatching. **Give each agent its own sub-slice**. `///`, assigned by this session in the dispatch envelope, never chosen by the worker (two workers choosing independently can choose the same one); the memory root travels as its own envelope field, since a worker handed a nested sub-slice path cannot tell from that path alone which ancestor is the configured root. Each writes the normal `RESEARCH.md` index, its sidecars, and its own `research-checklist.md` inside that sub-slice; those filenames are fixed, so N agents pointed at one slice root would overwrite one another's index and ledger rather than producing separable artifacts. **This session owns each topic's post-dispatch boundary. Synthesis is the last step, not the only one.** Close "The post-dispatch boundary" below for **each** topic, then synthesize the slice-root `RESEARCH.md` from the per-topic indexes. Skipping it produces the worst available artifact: a root `RESEARCH.md` presenting claims as gate-passed when the rows that matter were never graded by anyone. An engine is for a SINGLE contested or deep question that needs falsification rounds and adversarial claim-checking. +**Multi-topic check. Run FIRST, before any tier.** Count the independent sub-topics in the ask (numbered list, enumerated questions, separable subjects that share no claims). N ≥ 2 separable topics → do not dispatch an engine on the combined blob. An engine decomposes ONE question into generic research *angles*; fed a multi-topic blob, every broad agent researches all N topics shallowly. N× the wall-clock and tokens for worse depth. Instead: spawn **N parallel `discovery:researcher` agents** (Agent tool, one per topic), each dispatched with the full envelope below. **Cap N at roughly a dozen**. Past that, narrow the ask with the user before dispatching. **Give each agent its own sub-slice**. `///`, assigned by this session in the dispatch envelope, never chosen by the worker (two workers choosing independently can choose the same one); the memory root travels as its own envelope field, since a worker handed a nested sub-slice path cannot tell from that path alone which ancestor is the configured root. Each writes the normal `RESEARCH.md` index, its sidecars, and its own `research-checklist.md` inside that sub-slice; those filenames are fixed, so N agents pointed at one slice root would overwrite one another's index and ledger rather than producing separable artifacts. **This session owns each topic's post-dispatch boundary. Synthesis is the last step, not the only one.** Close "The post-dispatch boundary" below for **each** topic, then synthesize the slice-root `RESEARCH.md` from the per-topic indexes. Skipping it produces the worst available artifact: a root `RESEARCH.md` presenting claims as gate-passed when the rows that matter were never graded by anyone. An engine is for a SINGLE contested or deep question that needs falsification rounds and adversarial claim-checking. For a single-topic ask, pick the tier by the task's breadth as the table defines it: a heavy or broad task goes to the workflow engine or, without one, to the isolated subagent; a clearly small task runs inline. Treat an unknown scope as heavy. @@ -76,7 +76,7 @@ Agent({ ### Tier 1. Workflow engine (preferred) -If your tool list includes the Workflow tool and a deep-research workflow is available (check the consuming project's workflow registry first, a project-provided engine may superset the built-in one), dispatch it with the topic and, if it accepts one, the artifact destination: `//RESEARCH.md`, resolved per the plugin's topic-docs binding ([`${CLAUDE_PLUGIN_ROOT}/reference/topic-docs.md`](${CLAUDE_PLUGIN_ROOT}/reference/topic-docs.md)). The engine runs in the background; its completion notification carries the summary + artifact path. Do **NOT** re-run the research inline, and do **not** surface the return as-is, an engine is a producing context like any other, so close the post-dispatch boundary below first. +If your tool list includes the Workflow tool and a deep-research workflow is available (check the consuming project's workflow registry first, a project-provided engine may superset the built-in one), dispatch it with the topic and, if it accepts one, the artifact destination: `//RESEARCH.md`, resolved per the plugin's topic-docs binding ([`${CLAUDE_PLUGIN_ROOT}/reference/topic-docs.md`](${CLAUDE_PLUGIN_ROOT}/reference/topic-docs.md)). The engine runs in the background; its completion notification carries the summary + artifact path. Do not re-run the research inline, and do not surface the return as-is, an engine is a producing context like any other, so close the post-dispatch boundary below first. If no workflow engine resolves, fall through to Tier 2. diff --git a/plugins/docs-hygiene/.claude-plugin/plugin.json b/plugins/docs-hygiene/.claude-plugin/plugin.json index 306e0c357b..0780927d42 100644 --- a/plugins/docs-hygiene/.claude-plugin/plugin.json +++ b/plugins/docs-hygiene/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "docs-hygiene", - "version": "0.23.2", + "version": "0.23.3", "description": "Documentation-hygiene toolkit: compress (flavor-trim markdown with a semantic-diff safety net), audit-noise (classify markdown noise), extract-ssot (deduplicate repeated content into a single source of truth), audit-encapsulation (detect citations into skill-private surfaces), rename-references (sweep stale references after renames), audit-derivability (classify whether a whole document earns its existence: could a fresh agent re-derive it from the code?), audit-progressive-disclosure (grade instruction files against a load-tier model for split opportunities and hub/spoke disclosure defects), write-for-agents (authoring-time doctrine that fires while agent-consumed markdown is being written), write-for-humans (the same moment for the other reader, covering end-user READMEs, RFCs, release notes and guides, and resolving the consuming project's own style guide first), and a file-name set that plans, applies, and enforces a casing rule across a doc tree: setup (the one configuration surface), audit-file-names (read-only inventory plus the reference sweep), realign-file-names (the executor, one human acceptance per file), and generate-file-name-gate (emits the standalone check that keeps the tree from drifting back).", "author": { "name": "Melodic Software", diff --git a/plugins/docs-hygiene/CHANGELOG.md b/plugins/docs-hygiene/CHANGELOG.md index abfffe6f55..0a6c1af86d 100644 --- a/plugins/docs-hygiene/CHANGELOG.md +++ b/plugins/docs-hygiene/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog: docs-hygiene plugin +## [0.23.3] - 2026-09-27 + +### Changed + +- `compress`'s Phase A worker prompt writes its nine hard rules as "Never ..." instead of all-caps "NEVER ...". Every rule is unchanged, and the write-scope fence (`Touch ONLY . FORBIDDEN: ...`) keeps its emphasis (#4120). + ## [0.23.2] - 2026-09-27 ### Changed diff --git a/plugins/docs-hygiene/skills/compress/context/fan-out-orchestration.md b/plugins/docs-hygiene/skills/compress/context/fan-out-orchestration.md index 8d784c006e..3d37d22d55 100644 --- a/plugins/docs-hygiene/skills/compress/context/fan-out-orchestration.md +++ b/plugins/docs-hygiene/skills/compress/context/fan-out-orchestration.md @@ -21,15 +21,15 @@ LATITUDE: - Batch fan-out does NOT delete sentence-level restatements (that latitude is Edit-fallback / single-file only; see SKILL.md Purpose). HARD RULES: -- NEVER add words. EVER. -- NEVER swap word X for synonym X' unless X' is strictly shorter AND same meaning -- NEVER touch code blocks (fenced ``` or inline `...`), URLs, file paths, identifiers, env vars, slash commands, hook names -- NEVER touch directive force ("must" vs "should" vs "may") -- NEVER touch qualifiers narrowing scope (ONLY, NEVER, every, all, only, exact) -- NEVER touch thresholds, version pins, SHAs (3+, 5+, ≥30s, 0.11.0) -- NEVER touch examples, counter-examples, "X not Y" pairs -- NEVER touch error messages, quoted text, citations -- NEVER self-audit. NEVER re-read your own edits. NEVER "preserve clarity". +- Never add words. Ever. +- Never swap word X for synonym X' unless X' is strictly shorter AND same meaning +- Never touch code blocks (fenced ``` or inline `...`), URLs, file paths, identifiers, env vars, slash commands, hook names +- Never touch directive force ("must" vs "should" vs "may") +- Never touch qualifiers narrowing scope (ONLY, NEVER, every, all, only, exact) +- Never touch thresholds, version pins, SHAs (3+, 5+, ≥30s, 0.11.0) +- Never touch examples, counter-examples, "X not Y" pairs +- Never touch error messages, quoted text, citations +- Never self-audit. Never re-read your own edits. Never "preserve clarity". - Touch ONLY . FORBIDDEN: any other file, any git operation, any other repo path. DELIVERABLE: apply Edit ops; return exactly one line: diff --git a/plugins/event-storming/.claude-plugin/plugin.json b/plugins/event-storming/.claude-plugin/plugin.json index abf76049c8..72f042fd49 100644 --- a/plugins/event-storming/.claude-plugin/plugin.json +++ b/plugins/event-storming/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "event-storming", - "version": "0.6.16", + "version": "0.6.17", "description": "EventStorming for domain discovery: a methodology skill (Big Picture / Process Modeling / Design-Level facilitation reference, notation, patterns) and a simulation skill (agentic multi-persona workshops that produce a structured-markdown model by default; a live Miro-board rendering path is available when the first-party miro plugin is enabled).", "author": { "name": "Melodic Software", diff --git a/plugins/event-storming/CHANGELOG.md b/plugins/event-storming/CHANGELOG.md index c374a8e2d7..1d011c6491 100644 --- a/plugins/event-storming/CHANGELOG.md +++ b/plugins/event-storming/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `event-storming` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [0.6.17] - 2026-09-27 + +### Changed + +- `simulation`'s agentic-simulation reference states five rules in normal register: corrective instructions in every agent prompt, the Behavioral Rules heading, the beneficiary persona coming first, the sticky-note content rules heading, and the no-emoji rule. Every rule is unchanged (#4120). + ## [0.6.16] - 2026-09-25 ### Changed diff --git a/plugins/event-storming/skills/simulation/reference/agentic-simulation.md b/plugins/event-storming/skills/simulation/reference/agentic-simulation.md index 158e6c583e..776e1595b1 100644 --- a/plugins/event-storming/skills/simulation/reference/agentic-simulation.md +++ b/plugins/event-storming/skills/simulation/reference/agentic-simulation.md @@ -43,7 +43,7 @@ LLMs have natural behavioral defaults that actively **oppose** what Brandolini's ### The 10 LLM-vs-Book Tensions -**Every agent prompt MUST include corrective instructions for the tensions relevant to that phase.** The facilitator is responsible for detecting when agents slip back into LLM defaults and re-prompting with the specific correction the output violated, quoting the offending stickies and restating the reason. +Every agent prompt must include corrective instructions for the tensions relevant to that phase. The facilitator is responsible for detecting when agents slip back into LLM defaults and re-prompting with the specific correction the output violated, quoting the offending stickies and restating the reason. #### 1. Completeness Bias → Partial, Siloed Views @@ -136,7 +136,7 @@ Not all corrections apply equally to every phase. Here's the priority map: Every agent prompt already includes persona identity, domain context, color/format rules, and round-specific behavior. Add a **Behavioral Rules** section AFTER the persona identity that includes the relevant corrections for the current phase. Example structure: ```markdown -## Behavioral Rules (DO NOT OVERRIDE) +## Behavioral Rules (do not override) - You know 30% of this domain. Write ONLY from your expertise. Leave gaps. - Each event: 2-5 words, past tense, verb phrase. Not sentences. - When you read others' events: find what's WRONG first. Challenge 2-3 events. @@ -205,7 +205,7 @@ difference that made the two personas worth simulating separately. ### Standard Persona Catalog -Pick 4-8 from these based on your domain (beneficiary persona is MANDATORY, always first): +Pick 4-8 from these based on your domain (beneficiary persona is mandatory, always first): | Persona | Perspective | Typical Concerns | Agent Tone | |---------|-------------|-----------------|------------| @@ -520,9 +520,9 @@ disagreements. 3. **Domain context**: research relevant to their role, not the full dump, just what THIS persona would know from their professional experience 4. **Color and format rules**: which colors are allowed this round (e.g., orange only during Chaotic Exploration), event format: `[PersonaName] Event in Past Tense` 5. **Y-offset**: each persona occupies a distinct y-coordinate row during chaotic exploration -6. **Sticky note content rules (MANDATORY in every agent prompt):** +6. **Sticky note content rules (mandatory in every agent prompt):** - **Brevity:** 2-5 words per event. Past-tense verb phrases (`Order Placed`, `Payment Failed`). If it doesn't fit on a physical 76x76mm sticky note in thick marker, it's too long. **Key test:** count your words. If >5, split into multiple events or simplify - - **No emojis:** Physical sticky notes are handwritten text only. Do NOT prefix stickies with emoji characters (🧑, 📖, 🔵, ⚡, 📊, 🏆, etc.). Plain text only. This applies to ALL board types (BP, PM, DL) and ALL agent prompts. Include this instruction in every subagent prompt that creates stickies + - **No emojis:** Physical sticky notes are handwritten text only. Do not prefix stickies with emoji characters (🧑, 📖, 🔵, ⚡, 📊, 🏆, etc.). Plain text only. This applies to all board types (BP, PM, DL) and all agent prompts. Include this instruction in every subagent prompt that creates stickies - **No literal newlines:** Do NOT use `\n` in sticky note content. Miro renders these as literal backslash-n, not line breaks. Use ` — ` (em dash with spaces) as separator instead - **No type prefixes:** Do NOT add prefixes like "COMMAND:", "EVENT:", "POLICY:" to sticky content. The COLOR is the type indicator, not a text prefix. Write the content only: `Submit Talk Proposal` not `🔵 COMMAND Submit Talk Proposal` 7. **Round-specific behavior:** diff --git a/plugins/knowledge/.claude-plugin/plugin.json b/plugins/knowledge/.claude-plugin/plugin.json index 624ee34297..de65b3e3a6 100644 --- a/plugins/knowledge/.claude-plugin/plugin.json +++ b/plugins/knowledge/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "knowledge", - "version": "0.14.4", + "version": "0.14.5", "description": "Ingest external knowledge into durable, synthesized artifacts. Ships a book-distillation pipeline (PDF/EPUB into concept-organized, author-attributed skill reference files), a video-digest pipeline (watch a single public video from YouTube or X, formerly Twitter: transcript, link harvest, and repo-applicability synthesis), a course-digest pipeline (extract and synthesize online video courses from Dometrain and Teachable into repo-applicable recommendations), a docpage-digest pipeline (single online documentation page into a verified knowledge slice with dual verification including one cross-vendor verifier, and an interview handoff), and a map-corpus pipeline (multi-resource corpus into a classified link map, deterministic node manifests, gate-verified relevance inventory, and an approved queue of docpage-digest runs), plus a re-runnable setup action; a configurable library directory governs where synthesized artifacts land in the consuming repo.", "author": { "name": "Melodic Software", diff --git a/plugins/knowledge/CHANGELOG.md b/plugins/knowledge/CHANGELOG.md index 7ee4bfd3a9..7e811408c5 100644 --- a/plugins/knowledge/CHANGELOG.md +++ b/plugins/knowledge/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to the `knowledge` plugin are recorded here. The `version` i `.claude-plugin/plugin.json` is the delivery vehicle. A consumer receives a change only after that version increases. +## [0.14.5] - 2026-09-27 + +### Changed + +- `book-distill`'s one-chapter-at-a-time rule, `course-digest`'s gather-before-Phase-3 rule and storage rules, and the Dometrain adapter's instructor rule drop their all-caps and "Critical rule" markers. The rules themselves are unchanged (#4120). + ## [0.14.4] - 2026-09-27 ### Changed diff --git a/plugins/knowledge/skills/book-distill/SKILL.md b/plugins/knowledge/skills/book-distill/SKILL.md index 39e888c5bd..e39274d7de 100644 --- a/plugins/knowledge/skills/book-distill/SKILL.md +++ b/plugins/knowledge/skills/book-distill/SKILL.md @@ -68,7 +68,7 @@ This is the core loop. Repeat for every chapter in the file plan. This is the single most important rule in the entire process: -> **Read ONE chapter. Write its file IMMEDIATELY. Then read the next chapter.** +> Read one chapter. Write its file immediately. Then read the next chapter. Never read multiple chapters before writing. Reading the entire book before writing produces one mediocre file from a full book's worth of context. The interleaved approach produces focused, high-quality files because each chapter is fresh when writing. diff --git a/plugins/knowledge/skills/course-digest/SKILL.md b/plugins/knowledge/skills/course-digest/SKILL.md index d272013d0c..925478d707 100644 --- a/plugins/knowledge/skills/course-digest/SKILL.md +++ b/plugins/knowledge/skills/course-digest/SKILL.md @@ -147,7 +147,7 @@ Adapters are thin composition layers. Delegate to shared `lib/players/` and `lib Follow the 8-phase workflow in [context/workflow.md](context/workflow.md), each building on the previous. Discover → Extract → Process Frames → Analyze Code Repo → Validate → Synthesize → Analyze → Recommend (phases 1, 2, 2b, 2c, 2d, 3, 4, 5). Phases 1-2d are extraction (browser + CLI); 3-5 are analysis (LLM-heavy, parallelizable across modules). Storage runs continuously throughout. -**Critical rule:** ALL context (transcripts + frames + code repo) must be gathered before Phase 3. +All context (transcripts + frames + code repo) must be gathered before Phase 3. Module summaries note their context level: `[transcript-only]`, `[transcript+frames]`, `[full-context]`. ### Phase 3 modalities (`[full-context]` requires all three) @@ -228,7 +228,7 @@ Repo-applicability analysis follows the template in [reference/analysis-template Generated course output lands under the invoking project's `library_dir` seam (or `${CLAUDE_PLUGIN_DATA}` when no library dir is configured), one self-contained directory per course slug. See [context/storage-schema.md](context/storage-schema.md) for the full directory structure. -**Critical rules:** +Rules: - No video or audio files. Transcripts and screenshots capture the content - Screenshots are PNG files. Keep small (resize to 1280px wide max) diff --git a/plugins/knowledge/skills/course-digest/reference/adapters/dometrain.md b/plugins/knowledge/skills/course-digest/reference/adapters/dometrain.md index 7e2e6bc689..93b0cfb575 100644 --- a/plugins/knowledge/skills/course-digest/reference/adapters/dometrain.md +++ b/plugins/knowledge/skills/course-digest/reference/adapters/dometrain.md @@ -206,4 +206,4 @@ These features are platform-level and not course-specific. They don't contain ex 4. **Session expiry:** Mux JWT tokens expire; re-read the remaining time from the token before a long extraction rather than assuming a window. For long extraction sessions, user's Dometrain session may expire, so watch for login redirects 5. **Course IDs:** Course URL contains numeric course ID (e.g., `2732006`); lesson URL contains numeric lesson ID (e.g., `54128298`). Stable identifiers 6. **Windows convert.exe conflict:** On Windows, `convert` resolves to FAT/NTFS converter (`C:\Windows\system32\convert.exe`), not ImageMagick. Always use `magick` (ImageMagick 7), never `convert` -7. **Never guess the instructor.** Course author is NOT inferable from platform or course URL. ALWAYS extract from landing page JSON-LD (`@graph` → `Course` → `author[].name`) or "Meet Your Instructor" section. Do not assume based on Dometrain association. Dometrain hosts courses from many instructors +7. **Never guess the instructor.** Course author is not inferable from platform or course URL. Always extract from landing page JSON-LD (`@graph` → `Course` → `author[].name`) or "Meet Your Instructor" section. Do not assume based on Dometrain association. Dometrain hosts courses from many instructors diff --git a/plugins/planning/.claude-plugin/plugin.json b/plugins/planning/.claude-plugin/plugin.json index 2f3a1ba551..704fdbe13e 100644 --- a/plugins/planning/.claude-plugin/plugin.json +++ b/plugins/planning/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "planning", - "version": "0.44.2", + "version": "0.44.3", "userConfig": { "surface": { "type": "string", diff --git a/plugins/planning/CHANGELOG.md b/plugins/planning/CHANGELOG.md index 26cbddbfe3..2ecd64f624 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.44.3] - 2026-09-27 + +### Changed + +- `plan`'s checklist template states that Step 3 is never skipped without the "MANDATORY" and "NEVER" caps. The stress-test is still required before presenting (#4120). + ## [0.44.2] - 2026-09-27 ### Fixed diff --git a/plugins/planning/skills/plan/templates/checklist.md b/plugins/planning/skills/plan/templates/checklist.md index a7a35832a6..074626a0a8 100644 --- a/plugins/planning/skills/plan/templates/checklist.md +++ b/plugins/planning/skills/plan/templates/checklist.md @@ -6,7 +6,7 @@ Copy into `//plan-checklist.md` (default `.work/`; the t - [ ] Step 1: Prerequisite check. Brief locked (PLAN.md Brief section exists OR equivalent crisp framing); exploration + research done or explicitly waived; design gate evaluated - [ ] Step 2: Formulate the plan. Phases with verifiable Sanity Checks per phase; estimate scope; identify parallelism -- [ ] Step 3: Plan stress-test (MANDATORY, never skip). Dispatch a fresh-context plan-reviewer sub-agent per context/plan-reviewer.md +- [ ] Step 3: Plan stress-test (never skip). Dispatch a fresh-context plan-reviewer sub-agent per context/plan-reviewer.md - [ ] Step 3b: Assess blast radius (LOW / MEDIUM / HIGH / CRITICAL). This gates whether Step 4 runs - [ ] Step 4: Formal stress-test + research-iterate (CONDITIONAL on Step 3b ≥ MEDIUM). Invoke `/planning:devils-advocate` and targeted research on contested claims - [ ] Step 4.5: Execution-shape analysis (default ON for multi-phase plans). Emit scope-fencing tables + per-phase routing table @@ -16,7 +16,7 @@ Copy into `//plan-checklist.md` (default `.work/`; the t ## Skip criteria -- Step 3 NEVER skipped (mandatory: stress-test before presenting) +- Step 3 never skipped (stress-test before presenting) - Step 4 SKIPPED when Step 3b verdict = LOW blast radius and no trigger matches - Step 4.5 SKIPPED when the plan is single-phase (no parallelism axis, all-main-session default) - Step 4.6 SKIPPED when no unilateral decisions were made (user approved every choice during Q&A) diff --git a/plugins/review/.claude-plugin/plugin.json b/plugins/review/.claude-plugin/plugin.json index e14d6c886c..b05f3cfb7b 100644 --- a/plugins/review/.claude-plugin/plugin.json +++ b/plugins/review/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "review", - "version": "0.30.7", + "version": "0.30.8", "description": "Code-review toolkit: six read-only reviewer agents (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), 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 0cd7bde42a..929e21993e 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.30.8] - 2026-09-27 + +### Changed + +- `quality-gate`'s `self` and `downstream` dispatch policies say "must not" instead of "MUST NOT". The producing main thread still never runs the checklist or the downstream steps inline, for the reason each line already gives (#4120). + ## [0.30.7] - 2026-09-27 ### Changed diff --git a/plugins/review/skills/quality-gate/context/downstream.md b/plugins/review/skills/quality-gate/context/downstream.md index 05ecec0b22..88811a3055 100644 --- a/plugins/review/skills/quality-gate/context/downstream.md +++ b/plugins/review/skills/quality-gate/context/downstream.md @@ -14,7 +14,7 @@ Severity and confidence come from the shared vocabulary project's own when it defines one. **This mode adds no grading scale of its own**: not a proof level, not an evidence rung, not a confidence variant. The two existing axes carry every finding. -**Dispatch policy:** the producing main thread MUST NOT run the steps below inline. The thread that +**Dispatch policy:** the producing main thread must not run the steps below inline. The thread that wrote the change is the worst judge of what the change reaches, for the same reason `self` mode refuses an inline checklist. Its model of "what this touches" is the one it already had while writing, so an inline pass re-derives the author's own blast-radius assumption and confirms it. diff --git a/plugins/review/skills/quality-gate/context/self.md b/plugins/review/skills/quality-gate/context/self.md index f1848f57b7..f0eeb645b6 100644 --- a/plugins/review/skills/quality-gate/context/self.md +++ b/plugins/review/skills/quality-gate/context/self.md @@ -2,7 +2,7 @@ Design judgment and completeness check after implementation, before verification or PR. **Not a build check.** -**Dispatch policy:** the producing main thread MUST NOT run the checklist inline. The thread that wrote the code rubber-stamps its own recap. Orchestrate a fresh-context read-only subagent; the main thread gathers inputs, dispatches, verifies findings, and presents the verdict. Where the verdict is high-stakes and correlated blind spots are the risk, prefer a cross-vendor advisor **when one is installed and set up**, for example the OpenAI Codex plugin when its documented surface can take this artifact, invoked per its own docs, with the fresh-context same-vendor subagent as the stated fallback, never a route to a command that may not resolve (per [`docs/plugin-philosophy.md`](https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/plugin-philosophy.md) "Fresh-eyes checkpoints"). +**Dispatch policy:** the producing main thread must not run the checklist inline. The thread that wrote the code rubber-stamps its own recap. Orchestrate a fresh-context read-only subagent; the main thread gathers inputs, dispatches, verifies findings, and presents the verdict. Where the verdict is high-stakes and correlated blind spots are the risk, prefer a cross-vendor advisor **when one is installed and set up**, for example the OpenAI Codex plugin when its documented surface can take this artifact, invoked per its own docs, with the fresh-context same-vendor subagent as the stated fallback, never a route to a command that may not resolve (per [`docs/plugin-philosophy.md`](https://raw.githubusercontent.com/melodic-software/claude-code-plugins/main/docs/plugin-philosophy.md) "Fresh-eyes checkpoints"). ## Orchestrator sequence (main thread) diff --git a/plugins/songwriting/.claude-plugin/plugin.json b/plugins/songwriting/.claude-plugin/plugin.json index e6a6f18f63..cd7950d31f 100644 --- a/plugins/songwriting/.claude-plugin/plugin.json +++ b/plugins/songwriting/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "songwriting", - "version": "1.4.33", + "version": "1.4.34", "description": "Songwriting craft companion: nine concern-scoped lyric-craft skills (workflow router, rhyme, object-writing, metaphor, meter-prosody, song-form, co-write, diagnose, practice) applying Pat Pattison's methods, with an object-writing agent that performs the sensory exercise itself and per-skill emission boundaries that route generation to the skill that owns it, plus Suno v5.5 prompt engineering (style prompts, tagged lyrics, genre templates, troubleshooting).", "author": { "name": "Melodic Software", diff --git a/plugins/songwriting/CHANGELOG.md b/plugins/songwriting/CHANGELOG.md index bc1ccf3186..ecf0f959fe 100644 --- a/plugins/songwriting/CHANGELOG.md +++ b/plugins/songwriting/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to the `songwriting` plugin are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this plugin uses semantic versioning. +## [1.4.34] - 2026-09-27 + +### Changed + +- Seven skills (`co-write`, `diagnose`, `metaphor`, `meter-prosody`, `object-writing`, `rhyme`, `song-form`) label their response-filter step "Pre-flight:" instead of "Pre-flight ALWAYS:". The step still runs before output (#4120). + ## [1.4.33] - 2026-09-27 ### Fixed diff --git a/plugins/songwriting/skills/co-write/SKILL.md b/plugins/songwriting/skills/co-write/SKILL.md index 542988aefb..1e2e67b58a 100644 --- a/plugins/songwriting/skills/co-write/SKILL.md +++ b/plugins/songwriting/skills/co-write/SKILL.md @@ -56,7 +56,7 @@ No action → open the co-write protocol (No-Free-Zone session opener). ## Handlers -- **Pre-flight ALWAYS:** run response-filter §5 + §2 (+ §4 when facilitating) before output. +- **Pre-flight:** run response-filter §5 + §2 (+ §4 when facilitating) before output. - Co-write facilitation is coaching, not monologue: keep the No-Free-Zone discipline. No idea is free, every suggestion earns its place; surface choice points, do not decide for the writers. - Line/section brainstorm writes each option to a labeled menu (per the `variations`/`worksheets` diff --git a/plugins/songwriting/skills/diagnose/SKILL.md b/plugins/songwriting/skills/diagnose/SKILL.md index 851dcb5ab5..d7a0fcc58e 100644 --- a/plugins/songwriting/skills/diagnose/SKILL.md +++ b/plugins/songwriting/skills/diagnose/SKILL.md @@ -57,7 +57,7 @@ No action → route on completion stage (partway draft → `demo`; near-complete ## Handlers -- **Pre-flight ALWAYS:** run response-filter §3 + §8 (+ §2 when rewriting) before output. +- **Pre-flight:** run response-filter §3 + §8 (+ §2 when rewriting) before output. - Name the dominant problem; offer one focused revision. Do not list every issue. - Audit boxes are tools, not gates: present each as a deliberate choice point, pass/fail/skip. A writer may skip any box, but a skip names a reason; silent skips are not OK. diff --git a/plugins/songwriting/skills/metaphor/SKILL.md b/plugins/songwriting/skills/metaphor/SKILL.md index f5de945960..6a65785383 100644 --- a/plugins/songwriting/skills/metaphor/SKILL.md +++ b/plugins/songwriting/skills/metaphor/SKILL.md @@ -52,7 +52,7 @@ No action → route on context (a subject named → `collide`; an existing metap ## Handlers -- **Pre-flight ALWAYS:** run response-filter §7 (+ §2 when the metaphor lands in a line). +- **Pre-flight:** run response-filter §7 (+ §2 when the metaphor lands in a line). - **Options, never a winner.** Surface 6-8 labeled candidates. Label each with its type (expressed identity / qualifying / verbal), its linking quality (why it lands), and family distance (close / medium / far). The writer picks by emotional intent. diff --git a/plugins/songwriting/skills/meter-prosody/SKILL.md b/plugins/songwriting/skills/meter-prosody/SKILL.md index 6fea4ad7e2..6838d4695c 100644 --- a/plugins/songwriting/skills/meter-prosody/SKILL.md +++ b/plugins/songwriting/skills/meter-prosody/SKILL.md @@ -41,7 +41,7 @@ No action → route on context (a pasted line → `meter`; a "does this feel rig ## Handlers -- **Pre-flight ALWAYS:** run response-filter §3 (+ §2 when producing lines) before output. +- **Pre-flight:** run response-filter §3 (+ §2 when producing lines) before output. - Scan concretely: mark stresses, name the paradigm, and say what the meter does FOR the meaning, not scansion for its own sake. - Stability is a tool, not a verdict: name whether a section reads stable or unstable and whether that serves the section's job; the writer chooses. diff --git a/plugins/songwriting/skills/object-writing/SKILL.md b/plugins/songwriting/skills/object-writing/SKILL.md index ddb62e6cba..bcf4c53ace 100644 --- a/plugins/songwriting/skills/object-writing/SKILL.md +++ b/plugins/songwriting/skills/object-writing/SKILL.md @@ -38,7 +38,7 @@ No action → issue one usable timed object-writing prompt immediately (do not a ## Handlers -- **Pre-flight ALWAYS:** run response-filter §7 (+ §2 when producing lines) before output. +- **Pre-flight:** run response-filter §7 (+ §2 when producing lines) before output. - If the user asks for a prompt, generate one usable timed exercise immediately (default 90 seconds). Do not assign the full curriculum unless asked. That is `/songwriting:practice`. - Keep object-writing sense-bound and personal; its job is to reveal specific, sensory detail, not diff --git a/plugins/songwriting/skills/rhyme/SKILL.md b/plugins/songwriting/skills/rhyme/SKILL.md index d961956aac..c48c9a9b8a 100644 --- a/plugins/songwriting/skills/rhyme/SKILL.md +++ b/plugins/songwriting/skills/rhyme/SKILL.md @@ -41,7 +41,7 @@ No action → generate rhymes for the word/line in context (the `rhyme` default) ## Handlers -- **Pre-flight ALWAYS:** run response-filter §1 before any rhyme output. +- **Pre-flight:** run response-filter §1 before any rhyme output. - Load [rhyme-generation](../../context/pat-pattison/research/rhyme-generation.md) FIRST for any rhyme request. Apply the discipline. Identity check (pre-vowel consonants MUST differ; identity is NOT rhyme), vowel-FIELD walk (Step 1b, the source word's own coda is ONE row of the field, diff --git a/plugins/songwriting/skills/song-form/SKILL.md b/plugins/songwriting/skills/song-form/SKILL.md index dd75706615..37d9c874c0 100644 --- a/plugins/songwriting/skills/song-form/SKILL.md +++ b/plugins/songwriting/skills/song-form/SKILL.md @@ -40,7 +40,7 @@ No action → route on context (a structural question → `form`; "write me a br ## Handlers -- **Pre-flight ALWAYS:** run response-filter §6 (+ §5 for hook/title) before output. +- **Pre-flight:** run response-filter §6 (+ §5 for hook/title) before output. - Name the form and what each section is DOING; recommend the smallest structural change that fixes the problem, not a wholesale rewrite. - Repetition is repainting, not stagnation, a repeated chorus should mean something new by its diff --git a/plugins/source-control/.claude-plugin/plugin.json b/plugins/source-control/.claude-plugin/plugin.json index 1a01e165f1..9d54601b82 100644 --- a/plugins/source-control/.claude-plugin/plugin.json +++ b/plugins/source-control/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "source-control", - "version": "0.61.1", + "version": "0.61.2", "description": "Git and GitHub delivery workflow: /commit (Conventional Commits + Co-authored-by trailer via safe heredoc mechanics), /pull-request (prep, create, CI monitoring, review-comment triage, merge, CI-log fetch), /babysit-prs (self-pacing fleet loop, safe by default; opt-in worker/autopilot tiers add gate-checked merge and thread resolution behind a deterministic Python engine), /babysit-loop (the loop-lane merge lane: a standing or drain loop that invokes babysit-prs per cycle, configured through repo-scoped babysit_loop_* keys on the layered source-control.md seam, with merge authority human-only until the target repo's tracked config adopts the lane, a gate-proven C2-mechanical baseline once adopted, and standing merge-rung raises binding from the team-tracked layer only, with one named exception, where an invocation line explicitly typing both the autopilot tier keyword and the dedicated raise argument --merge c3-this-run widens that single invocation's merge authority up to C3 behind a fresh independent frontier-tier resolver, while C4-structural and C5-untrusted-provenance stay unconditionally human-merge), /worktree (create, status, cleanup, audit for parallel-session isolation), /setup (check the effective commit-subject / PR-title convention merged across its config layers and the babysit-prs config, or apply, which interviews the repo and writes the convention config to a chosen layer), and /resolve-conflicts (intent-first merge/rebase conflict resolution with a semantic-conflict sweep, never --abort). The commit-subject / PR-title convention is configurable via a source-control.md config written by a re-runnable setup skill, layered across a ~/.claude user-global file, the tracked team file, and a gitignored .claude/source-control.local.md personal overlay merged per key; Conventional Commits is the default when no convention is declared.", "author": { "name": "Melodic Software", diff --git a/plugins/source-control/CHANGELOG.md b/plugins/source-control/CHANGELOG.md index 4dea4fa9ca..d9907a7b36 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.61.2] - 2026-09-27 + +### Changed + +- `pull-request` says the Monitor checks the push channel first, then falls back, and `monitor.md` says every monitor invocation ensures a session-persistent event watch, both without "MUST"/"FIRST" caps. The order and the idempotent watch step are unchanged (#4120). +- `babysit-prs`'s loop reference points at the subagent dispatch for ≥3-finding comments without the "MANDATORY" marker; the rule in `review-discipline.md` §2 is unchanged (#4120). + ## [0.61.1] - 2026-09-27 ### Fixed diff --git a/plugins/source-control/skills/babysit-prs/reference/loop.md b/plugins/source-control/skills/babysit-prs/reference/loop.md index 5124ca8c89..b4de7a245b 100644 --- a/plugins/source-control/skills/babysit-prs/reference/loop.md +++ b/plugins/source-control/skills/babysit-prs/reference/loop.md @@ -116,7 +116,7 @@ PRs not needing attention are reported in a one-line status summary and skipped. ### 5.0.4 Structured finding extraction Finding extraction lives in the plugin-scope reference, -[review-discipline.md](../../../reference/review-discipline.md) §2, including the MANDATORY +[review-discipline.md](../../../reference/review-discipline.md) §2, including the subagent dispatch for ≥3-finding comments, the verbatim scope-fenced dispatch prompt, the ledger contract, and the main-session contract after the subagent returns. Apply it exactly; the finding-classification gate (§5.1.3 step E) mechanically enforces that classification rows cover diff --git a/plugins/source-control/skills/pull-request/SKILL.md b/plugins/source-control/skills/pull-request/SKILL.md index 171d9ba53a..5322452d78 100644 --- a/plugins/source-control/skills/pull-request/SKILL.md +++ b/plugins/source-control/skills/pull-request/SKILL.md @@ -254,4 +254,4 @@ Public action for retrieving failed-CI evidence. Tiered fetch chain. Cheapest si - **Discover actors, don't hardcode them.** Security tools and AI reviewers change over time. Monitor discovers actors from `gh pr checks` and PR comments, classifies them by category (CI, security, review), and evaluates accordingly - **Uncommitted changes are silently lost on branch deletion.** `git reflog` cannot recover uncommitted edits. Only commits. Before staging (Phase 2.3.1) and before post-merge cleanup (Phase 4.3), check `git status --porcelain` for unrelated uncommitted changes. Stash them (`git stash push -m "desc" -- `). Stashes survive branch deletion. Never silently ignore uncommitted changes - **Cloud sessions use `gh` polling, not event subscription.** Autonomous cloud sessions (`CLAUDE_CODE_REMOTE=true`) poll `gh pr checks` + `gh api` on a fixed 60-90s cadence (§3.0.0 of monitor.md) -- **Monitor MUST check the push channel FIRST, then fall back.** Three-tier hierarchy on local CLI sessions: (1) **push channel** (when your environment ships a GitHub-events MCP channel. ~0 Idle requests), (2) **Monitor tool** (session-persistent `Monitor(persistent: true, ...)` watch; 30s `gh` poll fires on real CI/comment events; cancel via `TaskStop`), (3) fixed-interval cron polling (deprecated, wasteful). Do NOT skip straight to the Monitor tool without checking for a channel, polling wastes ~1 request per 30s interval vs ~0 idle with push delivery +- **Monitor checks the push channel first, then falls back.** Three-tier hierarchy on local CLI sessions: (1) **push channel** (when your environment ships a GitHub-events MCP channel. ~0 Idle requests), (2) **Monitor tool** (session-persistent `Monitor(persistent: true, ...)` watch; 30s `gh` poll fires on real CI/comment events; cancel via `TaskStop`), (3) fixed-interval cron polling (deprecated, wasteful). Do not skip straight to the Monitor tool without checking for a channel, polling wastes ~1 request per 30s interval vs ~0 idle with push delivery diff --git a/plugins/source-control/skills/pull-request/reference/monitor.md b/plugins/source-control/skills/pull-request/reference/monitor.md index d407b31fcc..c5e1e819a0 100644 --- a/plugins/source-control/skills/pull-request/reference/monitor.md +++ b/plugins/source-control/skills/pull-request/reference/monitor.md @@ -55,7 +55,7 @@ Establish a baseline poll: `gh pr checks ` (REST check-runs when more than on ## 3.0.1 Auto-watch setup (Monitor tool) -**Every monitor invocation MUST ensure a session-persistent event watch exists.** Runs immediately after 3.0.0, before terminal state checks, CI polling, and comment processing. +**Every monitor invocation ensures a session-persistent event watch exists.** Runs immediately after 3.0.0, before terminal state checks, CI polling, and comment processing. 1. Resolve PR identity: `PR_NUMBER=$(gh pr view --json number -q '.number' | tr -d '\r')`, `OWNER=$(gh repo view --json owner -q .owner.login)`, `REPO=$(gh repo view --json name -q .name)` 2. Check if a Monitor watch is already running for this PR: `TaskList` and look for a task whose description contains `PR #$PR_NUMBER CI + comments`