Follow-up to 72937cc7. Having found that the Bridge panel could not see the LED watcher, I went looking for what else was watching the surface. Nothing was — and one of the things that claimed to be could not fail. THE FALSE-GREEN GATE. The pre-gig check for "LCXL -> SC" was: aconnect -l | grep -A3 "Launch Control XL" | grep -q "128:" `grep -A3` matches each of the THREE lines containing "Launch Control XL" and prints three lines after each; the last window runs off the end of the LCXL block and into the next client header, which is literally `client 128: 'SuperCollider'`. So the string "128:" was in the haystack whether or not a single wire existed. This gate has been passing since it was written, for a reason unrelated to what it measures. It would have said green with the desk connected to nothing. Proved rather than argued: recorded the live graph, stripped only the Midi Through -> SC edge from it, and ran both gates against the doctored file. Old gate PASSED. New gate reported "LCXL -> Midi Through, but Through does NOT reach SC" and exited 1. tools/lcxl-path.py replaces it by walking the graph. It has to: the real path here is TWO hops (LCXL 20:0 -> Midi Through 14:0 -> SC in2), so a direct-only test would be wrong in the other direction. It takes an optional recorded-graph file argument precisely so the gate can be tested for FAILURE without unplugging hardware at a venue — the reason the old one was never caught is that nobody could cheaply watch it fail. TWO UNITS NOBODY STARTED. lcxl-leds-watch and midi-autoconnect were both `disabled`, so neither came up at login; they ran only when started by hand. Both now join the auto-start loop. A NEW GATE. "The surface is wired" and "the surface is lit" are different daemons and different failures, and only the first was ever checked. The new "LCXL LEDs" soft check reads: if the board is on the bus, the watcher must be active. Deliberately conditional on the board — at a kitchen table an unplugged desk is normal and must not warn, but at the venue this is the difference between playing blind and not. Verified both new gates in BOTH directions: green as the rig stands, and red with the watcher stopped / the Through edge cut. A gate observed only passing is indistinguishable from the one this commit deletes.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| at | Loading commit data... | |
| bridge | Loading commit data... | |
| foundry | Loading commit data... | |
| pulsar-parvagues-hud | Loading commit data... | |
| pvlint | Loading commit data... | |
| tests | Loading commit data... | |
| README.md | Loading commit data... | |
| analyze_samples.py | Loading commit data... | |
| audio-lens.py | Loading commit data... | |
| bank-check.py | Loading commit data... | |
| button-column-audit.py | Loading commit data... | |
| button_roles.py | Loading commit data... | |
| cheat-sheet.py | Loading commit data... | |
| check-audio-graph.sh | Loading commit data... | |
| check-boot-blocks.py | Loading commit data... | |
| check-boot.sh | Loading commit data... | |
| check-drift.sh | Loading commit data... | |
| check-mix.py | Loading commit data... | |
| check-preload.sh | Loading commit data... | |
| check-tracks.sh | Loading commit data... | |
| control-lens.py | Loading commit data... | |
| deshadow-helpers.py | Loading commit data... | |
| fader-baseline.py | Loading commit data... | |
| fan_check.sh | Loading commit data... | |
| fix-button-roles.py | Loading commit data... | |
| fix-mute-roles.py | Loading commit data... | |
| gen_tokens.py | Loading commit data... | |
| gen_ts_types.py | Loading commit data... | |
| gig-log.py | Loading commit data... | |
| gig-metadata.py | Loading commit data... | |
| gig-up.sh | Loading commit data... | |
| gig_record.sh | Loading commit data... | |
| install-protect.sh | Loading commit data... | |
| lcxl-init.py | Loading commit data... | |
| lcxl-leds-watch.service | Loading commit data... | |
| lcxl-leds.py | Loading commit data... | |
| lcxl-path.py | Loading commit data... | |
| lcxl_grid.json | Loading commit data... | |
| lcxl_grid.py | Loading commit data... | |
| master-out.py | Loading commit data... | |
| migrate-columns.py | Loading commit data... | |
| mock-lcxl.py | Loading commit data... | |
| mute.tidal | Loading commit data... | |
| orphan-orbits.py | Loading commit data... | |
| parvagues-protect.service | Loading commit data... | |
| parvagues-protect.sh | Loading commit data... | |
| parvagues-samples.service | Loading commit data... | |
| parvagues-sc-watchdog.service | Loading commit data... | |
| probe-chain.py | Loading commit data... | |
| pvbanks.py | Loading commit data... | |
| rig-pulse.py | Loading commit data... | |
| sample-watcher.py | Loading commit data... | |
| sample_tfidf.py | Loading commit data... | |
| sc-watchdog.sh | Loading commit data... | |
| set-coherence.py | Loading commit data... | |
| setlist.py | Loading commit data... | |
| setlist_samples.py | Loading commit data... | |
| shipowiz.py | Loading commit data... | |
| silent-eval.py | Loading commit data... | |
| solo.tidal | Loading commit data... | |
| surface-columns.py | Loading commit data... | |
| take-lens.py | Loading commit data... | |
| take-master.py | Loading commit data... | |
| take-segments.py | Loading commit data... | |
| tempo-lens.py | Loading commit data... | |
| tidal-remote.py | Loading commit data... | |
| tools.png | Loading commit data... | |
| unmute.tidal | Loading commit data... | |
| unsolo.tidal | Loading commit data... |