Every MIDI link by wired address: flag links joined by name, hold MIDI moves them, refuse non-wired addresses

Tracks had joined NA Ingest, Lighting PC and Studio B by Bonjour name: macOS picks the network
each time, so a reconnect could land on Wi-Fi or Dante. The wired check now also names a link
joined by name; holding MIDI moves it to the wired address its own MIDI check names (a hold
only: auto-fix never moves a working link). Reconnects prefer a wired address over a Wi-Fi or
by-name one they last saw. The settings refuse a MIDI link whose address is a name or off the
wired network, and the add-a-link screen fills in the wired address. Studio B's link now has its
wired address, and Tracks' link to NA Ingest is watched (TRK INGEST). All links on the four Macs
were moved and checked: wired IPv4, running.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 10:38:22 -04:00
co-authored by Claude Opus 5.5
parent 340100b5bb
commit 6ae17e5b90
7 changed files with 186 additions and 21 deletions
+23
View File
@@ -715,6 +715,29 @@ def validate(cfg, live=None):
errors.append("key %s check %d: unknown computer %s" % (t.get("id"), i + 1, c["host"]))
elif h.get("self"):
errors.append("key %s check %d: %s is this Mac" % (t.get("id"), i + 1, c["host"]))
# Network MIDI rides the wired network (2026-10-20): a link set to a Bonjour name or to an
# address off it can come back over Wi-Fi or Dante, so it is refused once the MIDI key has the rule.
nets = []
for t in cfg["tiles"] + ((cfg.get("ready_page") or {}).get("keys") or []):
for c in t.get("checks", []):
if c.get("type") == "midi_wired":
for n in c.get("nets") or []:
try:
nets.append(ipaddress.ip_network(str(n), strict=False))
except ValueError:
pass
if nets:
for t in cfg["tiles"] + ((cfg.get("ready_page") or {}).get("keys") or []):
for c in t.get("checks", []):
if c.get("type") != "midi_peer" or c.get("disabled"):
continue
where = "key %s, MIDI link %s" % (t.get("id"), c.get("peer"))
ip = sp.peer_ip(c.get("address"))
if not c.get("address"):
warnings.append("%s: no wired address - a reconnect may pick Wi-Fi or Dante" % where)
elif ip is None or not any(ip in n for n in nets):
errors.append("%s: %s is not on the wired network (%s) - give its wired address, like 10.1.10.206:5004"
% (where, str(c["address"]).strip() or "?", ", ".join(str(n) for n in nets)))
a = cfg.get("auto_fix") or {}
for f in a.get("fixes", []):
if f not in fixes: