Commit Graph
57 Commits
Author SHA1 Message Date
christianandClaude Opus 5.5 3976667bba Other campuses set themselves up: one install line, one join line per computer, keys made from what is found
settings/discover.py reads Companion's connections (and their addresses and channel counts), the
Dante devices, the network MIDI sessions here and on joined Macs, this Mac's wired network, and
what runs on each joined computer. settings/autoconf.py turns that into keys, checks, start and
restart fixes and a page layout the way North Attleboro's were made (group keys only when not
everything fits; receivers fold first), all through the existing builders and rules.
settings/campus.py prepares Companion through its internal API (the panel's custom variables and
the blink trigger), picks free pages, applies the first config, serves the program kit, the
campus install line and the Mac/PC join lines, and looks every ten minutes to add new gear
(discover.auto; never during a service or a recording, never removes, never re-adds what someone
took off). Settings > Auto-setup shows what was found and the lines to paste. install.sh keeps the
kit and makes the panel's login key.

Checked on North Attleboro read-only: discovery finds all 43 connections, 19 Dante devices, four
Macs' MIDI sessions and seven computers, and a from-scratch build reproduces NA's layout. The
Companion calls were tried with a throwaway variable and a disabled trigger, then removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 14:31:32 -04:00
christianandClaude Opus 5.5 b41b8a49d2 ALARMS key stops every auto-fix too, and says so
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>
2026-10-19 14:46:20 -04:00
christianandClaude Fable 5.1 5d918d60af An any-hour READY fix runs while ALARMS is muted too
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>
2026-10-19 14:13:17 -04:00
christianandClaude Fable 5.1 b7af31ea6f The LTC write happens by itself: READY fixes ticked for auto-fix act on the checklist, any hour for ready_ltc
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>
2026-10-19 14:08:33 -04:00
christianandClaude Fable 5.1 3ccaea0076 LTC timecode goes to the other campuses' plans too: Apollo Beach, Southcoast, Woonsocket
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>
2026-10-19 10:26:13 -04:00
christianandClaude Opus 5.5 c9ffbc6828 READY page: LED CROSS checks the Resolume columns Sunday's slides call up
- 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>
2026-10-15 14:43:49 -04:00
christianandClaude Opus 5.5 5adab6c518 Settings page: ON/OFF switches everywhere, the Auto switch screen, a Companion button picker
- 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>
2026-10-15 14:30:41 -04:00
christianandClaude Fable 5.1 14fce2cf9a Audio failover: press FOH Backup by itself when Studio B dies; Companion button presses as fixes
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>
2026-10-15 12:40:24 -04:00
christianandClaude Opus 5.5 309bc5fab7 Watch the DiGiCo FOH console inside AUDIO; "+ Key" asks for a group when the deck is full
- DIGICO (in the AUDIO group): Companion's DiGiCo_FOH connection, the digico-relay helper on
  NA Ingest (hold AUDIO restarts it), and a ping to the console at 10.1.60.100 (the OSC
  connection reads good even with the console off).
- Settings page: "+ Key" on an unwatched Companion connection asks which group key to put it
  in when the Status page has no free spot (it used to make a key nobody could see); the
  connection field of a check suggests Companion's connection names.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:33:40 -04:00
christianandClaude Opus 5.5 bf128e1bad READY page: drop the MICS and STAGE keys
BOH MIX is the one tap key left.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:46:00 -04:00
christianandClaude Opus 5.5 d5ede0c91e READY page: the weekly worship checklist, checked against Planning Center
- 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>
2026-10-14 20:28:43 -04:00
christianandClaude Fable 5.1 a33e344cae Steps 4-6: the jobs, the set-up tab with generated scripts, Install the staged folder, site bundles and the campus template
- Overview jobs: Change the playlist, Add or remove a HyperDeck, Add a MIDI link, Add a computer,
  Make a PC program startable; 'Add a key for it' on unwatched Companion connections.
- Computers > Setup: steps with a [how] each and the set-up scripts generated per computer by
  settings/scripts.py from the templates in remote-access/ (no site-shaped value left in them);
  Remove this computer drops the fixes and checks that used it.
