Commit 9aeee916 by PLN (Algolia)

check-gig: a dead surface driver blocks the launch

The LCXL LEDs probe exits 0 with no surface on the bus, so its only failure
is hardware present and its translator down: no faders reach Ardour, no paint.
That is 'there is no gig', not advice. It sat as one WARN among eleven under
two stale FAILs and went unread.
parent 6a3c71ca
...@@ -62,7 +62,7 @@ from pathlib import Path ...@@ -62,7 +62,7 @@ from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent)) sys.path.insert(0, str(Path(__file__).resolve().parent))
from gig_gate import ADVISE, MACHINE, WARN, Gate, Probe, shell # noqa: E402 from gig_gate import ADVISE, BLOCK, MACHINE, WARN, Gate, Probe, shell # noqa: E402
ROOT = Path(__file__).resolve().parent.parent ROOT = Path(__file__).resolve().parent.parent
PY = sys.executable # whatever runs the gate runs its children: one interpreter PY = sys.executable # whatever runs the gate runs its children: one interpreter
...@@ -365,7 +365,14 @@ print(" ".join(str(p) for p in m.setlist_tracks()))')"""), ...@@ -365,7 +365,14 @@ print(" ".join(str(p) for p in m.setlist_tracks()))')"""),
fi"""), fi"""),
fix="start the painter: LCXL3 -> systemctl --user start lcxl3-driver; " fix="start the painter: LCXL3 -> systemctl --user start lcxl3-driver; "
"original LCXL -> systemctl --user start lcxl-leds-watch", "original LCXL -> systemctl --user start lcxl-leds-watch",
kind=ADVISE), # BLOCK, not ADVISE, since 2026-10-11. The probe already exits 0 when no
# surface is on the bus (absent hardware is ADVISE territory), so the
# only way it fails is the surface PRESENT and its nervous system down:
# no faders reach Ardour, no paint, no OLED. That is "there is no gig".
# It was ADVISE, and that day it sat as one WARN among eleven while two
# stale FAILs (since fixed) carried the NO-GO, so the one real fault was
# the line nobody read.
kind=BLOCK),
# Asks whether THIS instance warmed, by keying to the unit's own start time # Asks whether THIS instance warmed, by keying to the unit's own start time
# — not "was there ever a PRELOAD line", which a previous boot would satisfy # — not "was there ever a PRELOAD line", which a previous boot would satisfy
......
...@@ -280,3 +280,15 @@ def test_the_launcher_does_not_grow_its_own_gate(): ...@@ -280,3 +280,15 @@ def test_the_launcher_does_not_grow_its_own_gate():
body = "\n".join(ln for ln in src.splitlines() if not ln.lstrip().startswith("#")) body = "\n".join(ln for ln in src.splitlines() if not ln.lstrip().startswith("#"))
assert 'run "' not in body, "the launcher is growing gate assertions" assert 'run "' not in body, "the launcher is growing gate assertions"
assert "check-gig.py" in body, "the launcher must END by calling the gate" assert "check-gig.py" in body, "the launcher must END by calling the gate"
def test_a_dead_surface_driver_blocks_the_launch():
"""2026-10-11: LCXL3 on the bus, lcxl3-driver down, no fader reaching Ardour.
The probe exits 0 when no surface is plugged in (absent hardware is not a
reason to refuse a gig), so its only failure is hardware present and its
translator dead. That was ADVISE, one WARN among eleven, under two stale
FAILs. Demoting it again is how the real fault gets missed.
"""
probe = next(p for p in CG.PROBES if p.name == "LCXL LEDs")
assert probe.kind == gig_gate.BLOCK
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment