Muted, nothing fixes itself at all: no Spotify exception (while_muted is gone) and no any-hour
READY fix; holds still fix and the Sunday stream-audio failover still switches. The key reads
ALARMS OFF / AUTO-FIX OFF / TIL 12AM, and its note says both. The settings page's switch says the same.
The mute's end is worked out at the press and kept: a watchdog that was not running at 23:59 no
longer leaves the alarms muted until the next schedule change.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The LTC write only puts a note in Planning Center; nothing in the room notices, so the mute (pressed
Sunday 12:24 at NA and never lifted) must not hold it back. The window's fixes still stop when muted.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Auto-fix now looks at the READY page's keys too, for the READY fixes ticked under Settings > Auto-fix,
and acts on a checklist gap while it is still amber. A fix marked anytime (only a READY fix may be)
runs outside the auto-fix hours as well, never while ALARMS is muted; the window's own fixes keep
their hours and start fresh each window. ready_ltc is ticked and marked anytime at North Attleboro:
once the weekend's set is on Tracks, every song's timecode goes into all four campuses' plans.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The TIMECODE key now reads each campus's plan for the same weekend, pairs its songs with North
Attleboro's by title in North Attleboro's order (a song out of order, or one NA does not play, is
left alone and said so), checks their LTC notes, and the hold writes the timecode into every
campus's plan. ready.ltc_campuses lists the campuses (name, two letters, PCO service type).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- For every item in the plan's ProPresenter playlist: the macros its slides fire (read on the
ProP Mac from Configuration/Macros and the .pro files), the RossTalk "CC page/row/col" each
macro sends to Companion, the Companion buttons that one presses in turn, down to Resolume's
/composition/columns/N/connect. Each such column must hold a clip on some layer (one whose
ignore-column-trigger is not On), and Resolume must be on the Service deck.
- COL N EMPTY / COL N MISSING name the column and the items that use it. The hold only puts
Resolume back on its deck; it never plays a clip. "Something is playing" is no longer checked.
- ready.prop_host replaces ready.led_clip.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ON/OFF on every key, check, fix, Restart and READY key, computer, MIDI link, HyperDeck,
Dante device, watched Companion connection, switcher and Spotify check, outlet fix, and one
main switch each for auto-fix, the auto switch and the READY page. Switched off = kept in
the settings, grey OFF on the deck, never checked or run (effective_config in the watchdog).
- Settings › Auto switch: a plain summary, what counts as down (each trigger editable in place:
address, program and computer, Dante device, the button it presses, timings), the hours
folded away, the buttons; + Button, + What counts as down, Remove.
- Pick a Companion button by clicking it on its page, drawn like Companion (read-only API:
/api/companion/pages and /api/companion/page).
- STREAM STB / STREAM FOH Restart keys removed (the Studio B page has its own); the alert names
the switch-back button instead.
- Dante screen: shows the DANTE key's device list again (it picked STB AUDIO's one device).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new fix kind "companion_press" presses any Companion button over its HTTP API (page, row, col).
A fix marked "failover" runs by itself within seconds of its check failing: inside the "failover"
windows (Sunday 06:30-13:30), even while ALARMS is muted, once per fault, never back the other way.
The hidden STB AUDIO key (inside AUDIO) watches Studio B's ping every second, Pro Tools over SSH
every 2 s and its Dante device; each check's fix is the FOH Backup press. The keys say ON FOH BACKUP
until STREAM STB on the Restart page switches back. Settings page: the press builder, the failover
tick and undo, the Failover calendar, help entry "A fallback button".
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- readiness.py looks every 2 minutes (never while a HyperDeck records) at this weekend's PCO plan
and what is in place for it: the Ableton set (songs, mix, routing, lighting cues), ProPresenter
(every PCO item, MC announcements, baptism names, timelines, backgrounds), the LTC note of every
song against the timecode the tracks play, the Band Lineup TV, Resolume's LED cross, and the
tracks and ProP bundles for the locations.
- READY key on the Status page (row 2, col 7; SPOTIFY now shows inside SHOW) opens page 24.
Amber until done, blinking red from Saturday noon; not part of ALL. Tap keys for BOH mix,
mics and stage reset every Monday.
- Holds fix what can be fixed: re-sync the lineup, put the cross back up, write LTC into PCO,
copy tracks to locations, look again. Hold READY fixes everything.
- Settings page: a READY page tab (live keys, drag to move, why each key is amber), and Apply
re-imports page 24.
- Auto-fix: "while_muted" fixes keep running with ALARMS muted (Spotify playlist).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
settings/builders.py renders a fix's command from a builder (template) and its fields; validate
refuses a config whose stored command no longer equals what its fields build; the Fixes screen and
the remote checks in the key editor rebuild through /api/build and /api/build-check. config.json
adopts templates for all 27 fixes and 5 remote checks (ProPresenter's restart loop and Ableton's
quoting normalised, same behaviour); tests/test_builders.py (174 tests pass). Deployed to NA Ingest.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- settings/apply.py: the Apply pipeline (check, keep history, write, restart the watchdog, re-import
pages by the marker-only rule, recolour page keys), rollback when the watchdog does not come back,
the recording guard with the Emergency (LIVE) override, history entries and Go back / Undo.
- settings/server.py: the write routes behind the editing code (draft PUT/DELETE with 409 on a
conflict, validate, apply, restore, undo, watchdog restart/stop/start, commands to the watchdog,
the switcher file upload / pick newest / discard, gear notes).
- settings/ui/app.js: every screen grows inputs with Editing on; keys (checks, fixes, hold-always,
members), computers, fixes, site setup (schedules, Dante devices, Spotify, ATEM), Review & Apply
with live progress, History with Go back and Undo, Run this fix now.
- schema.unmask, push_page.push, nav_keys.colour; tests for all of it (163 pass).
- Verified live on NA Ingest: a page-only Apply, a restart Apply, Undo, history.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- schema.py: every setting with type, default, help, owner screen and the rules a config must
pass; tests/test_schema.py keeps it in step with the code (every key the code reads is declared,
every default matches, check types and fix kinds agree, the glossary covers every word a key can
show, today's config still builds today's pages apart from the key notes)
- status_panel.py: VERSION + started.json; SIGTERM lets a running fix finish and starts nothing new
(RESTARTING SOON); fixes-running.json and live-now.json for the settings page; state.json keeps
the ALARMS override, acknowledgements, auto-fix tries and fix times across restarts, keyed by
what a check is about rather than its position; 'test' and 'resurvey' commands; queued commands
dropped at start; overnight windows; a HyperDeck switched off is always switched back on;
the spotify fix kind (playlist set once, in config 'spotify'); Windows remote checks batched for
cmd.exe with conditional echoes; every fix's kind and host validated; never_auto; wording and
numbers from config (site block, timing, page_hold_ms, auto-fix keep_months); hyperdeck_probe
removed; --check and --exit-timeout
- make_page.py: numbers from config, markers on every key, nav templates per Companion version,
--out; push_page.py: a page is overwritten only when every key carries a marker (foreign keys
named by position), secret-free fetch, host from the site; nav_keys.py: host from the site;
netgear.py: switches and the shared-port limit from config
- install.sh: validates with the new code first, keeps prev/ for --rollback, --keep-config,
derived ExitTimeOut, wider deploy list, waits for the start stamp
- config.json: site, timing, spotify sections; Windows hosts marked; deployed to NA Ingest and
both pages re-imported once (--force) so every key carries its marker
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>