- Site setup > Site: the running and staged code, Install the staged folder (a one-shot launchd job
  running install.sh --keep-config, refused while live), Export site bundle (zip), New campus from a
  bundle (this campus's site block stays; every copied computer is flagged until touched).
- sites/: na -> the repo config, _template = the empty campus; install.sh --site <id>.
- Review reads appended checks as 'added'; tests for all of it.
- Deployed page-only to NA Ingest. (config.json, status_panel.py and readiness.py are left to the
  READY-page work in progress in the same tree.)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 14:53:08 -04:00
christianandClaude Fable 5.1 187dd464c0 Fix and check builders: every fix is built from fields; today's 27 fixes carry their templates
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>
2026-10-14 14:17:31 -04:00
christianandClaude Fable 5.1 02d0c77cd9 Step 2: the settings page can change things - shared draft, Review & Apply, rollback, history, undo
- 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>
2026-10-14 14:06:42 -04:00
christianandClaude Fable 5.1 01c18ba5ef Step 1: the settings page, read-only, live on NA Ingest at port 8020
Overview (problems in the room with the hold action, the live deck, one line per computer),
Keys (both pages, what each key will say and what holding does), Computers (map with the keys
that turn red, cards with a light per thing that runs there from the watchdog's snapshot and a
read-only probe, Gear, Setup), Logs, History (the installer's copies for now), Help (four cards,
the generated key guide, cheat sheet and Where things are, glossary, Companion facts), Site setup
and Fixes read-only. The editing code is checked (with a lockout) but nothing can change yet.

Also: faults are attributed to the computers their check is about; the installer refuses while a
HyperDeck is recording (--now overrides); the Lighting PC's MIDI session is listed; the probes read
sudo's answer correctly and expand $HOME outside the quotes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 12:18:36 -04:00
christianandClaude Fable 5.1 b05ff408d5 ATEM: restore file saved 2026-10-13 15:54 (camera 2 tint 15); shutdown budget capped at launchd's 60 s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 16:03:24 -04:00
christianandClaude Fable 5.1 5d66805687 Step 0 of the settings page: registry, safe restart, remembered state, test verb, page markers
- 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>
2026-10-13 16:00:41 -04:00
christianandClaude Opus 5.5 38b6d1b014 Spotify: read the whole playlist so one wrong song shows WRONG PLAYLIST; refresh hourly and on unknown songs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 10:23:15 -04:00
christianandClaude Opus 5.5 9a108b2508 Spotify: alarms like every other key, any day (Sunday window is only for auto-fix)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 10:20:29 -04:00
christianandClaude Opus 5.5 3bd140108e Spotify: SPOTIFY key watches the Christian EDM 2026 playlist during services; hold, restart key and auto-fix play it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 10:05:09 -04:00
christianandClaude Opus 5.5 7e15deec9e README: ATEM checks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:55:16 -04:00
christianandClaude Opus 5.5 0a4352bb92 Watch Pro Tools Solo Mode (AFL + Latch) on the Studio B Mac Studio
A LaunchAgent helper on that Mac (Accessibility) reads Options > Solo Mode
every second into a status file and ticks AFL/Latch on request. APPS
alarms PT SOLO NOT AFL (hold fixes it; in the Sunday auto-fix list) and
PT SOLO CHECK OFF when the helper is not running or not allowed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 09:26:26 -04:00
christianandClaude Opus 5.5 a0cefe8428 Auto-fix day logs are deleted a calendar month after their date
Only files named exactly '<YYYY-MM-DD> <Weekday> Auto-Fix.log' in that
folder; checked when a new day's file starts and when the watchdog starts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 07:13:19 -04:00
christianandClaude Opus 5.5 f7a98f4dec Daily auto-fix log on NA Ingest's Desktop
~/Desktop/Auto-Fix Logs/<YYYY-MM-DD Weekday> Auto-Fix.log, written line by
line as it happens: auto-fix on/off, each problem and what was done (try n
of 2), the result, when the fault cleared, give-ups, and when it held back
(network problem, several Dante devices gone). Tests write to a temp
folder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 07:10:06 -04:00
christianandClaude Opus 5.5 560e0401a3 Sunday auto-fix (gentle fixes only), reviewed; PROPRESENTER key label
Sundays 06:30-13:30, with ALARMS on, a fault that has lasted 20 s is fixed
by itself if the fix is gentle (reconnects, HyperDeck off/on, Tascam, MIDI,
rtpMIDI, starting a closed Vista/Resolume/OBS/Ableton/Translate, DVS on one
Mac). At most 2 tries 90 s apart; key shows AUTO-FIXING. Anything that
closes a running program stays a hold (load_config refuses it).

A review before going live (2 lenses, each finding verified) confirmed and
this fixes: a Dante-wide "gone" (Ingest's view) would restart DVS on every
Mac every minute - several devices gone at once now means hands off; the
try limit reset whenever a fix made its fault blink - tries are kept until
the fault has been gone 10 min; DVS on Ingest kills ProdCom - removed from
the auto list; restarting dead connections looked like a network burst -
only a connection good in the last 30 s counts; a restart key could kill
an app auto-fix was starting; concurrent MIDI reconnects overwrote each
other - now one worker. Auto-fix errors are caught so the panel keeps
running. 105 tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 07:05:05 -04:00
christianandClaude Opus 5.5 ae28bb3c6d HyperDeck hold switches its Companion connection off and on
After a deck restarts, Companion's HyperDeck connection does not come back
by itself and a plain restart of the connection does not help; switching
it off and on does. Each HD key's hold now does exactly that (even when it
looks green), waits 15 s and checks: DONE, STILL OFFLINE (deck pings) or
NO NETWORK. Decks are no longer rebooted by the panel; a recording deck is
left alone. Tested live on HD2 (off/on, reconnected in 17 s).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 05:20:07 -04:00
christianandClaude Opus 5.5 0b38e9247b Restart keys flash when their thing is down; Ableton reopens its last set
- A Restart page key flashes red "HOLD TO FIX" while any check that its
  fix (or a fix/connection in its "watch") covers is down, e.g. DVS
  TRACKS when DANTE misses NA-Tracks.
- Ableton's start and restart reopen the set Live last opened (read from
  its Log.txt before quitting; templates skipped) instead of the default
  template. Tested live: ABLETON and TRANSLATE restart keys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:57:04 -04:00
