From 80082bc3d6a91c2b647397e969645ffd7fb91787 Mon Sep 17 00:00:00 2001 From: bob Date: Thu, 21 May 2026 14:24:12 -0400 Subject: [PATCH] =?UTF-8?q?chore(release):=20v2.5.0=20=E2=80=94=20drift-mo?= =?UTF-8?q?nitor=20family?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 --- CHANGELOG.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f62baac..1fec8e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,21 @@ All notable changes to this project. Format: [Keep a Changelog](https://keepacha ## Unreleased -- **feat: stack-alignment monitor — manifest schema v2 + two new SessionStart drift dimensions + `/verify-setup` §4b/§4c.** Extends the MCP drift monitor (PR #51) with two more dimensions: **stack drift** (compares the set of repo-root stack manifests — `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `Gemfile`, `pom.xml`, `build.gradle` — at scaffold time vs. now) and **command alignment** (checks that the first binary of each configured `cmd_typecheck`/`cmd_lint`/`cmd_test` still has a matching stack manifest in the repo). `.claude/.cc-manifest.json` bumps to `manifest_version: 2` with two new fields (`stack_manifests`, `check_commands`); the SessionStart hook (`sessionstart-drift-check.sh`) gains §2 + §3 emitting one terse line per drifted dimension, all pointing at `/verify-setup`. `/verify-setup` gains §4b + §4c narrative blocks. Compatibility: v2 hook reads v1 manifests as if the new fields were empty (no false drift on PR #51 baselines); v1 hook seeing a v2 manifest fires the existing version-skew nudge. §3 carries a pre-bootstrap skip (configured binary's expected manifest must have been in the baseline `stack_manifests` set) so brand-new scaffolds on empty dirs stay silent — same spirit as the stop-hook manifest-missing skip rule from v2.4.0. New helpers: `detect_stack_manifests()`, `extract_first_binaries()` in `configure.py`. New tests: `test/cc-manifest/test-stack-manifests-detected.sh`, `test/cc-manifest/test-check-commands-extracted.sh`, seven new `test/sessionstart-drift-check/test-*.sh` fixtures, `test/verify-setup/test-stack-alignment-spec-present.sh`. Spec + plan: `docs/superpowers/specs/2026-05-21-stack-alignment-check-design.md` and `docs/superpowers/plans/2026-05-21-stack-alignment-check.md` (gitignored, local-only working artifacts). -- **chore(compat): survey Claude Code 2.1.133–2.1.146; track SchemaStore PR #5706.** Resurveyed the upstream CHANGELOG and the SchemaStore catalog after a 9-day gap. The original gating PR #5665 (sync to v2.1.138) was closed 2026-05-19 with comment "Superseded by #5706 which syncs to v2.1.143" — net win for batching since #5706 also picks up `worktree.bgIsolation`, `subagentStatusLine`, `statusLine.hideVimModeIndicator`, `sandbox.failIfUnavailable`, five env vars (`ANTHROPIC_WORKSPACE_ID`, `CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDE`, `CLAUDE_CODE_PLUGIN_PREFER_HTTPS`, `CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY`, `CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`), and the hook `args: string[]` + `continueOnBlock` keys move out of the "future sync" bucket and into the same merge gate. Eleven configurator-territory keys total in #5706; live-verified against the PR's head-branch schema 2026-05-21. Two later items remain held for a future sync PR (hook output `terminalSequence` from 2.1.141; Stop/SubagentStop input `background_tasks` + `session_crons` from 2.1.145). **No template changes; no `tested_up_to` bump yet** — deferred to the post-#5706 unblock batch per the "no lone tracking bumps" rule. `CLAUDE_CODE_COMPAT` rationale comment refreshed to capture the resurvey window. Also: `/simplify` was renamed to `/code-review` in 2.1.146 — configurator ships `/review` (slash command) + `code-reviewer` (agent name), so no collision. -- **docs: drop legacy `/brainstorm` + `/write-plan` references after superpowers v5.1.0.** `superpowers` v5.1.0 (2026-04-30) removed the `/brainstorm`, `/write-plan`, and `/execute-plan` slash commands — they were deprecated stubs and users must now invoke the skills directly (or just describe the work; the SessionStart bootstrap auto-routes). Configurator references updated: `configure.py` "Next steps" output now says "describe what you want to build" instead of "invoke /brainstorm"; `docs/11-getting-started.md` walkthrough swaps the explicit `> /brainstorm` prompt for plain-English intent and adds an inline note about the v5.1.0 removal; `docs/10-plugin-ecosystem.md` install snippet drops `claude /brainstorm`; `templates/recommend-plugins/recommended-plugins.md` row reframes the gate as skill-driven. Historical CHANGELOG entries unchanged (they reference what was current at the time). -- **feat: MCP drift monitor — SessionStart hook + `.cc-manifest.json` baseline + manifest-aware `/verify-setup` Check #4.** cc-configure now stays alive between runs: every scaffold/retrofit writes `.claude/.cc-manifest.json` snapshotting the `.mcp.json` server set; a new SessionStart hook (`.claude/hooks/sessionstart-drift-check.sh`, installed by the `mcp` module) compares manifest vs. live `.mcp.json` on `startup`/`resume` and emits one stdout line if servers were added or removed since the last cc-configure run; the line points to `/verify-setup`, whose Check #4 was rewritten to enumerate per-server purpose, cost class, profile-split fit, and a supply-chain vetting nudge (parses `npx`/`uvx` package coordinates and recommends the user invoke the available Sonatype MCP tools — `getComponentVersion`, `getLatestComponentVersion`, `getRecommendedComponentVersions` — before keeping any new MCP). Manifest writer is unconditional (runs even when the `mcp` module isn't selected, so a forward-looking baseline always exists); hook is module-gated. New `[ MANIFEST WARNINGS ]` block surfaces unreadable `.mcp.json` without ever locking in a corrupt baseline. New test directories: `test/cc-manifest/` (5 tests + e2e lifecycle), `test/sessionstart-drift-check/` (9 hook-behavior fixtures). New verify-setup spec-presence test pins the Check #4 anchors. Spec + plan: `docs/superpowers/specs/2026-05-13-cc-configure-mcp-drift-monitor-design.md` and `docs/superpowers/plans/2026-05-13-cc-configure-mcp-drift-monitor.md` (gitignored, local-only working artifacts). +## [2.5.0] — 2026-05-21 + +Bundle release: the drift-monitor family — PR #51 introduced the pattern (`.claude/.cc-manifest.json` baseline + SessionStart hook + `/verify-setup` narrative for MCP servers), and PR #54 completed it with two more dimensions (stack manifests + check-command alignment). Plus PR #49 cleaning up legacy `/brainstorm` references after the superpowers v5.1.0 churn, and PR #52 tracking SchemaStore PR #5706 (no template changes; `tested_up_to` bump deferred to the unblock batch). `CC_VERSION` bumped to 2.5.0. + +### v2.5.0 — drift-monitor family + +**The pattern:** cc-configure had historically been a one-shot scaffolder. After running, the configured `.claude/`, `.mcp.json`, `CLAUDE.md` could drift from project reality (new MCP servers added, language stack shifted, test runner changed) and the configurator had no in-session signal — the user only noticed when something visibly broke. v2.5.0 introduces the **drift monitor** primitive: a versioned baseline file written at scaffold/retrofit time + a SessionStart hook that diffs baseline vs. live and emits one terse line per drifted dimension + `/verify-setup` sub-checks that narrate the diff and propose a fix (`cc-configure --retrofit`). Three dimensions ship in this release, all using the same `.claude/.cc-manifest.json` baseline: + +- **feat: MCP drift monitor — SessionStart hook + `.cc-manifest.json` baseline + manifest-aware `/verify-setup` Check #4 (PR #51).** cc-configure now stays alive between runs: every scaffold/retrofit writes `.claude/.cc-manifest.json` snapshotting the `.mcp.json` server set; a new SessionStart hook (`.claude/hooks/sessionstart-drift-check.sh`, installed by the `mcp` module) compares manifest vs. live `.mcp.json` on `startup`/`resume` and emits one stdout line if servers were added or removed since the last cc-configure run; the line points to `/verify-setup`, whose Check #4 was rewritten to enumerate per-server purpose, cost class, profile-split fit, and a supply-chain vetting nudge (parses `npx`/`uvx` package coordinates and recommends the user invoke the available Sonatype MCP tools — `getComponentVersion`, `getLatestComponentVersion`, `getRecommendedComponentVersions` — before keeping any new MCP). Manifest writer is unconditional (runs even when the `mcp` module isn't selected, so a forward-looking baseline always exists); hook is module-gated. New `[ MANIFEST WARNINGS ]` block surfaces unreadable `.mcp.json` without ever locking in a corrupt baseline. New test directories: `test/cc-manifest/` (5 tests + e2e lifecycle), `test/sessionstart-drift-check/` (9 hook-behavior fixtures). New verify-setup spec-presence test pins the Check #4 anchors. Spec + plan: `docs/superpowers/specs/2026-05-13-cc-configure-mcp-drift-monitor-design.md` and `docs/superpowers/plans/2026-05-13-cc-configure-mcp-drift-monitor.md` (gitignored, local-only working artifacts). +- **feat: stack-alignment monitor — manifest schema v2 + two new SessionStart drift dimensions + `/verify-setup` §4b/§4c (PR #54).** Extends the MCP drift monitor with two more dimensions: **stack drift** (compares the set of repo-root stack manifests — `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `Gemfile`, `pom.xml`, `build.gradle` — at scaffold time vs. now) and **command alignment** (checks that the first binary of each configured `cmd_typecheck`/`cmd_lint`/`cmd_test` still has a matching stack manifest in the repo). `.claude/.cc-manifest.json` bumps to `manifest_version: 2` with two new fields (`stack_manifests`, `check_commands`); the SessionStart hook (`sessionstart-drift-check.sh`) gains §2 + §3 emitting one terse line per drifted dimension, all pointing at `/verify-setup`. `/verify-setup` gains §4b + §4c narrative blocks. Compatibility: v2 hook reads v1 manifests as if the new fields were empty (no false drift on PR #51 baselines); v1 hook seeing a v2 manifest fires the existing version-skew nudge. §3 carries a pre-bootstrap skip (configured binary's expected manifest must have been in the baseline `stack_manifests` set) so brand-new scaffolds on empty dirs stay silent — same spirit as the stop-hook manifest-missing skip rule from v2.4.0. New helpers: `detect_stack_manifests()`, `extract_first_binaries()` in `configure.py`. New tests: `test/cc-manifest/test-stack-manifests-detected.sh`, `test/cc-manifest/test-check-commands-extracted.sh`, seven new `test/sessionstart-drift-check/test-*.sh` fixtures, `test/verify-setup/test-stack-alignment-spec-present.sh`. Spec + plan: `docs/superpowers/specs/2026-05-21-stack-alignment-check-design.md` and `docs/superpowers/plans/2026-05-21-stack-alignment-check.md` (gitignored, local-only working artifacts). + +**Housekeeping:** + +- **docs: drop legacy `/brainstorm` + `/write-plan` references after superpowers v5.1.0 (PR #49).** `superpowers` v5.1.0 (2026-04-30) removed the `/brainstorm`, `/write-plan`, and `/execute-plan` slash commands — they were deprecated stubs and users must now invoke the skills directly (or just describe the work; the SessionStart bootstrap auto-routes). Configurator references updated: `configure.py` "Next steps" output now says "describe what you want to build" instead of "invoke /brainstorm"; `docs/11-getting-started.md` walkthrough swaps the explicit `> /brainstorm` prompt for plain-English intent and adds an inline note about the v5.1.0 removal; `docs/10-plugin-ecosystem.md` install snippet drops `claude /brainstorm`; `templates/recommend-plugins/recommended-plugins.md` row reframes the gate as skill-driven. Historical CHANGELOG entries unchanged (they reference what was current at the time). +- **chore(compat): survey Claude Code 2.1.133–2.1.146; track SchemaStore PR #5706 (PR #52).** Resurveyed the upstream CHANGELOG and the SchemaStore catalog after a 9-day gap. The original gating PR #5665 (sync to v2.1.138) was closed 2026-05-19 with comment "Superseded by #5706 which syncs to v2.1.143" — net win for batching since #5706 also picks up `worktree.bgIsolation`, `subagentStatusLine`, `statusLine.hideVimModeIndicator`, `sandbox.failIfUnavailable`, five env vars (`ANTHROPIC_WORKSPACE_ID`, `CLAUDE_CODE_OPUS_4_6_FAST_MODE_OVERRIDE`, `CLAUDE_CODE_PLUGIN_PREFER_HTTPS`, `CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY`, `CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`), and the hook `args: string[]` + `continueOnBlock` keys move out of the "future sync" bucket and into the same merge gate. Eleven configurator-territory keys total in #5706; live-verified against the PR's head-branch schema 2026-05-21. Two later items remain held for a future sync PR (hook output `terminalSequence` from 2.1.141; Stop/SubagentStop input `background_tasks` + `session_crons` from 2.1.145). **No template changes; no `tested_up_to` bump yet** — deferred to the post-#5706 unblock batch per the "no lone tracking bumps" rule. `CLAUDE_CODE_COMPAT` rationale comment refreshed to capture the resurvey window. Also: `/simplify` was renamed to `/code-review` in 2.1.146 — configurator ships `/review` (slash command) + `code-reviewer` (agent name), so no collision. ## [2.4.0] — 2026-05-12