No developer-tools pop-ups on the computers; apps found where they really are; SuperRack and X32-Edit

On a Mac without the Command Line Tools, /usr/bin/python3 is a stub that opens Apple's installer on
that Mac's screen: Woonsocket's Tracks and FOH Macs showed it after joining (and would every ten
minutes). Python now runs on another Mac only when xcode-select says it is there (MIDI reads, MIDI
reconnects, the Computers probe); without it those Macs' own MIDI sessions are simply not read.

The app list used a glob that zsh (the Macs' login shell) turns into an error when one pattern
matches nothing, so no app was ever found there: find instead, and a running program's app path is
taken from the program itself. New recipes: SuperRack SoundGrid and X32-Edit (AUDIO).
Woonsocket now has ABLETON, SUPERRACK and X32 EDIT keys, all OK, and NA's page 99 shows them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 16:33:28 -04:00
co-authored by Claude Opus 5.5
parent 777afac0b1
commit 93805cb723
5 changed files with 42 additions and 8 deletions
+15
View File
@@ -98,6 +98,21 @@ class TestBuild(unittest.TestCase):
self.assertIn("conn:x32", seen)
self.assertIn("dante:SC-X32", seen)
def test_a_programs_app_comes_from_its_running_path(self):
"""Woonsocket's FOH Mac: SuperRack lives three folders down, and zsh had hidden the app list."""
inv = small()
inv["computers"]["foh"] = {"name": "WS FOH", "os": "mac", "user": "watersmedia", "ip": "10.4.1.12", "ips": ["10.4.1.12"], "reachable": True,
"procs": ["SuperRack SoundGrid", "X32-Edit"], "apps": [],
"paths": {"SuperRack SoundGrid": "/Applications/Waves/SuperRack SoundGrid/SuperRack SoundGrid.app",
"X32-Edit": "/Applications/X32-Edit.app"}}
cfg, _ = ac.build(BASE, inv, {"id": "ws", "name": "Woonsocket"}, "1234")
self.assertEqual(schema.validate(cfg)[0], [])
sr = next(t for t in cfg["tiles"] if t["label"] == "SUPERRACK")
self.assertEqual(sr["checks"][0]["cmd"], "pgrep -xq 'SuperRack SoundGrid'")
self.assertIn("/Applications/Waves/SuperRack SoundGrid/SuperRack SoundGrid.app", cfg["fixes"][sr["checks"][0]["fix"]]["run"])
self.assertIn("X32 EDIT", [t["label"] for t in cfg["tiles"]])
self.assertIn("SUPERRACK", [k["label"] for k in cfg["restart_page"]["keys"]])
def test_a_big_campus_gets_group_keys_and_the_receivers_fold_first(self):
cfg, _ = ac.build(BASE, big(), {"id": "ab", "name": "Apollo Beach"}, "1111")
self.assertEqual(schema.validate(cfg)[0], [])