Commit Graph
94 Commits
Author SHA1 Message Date
christianandClaude Fable 5.1 9b33abb570 Campus settings without the READY page still in progress
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 20:03:14 -04:00
christianandClaude Fable 5.1 d5089cfdde Campus settings: the PIN, the Tascam outlet fix, the Wednesday auto-fix window, the ATEM folder, the OBS task arguments
The committed config.json is the campus as applied on NA Ingest; the READY-page work still in
progress in this checkout is left out of it. The outlet fix now says, when the Dante card does not
come back, that only the unit's power button resets it (verified: a 45 s cut does not), and still
reconnects Companion.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 20:02:47 -04:00
christianandClaude Fable 5.1 9dbf7cf36e Rebase test counts windows relative to the campus config
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 19:46:06 -04:00
christianandClaude Fable 5.1 5caa8a3816 Review wording: a fix's fields read as 'fix X › field'
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 19:45:32 -04:00
christianandClaude Fable 5.1 0eee778a92 Drafts rebase onto the live settings; the review speaks in words
A draft started before someone else's Apply used to carry that older config and would have put
the newer changes back. Now every read of the draft replays only the draft's own changes onto the
live settings (base config from history), so the review lists exactly what you changed. Values
read in words (windows as days and hours), long ones fold open with was/now, commands are no
longer red, and warnings the live config already had are not repeated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 19:44:51 -04:00
christianandClaude Fable 5.1 edfd218ac9 Outlet fix: waits for the device's Dante card too; the Tascam cut lasts 45 s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 19:41:41 -04:00
christianandClaude Fable 5.1 f61761f9bc Smart outlets: the panel can power-cycle a device through a SmartLife (Tuya) plug
settings/outlet.py talks to Tuya's cloud with the campus's own project keys (kept in outlets.json
beside the config, 0600, never in the repo): list, status, on/off, and 'cycle <outlet> --ping
<address>' which leaves a unit that answers alone, cuts power 8 s, and waits for the address to
answer; refused while a HyperDeck is recording. A builder 'Power-cycle a smart outlet' makes the
fix from fields; the TASCAM key's ping check now holds to it (verified live: the hung DA-6400
answered again 26 s after the cycle and Companion reconnected). Settings > Outlets: keys, the
outlet list with live state and on/off, + Outlet from the account's devices. Calendar in 12-hour time.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 19:14:53 -04:00
christianandClaude Fable 5.1 095f20b7a6 Key editor: the question heads a group of checks once; each row names the thing; 'Words it can show'
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 18:52:02 -04:00
christianandClaude Fable 5.1 c4820800b4 Key editor: folded hold and say lines, one-line check rows that unfold, stacked fields, inputs never overflow the card
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 18:41:14 -04:00
christianandClaude Fable 5.1 af4a1ea810 Gear dialog: do not shadow window.location
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 18:38:12 -04:00
christianandClaude Fable 5.1 7cbfa14404 Gear can be added, edited and removed on Computers > Gear, with an optional watching key; Check now sits on the Map tab
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 18:37:01 -04:00
christianandClaude Fable 5.1 9a3746e6a5 Auto-fix: Sunday first on the calendar; any fix can be ticked (ticking one that closes a program marks it 'may close')
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 18:09:18 -04:00
christianandClaude Fable 5.1 69bb09ad27 The page revamped: icon navigation, hints instead of prose, one Settings page, a weekly calendar, a PIN
- Top bar with icon navigation (Overview, Keys, Computers, Settings, Logs, History, Help); no side
  menu; every explanation moved into a hover hint; the [how] lines no longer shift the layout.
- One Settings page with sections: Playlist, Auto-fix (a paintable weekly calendar + which fixes),
  Changes wait (calendar), HyperDecks, MIDI links, Computers, Dante, Switcher, Companion (with the
  names check), Network, Site & PIN, Program & campus, Advanced (every field by screen).
- Fixes live under Keys as a tab; the jobs became sections or + buttons where they belong.
- Editing is switched on with a PIN (digits) plus a first name for History; the overview's
  status line became chips; 'Needs attention' instead of a person's name, and it no longer fires
  after a page-only Apply (page-only.json marker); last change comes from History.
