PLN's ruling yesterday: "set SSOT is the backlog entry, always. if in the backlog
i add a track or reorder them, its the truth." Then today, the part that decided
the design: "if i added new ones, id not need to tell you to update, it should
flow downstream, ditto if remove one."
So this is not a resolution, it is a pipe.
WHAT WAS ACTUALLY WRONG. Applying the ruling for the first time found the backlog
listing 15 tracks while every tool in the repo believed 13:
missing everywhere: ouais_je_funk (120) lime_tacos (110)
wrong order: backlog has you_my_sunshine (166) BEFORE mafia_sans_serif
ouais_je_funk was not a stale wishlist entry — PLN committed a kick rework to it
in 23f60e76, yesterday. And the drift had already cost him something audible:
preload warmed 50 banks (13 tracks)
the set needs 53 banks (15 tracks)
would cold-load dr gfunk_bass h2ogmcy
Three banks read from disk on first play. That is the same mechanism PLN heard as
crackle on the take_5_drops transition (#120) — a bug we thought was fixed, still
live, just smaller. check-preload.sh reported "ok" the whole time, because it asked
set-coherence, which was one of the wrong answers. The freshness check had
inherited the staleness it was built to catch.
ROOT CAUSE: eight tools each hardcoding `SETLIST = armada/setlist_opal2026.txt`,
and one human keeping that file in sync by hand.
THE SHAPE, and why it is not "make all eight import a module". The .txt stays
exactly where it is, same format, so all eight consumers are untouched — this is
J-7 to a gig and a refactor that breaks a tool costs more than it buys. What
changes is its STATUS: generated, never hand-edited, with a HARD gig-up check
that it still matches the backlog. One parser, one artifact, one answer at a time,
and a gate that fails loudly the moment they drift.
tools/setlist.py the parser. Resolves PLN's freeform codenames
("Ceci n'est pas Une Bombe" -> bombe_dj, "Le shifteur
marteau ? to finish!" -> electric_hammer) via aliases +
token containment, and raises rather than guessing.
gig-up --converge regenerates the setlist BEFORE preload. That order is
load-bearing: preload reads the setlist, so doing it the
other way warms the old set.
gig-up "setlist vs backlog" HARD, and placed before every check that reads the
setlist — a stale list makes "setlist compiles",
"preload covers set" and "transition ghosts" all answer
about a set PLN is not playing.
WHAT THE END-OF-SECTION DETECTION TAUGHT ME. First attempt whitelisted the
headings that count as part of the set ({FINALE, Encore, ...}) and died on line
one against "## Livecoding Techno DNB Nu-jazz". PLN's headings are prose; any
whitelist is a list of the ones he happened to write that day. The working rule
ignores heading semantics entirely: run to the next top-level heading, take the
list items. Non-track content does not survive that filter — "> Sunset Forest",
"1h30 - 20h30-22h", "??TRANSITION???" and the trailing url: block are none of
them list items.
VALIDATION, and specifically not "it returns the 15 tracks currently in the
backlog" — a hardcoded list passes that too. tools/tests/test_setlist.py MUTATES
a synthetic backlog and asserts the output moved: add a track (appears, in PLN's
position, not appended), remove one (disappears), swap two lines (output swaps),
unresolvable name / duplicate / missing section (all raise). 18/18.
Then the gate itself, mutated: dropped a line from the .txt -> caught; swapped
two lines, same membership -> caught as "same tracks, DIFFERENT ORDER".
AND IT PAID OFF IMMEDIATELY. With the real 15 in the setlist, pvlint went red on
two tracks that had been invisible to every tool until today: an unmutable orbit
in ouais_je_funk (gF with no gM3 — nothing on the surface can drop it) and button
^44 driving both d3 and d6 in lime_tacos (one press, two orbits). Neither is new
breakage; both were simply never looked at. Left for PLN — they are musical calls.
The 53 banks are warm on the rig now: 54/54 banks OK in 7.0 s.
| Name |
Last commit
|
Last update |
|---|---|---|
| .gitea/workflows | Loading commit data... | |
| armada | Loading commit data... | |
| blocks | Loading commit data... | |
| blog | Loading commit data... | |
| copycat | Loading commit data... | |
| docs | Loading commit data... | |
| gifts | Loading commit data... | |
| lib-parvagues | Loading commit data... | |
| live | Loading commit data... | |
| output | Loading commit data... | |
| releases | Loading commit data... | |
| sandbox | Loading commit data... | |
| study | Loading commit data... | |
| test | Loading commit data... | |
| tools | Loading commit data... | |
| utils | Loading commit data... | |
| visuals/slop | Loading commit data... | |
| viz | Loading commit data... | |
| .gitignore | Loading commit data... | |
| BootTidal.hs | Loading commit data... | |
| BootTidal.hs.broken | Loading commit data... | |
| BootTidal.visuals.broken.hs | Loading commit data... | |
| CLAUDE.md | Loading commit data... | |
| FOH_MASTER.md | Loading commit data... | |
| LICENSE | Loading commit data... | |
| MORNING.md | Loading commit data... | |
| PatchBay_MultiChannel.xml | Loading commit data... | |
| PatchBay_Perf.xml | Loading commit data... | |
| PatchBay_Perf5.1.xml | Loading commit data... | |
| README.md | Loading commit data... | |
| RUNBOOK.md | Loading commit data... | |
| SHOPPING_LIST.md | Loading commit data... | |
| backlog.md | Loading commit data... | |
| bullet_train.tidal | Loading commit data... | |
| collide.sh | Loading commit data... | |
| debug.tidal | Loading commit data... | |
| didacticpatternvisualizer.pde | Loading commit data... | |
| gig-up.sh | Loading commit data... | |
| gpu-mode.sh | Loading commit data... | |
| hello.sc | Loading commit data... | |
| init_midi.sh | Loading commit data... | |
| intro.md | Loading commit data... | |
| library.txt | Loading commit data... | |
| link_jack.sh | Loading commit data... | |
| link_samples.sh | Loading commit data... | |
| link_samples_all.txt | Loading commit data... | |
| main_fairbanks.scd | Loading commit data... | |
| notes.md | Loading commit data... | |
| parvagues-sc.service | Loading commit data... | |
| perf-audio.sudoers | Loading commit data... | |
| perf-tray.py | Loading commit data... | |
| perf.sh | Loading commit data... | |
| samples.txt | Loading commit data... | |
| setlist_opal2026.txt | Loading commit data... | |
| start_and_midi.scd | Loading commit data... | |
| test.tidal | Loading commit data... |