christianandClaude Opus 5.5 6410525681 NET blip flashes, clears itself after 5 minutes, hold NET clears it; Restart page is now page 20
- The remembered network blip is a flashing amber warning (new "notice"
  level, not counted as DOWN): press NET to stop the flashing, hold NET 2 s
  to clear it, otherwise it goes by itself after 5 minutes (was 3, solid).
- The user moved the Restart page to page 20: config, the RESTART PAGE key
  on page 19 and both pages re-pushed. A scan of all pages finds no other
  button pointing at the old page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:38:19 -04:00
christianandClaude Opus 5.5 a0c72183bd Restart page (23), force restarts, Tascam reconnect, ProdCom, Resi encoder
- Page 23 "Restart": hold a key 2 s to restart DVS (4 Macs), ProPresenter,
  Ableton, Church Translate, ProdCom, ProdDash, captions, the bridge or the
  Tascam connection even when the status page says it is fine ("force",
  shared 60 s guard). RESTART PAGE key on page 19, STATUS PAGE back.
- Holds carry Companion's clock; ones queued while the watchdog was down
  are dropped instead of firing together later.
- TASCAM hold always reconnects and checks again after 20 s: HUNG - POWER
  CYCLE IT (pings, control port hung), NO NETWORK, or turns a disabled
  connection on. Tascam pinged at its Companion address.
- INGEST: ProdCom (:24480), ProdDash's page (:24500), the caption screen;
  DVS on Ingest restarts ProdCom afterwards. RESI: the encoder (10.1.10.202).
- Windows starts check the app really started (FIX FAILED otherwise); OBS's
  start task runs elevated (OBS is "Run as administrator"); setup script
  does that for any such app and gives sshd restart-on-failure.
- push_page.py checks what is on the target page, not its name (pages 22
  and 97 are named "PAGE" but hold buttons); --which restart.
