Skip to content

I3232 — A kiosk left running for days shifts its marks against burn-in and recovers from a lost drawing context

Give /ui/kiosk a slow positional drift of static marks and labels, a brightness ceiling, and recovery when the canvas context is lost, each bound declared in .ai/repo/benchmarks/observatory/manifest.json and read by the kiosk, and each covered by a drill in the Observatory's gates.

READY wave 0 · p3 · implementation profile · parallel safe

Part of every-surface-follows-what-changed — Every surface follows what changed in the repository by push, and a surface that does not says so.

Ready. Every dependency is done, so majordomus plan start I3232 will be accepted.

Objective

Give /ui/kiosk a slow positional drift of static marks and labels, a brightness ceiling, and recovery when the canvas context is lost, each bound declared in .ai/repo/benchmarks/observatory/manifest.json and read by the kiosk, and each covered by a drill in the Observatory's gates.

Why

Proposed on 2026-10-13 for a hall LCD; I2680 closed the recovery drills for disconnects, not for burn-in or a lost context. Hardware claims need a named display (2026-10-14 caution). Sources: chatgpt-majordomus:c257#3.

Current state

Verified on master 707a04c7ce8: share/ui/observatory.js skips readings while hidden; no burn-in drift and no context-loss handler in share/ui; .ai/repo/benchmarks/observatory/manifest.json declares the Observatory's routes and gates but no drift interval, brightness ceiling or redraw bound.

Desired state

Drift and recovery exist, their bounds are declared once in the manifest, and the drills measure them on headless Chromium with the display named as not validated.

Scope

  • share/ui/observatory-kiosk.js
  • share/ui/observatory.js
  • .ai/repo/benchmarks/observatory/manifest.json

Out of scope

  • Claims about a specific panel

Dependencies

None. This issue is a root of the graph.

Acceptance criteria

  • The drift interval, the brightness ceiling, the context-loss redraw bound and the soak length are declared in .ai/repo/benchmarks/observatory/manifest.json; their values are unresolved until the owner or a measurement on a named display sets them, and the kiosk hard-codes none of them
  • A headless soak of the declared length shows no static mark held at one position longer than the declared interval
  • A forced context loss redraws within the declared bound

Validation

  • bash test/run.sh 3014_the_kiosk_draws_what_the_repository_proves
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test observatory

Evidence required

  • observatory_gate_burn_in_drift
  • observatory_gate_context_loss

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/I3232.yaml. Read it back with majordomus plan show I3232.

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