Skip to content

Version SSOT: derive everywhere from pyproject, bump to 0.5.0 - #35

Merged
Aztec03hub merged 1 commit into
mainfrom
feat-version-ssot
Jun 25, 2026
Merged

Version SSOT: derive everywhere from pyproject, bump to 0.5.0#35
Aztec03hub merged 1 commit into
mainfrom
feat-version-ssot

Conversation

@Aztec03hub

Copy link
Copy Markdown
Owner

Version single source of truth (SSOT) + bump to 0.5.0

One number is the source of truth and everything else derives from it, so the version can never drift across the CLI, TUI, web UI, docs, and pip install again.

Design

  • pyproject.toml [project] version is the ONE source. It is 0.5.0 now.
  • CLI / TUI: claude_comms.__version__ is derived from installed package metadata via importlib.metadata (unchanged), and --version reads it.
  • Web UI (runtime): the daemon now returns "version": __version__ from GET /api/capabilities. The store hydrates serverVersion from that response, and the sidebar badge prefers the live daemon version, falling back to the build-time package.json value only until capabilities load. A stale bundle can no longer display a wrong number.
  • web/package.json is kept in lock step with pyproject.toml (the build-time fallback) and a CI test (tests/test_version_consistency.py) fails the build on any drift between the two static sources. The runtime __version__ check is lenient (importable + version-shaped) so a stale local editable install does not hard-fail CI — the static-source match is the authoritative guard.
  • README: added a live PyPI version badge (img.shields.io/pypi/v/claude-comms) and refreshed the tests badge.
  • scripts/bump_version.py: future releases run python scripts/bump_version.py X.Y.Z to validate semver, bump both files together, prepend a CHANGELOG stub, commit Release vX.Y.Z, and create the annotated tag. It refuses to re-bump an existing version or clobber an existing tag, and never pushes.

This release itself was hand-edited (pyproject + package.json + CHANGELOG) rather than run through the script, so the whole bump is contained in this PR. No git tag is created here.

Stale-version finding

README "Known Issues" had a stale row: Version mismatch — Sidebar shows "v0.9" vs Python "0.1.0" — cosmetic only. That is exactly what this SSOT work eliminates, so the row is now marked Resolved with a one-line explanation of the new mechanism.

Also folded in

  • [[tool.basedpyright.executionEnvironments]] block scoping the unused/unreachable diagnostic classes to the tests/ tree only (src/ keeps full reporting).

Gates

  • ruff format + ruff check clean; basedpyright src/claude_comms introduces zero new targeted diagnostics vs main.
  • pytest -q green: 1469 passed (includes the new test_version_consistency.py).
  • vitest green: 1193 passed; vite build compiles and bakes 0.5.0 into the bundle.

After merge

  • Redeploy the desktop app / restart the daemon so the running version reports 0.5.0.
  • Publish to PyPI by pushing the tag:
    git checkout main && git pull
    git tag -a v0.5.0 -m "Release v0.5.0"
    git push origin v0.5.0
    

🤖 Generated with Claude Code

@Aztec03hub
Aztec03hub merged commit 3084b36 into main Jun 25, 2026
5 of 8 checks passed
@Aztec03hub
Aztec03hub deleted the feat-version-ssot branch June 25, 2026 18:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant