Skip to content

The kiosk draws what the repository proves, from the sources that already answer it, and draws it with p5 only where the build has it

The kiosk draws what the repository proves, from the sources that already answer it, and draws it with p5 only where the build has it

majordomus://adr/adr-0160proposed uiobservatoryevidencep5

it references

  • put_in_force apps/majordomus-cli/src/ui/observatory.rs (file)
  • put_in_force share/ui/observatory-kiosk.js (file)
  • put_in_force adr-0012
  • put_in_force adr-0135
  • put_in_force adr-0142
  • put_in_force adr-0158
  • put_in_force project.ui-derived-state@1
  • put_in_force test/cases/3014_the_kiosk_draws_what_the_repository_proves.sh (test)

referenced by

Nothing in the layer names it. Backlinks are derived, so an empty list is an answer rather than an omission.

160. The kiosk draws what the repository proves, from the sources that already answer it, and draws it with p5 only where the build has it

Context

The Observatory (ADR 0158) has eight scenes and, of those, four read the mesh: on the public site, and on any machine that runs no mesh, they are unavailable and say why. A display that is left running on a wall then shows a handful of scenes and a long list of reasons. The owner asked for more screens at /ui/kiosk/, all of them derived and inferred, drawn with p5.js, dense and beautiful, in one look.

The repository already answers, without a mesh, the questions a wall of this kind is for: which of its rules have been proved and which only named a proof, which of the claims its documents make have a test that ran, what its public surface measures, what may run at the same time in the plan, and whether the published installation is whole. Those are capabilities every surface already calls (rules.report, evidence.report, quality.report, plan.waves, distribution.status, capabilities.list, plan.roadmap). They are also the facts a reader most needs to see and most easily mistakes: a rule drawn as passing because nothing said otherwise is the failure ADR 0158 exists to prevent, in a prettier medium.

p5 is already a decision of this repository: a pinned, vendored library that a page loads only when it draws one (ADR 0012, ADR 0135). The Observatory has not used it; it draws on a plain canvas, and the Cockpit and UI assets have one way each of carrying a library that is not committed.

Decision

  1. Seven more scenes, each a function of one capability's answer. They are added to the one inventory of ADR 0158, point 3, and to nothing else: no capability, no transport, no store.

    scenereadsa mark is
    proof, Proof Latticerules.reportone rule, coloured by the state word the proof report decided
    claims, Claim Ledgerevidence.reportone kind of claim, a bar split by what the evidence says of its claims
    surface, Surface Atlasquality.reporta count the quality report measured: operations per surface, documented, exampled and tested
    waves, Wave Frontplan.wavesone wave of the plan, a column split by its issues' recorded status
    matrix, Release Matrixdistribution.statusone check of the published installation, in the word it decided
    registry, Registry Treemapcapabilities.listone module of the registry, as large as the capabilities it declares
    ladder, Milestone Ladderplan.roadmapone milestone, a bar split by its issues' recorded status
  2. Counted, never estimated. A number on these scenes is a count a source reported, or a sum of such counts that the model states. A scene whose source holds nothing to draw is unavailable with the source's reason (ADR 0158, point 5), and an unknown or unproven word is drawn as that word, in the muted tone, not as passing. Where a source reports more items than a display can hold, the scene groups rather than truncates, and says how many it drew.

  3. p5 where the build has it, a plain statement where it does not. The scenes are drawn with p5 in instance mode onto a surface of their own, which the director composes onto its stage: one clock, one rotation, one fade and one set of status words serve every scene, and the first eight scenes are not rewritten. p5 is the pinned library scripts/cockpit-assets copies into share/ui/vendor/, not committed, loaded lazily from the address the page names. A checkout that was built without it draws these scenes as "p5 is not built here" on the stage and keeps the same facts in the table beside it. Nothing is drawn in its place.

  4. One look. The scenes take their colours from the stylesheet's tokens through the director's own helpers and the state words' tones from one table, so that the same word is the same colour on every scene and in the Cockpit.

  5. Motion is decoration and is said to be. A cell that breathes does so as a function of its name, not of its state; an arc ends where its count says and only the glint on it moves. Reduced motion draws every scene still.

Consequences

  • The public site shows fifteen scenes of which eleven have something true to draw on a CI runner, instead of five, and the seven new ones are the ones a reader most wants to doubt.
  • Each new scene reads a capability that can also be asked from the command line, the API and MCP, so every mark can be checked there.
  • p5 is about a megabyte and is loaded only by this screen, only when a p5 scene is shown. A display that never rotates to one never loads it.
  • A new capability that reports a count is a new scene by declaration and a model. A scene that wants a number no capability reports waits for the capability, not for a figure.
  • The rules.report and evidence.report sources take about two seconds to compute and are asked on every page build; they are read as the latest reading (ADR 0142), so the screen waits for neither.

Alternatives rejected

Redrawing the first eight scenes with p5. It would give the display one renderer and cost a rewrite of scenes that are held by case 3011 and by a person's attention for a different issue, in a file another worker is changing.

A second page for the new scenes. A kiosk, a screensaver and a screen are one display with different chrome (ADR 0158); two pages would disagree within a week.

Committing p5. It is a megabyte nothing on the critical path needs, and the repository's rule for such a library is that it is built, not committed.

Verification

Case 3014 (the_kiosk_draws_what_the_repository_proves) proves on the built executable that the seven scenes are in the inventory with their sources, that each one's model is the count its source answered (the oracle counts the same capability's answer again), that a scene with a failed source says why, that the page names the scenes script and the drawing library, and that the kiosk preset still differs from the screen by one attribute. The Rust unit tests hold the models on constructed answers, including the empty ones. What only a browser can show, that the scenes are drawn at all, is the evidence of the screenshots I2698 records.

Where this comes from

canonical file
.ai/repo/adrs/0160-the-kiosk-draws-what-the-repository-proves.md
identity
adr-0160
also served as
MCP resource majordomus://adr/adr-0160 · majordomus entity show adr/adr-0160 · GET /api/v1/entity?uri=majordomus://adr/adr-0160
in the Cockpit
/cockpit/objects/adr/adr-0160

This page is generated from the file above by scripts/generate-site-data; editing the page changes nothing, editing the file changes every surface. The relations above are edges of docs/generated/graph.json, which the executable writes from the same index.

Searches the titles and descriptions of every page this site publishes.