Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • tools
  • gig_gate.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    tooling: one launcher, one gate — and four bugs the split had been hiding · cd9d0d80
    Two verbs instead of three names. gig-up.sh DOES; tools/check-gig.py PROVES.
    
    The collision was not a fork. `gig-up.sh` (root, 555 lines) launches the rig;
    `tools/gig-up.sh` (620) proved the set; `tools/gig-preflight.py` (522) already
    proved the machine. Both gates took --converge and --quiet, so the two paths
    looked interchangeable and were not: the preload gate sat only on the path not
    pressed, the readiness report only on the path the Bridge does not call.
    
    The gate is now a TABLE, not control flow: 23 probes, each carrying its command,
    its fix, its severity and its layer. The bash pipelines are kept verbatim — each
    was written the day a specific failure was found and the pipeline IS the finding.
    gig-preflight already emitted {check,state,detail,fix} over OK/WARN/FAIL, so the
    machine layer joined through its own --json with no rewrite. 23 + 16 = 39 checks
    in one report, one exit code. Measured: 16.5s full, 3.4s --fast, 0.3s machine.
    
    Found while wiring it, each verified against the failing leg:
    
    1. The launcher rewrote preload.scd from setlist_opal2026.txt on EVERY launch —
       the Sept 6 set. Measured 132 banks -> 45, leaving 41 of Thursday's banks to be
       read off disk mid-set: the failure check-preload's own header calls "debuted
       as a crackle at the venue". The set is now named ONCE at the top of the
       launcher and read by both the plan generator and the gate. Generation also
       converges instead of clobbering — a plan that already covers the set is left
       alone, because a rewrite can only narrow it.
    2. `LCXL present` reported the desk PRESENT with the board unplugged: it grepped
       all of `aseqdump -l`, whose third column is the PORT name, and lcxl3-driver
       publishes a virtual output called "ParVagues LCXL3". The gate was matching our
       own driver. Now anchored on the client name (old: present, new: absent, board
       off the bus).
    3. `setlist compiles` proved backlog.md's 15 tracks, not the 17 being played.
       --setlist scopes the compile and preload probes to one gig's file, via
       setlist_samples.read_setlist — never a fresh regex.
    4. `SC -> Ardour` was gated on scsynth, so it printed NO-GO on a healthy
       --headphones rig where there is legitimately no Ardour. Preconditions are
       per-probe now, and an unmet one is SKIP, never FAIL.
    
    Also: gig-preflight's `midi surface` warned that mk3 LEDs were unimplemented,
    untrue since lcxl3-driver took over painting. Both generations exercised against
    a recorded graph. And `gig-log preflight` (the armed-global check — gMask sat at
    127 for 74 minutes while every cold check was green) lived only in the launcher's
    report where it could not block. It is a blocking probe now.
    
    Enforcement, because a rule in a docstring is not a rule:
    tools/tests/test_check_gig.py, 39 tests. No probe may mutate anything (read over
    argv, never the source text — a fix hint is SUPPOSED to say "systemctl restart");
    the fence has its own detector; no check may be lost from the port while the old
    script exists; the launcher may not grow assertions of its own and must end by
    calling the gate.
    
    Suites 510 passed, 2 failed — both pre-existing (fold-orbits' PipeWire regexes
    tripping the Tidal-parser ratchet, test_gearbox's dash fallback).
    
    tools/gig-up.sh is kept, unrun, with a superseded banner: nothing is deleted
    until its replacement has run on a real launch, and it is the transcription
    check's reference until then.
    PLN (Algolia) authored Sep 22, 2026
    cd9d0d80
gig_gate.py 14.7 KB
EditWeb IDE
×

Replace gig_gate.py

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.