diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 20067479..33a3e6e1 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -12,7 +12,7 @@ "name": "codingbuddy", "source": "./packages/claude-code-plugin", "description": "PLAN/ACT/EVAL workflow, specialist agents, and reusable skills for systematic TDD development", - "version": "5.6.0", + "version": "5.6.1", "category": "development" } ] diff --git a/CHANGELOG.md b/CHANGELOG.md index 99ea6896..c25499cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,29 @@ All notable changes to this project will be documented in this file. 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). +## [5.6.1] - 2026-04-11 + +Hotfix closing the remaining gaps in the v5.6.0 HUD Statusbar Wave cycle: +a stale-timestamp leak in the self-heal path, plus the four Wave modules +that shipped as dead code in v5.6.0 (imported but never wired into +`format_status_line`). + +### Fixed +- HUD heal timestamp leak (Wave 1-B, [#1487](https://github.com/JeremyDev87/codingbuddy/pull/1487)) — `heal_stale_state` preserved `sessionStartTimestamp` for "audit / forensics", but `resolve_duration` read the same field as a fallback when stdin lacked `total_duration_ms`. A manual-fix marker + stale timestamp therefore rendered enormous durations like `322h52m` for brand-new sessions. The timestamp is now relocated into `_healedFromSessionStartTimestamp` so forensic/debug value is preserved while the render fallback path no longer sees it. Idempotent — re-healing an already-healed state keeps the forensics field stable. + +### Added +- Wave 3b — Complete Wave 3 integration ([#1488](https://github.com/JeremyDev87/codingbuddy/pull/1488)) — commit `bd78195` ("integrate Wave 2-B/2-C in `format_status_line`") wired velocity and cache-savings into the cost segment but left four sibling Wave modules as dead code: `hud_buddy`, `hud_rainbow`, `hud_context_bar`, and `hud_layout`. Their unit tests passed, but `format_status_line` never called them. This hotfix hoists all four modules as top-level imports and refactors `format_status_line` to build `(name, priority, text)` segments consumed by `fit_segments`: + - **Wave 2-A — Breathing Buddy Face** now actually breathes: the buddy face reflects `hud_state.phase` / `blockerCount` (`ready` → ◕‿◕ idle, `planning` → ◔‿◔ thinking, `executing` → ◕◡◕ active, blockers → ◕︵◕ error, `lastEvent=victory` → ◕ᴗ◕). + - **Wave 2-D — Mode Rainbow Coloring** now actually colors: opt-in via `CODINGBUDDY_HUD_RAINBOW=1` because Claude Code statusLine ANSI support is environment-dependent. Default OFF keeps existing terminals clean. Transitively honours the `NO_COLOR` standard (https://no-color.org). Only real modes (PLAN/ACT/EVAL/AUTO) are colored — the "Ready" fallback label stays plain. Coloring is applied post-`fit_segments` so ANSI escapes don't break layout width accounting. + - **Wave 2-E — Smart Context Bar** now actually renders: `Ctx:NN%` is replaced with `[████░░░░░░] 42%`. Dark shade `▓` marks the trailing full block above the danger threshold (85%) and a `⚠` suffix is appended above the warning threshold (80%). + - **Wave 1-D — Adaptive Layout** now actually adapts: the final `" | ".join(segments)` is replaced with `fit_segments(layout_segments, terminal_width())`. Low-priority segments (`worktree`, `rate_limits`, `model`, `cache`, `ctx`) drop first on narrow terminals; `face_version` and `mode_health` are sacred and always render. `shorten_model_label` trims the `"(1M context)"` suffix so Opus display names fit mid-width terminals without being dropped. + +### Test Coverage +- 17 new Wave 3b integration tests across four classes (`TestWave2ABreathingFaceIntegration`, `TestWave2EContextBarIntegration`, `TestWave2DRainbowIntegration`, `TestWave1DAdaptiveLayoutIntegration`) +- 5 new Wave 1-B regression tests guarding the heal-timestamp contract +- 3 existing tests updated for the Wave 2-E `[bar] NN%` format; `test_full_telemetry` hardened with `COLUMNS=300` so the "all segments render" assertion no longer flakes against the pytest 80-col default now that adaptive layout actually runs +- Plugin test suite: 1077+ passed locally + ## [5.6.0] - 2026-04-11 ### Added diff --git a/apps/mcp-server/package.json b/apps/mcp-server/package.json index 4e3c75ca..d068ffe7 100644 --- a/apps/mcp-server/package.json +++ b/apps/mcp-server/package.json @@ -1,6 +1,6 @@ { "name": "codingbuddy", - "version": "5.6.0", + "version": "5.6.1", "description": "Multi-AI Rules MCP Server - One source of truth for AI coding rules across all AI assistants", "author": "JeremyDev87", "license": "MIT", diff --git a/apps/mcp-server/src/shared/version.ts b/apps/mcp-server/src/shared/version.ts index 3d37ea6b..42eb0212 100644 --- a/apps/mcp-server/src/shared/version.ts +++ b/apps/mcp-server/src/shared/version.ts @@ -2,4 +2,4 @@ * Single source of truth for the runtime package version. * Updated automatically by scripts/bump-version.sh on each release. */ -export const VERSION = '5.6.0'; +export const VERSION = '5.6.1'; diff --git a/packages/claude-code-plugin/.claude-plugin/plugin.json b/packages/claude-code-plugin/.claude-plugin/plugin.json index 92d3422f..39594d35 100644 --- a/packages/claude-code-plugin/.claude-plugin/plugin.json +++ b/packages/claude-code-plugin/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "codingbuddy", - "version": "5.6.0", + "version": "5.6.1", "description": "PLAN/ACT/EVAL workflow with auto-detection, specialist agents, and reusable skills for systematic TDD development", "author": { "name": "JeremyDev87", diff --git a/packages/claude-code-plugin/README.md b/packages/claude-code-plugin/README.md index 968ed573..a511ee6f 100644 --- a/packages/claude-code-plugin/README.md +++ b/packages/claude-code-plugin/README.md @@ -2,7 +2,7 @@ # CodingBuddy Claude Code Plugin -> Version 5.6.0 +> Version 5.6.1 Multi-AI Rules for consistent coding practices - PLAN/ACT/EVAL workflow, specialist agents, and reusable skills for systematic development. diff --git a/packages/claude-code-plugin/namespace-manifest.json b/packages/claude-code-plugin/namespace-manifest.json index c7949ec2..15074567 100644 --- a/packages/claude-code-plugin/namespace-manifest.json +++ b/packages/claude-code-plugin/namespace-manifest.json @@ -34,5 +34,5 @@ "namespaced": "codingbuddy:plan" } ], - "generatedAt": "2026-04-11T14:34:02.760Z" + "generatedAt": "2026-04-11T16:03:33.849Z" } diff --git a/packages/claude-code-plugin/package.json b/packages/claude-code-plugin/package.json index f63aa7be..6bfef13a 100644 --- a/packages/claude-code-plugin/package.json +++ b/packages/claude-code-plugin/package.json @@ -1,6 +1,6 @@ { "name": "codingbuddy-claude-plugin", - "version": "5.6.0", + "version": "5.6.1", "description": "Claude Code Plugin for CodingBuddy - PLAN/ACT/EVAL workflow, specialist agents, and reusable skills", "author": "JeremyDev87", "license": "MIT", @@ -53,7 +53,7 @@ "test:coverage": "vitest run --coverage" }, "peerDependencies": { - "codingbuddy": "^5.6.0" + "codingbuddy": "^5.6.1" }, "peerDependenciesMeta": { "codingbuddy": { diff --git a/packages/rules/package.json b/packages/rules/package.json index 7b6e7699..8546b972 100644 --- a/packages/rules/package.json +++ b/packages/rules/package.json @@ -1,6 +1,6 @@ { "name": "codingbuddy-rules", - "version": "5.6.0", + "version": "5.6.1", "description": "AI coding rules for consistent practices across AI assistants", "main": "index.js", "types": "index.d.ts", diff --git a/yarn.lock b/yarn.lock index 41c53be3..6601c5c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5735,7 +5735,7 @@ __metadata: typescript: "npm:5.9.3" vitest: "npm:4.0.17" peerDependencies: - codingbuddy: ^5.6.0 + codingbuddy: ^5.6.1 peerDependenciesMeta: codingbuddy: optional: true