Skip to content

fix(hud): version resolution fallback to plugin.json (Wave 1-A)#1467

Closed
JeremyDev87 wants to merge 2 commits into
feat/statusbar-wow-refactorfrom
feat/statusbar-wow-version
Closed

fix(hud): version resolution fallback to plugin.json (Wave 1-A)#1467
JeremyDev87 wants to merge 2 commits into
feat/statusbar-wow-refactorfrom
feat/statusbar-wow-version

Conversation

@JeremyDev87
Copy link
Copy Markdown
Owner

Closes #1466
Stacked on #1465 (Wave 0 refactor — must merge first)

Summary

Fixes the status bar version display bug ("shows v5.2.0 when actual is v5.5.0") by adding a tier-2 plugin.json fallback to the version resolution chain.

Root Cause

hud-state.json freezes the version at session-start and is never refreshed when the plugin is updated. Previously only installed_plugins.json was consulted as the refresh source, which fails in dev installs or when the plugin registry lags the local file.

Fix

New resolution chain:

  1. installed_plugins.json (tier 1, global, authoritative after /plugin update)
  2. ../.claude-plugin/plugin.json (tier 2 NEW, local, authoritative for dev installs, __file__-relative)
  3. hud_state.version (tier 3, last resort, may be stale)

API Design

get_fresh_version() gains plugin_json_file: Optional[str] = None:

  • None (default) — tier-2 disabled, preserves backcompat for existing test callers
  • \"\" — use the default dev-install path resolved from __file__
  • non-empty string — explicit override for test fixtures

format_status_line() passes through plugin_json_file; main() explicitly enables it with plugin_json_file=\"\" so production always reads plugin.json while tests remain isolated.

Tests

162/162 pass (133 Golden Rule + 29 version + Wave 0 modules)

7 new behavior tests in test_hud_version.py:

  • test_plugin_json_fallback_when_installed_plugins_missing
  • test_installed_plugins_wins_over_plugin_json
  • test_plugin_json_beats_hud_state
  • test_all_fallbacks_fail_returns_hud_state_version
  • test_plugin_json_malformed_skipped
  • test_plugin_json_missing_version_key_skipped
  • test_default_plugin_json_path_resolves_to_real_file — locks that the __file__-derived default path actually points at the repo's plugin.json

Backwards Compatibility

  • Existing callers of get_fresh_version() without the new kwarg see zero behavior change (tier 2 disabled)
  • test_hud.py requires zero changes because format_status_line() defaults plugin_json_file to None
  • format_status_line() signature gains one keyword-only parameter with a safe default

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 11, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
codingbuddy-landing Ready Ready Preview, Comment Apr 11, 2026 1:21pm

Resolves the stale version display bug ("shows v5.2.0 when actual is
v5.5.0") by adding a deterministic tier-2 fallback that reads
.claude-plugin/plugin.json via __file__-relative path.

- hud_version.get_fresh_version gains plugin_json_file parameter:
  * None (default): tier-2 disabled, preserves backcompat
  * "": enables dev-install default path (production)
  * non-empty: test override
- _default_plugin_json_path() + _read_local_plugin_json() helpers
- format_status_line accepts plugin_json_file passthrough
- main() passes plugin_json_file="" to enable Wave 1-A in production
- 7 new tests for fallback ordering, malformed files, default path
- 162/162 tests pass (133 Golden Rule + 29 version/Wave 0)

Closes #1466
Part of #1464 (Wave 0 statusbar refactor)
Combined Wave 0 polish items from the #1465/#1485 review cycle:

1. Narrow `except Exception` to `except ImportError` in the 3 lib
   fallback import blocks (qual-1465 HIGH-1). Real logic bugs
   (SyntaxError, NameError, AttributeError) inside lib modules now
   surface immediately instead of being silently swallowed by a
   catch-all.

2. Drop inline stub functions for format_rate_limits and
   _get_fresh_version (qual-1465 HIGH-2). Eliminates the signature
   drift between canonical lib definitions and in-file fallback stubs
   observed on the integrator branch (Wave 1-A plugin_json_file
   kwarg drift). The outer main() try/except still catches any runtime
   failure and emits the minimal safe output via the BUDDY_FACE
   constant.

3. Hoist hud_velocity and hud_cache_savings imports to module top as
   _format_velocity_segment and _format_cache_savings (perf-1485 H1).
   Eliminates ~0.47us sys.modules lookup per render. Integrator branch
   only - no-op on refactor/wave branches where the inline imports
   don't exist yet.

4. Bump next to 16.2.3 for GHSA-q4gf-8mx6-v5v3 (landing-security-check).
   Aligns eslint-config-next and updates setup.test.ts assertion.

Refs: qual-1465 HIGH-1/2, perf-1485 H1,
GHSA-q4gf-8mx6-v5v3
@JeremyDev87 JeremyDev87 force-pushed the feat/statusbar-wow-version branch from c5423a0 to 2b38912 Compare April 11, 2026 13:11
@JeremyDev87 JeremyDev87 added statusbar-wave:1 Statusbar Wow bug fixes (Wave 1-A~1-D) fix review:approved EVAL review 통과 (Critical/High = 0) labels Apr 11, 2026
@JeremyDev87
Copy link
Copy Markdown
Owner Author

Superseded by #1485

This PR was part of a stacked PR structure (feat/statusbar-wow-refactor base) that was incompatible with the repo's rebase & merge policy — each sub-PR targeted an intermediate branch, not master.

All of this PR's commits have been consolidated into #1485 (now with base: master and a linear 12-commit history after rebase). The consolidated PR contains:

  • Wave 0 — de622cc refactor(hud): extract 9 modules
  • Wave 1-A — cdf0772 fix(hud): version resolution fallback
  • Wave 1-B — 0606698 fix(hud): session self-heal
  • Wave 1-C — 87b779a feat(hud): rate limit severity icons
  • Wave 1-D — 894f515 feat(hud): adaptive layout engine
  • Wave 2-A — 5e8389d feat(hud): breathing buddy face states
  • Wave 2-B — 78ec6c5 feat(hud): cost velocity indicator
  • Wave 2-C — a306920 feat(hud): cache savings badge
  • Wave 2-D — 0fb3d5c feat(hud): mode rainbow ANSI coloring
  • Wave 2-E — 8cd78b2 feat(hud): smart context bar
  • Wave 3 — 295f5c4 feat(hud): integrate Wave 2-B/2-C
  • Review iter1 — b330528 fix(hud,landing): narrow fallback imports + next 16.2.3

EVAL review results from this PR (all reviewers, iter1 converged → Critical=0, High=0) already applied in #1485.

Closing as superseded. Use #1485 with GitHub's Rebase and merge button to land all 12 commits linearly on master.

@JeremyDev87 JeremyDev87 deleted the feat/statusbar-wow-version branch April 11, 2026 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:hud HUD / statusLine 영역 fix plugin packages/claude-code-plugin review:approved EVAL review 통과 (Critical/High = 0) statusbar-wave:1 Statusbar Wow bug fixes (Wave 1-A~1-D)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant