I3229 — Every version badge says whose version it is and how it stands to the latest release
Label the navbar's version badge on the site (the release it published), on /ui and /cockpit (the executable serving the page) and on the snapshots (the commit read), and when the executable differs from the latest published (offered) release say 'ahead of' or 'behind' it, from distribution.releases and the compiled version, never release.version, through new slots of the shared navbar.
READY wave 1 · p3 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3229 will be accepted.
Objective
Label the navbar's version badge on the site (the release it published), on /ui and /cockpit (the executable serving the page) and on the snapshots (the commit read), and when the executable differs from the latest published (offered) release say 'ahead of' or 'behind' it, from distribution.releases and the compiled version, never release.version, through new slots of the shared navbar.
Why
On 2026-10-12 the homepage showed v0.20.0 while /ui declared executable v0.22.0 and the latest release was v0.21.0, with nothing telling a visitor why (dated observation). Sources: chatgpt-majordomus:c235#2.
Current state
apps/majordomus-cli/src/ui/navbar.rs fills the badge with the executable's version; site/templates/partials/navbar.html names the release the site published; rule the-site-offers-the-release-it-published holds homepage, installer and release equal; neither badge names its kind.
Desired state
The badge's accessible name and title say which version it is; the comparison is derived.
Scope
- apps/majordomus-cli/src/ui/navbar.rs
- site/templates/partials/navbar.html
- scripts/ui
- scripts/lib/ui-navbar.mjs
- apps/majordomus-cli/src/ui/navbar.html
- apps/majordomus-cli/src/cockpit/view.rs
- apps/majordomus-cli/src/web/report/snapshot.rs
- docs/MAJORDOMUS_UI.md
- .ai/repo/project/intents
Out of scope
- Changing which version each surface shows
Dependencies
Acceptance criteria
- Each surface's badge names its kind
- An executable ahead of the latest release says so on /ui
- The labelled badge and its ahead/behind phrase fit the bar at 390 px with no horizontal scroll (scripts/ui audit at phone width)
- docs/MAJORDOMUS_UI.md says whose version each surface's badge shows
- The kind label and the ahead/behind phrase are new slots in site/templates/partials/navbar.html and ui-navbar.mjs fragmentOf; ui/navbar.html is regenerated and `scripts/ui navbar` passes
- The comparison reads distribution.releases (records only) and the compiled version, never release.version, and every /ui screen keeps its 100 ms warm p95 budget
- 'Latest release' means the published (offered) release, as the site's badge does; the data-release attribute no longer labels the executable's version as a release
- The PR adds apps/majordomus-cli/tests/ui_version_badge.rs and rewrites criterion a-version-says-whose-it-is to `evidence: test` with that ref
Validation
- scripts/ui navbar
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib ui::navbar
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test ui_version_badge
- majordomus bench --check
Evidence required
- apps/majordomus-cli/tests/ui_version_badge.rs
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3229.yaml. Read it back with majordomus plan show I3229.