Skip to content

Commit 6ee0f79

Browse files
committed
chore(release): prepare v5.6.2
Bump the workspace version from 5.6.1 to 5.6.2 and publish the CHANGELOG entry for the HUD installer hotfix. v5.6.2 closes the v5.6.0 / v5.6.1 HUD statusLine installer regression (#1490). Every user who upgraded to 5.6.0 or 5.6.1 saw only the fallback face '◕‿◕ CodingBuddy' instead of the full Wave 1/2/3 status line, because the installer never copied the hooks/lib/ modules the script depends on. v5.6.2 routes both the HUD installer and the UserPromptSubmit hook installer through a new _atomic_sync_with_lib helper that copies the script and atomically replaces the entire lib/ directory (rmtree + copytree), guaranteeing renamed/removed modules from prior plugin versions cannot linger. Bump surface: - apps/mcp-server/package.json, src/shared/version.ts - packages/rules/package.json - packages/claude-code-plugin/package.json (+ peerDependencies), .claude-plugin/plugin.json, README.md - .claude-plugin/marketplace.json - yarn.lock - CHANGELOG.md (new [5.6.2] section) Refs #1490
1 parent 1451768 commit 6ee0f79

9 files changed

Lines changed: 37 additions & 9 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"name": "codingbuddy",
1313
"source": "./packages/claude-code-plugin",
1414
"description": "PLAN/ACT/EVAL workflow, specialist agents, and reusable skills for systematic TDD development",
15-
"version": "5.6.1",
15+
"version": "5.6.2",
1616
"category": "development"
1717
}
1818
]

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [5.6.2] - 2026-04-12
9+
10+
Critical hotfix for the v5.6.0 / v5.6.1 HUD statusLine installer
11+
regression. Every user who upgraded to v5.6.0 or v5.6.1 saw only the
12+
fallback face `◕‿◕ CodingBuddy` instead of the full Wave 1/2/3 status
13+
line, regardless of how many statusbar features had shipped, because
14+
the installer never copied the `hooks/lib/` modules the script
15+
depends on.
16+
17+
### Fixed
18+
- **HUD installer never synced `hooks/lib/`** ([#1490](https://github.com/JeremyDev87/codingbuddy/issues/1490)) — `_install_statusline` only ran `shutil.copy` on `codingbuddy-hud.py` and never touched the sibling `lib/` directory. The v5.6.0 refactor (`b0fb332`) extracted 11 `hud_*.py` modules + `tiny_actor_presets.py` to `hooks/lib/`, so every upgraded user ended up with `~/.claude/hud/codingbuddy-hud.py` present and `~/.claude/hud/lib/` missing. The script's `try: from hud_buddy import BUDDY_FACE` failed on the missing module and the outer `try/except` printed only the bare fallback `◕‿◕ CodingBuddy`. Every Wave 1-A version, Wave 1-B heal, Wave 1-C rate limit icons, Wave 1-D adaptive layout, Wave 2-A breathing face, Wave 2-B velocity, Wave 2-C cache savings, Wave 2-D rainbow, Wave 2-E smart context bar, and Wave 3 / 3b integration was therefore invisible. Fixed by routing the install through a new `_atomic_sync_with_lib` helper that copies the script and atomically replaces the entire `lib/` directory (rmtree + copytree).
19+
- **Sister bug in `_install_hook_with_lib`** — the UserPromptSubmit hook installer used `shutil.copytree(dirs_exist_ok=True)`, which writes new files but never removes files that existed before but are gone now. A renamed module from a prior version would have lingered in `~/.claude/hooks/lib/` and could be imported first by Python's import system. Now also routes through `_atomic_sync_with_lib` so renamed/removed modules are purged on every sync.
20+
21+
### Added
22+
- **`_atomic_sync_with_lib(source_script, target_dir, extra_ignore)`** — canonical install primitive used by both `_install_statusline` and `_install_hook_with_lib`. Performs an atomic `rmtree + copytree` on the lib directory and excludes `__pycache__`, `*.pyc`, `*.pyo`, `.pytest_cache`, `test_*.py`, `*.egg-info` so the runtime `sys.path` stays clean. Optional `CODINGBUDDY_HUD_DEBUG=1` env var surfaces install errors on stderr (default still silent so session start is never blocked).
23+
- **`~/.claude/hud/.version` stamp**`_install_statusline` now writes the plugin version it just installed so `health_check.check_hud_installation` can detect drift and the user can confirm which release they are running.
24+
- **`HealthChecker.check_hud_installation` (check #11)** — new diagnostic verifies `~/.claude/hud/codingbuddy-hud.py` exists, `~/.claude/hud/lib/` contains the seven critical modules, and a subprocess render smoke test does not return the fallback face. Detects all known failure modes of #1490 from the user's existing health-check workflow.
25+
- **`scripts/verify-install-simulation.sh`** — pre-release shell gate that simulates a fresh user receiving cache 5.6.x and starting Claude Code. Runs `_install_statusline` against the in-tree source in an isolated tmpdir, then executes the installed script as a real subprocess and asserts the output is the full status line. Run locally before pushing release branches; invoked from CI in `e2e-plugin.yml` and `canary.yml`.
26+
27+
### Test Coverage
28+
- **9 new tests** in `tests/test_atomic_sync_with_lib.py` covering script copy, executable bit, lib copy, no-lib silent skip, ignore patterns, stale module replacement, idempotent re-invocation, and `extra_ignore` arg.
29+
- **14 new tests** in `tests/test_session_start_hud.py`:
30+
- 8 unit cases (`TestSyncHudAssets`) — copies all 12 required modules, excludes pollutants, replaces stale modules, idempotent, writes version stamp, gracefully skips when lib absent, preserves settings.json update.
31+
- 4 parametrized E2E cases (`TestHudInstallE2ERegressionGate`) — runs the installed script as a real subprocess across `clean`, `partial`, `stale`, and `fresh` starting states and asserts the output is **not** `◕‿◕ CodingBuddy`. This is the single regression gate that would have caught the v5.6.0 / v5.6.1 ship.
32+
- **4 new tests** in `tests/test_install_hook_with_lib.py` — sister-bug regression gate for `_install_hook_with_lib` (stale module replacement, ignore patterns, source-name rename, idempotency).
33+
- **5 new tests** in `tests/test_health_check.py::TestCheckHudInstallation` — script missing, lib missing, modules missing, smoke test fallback detection, end-to-end PASS with real `_install_statusline` invocation.
34+
- **CI gates** — both `e2e-plugin.yml` (PR-level) and `canary.yml` (post-merge) now run all four pytest suites and `verify-install-simulation.sh` so a broken installer cannot reach release.
35+
836
## [5.6.1] - 2026-04-11
937

1038
Hotfix closing the remaining gaps in the v5.6.0 HUD Statusbar Wave cycle:

apps/mcp-server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codingbuddy",
3-
"version": "5.6.1",
3+
"version": "5.6.2",
44
"description": "Multi-AI Rules MCP Server - One source of truth for AI coding rules across all AI assistants",
55
"author": "JeremyDev87",
66
"license": "MIT",

apps/mcp-server/src/shared/version.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
* Single source of truth for the runtime package version.
33
* Updated automatically by scripts/bump-version.sh on each release.
44
*/
5-
export const VERSION = '5.6.1';
5+
export const VERSION = '5.6.2';

packages/claude-code-plugin/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codingbuddy",
3-
"version": "5.6.1",
3+
"version": "5.6.2",
44
"description": "PLAN/ACT/EVAL workflow with auto-detection, specialist agents, and reusable skills for systematic TDD development",
55
"author": {
66
"name": "JeremyDev87",

packages/claude-code-plugin/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# CodingBuddy Claude Code Plugin
44

5-
> Version 5.6.1
5+
> Version 5.6.2
66
77
Multi-AI Rules for consistent coding practices - PLAN/ACT/EVAL workflow, specialist agents, and reusable skills for systematic development.
88

packages/claude-code-plugin/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codingbuddy-claude-plugin",
3-
"version": "5.6.1",
3+
"version": "5.6.2",
44
"description": "Claude Code Plugin for CodingBuddy - PLAN/ACT/EVAL workflow, specialist agents, and reusable skills",
55
"author": "JeremyDev87",
66
"license": "MIT",
@@ -53,7 +53,7 @@
5353
"test:coverage": "vitest run --coverage"
5454
},
5555
"peerDependencies": {
56-
"codingbuddy": "^5.6.1"
56+
"codingbuddy": "^5.6.2"
5757
},
5858
"peerDependenciesMeta": {
5959
"codingbuddy": {

packages/rules/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codingbuddy-rules",
3-
"version": "5.6.1",
3+
"version": "5.6.2",
44
"description": "AI coding rules for consistent practices across AI assistants",
55
"main": "index.js",
66
"types": "index.d.ts",

yarn.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5735,7 +5735,7 @@ __metadata:
57355735
typescript: "npm:5.9.3"
57365736
vitest: "npm:4.0.17"
57375737
peerDependencies:
5738-
codingbuddy: ^5.6.1
5738+
codingbuddy: ^5.6.2
57395739
peerDependenciesMeta:
57405740
codingbuddy:
57415741
optional: true

0 commit comments

Comments
 (0)