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
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.