feat: MuseHub GUI display of version tags (muse#57 item 1)
Version tags (musehub_version_tags, pushed via `muse tag push <remote> <tag>`) have been stored and queryable since muse#56 shipped (GET /{owner}/{slug}/version-tags), but had zero UI surface -- a repo's version tag history was invisible on the hub itself. Final item of muse#57's deferred-items list.
Added a "Version Tags" section to the existing GET /{owner}/{repo_slug}/ tags page, below the existing release-based tag list. The two systems render independently and are clearly distinct: a release always carries a changelog/assets/semantic-analysis; a version tag is just a named pointer to a commit, optionally Ed25519-signed (muse#57 item 3). Chose this page over a brand-new route specifically to avoid colliding with the wire-protocol GET endpoint already registered at the exact same `/{owner}/{slug}/version-tags` path for the muse CLI (api/routes/wire.py, mounted with no prefix) -- this repo's convention keeps CLI wire routes and browser UI routes in separate modules, so reusing that exact path for an HTML page would require content-negotiation logic this ticket's scope didn't call for.
Each row shows the tag name, a link to the commit detail page, a "✓ signed" badge when both signer_public_key and signature are present, author, and message. Empty state points users at `muse tag add` / `muse tag push`.
New tests/test_musehub_ui_version_tags_ssr.py (6), matching this repo's existing test_musehub_ui_releases_ssr.py SSR-testing convention (httpx AsyncClient against real routes, asserting rendered HTML, not mocked templates): tag renders server-side, signed tag shows the badge, unsigned tag does not, empty state when no version tags exist, commit_id links to the correct commit detail URL, and releases + version tags render independently of each other on the same page. Confirmed genuine RED (6/6 failed) before GREEN with the fix restored.
Live-verified against the real local musehub instance after a container restart: GET /gabriel/muse/tags renders the "Version Tags" section cleanly (empty state, since no real tag has been pushed to that repo on local yet), confirming no template/route errors in production code, not just the test suite.
Targeted regression suite -- the new file plus test_musehub_ui_ releases_ssr.py (unaffected sibling) and test_musehub_version_tags_ service.py -- all pass (16 passed), zero regressions.
This closes out muse#57 entirely -- all 6 deferred items from the original ticket are now implemented.
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Semantic Changes
21 symbols
Files Changed
+1
~2
1091 in snapshot
0 comments
muse hub commit comment sha256:59e0a0e73fb6ffc89260298b173f25c3b7d6ecbf73fbd89ebe55b66201048029 --body "your comment"
No comments yet. Be the first to start the discussion.