I2481 — The UI links every entity it names, and says none where a source has no value
Make every entity a screen of majordomus ui names lead somewhere: to the UI's own screen or inspector for it, to its technical view when the UI has no screen for it, or to the address its source gives when it lives elsewhere; say none where a source has no value; say how much a cut list leaves out; and count throughput over the window the queue states rather than one the screen chooses.
DONE wave 3 · p1 · implementation profile · runs alone
Part of development-runtime — The runtime has a development surface.
Objective
Make every entity a screen of majordomus ui names lead somewhere: to the UI's own screen or inspector for it, to its technical view when the UI has no screen for it, or to the address its source gives when it lives elsewhere; say none where a source has no value; say how much a cut list leaves out; and count throughput over the window the queue states rather than one the screen chooses.
Why
The owner asked on 2026-10-12 that majordomus ui be interconnected, interlinked, derived and inferred. The audit of the merged UI (#940-#963) found releases, gates, deployments, a rule's tests, declaration and gates, a claim's document, code and test, and an issue's milestone and intents drawn as plain text; about sixty fields rendered blank instead of none; seven lists cut with take(N) without saying so; and the PR Drain counting merges over a hard-coded fourteen-day window beside a tile labelled with a hard-coded seven days, while the queue answers its own window (throughput/window_days).
Current state
Entities outside the UI's own inspectors are plain text, a missing value is a blank cell, cut lists are silent, and the merge tile and chart use windows the screen chose. Commit SHAs and file paths that are not objects of the index stay text: no fast capability derives the forge's address, and the UI does not compose one.
Desired state
A gate leads to its row in the CI model (/ui/delivery#gate-<id>), and a gate's implied gates to theirs; a deployment leads to its row on Deployments and its declaration to its technical view; a release leads to the record the distribution publishes; the publication address of the delivery report is a link; a command the registry also serves as a capability leads to that capability, joined by the capability's declared command-line path; a feature and a document lead to their technical views; an issue's row, its milestone and the intents it serves open their inspectors; a rule's tests (when the report found them), its declaration and its gates are links; a claim's document, implementation and test lead to their technical views when objects.get resolves them and are text otherwise, so no link answers 404. A value a source does not have reads none or unknown; every list cut short says how many it leaves out and, where one exists, links the place that shows them all. The merge tiles say the queue's window, and the throughput chart counts over that window and draws nothing when the queue states none.
Scope
- apps/majordomus-cli/src/ui/view.rs
- apps/majordomus-cli/src/ui/source.rs
- apps/majordomus-cli/src/ui/dashboard.rs
- apps/majordomus-cli/src/ui/delivery.rs
- apps/majordomus-cli/src/ui/deployments.rs
- apps/majordomus-cli/src/ui/command.rs
- apps/majordomus-cli/src/ui/docs.rs
- apps/majordomus-cli/src/ui/prs.rs
- apps/majordomus-cli/src/ui/rule.rs
- apps/majordomus-cli/src/ui/claim.rs
- apps/majordomus-cli/src/ui/evidence.rs
- apps/majordomus-cli/src/ui/mesh.rs
- apps/majordomus-cli/src/ui/work.rs
- apps/majordomus-cli/src/ui/milestone.rs
- .ai/repo/project/issues/I2481.yaml
- docs/MAJORDOMUS_UI.md
- test/cases/1079_the_drain_draws_its_throughput.sh
Dependencies
What waits on this
Acceptance criteria
- every gate, deployment, release, milestone, intent, rule test, rule declaration and claim source, implementation and test a screen names is a link, to a UI route or to the technical view of an object the index holds
- a reference the index does not hold is text, never a link to a page that answers 404
- a missing value reads none or unknown, never a blank
- a list cut short says how many it leaves out
- the merge tiles and the throughput chart use the queue's own window, and a window the queue does not state is never invented
Validation
- cargo test --lib ui::
- scripts/ci/cockpit-projection-check --ui-integrity
- test/run.sh 1079_the_drain_draws_its_throughput
Evidence required
- ui_links_unit_tests
Evidence
| covers | type | command | result | at commit |
|---|---|---|---|---|
| ui_links_unit_tests | test | cargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --lib ui:: && MJ_TEST_JOBS=2 bash test/run.sh 1079_the_drain_draws_its_throughput | test result: ok. 154 passed; 0 failed; tests: 1 passed, 0 failed (run 2026-10-14 between 07:40Z and 07:58Z on master ce5959db59) | ce5959d |
Timeline
- started
- 2026-10-14T07:59:38Z
- verified
- —
- completed
- 2026-10-14T07:59:44Z
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/I2481.yaml. Read it back with majordomus plan show I2481.