gabriel / muse public
Open #57
filed by gabriel human · 25 days ago

Version tags: deferred items from issue #56

0 Anchors
Blast radius
Churn 30d
0 Proposals

Version tags: deferred items from issue #56

Follow-up work that was explicitly out of scope during the initial muse tag + muse label implementation. Each item below is a discrete deliverable that can be picked up independently.

Background

Issue #56 shipped muse tag add/list/read/delete/latest/push, muse label, full SemVer 2.0 ordering, push/pull integration, and muse describe using version tags as reference points. The following were deferred to keep #56 focused.

Deferred items

1. MuseHub GUI display of version tags

Version tags pushed to MuseHub are stored in musehub_version_tags but have no dedicated UI surface. A repo's version tag history should be visible on the hub similar to how GitHub shows tags on the releases page.

Covered in part by existing GUI release tickets. This item tracks surfacing .muse/version-tags/ specifically in the repo detail view.

2. muse release integration

muse release add v1.0.0 currently creates a MuseHub release record independently of muse tag. The two should be linked: creating a release should optionally stamp a local version tag at the same commit, and creating a version tag should optionally create a draft release on the hub.

Proposed CLI:

muse release add v1.0.0 --tag          # creates release AND local version tag
muse tag add v1.0.0 --release          # creates version tag AND draft hub release

3. muse tag sign — cryptographic signing of version tags

Version tags should optionally carry an Ed25519 signature over (repo_id, tag, commit_id) so downstream consumers can verify the tag was created by an authorized identity.

Proposed:

muse tag add v1.0.0 --sign             # sign with identity from ~/.muse/identity.toml
muse tag verify v1.0.0                 # verify signature against stored public key

Wire format addition to VersionTagRecord:

signer_public_key: str   # "ed25519:<base64url>" or "" when unsigned
signature:         str   # "ed25519:<base64url>" or "" when unsigned

4. Tag listing on the remote without fetching

Currently, seeing what version tags exist on a remote requires muse pull first. A read-only query endpoint on the hub would allow:

muse tag list --remote local           # query remote without modifying local state
muse tag list --remote staging --pre   # list pre-release tags on staging

Requires a new hub API endpoint: GET /{owner}/{slug}/version-tags.

5. Relative version resolution (v0.2.0-rc14~3)

Git-style tilde notation for navigating relative to a version tag:

muse describe v0.2.0-rc14~3           # 3 commits before v0.2.0-rc14
muse checkout v0.2.0-rc14~1           # check out the commit just before the tag
muse log v0.2.0..v0.2.0-rc14          # commits between two version tags

6. Non-SemVer version strings

muse tag currently requires strict SemVer (vMAJOR.MINOR.PATCH[-pre][+build]). Some workflows use freeform version names (nightly-20260628, 2026.06.28, train-42). Decide whether to support these under a separate storage path or keep the strict boundary and direct users to muse label for freeform annotations.

Acceptance criteria

Each item above should be tracked as its own issue when ready to implement. This issue serves as the holding area and cross-reference from #56.

Activity
gabriel opened this issue 25 days ago
No activity yet. Use the CLI to comment.