**Phase 09 — final verification pass (all 3 tasks already in `complete/`; phase work was in the working tree, verified, nothing needed fixing)**
**Gates** — `uv run ruff check . && uv run ruff format --check .` → clean; `uv run pyright` → 0 errors; `uv run pytest` → **360 passed, 5 skipped** (only the realdisplay rung), coverage 96% total / 95% app.py; `MIRROR_REALDISPLAY=1 uv run pytest -m realdisplay` → 4 passed, 1 skipped (documented host limitation: no audio source on the real X11 path); `uv run pytest tests/e2e/test_remote_control.py` → 8/8 passed; `node --check` on every `static/*.js` → all pass.
**Completion criteria** — all met: (1) "Show on wall" stages on the display, asserted on display DOM + `/api/kiosk` ✓; (2) Back/Fullscreen + untouched second controller converge (TestConvergence) ✓; (3) `/api/streams` reports `viewers: 0` / `watching: 0` with only `/remote` open (TestACostsNothing) ✓; (4) followers count displays only — 0/1/1 with a second controller (TestFollowers) ✓; (5) controller works with no display: `followers: 0`, state stored (protocol test + e2e) ✓; (6) e2e + full `-m e2e` + realdisplay all green ✓; (7) README + SECURITY.md updated, Silverblue default now `/kiosk` (installer, conf, gnome script, checker) ✓; (8) suite 100% green, coverage >90% on new code ✓; (9) PLAN.md untouched; AGENTS.md changed only for a stale statement ✓.
**Documentation** — README.md reviewed in full against code (page table, quickstart, env-var table vs `config.py`/`debug.py`, presets, keys, deployment, kiosk section): no inconsistencies found. AGENTS.md: fixed the one stale statement introduced by this phase ("Four pages" → "Five pages"); no other staleness, nothing added.
**Decisions** — no repo changes were required; the one realdisplay skip is a pre-documented environment fact, not a failure.
**Next pending phase** — none; `todo/` held only phase 09.
28 lines
1.2 KiB
Plaintext
28 lines
1.2 KiB
Plaintext
# /var/home/kiosk/.config/mirror/kiosk.conf
|
|
#
|
|
# The single source of truth for what this kiosk displays.
|
|
# Sourced with `.` from ~/.local/bin/gnome-kiosk-script, so: plain sh syntax,
|
|
# no bashisms, no spaces around `=`, and no side effects in this file.
|
|
#
|
|
# After editing: `sudo systemctl restart gdm` (or log the kiosk user out) to
|
|
# re-read it. The browser is restarted by the kiosk script's own loop.
|
|
|
|
# The controllable wall. `/kiosk` is the display endpoint: it obeys the shared
|
|
# layout state, so a device with a keyboard (the /remote page, or any
|
|
# `arrange` frame on /ws) decides what is on stage and whether it is
|
|
# fullscreen — a box that has no keyboard can still be arranged. `/watch` is
|
|
# the operator's page: a wall a person stands at.
|
|
MIRROR_KIOSK_URL="https://mirror.reeseapps.com/kiosk"
|
|
|
|
# Optional overrides (uncomment to change):
|
|
|
|
# Dedicated profile, kept out of ~/.mozilla so a wipe is one rm -rf.
|
|
#MIRROR_KIOSK_PROFILE="$HOME/.mirror-kiosk"
|
|
|
|
# Where firefox's stderr goes; this is the first place to look when the kiosk
|
|
# shows the wrong thing. Kept under 1 MiB by the script itself.
|
|
#MIRROR_KIOSK_LOG="$HOME/.local/state/mirror-kiosk.log"
|
|
|
|
# Seconds between "is the browser still up?" polls.
|
|
#MIRROR_KIOSK_POLL=5
|