- Companion custom variables are written in the request body (no URL limit).
Reviewed by a 3-lens review with per-finding verification; 7 confirmed
issues fixed. Tested live: OBS hold opens OBS; Restart page TASCAM key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:08:29 -04:00
christianandClaude Opus 5.5 033f3c6696 Ignore ProPresenter API's harmless yellow warning
It flickers to "warning" every 15-20 minutes and made APPS blink for
nothing. "ignore_warning" on a conn check keeps offline, error and
disabled as alarms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:46:25 -04:00
christianandClaude Opus 5.5 6d273fa3d8 Ping the Shure receivers at the address Companion has for them
A power-off test today took 18-27 s to show on RF (Companion's Shure
modules' own timeout). Each Axient, ULXD and PSM receiver is now pinged
every 3 s: "AXIENT 1 NO PING" in about 6-9 s. A ping check may name a
Companion "conn"; its address is read from Companion's settings database
(read-only, every 60 s), with "host" as the fallback.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:44:08 -04:00
christianandClaude Opus 5.5 e4b7d0d0ec README: Vista autoloads Prop Takeover from its show folder
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:28:56 -04:00
christianandClaude Opus 5.5 f7346d6f5e Vista gets its own button (row 2, next to APPS)
The Art-Net heartbeat moves from APPS to a VISTA tile ("VISTA / SILENT";
"VISTA SILENT" on SHOW and ALL), hold starts Vista if it is not running.
SHOW now groups MIDI, APPS and VISTA. Tested live before the move: closing
Vista and Resolume alarmed, and each hold brought them back (Vista 5 s,
Arena 9 s after the hold).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:21:19 -04:00
christianandClaude Opus 5.5 288c1e6e1a Start rtpMIDI if it is not running; it also restarts itself if it crashes
- Hold MIDI on "LIGHT PC MIDI GONE" starts the rtpMIDI service, then its tray
  app, only if they are not running (a restart drops every session).
- The Lighting PC's rtpMIDI service now has Windows recovery actions
  (restart after 5 s, 5 s, 30 s); windows-setup.ps1 sets the same.
- coremidi.disconnect_peer (Disconnect in Audio MIDI Setup), used to test the
  alarms: all six links dropped and came back (four by themselves, two by
  the hold).
- Audio MIDI Setup need not be open: quitting it on NA Ingest left the
  session connected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:16:31 -04:00
christianandClaude Opus 5.5 1d05412359 README: put the MIDI description back in the checks table, not the layout table
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:02:24 -04:00
christianandClaude Opus 5.5 15febe8edd Watch all six MIDI links from the checklist, including ProPresenter -> Lighting
Adds Tracks -> Livebox, Tracks -> Studio B and ProPresenter -> Lighting
(read on the ProPresenter Mac over SSH), each with the hold-to-reconnect fix.
coremidi.py now recognises the network MIDI driver on macOS 26.2 too
("AppleMIDIRTPDriver"; 26.5 calls it "AppleMIDINetworkDriver"), which is why
the ProPresenter Mac's session looked empty before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 16:02:02 -04:00
christianandClaude Opus 5.5 80fd89d03b Hold MIDI reconnects a dropped peer from the Mac side
macOS's MIDINetworkSession API only reaches the default session (blank and
disabled on NA Ingest and NA Tracks), so coremidi.connect_peer writes the
named session's "apple.midirtp.session" settings with the peer added, as
Audio MIDI Setup's Connect does. Existing peers are passed back unchanged.
The watchdog remembers each peer's last address (config "address" is the
fallback) and runs it locally for NA Ingest's session or over SSH on the
Tracks Mac for NA Tracks' (FX lights). Checked live: both Macs answer
"already" while the Lighting PC is connected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:54:53 -04:00
christianandClaude Opus 5.5 74fbe73a4b MIDI alarm when the Lighting PC drops out of NA Tracks' session (FX lights)
Tracks sends the FX lighting cues to the Lighting PC through NA Tracks'
network MIDI session. A midi_peer check may now name a "host": the watchdog
reads that Mac's sessions over SSH every 5 s, sending this folder's
coremidi.py over stdin (nothing installed there). Unreachable = no verdict;
the Tracks Mac's own ping check covers that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:48:25 -04:00
christianandClaude Opus 5.5 eef3f37fa9 README: the Lighting PC must stay on a Public network for MIDI
Its Bonjour firewall rules only allow Public; switched to Private it dropped
out of the MIDI directory and could not rejoin NA Ingest's session.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:44:03 -04:00
christianandClaude Opus 5.5 340d28263a Remove the rtpMIDI-restart fix for the Lighting PC MIDI
Tested live: restarting rtpMIDIService brought the Lighting PC's Bonjour
advert back but dropped it from the NA Ingest and NA Tracks sessions, and it
did not rejoin them. macOS only exposes the default network session to
scripts, not NA Ingest's named one, so there is no safe automatic reconnect.
MIDI now has no hold fix; the README says how to reconnect by hand.

ssh fixes run with LogLevel=ERROR so warnings stay out of the log.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:38:16 -04:00
christianandClaude Opus 5.5 d6f54685bc Hold-to-fix for the Lighting PC and the LiveStream (OBS) PC
- OBS: start OBS on the LiveStream PC if it is not running, then reconnect
  Companion. If the PC does not answer, send Wake-on-LAN and show WAKING PC.
- ARENA: start Resolume Arena on the Lighting PC if it is not running, then
  reconnect Companion. VISTA SILENT: start Vista if it is not running.
  A running OBS, Arena or Vista is never closed.
- MIDI (LIGHT PC): restart the rtpMIDI service; it reconnects to its saved
  peers (NA Ingest, NA ProP, NA Tracks).
