-
feat(gig): gig-up --live — prove a RIG exists, not just a set (#121, #120) · 6ab09eaa
gig-up proved the set COMPILES and said nothing about whether anything could make a sound. scsynth was read only to colour a banner (:106,:115) and to skip --audio (:202) — it never failed. This morning the audio server had been dead for two days and the gate would still have printed GO. --live is a MODE, not the default. Cold-by-default remains right: cold checks are safe mid-set and must work on a train. Severity is chosen per link, deliberately: HARD scsynth alive / sclang :57120 / SC -> Ardour (>=24 pw links) no audio server, no listener, or no path to the DAW = there is no gig. SOFT Tidal :6010, LCXL -> SC, SuperDirt warmed, perf mode all legitimately absent ten minutes before doors; a gate that reddens for them is a gate PLN stops reading. Every check reads the thing that MAKES SOUND — a process, a socket, a real pw-link — never `systemctl is-active`. That distinction is the whole reason this exists: the unit reported active/running for two days while the rig was mute, because MainPID is sclang and scsynth is its child. ALSO, and it came from PLN's ears: "preload covers set", a HARD cold check. He heard crackles moving do_it_right -> take_5_drops. Measured in that window: 0 SuperDirt lates, 0 pipewire xruns, 17 lazy soundfile reads — all take5:*. Disk I/O, not CPU. The preload MECHANISM was healthy and said so ("47/47 banks OK in 1.9 s"); it was warming the wrong list. preload.scd was dated Jul 28, header "10 track(s) scanned", while the set is 13 — because setlist_samples.py reads setlist_opal2026.txt (10 tracks) and gig-up/cheat-sheet trust set-coherence.setlist_tracks() (13). The missing three are do_it_right, take_5_drops, electric_hammer: exactly the pair he was transitioning between. #120 tracks which source becomes canonical — not guessed here. Two properties made it invisible, and they are the transferable lesson: preload.scd is GITIGNORED (correctly — generated), so no diff ever showed it drifting, and NOTHING COMPARED IT TO THE SET. A generated artifact with no freshness check is a stale artifact waiting for the worst possible moment; its natural debut was a cold boot at the venue, on the first play of every track added since Jul 28. It only surfaced at a desk because SuperDirt had been up since Jul 28 with those banks cached from a first play weeks earlier, and a restart cleared the cache. tools/check-preload.sh compares BANK SETS (not bytes — the generator stamps a header and orders banks, so a byte diff would cry wolf), borrows set-coherence's parser rather than adding a fourth definition of "the setlist", and has --fix. Validation, all of it adversarial: * check-preload mutation-tested — restore the Jul-28 plan and it names the 7 banks that would crackle: daft fbreak120 hammer popkick realclaps superfreak take5. hammer and superfreak are independently confirmed: they appear as lazy loads in this morning's journal, before any of this was written. * --live on the live rig: 7/7 green after fixing MY OWN check (below). * THE GATE BITES: run under a PATH shim whose pgrep reports scsynth absent -> NO-GO, exit 1, correct fix hint, real rig never touched. That is precisely the state that printed GO this morning. * cold run unchanged: still GO, live chain not executed. One check was wrong before it was right, in the session's recurring shape. "SuperDirt warmed" first warned about a rig that was perfectly warm, because `journalctl --user -u parvagues-sc` returns lines from a PREVIOUS instance on this box — it handed back Jul 30 output while the current instance had already logged "51/51 banks OK". Now filtered by SyslogIdentifier and keyed to the unit's own ActiveEnterTimestamp, so it asks "did THIS boot warm?" rather than "was there ever a PRELOAD line", which any previous boot would satisfy forever.PLN (Algolia) authored6ab09eaa
×