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
  • tests
  • test_gig_log.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(rig): a preflight that reads LIVE STATE — the gap that let gMask sit armed for 74 minutes · 764accb1
    PLN, after a change of mine reached his ears before a check did: "we gotta make
    things work bro we cant break as we move i thought we had clarity and confidence by
    now :) go on, take the longshorter path not hte immediate one".
    
    Right, and the honest diagnosis is not "be more careful". It is that this toolbox
    had a whole missing category of check.
    
    Everything in it is COLD:
        pvlint            parses .tidal text
        silent-eval       queries patterns against an EMPTY control map, in a fresh ghci
        surface-columns   reads .tidal text
        check-boot        loads BootTidal in a throwaway ghci
        check-mix         reads the SAVED Ardour session
    
    All five were green all afternoon. Meanwhile gMask sat ARMED AT 127 on the live
    board from 15:36 to 16:50 — a global chopping the last eighth out of every bar of
    every orbit wrapped in gM1/gM2/gM3, which is every orbit of every track. Nothing
    was broken. A switch was on, and NOT ONE tool in the chain looks at the switches.
    PLN found it by ear, and the ear should never be the smoke detector.
    
    `gig-log preflight` closes that. It reads the live recorder's surface state and
    returns a verdict on the controls that can silence a whole rig from outside any
    pattern: gPanic armed, any gMute engaged, a DJ filter parked in a band-killing
    position, gMask armed if it is still active.
    
    == THREE DESIGN DECISIONS, EACH FROM A PAST FAILURE ==
    
    1. A STALE LOG FAILS. Exit 2, and distinct from exit 1 (surface unsafe) so a caller
       can tell "I could not check" from "I checked and it is bad". A preflight that
       reports SAFE because it read yesterday's session converts an unknown into a
       false reassurance, which is precisely the shape of every bad afternoon this rig
       has had. is_live() already existed; this is the first thing to gate on it.
    
    2. gMASK'S MEANING IS READ FROM BootTidal.hs, NOT HARDCODED. ^41 was a global gate
       this morning; since 37857225 it is d1's gate and gMask is `id`. Same CC, opposite
       verdict. Hardcoding either answer would be wrong half the time and would go
       stale exactly the way every other cached binding here has
       (feedback_stale_binding_pattern). An unreadable BootTidal assumes the mask is
       STILL ACTIVE — the cautious read, because guessing "retired" silences a real
       FAIL.
    
    3. IT NEVER FAILS ON THE STATE BUTTONS. Gates on 41-44/57-60/76/89-92 are gestures
       PLN arms on purpose. They are LISTED ("armed on purpose (not a failure)") so
       nothing is silently on, but they do not block. A gate that cries wolf about
       intentional performance state is a gate that gets ignored, and then it is worth
       nothing on the night it matters.
    
    It also names what it cannot see rather than implying completeness: Ardour faders
    are invisible over MIDI, so the output points at check-mix.py and says that reads
    the SAVED session.
    
    == AND IT IS WIRED IN, WHICH IS THE ACTUAL POINT ==
    gig-up.sh now ends with a readiness gate that runs BOTH preflight and check-mix.
    Everything above that line only proves processes STARTED; these two are the only
    steps that ask whether the rig will make a SOUND. Neither aborts the launch — you
    may be starting up precisely to fix them. This is the "real readiness gates" half
    of feedback_simple_setup, and it means the surface check happens whether or not
    anyone remembers to ask for it.
    
    Verified: live run reports SAFE with the board as PLN just left it (48 controls
    touched, gMask correctly detected as retired, ^93 untouched and flagged as sitting
    at the #55 seed). Negative-tested against a truncated log: exit 2, "recorder is
    NOT running", no verdict offered. 5 new tests (309 total), including the
    load-bearing one that a stale log must FAIL rather than pass, and that a
    COMMENTED-OUT `gMask = id` does not count as retired.
    PLN (Algolia) authored Jul 29, 2026
    764accb1
test_gig_log.py 32.6 KB
EditWeb IDE
×

Replace test_gig_log.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.