- Fixes may set "reconnect" (restart the check's Companion connection after
  the command succeeds); hosts may set "mac"/"wake_broadcast" for Wake-on-LAN.
- windows-setup.ps1 finds OBS on any drive and Vista, and leaves Wake-on-LAN
  alone when it is already on (changing it can reset the adapter).
- Tests stub the fix executors so a hold in a test never reaches a machine.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 15:29:54 -04:00
christianandClaude Opus 5.5 b670946a69 Hold APPS restarts the Bible app on the Sanctuary TV PC
SSH to media@10.6.7.13 (Windows OpenSSH, cmd.exe): kill a hung Bible App,
then run the StatusPanel\Start BibleApp task, which starts it on the
logged-in desktop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:52:19 -04:00
christianandClaude Opus 5.5 77daf7424d HyperDeck IPs from Companion, Vista Art-Net heartbeat, quiet Tascam module
- The hold-to-fix deck probe takes each HyperDeck's IP from its Companion
  connection's "ip" variable, so the config no longer repeats them.
- APPS shows "VISTA SILENT" when the Lighting PC's Art-Net poll (every 0.5 s)
  is not heard for 5 s: a crashed or closed Vista shows in seconds, not the
  minute macOS takes to drop a network MIDI peer.
- tascam-quiet/ builds the Tascam DA-6400 module 1.3.1-quiet: the recorder's
  "Illegal Status" warning is logged once a minute, not 5 times a second.
- README: hold-to-fix table fixed and updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 13:46:49 -04:00
christianandClaude Opus 5.5 d06798adf0 Find Dante PoE devices by MAC automatically instead of hard-coding ports.
Every 10 minutes the watchdog maps each Dante device: name and IP from
Companion, MAC from NA Ingest's ARP table, switch port and PoE state from
the Netgear switches in dante_switches, saved to dante-map.json. A DANTE hold
on a missing PoE-powered device power-cycles the port it is on now (found
live by MAC, or its last known port if it has aged out and nothing else is
there); never a port with more than 2 devices. Re-patching, adding or
renaming devices needs no config change. First live map: 19 devices, the 4
Studio B boxes on PoE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 13:31:51 -04:00
christianandClaude Opus 5.5 c8b9216ea5 A DANTE hold power-cycles a missing Studio B PoE box on its Netgear switch port.
STUDIO-B-SOLO-MON, MON, TB and TB-MON map to ports 0/14-0/17 on the Netgear
M4250 Dante switch 10.66.1.102. netgear.py poe_cycle first checks the port's
MAC table and refuses if a different device is plugged in there, then runs
poe reset. Tested 2026-10-08 13:10 on SOLO-MON: dropped off Dante and was
back about 17 s later. install.sh now copies netgear.py too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 13:12:45 -04:00
christianandClaude Opus 5.5 51f09900ab Hold a failing button to fix what it is failing on.
Fixes come from config.json only and run over SSH with NA Ingest's
status-panel key (ProPresenter restart, Ableton / Church Translate start,
reopen DVS), locally (Resi bridge, captions, ProdDash) or as a HyperDeck
reboot. A green button does nothing, each fix waits 60 s before it can run
again, and a recording deck is never rebooted. New remote checks ask the Macs
every 10 s whether their apps are running. Group buttons and INGEST now have a
hold too; tests never run a real fix or open an SSH connection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 11:34:44 -04:00
christianandClaude Opus 5.5 51bd44f9a0 Tell a dead device, a failed connection and a disabled connection apart.
Ping failures now read NO PING, Companion connection errors OFFLINE, and a
watched connection that is disabled in Companion shows amber DISABLED instead
of going quietly grey.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 10:29:50 -04:00
christianandClaude Opus 5.5 1f2c5719fb Ping the NovaStar processors and the Resi decoder as a second opinion.
The UHD Jr was switched off and the NovaStar module still reported
Connected (even after a restart), so LED stayed green. LED now also checks
that each processor answers ping; the Resi decoder (send-only RossTalk) gets
the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 10:27:29 -04:00
christianandClaude Opus 5.5 7f1f37a809 Make a tap on the page number key go to page 1 outright.
The converted key's "startup" page resolves to the current page on surfaces
set to "use last page", so a tap did nothing. The tap page is now
nav_tap_page in config.json (1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:58:59 -04:00
christianandClaude Opus 5.5 a5972d646f Hold the page number key for one second to jump to the status page.
A tap still goes to the start page, now on release so a hold does not flash
through page 1 first. Hold time is nav_hold_ms in config.json.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 09:52:21 -04:00