I3191 — The UI reads any linked runtime the mesh names, and says which runtime every reading came from
Offer on /ui a target choice derived from mesh nodes (local, each trusted linked runtime), read the chosen runtime over HTTP from the endpoint on its signed RuntimeCard, through its declared ingress where one exists, stamp every panel with the runtime, the transport, that the read is unsigned and the observation time, and render an unreachable target as a state.
BLOKOVÁNO wave 2 · p2 · implementation profile · parallel safe
Blocked. This issue cannot start until I3138, I3196, I3182, milestone:the-mesh-is-operated-from-one-page are done. The status is derived from that, not declared.
Cíl
Offer on /ui a target choice derived from mesh nodes (local, each trusted linked runtime), read the chosen runtime over HTTP from the endpoint on its signed RuntimeCard, through its declared ingress where one exists, stamp every panel with the runtime, the transport, that the read is unsigned and the observation time, and render an unreachable target as a state.
Proč
On 2026-09-15 the owner wanted the Cockpit's default backend to be lundra, autodetected and never hard-coded; on 10-18 to see the whole mesh from one page. Reads beyond loopback are allowed by ADR 0126; writes are not. Critique 10-18: the link carries only the hello and sync exchanges (mesh/link.rs), so reads go over HTTP and the page says so. The owner's c296#0 also asked for a skill and a route. ADR 0209 leaves whether 'prismatic-lumen' becomes a route, CLI command, MCP namespace or skill to the owner, and that question is open until the owner answers it. Proposed in ADR 0201 (The persistent runtime is the authority; every operator surface, Lumen included, is a client of it) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c138#2.
Aktuální stav
Verified: /ui reads only the server that serves it (apps/majordomus-cli/src/ui); the link protocol has only the hello and sync exchanges, protocol range 1..1 (mesh/link.rs).
Cílový stav
?target=<node> on /ui screens; target list from mesh.peers; read-only for remote targets.
Rozsah
- docs/MAJORDOMUS_UI.md
- apps/majordomus-cli/src/mesh/testing.rs
- apps/majordomus-cli/src/ui/source.rs
- apps/majordomus-cli/src/ui/mesh.rs
- apps/majordomus-cli/src/ui/shell.rs
- apps/majordomus-cli/src/ui/mod.rs
- apps/majordomus-cli/src/cockpit/pages.rs
- site/content/docs/majordomus-ui.md
- docs/COCKPIT.md
- site/content/docs/cockpit.md
Mimo rozsah
- Remote writes (I3192 after web-sign-in)
- A signed read domain in the link protocol; LINK_PROTOCOL_MAX stays 1 and a protocol bump is a later issue with its own mixed-version rule
- The per-figure source and age and reconnect recovery that I3138 already delivers
Závislosti
- I2414HOTOVO mesh.state a mesh.peers odpovídají filtrovaným souhrnem, který se vejde do jedné odpovědi nástroje
- I3138BLOCKED One page shows the whole mesh from the blackboard, peers and monitor with each figure's freshness, and recovers after a reconnect
- I3196BLOCKED A deployment's external URL, trusted hosts and forwarded headers are one typed fact read by every surface
- I3182BLOCKED One read says which work is progressing, waiting, stalled, failed or orphaned, and on what evidence
Kritéria přijetí
- Switching target changes every reading and says so
- No address is typed in code; the target resolves by node identity
- A linked runtime is read over HTTP from the endpoint on its signed RuntimeCard, through its declared ingress where one exists, and every panel names the runtime, the transport and that the read is unsigned
- apps/majordomus-cli/tests/ui_linked_runtime.rs links two runtimes through apps/majordomus-cli/src/mesh/testing.rs and reads B's state from A's /ui
- The page shows what is blocked and why from I3182's classification, with its source and age
- The published Pages snapshot renders the target choice disabled with a 'live only' state
- The /cockpit mesh view and the site documentation show the same target choice and its live-only state in the snapshot
Validace
- majordomus plan validate
- cargo test --test ui_surface
Požadované důkazy
- ui_linked_runtime_tests
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3191.yaml. Read it back with majordomus plan show I3191.