- Deployed to NA Ingest; the campus PIN set there and in config.json.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 17:42:03 -04:00
christianandClaude Fable 5.1 9278e08acc Editing dialog says where the code lives instead of naming a person
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 16:15:17 -04:00
christianandClaude Fable 5.1 1f87b2f01b Help gets a Try-it list; dialogs scroll on a phone; the installer's history note in plain words
Every screen was swept in the browser on NA Ingest with Editing on (31 screens, no script
errors); the job dialogs ran taller than a phone screen, so dialogs now scroll.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 15:38:47 -04:00
christianandClaude Fable 5.1 10e545d4e0 ATEM: read the saved-file folder through this Mac's own Remote Login when macOS keeps the page out of Google Drive
A launchd-run python3 gets 'Operation not permitted' on ~/Library/CloudStorage; sshd does not. The
page now lists and reads the folder over ssh to localhost with the panel's own key when the local
read is blocked (the Ingest Mac's Setup card gains that authorise step). Pick the newest verified
on NA Ingest.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 15:18:39 -04:00
christianandClaude Fable 5.1 3b3a1c7245 Names check for a copied campus; the ATEM folder says when the page may not read Google Drive
Site setup > Companion lists every connection, Dante device and MIDI session the keys use that
this campus does not report, with a map-to choice that renames it across checks, restart keys
and fixes. The ATEM section explains the Full Disk Access step when the cloud folder looks empty
to the background page. Verified on NA Ingest; Install the staged folder tested live there too.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 15:09:17 -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 dafa14a512 Step 3: the layout - drag keys to move or hide them, add and delete keys, page numbers, the Restart page switch
Keys screen: every key is a draggable chip (empty cells and the tray are drop zones), + New key and
+ New restart key dialogs, Delete this key, Companion page numbers, 'this campus has a Restart
page'. A taken cell is refused on the spot; 'Layout changed: Apply will re-import ...' comes from
the server's plan. Screens wait for a pending draft save before asking the server about it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 14:25:09 -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 ae3e85f152 settings page: the deck fits its column at every width (no overlap with the panel beside it)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 12:24:52 -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 2343a27529 Step 1 in progress: the settings page server, probes, teaching pages and UI (not deployed yet)
- settings/server.py: read-only routes (overview, keys, computers, gear, companion, logs, history,
  help facts, key guide / cheat sheet / where things are), the editing-code check with a lockout,
  LAN-only binding with a per-minute rebind
- settings/probes.py: fixed read-only probes per computer; whole lists fetched and matched locally
- settings/keyguide.py: the generated teaching pages
- settings/ui: the page, every screen read-only
- status_panel.py: snapshot.json every 5 s for the page; the Companion database lookup prefers the
  running build's folder and skips a database that will not open (a stale v5.1 folder was breaking it)
- config.json: every computer's record (what runs there, network ports, done-by-hand ticks), the
  editing code (kept in the repo, the user's choice), an empty gear list
- install.sh: the settings page as a second LaunchAgent; settings/ and schema.py deployed

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 16:23:59 -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 Fable 5.1 a3934b7c62 docs: the change guard is 'a HyperDeck is recording' only; Sunday stays an auto-fix window
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 15:36:32 -04:00
christianandClaude Fable 5.1 33715bff07 docs: tidy the bind sentence in the appendix
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 15:25:54 -04:00
christianandClaude Fable 5.1 ea625a470d docs: editing code lives in the repo's config; campus names; unwatched connections stay
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 15:25:44 -04:00
christianandClaude Fable 5.1 991006d8a3 docs: a note change alone never forces a page re-import (D11)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 15:05:48 -04:00
christianandClaude Fable 5.1 0ad6fb8451 docs: settings page plan, engineering details, audit record and inventory
Plan for the settings page on NA Ingest (every setting editable, what runs
where, multi-campus), built with a plan-and-audit workflow and consolidated
against a decisions list; the audit's 157 findings and their dispositions;
the 544-item inventory of everything configurable today.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 15:05:36 -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 bdec4251d9 Spotify: grey when closed or paused outside services
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 10:17:58 -04:00
christianandClaude Opus 5.5 1eb9247ade Spotify: holding the status key always plays the playlist, even when it isn't alarming
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 10:11:13 -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 98070f31c4 ATEM: audio, camera settings and MIDI control watched and fixed against the restore file
atem_watch.js (run with Companion's node + its atem-connection) keeps one
connection to the switcher and compares, every second, every Fairlight
source's mix option and fader and every camera's settings with
atem-reference.xml (the 2026-10-07 14:59:55 restore file). ATEM shows
ATEM AUDIO WRONG / ATEM CAMERA WRONG; the hold and Sunday auto-fix send
back only what differs. ATEM SW MIDI ON is fixed by quitting ATEM Software
Control, switching midiEnabled off and reopening it. Live check: switcher
matches the file (0 differences, 1440 camera values).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:54:59 -04:00
christianandClaude Opus 5.5 b468b42889 ATEM: alarm when ATEM Software Control's MIDI control is turned on
New 'pref' check reads an app setting on NA Ingest (defaults read) every
10 s; ATEM shows ATEM SW MIDI ON if midiEnabled is not 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 09:52:33 -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 3649fb269f MIDI drops show in about 1-2 s
- NA Tracks and the ProPresenter Mac: one long-lived ssh each streams the
  MIDI sessions (checked twice a second, sent on change) instead of an ssh
  login every 5 s; a silent stream gives no verdict after 12 s.
- NA Ingest's own session is read twice a second (was every 2 s).
- MIDI links show a drop after 1 s (was 3 s); everything redraws twice a
  second (was once).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 07:55:39 -04:00
christianandClaude Opus 5.5 7d5233a1d7 Network blip counts only connections the panel watches
At 07:45:55 the six tcp-HyperDeck helper connections (behind the 'reboot
all' button, watched by no tile) flickered together; each counted as its
own group, so NET showed a blip and auto-fix paused, though the real
HyperDeck connections and everything else stayed up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 07:49:14 -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 3417f00f1b Say which machine is unreachable instead of FIX FAILED
The Bible TV PC's Wi-Fi dropped for ~30 s at 06:17 on 2026-10-11; the
hold could not reach it and showed FIX FAILED, though nothing on the PC
was broken. An ssh fix that cannot reach its machine now shows e.g.
"BIBLE APP NOT REACHABLE".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 06:20:02 -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 a2a2e40b15 MIDI hold re-adds a peer stuck half-connected
After the network test SuperRack sat in NA Ingest's session as
"initializing"; the hold saw it listed and did nothing ("already").
connect_peer now drops a listed-but-not-live peer and adds it back,
building the second write from the first so a slow re-read cannot leave
it dropped. Tested live today: DVS x4, APPS and INGEST holds, NET clear,
CAPTIONS and BRIDGE restart keys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 18:49:43 -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