Epic: #113 · Milestone: MC9 — Ship
Why
MASTER_PLAN §12 Tier 3 asks for exactly this ("one Raspberry Pi 5 on a network power relay"). The current pi-hardware-test.yml is theatre (#56). The Mac (or a small always-on host) next to the rig becomes a self-hosted runner.
Tasks
- Runner: GitHub self-hosted runner on the rig host with labels
pi5-rig; secrets for the smart plug; concurrency group so only one job touches the Pi. - Nightly job: build → TFTP deploy → power-cycle →
boot-pi5-serial→fb-pi5-first-pixel→hdmi-audio-tone→boot-to-home-screen→idle-budget→ artefacts (serial log, frames, WAV, JSON). - Weekly job:
tv-ui-60fps,input-latency,playback-1080p-h264,playback-4k-hevc,soak-4h,power-*,ota-roundtrip, install test from a fresh image. - Flake policy: hardware retries once with a fresh power cycle; persistent failures open an issue automatically with the artefacts.
scripts/generate_status.pyingests the JSON → "Hardware (Pi 5)" section inIMPLEMENTATION_STATUS.mdwith the last run date; README badge.
Acceptance
Two consecutive weeks of nightly + weekly runs reporting into the status page; a deliberately broken commit turns the badge red.