IRIDESC E UX · COMMAND
v30 · Program Primary Revision
Production Readiness Tests
A hands-on acceptance suite for the actual deployed stack, not just code/static checks.
Test philosophy
A test passes only when you observe the expected result on the actual deployed environment. A local demo or static audit does not prove Cloudflare bindings, Access, D1, R2, network, or OBS.
Core Command acceptance tests
| # | Test | Pass |
|---|---|---|
| 1 | Fresh Incognito opens Command URL | Access appears before app. |
| 2 | Unlisted email attempts login | Denied. |
| 3 | Approved email authenticates | Redirects to Command. |
| 4 | /api/command/me | Real email + correct role. |
| 5 | Setup Doctor | Functions, D1, Access/JWT, R2 healthy. |
| 6 | Create disposable D1 record | Persists after refresh. |
| 7 | Upload disposable R2 asset | Persists and reads back. |
| 8 | Delete test asset | Metadata/object removed. |
| 9 | Viewer tries privileged action | Denied server-side. |
| 10 | Technical Admin route | Allowed only to correct role. |
Public site tests
☐ Iridesceux all primary routes
☐ Legal/privacy routes
☐ Forms actual backend delivery
☐ Search
☐ 404
☐ Mobile navigation
☐ HTTPS/no mixed content
☐ HVN main/player pages
☐ HVN legal redirects
☐ All six markets + National
☐ Site Studio harmless override then revert
☐ Legal/privacy routes
☐ Forms actual backend delivery
☐ Search
☐ 404
☐ Mobile navigation
☐ HTTPS/no mixed content
☐ HVN main/player pages
☐ HVN legal redirects
☐ All six markets + National
☐ Site Studio harmless override then revert
Broadcast tests
☐ Agent online status
☐ Test scene switch
☐ Mute/unmute test source
☐ Start/stop recording if used
☐ Private test stream start/stop
☐ Primary→backup→primary
☐ Standby loop TAKE/CLEAR
☐ Butterfly trigger→hold→off→reset→retrigger
☐ Station ID PREVIEW/CUE/TAKE/CLEAR
☐ Station ID Bug Take/Off
☐ Paid screen-bug sequence with test creative
☐ Full commercial break preview/cue/take/return
☐ KILL ALL GRAPHICS
☐ Emergency Stop Broadcast confirmation/path
☐ Test scene switch
☐ Mute/unmute test source
☐ Start/stop recording if used
☐ Private test stream start/stop
☐ Primary→backup→primary
☐ Standby loop TAKE/CLEAR
☐ Butterfly trigger→hold→off→reset→retrigger
☐ Station ID PREVIEW/CUE/TAKE/CLEAR
☐ Station ID Bug Take/Off
☐ Paid screen-bug sequence with test creative
☐ Full commercial break preview/cue/take/return
☐ KILL ALL GRAPHICS
☐ Emergency Stop Broadcast confirmation/path
Analytics & safety tests
☐ External viewer creates telemetry
☐ Command preview excluded
☐ Market split correct
☐ Retention timeline receives heartbeats
☐ Test ad proof-of-play record
☐ NWS refresh creates only relevant market candidates
☐ AI drafting disabled or clearly marked if enabled
☐ No EAS tones
☐ Auto-TAKE disabled unless formally approved/rehearsed
☐ Command preview excluded
☐ Market split correct
☐ Retention timeline receives heartbeats
☐ Test ad proof-of-play record
☐ NWS refresh creates only relevant market candidates
☐ AI drafting disabled or clearly marked if enabled
☐ No EAS tones
☐ Auto-TAKE disabled unless formally approved/rehearsed
Release signoff record
Record date/time, tester names, production commit, Pages deployment IDs/URLs, D1 backup filename, known exceptions, and explicit go/no-go decision. “Looks good” is not a release record.
v24 rundown and traffic acceptance tests
- Draft isolation: build a day and prove it is absent from public HVN until Publish.
- Publish isolation: publish the EPG and prove the program bus does not change.
- Air approval isolation: approve the day and prove it still does not air while automation is disarmed.
- National playout: arm National and verify exact active master, timing, hard-out, audio, and both confidence monitors.
- Local inheritance: local market inherits National program with the correct local EPG.
- Local override: local program block replaces the overlapping National block only in that market.
- Break substitution: National pod airs everywhere except a market with an overlapping local pod.
- File hold: schedule a 30-second break inside a prerecorded master; after return, show playhead must be the pre-break playhead plus only post-break elapsed time—not +30 seconds.
- Live break: during Live/OBS, commercial overlay must not pause the incoming live feed.
- Mid-break join: open a fresh viewer during a scheduled pod; it must join the correct commercial position and resume the program at the correct held playhead.
- Conflict rejection: overlapping primary blocks and overlapping same-market break blocks must be rejected.