I3433 — A UI snapshot page renders only the readings its subject declares publishable, and a page that reads any other reading, or a capability that refuses remote callers, is withheld with a link to the live page
Give the UI snapshot subject a declared list of the capability readings it may publish, checked where pages take their readings (ui/source.rs, ui/view.rs through capability/readings.rs). A page that reads a capability outside the list, or one that declares I3434's checkout-private field, is withheld exactly as /cockpit/continuity is today.
BLOCKED wave 1 · p1 · implementation profile · parallel safe
Blocked. This issue cannot start until I3432, I3434, milestone:a-prompt-reaches-the-work-it-serves are done. The status is derived from that, not declared.
Objective
Give the UI snapshot subject a declared list of the capability readings it may publish, checked where pages take their readings (ui/source.rs, ui/view.rs through capability/readings.rs). A page that reads a capability outside the list, or one that declares I3434's checkout-private field, is withheld exactly as /cockpit/continuity is today.
Why
The owner's 2026-10-19 Cognitive Fabric pack asks for privacy-filtered minimal schemas, published from an intentional whitelist (campaigns/prismatic-way-cognitive-fabric-prompt-pack/prompts/05_SURFACES.md, and the verification/ACCEPTANCE.md row on private .ai/local data).
Current state
apps/majordomus-cli/src/web/report/snapshot.rs:95 gives the UI subject an empty withheld list. The wave-05 audit found /ui pages that read mesh.peers, mesh.events and mesh.state (ui/mesh.rs:28-33, ui/observatory.rs:85-87, ui/dashboard.rs:34). Whether a CI snapshot carries any mesh value today was not measured.
Desired state
The UI subject names what it may publish. A new capability whose reading is not named is withheld from snapshots by default, rather than published by default.
Scope
- apps/majordomus-cli/src/web/report/snapshot.rs
- apps/majordomus-cli/src/capability/readings.rs
- apps/majordomus-cli/src/ui/source.rs
- apps/majordomus-cli/src/ui/view.rs
Out of scope
- The Cockpit subject (I3435)
- Changing the privacy gates (I3432)
- Changing what the live /ui serves
Dependencies
- I3432BLOCKED The UI and Cockpit snapshots pass both privacy gates after they are placed and before anything is published, on CI and from a terminal
- I3434BLOCKED A capability declared as reading checkout-private records answers only this machine: a caller beyond loopback is refused on HTTP and MCP, and the refusal logs no input value
What waits on this
- I3409BLOCKED An episode answers, for each prompt it captured, the intent it matched, the task that recorded it, that task's outcome and the evidence of the criterion it serves, with the same identities on every surface and after any replay
- I3435BLOCKED A Cockpit snapshot withholds every page that reads a capability refusing remote callers, not only the continuity page it names
Acceptance criteria
- A fixture page that reads a capability outside the list is withheld, and its navigation link leads to the live page
- A fixture page that reads a capability declaring the checkout-private field is withheld
- The current snapshot pages that read only listed capabilities render byte-identically to before
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib web::report::snapshot
- MJ_TEST_JOBS=4 bash test/run.sh 181_local_is_never_published
Evidence required
- a_ui_snapshot_publishes_only_declared_readings
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/I3433.yaml. Read it back with majordomus plan show I3433.