-
feat(gig): the backlog IS the setlist — one parser, and the set was 15 not 13 (#123) · 04fc8c7c
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.PLN (Algolia) authored04fc8c7c
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| test-sc-watchdog.sh | Loading commit data... | |
| test_button_roles.py | Loading commit data... | |
| test_gig_log.py | Loading commit data... | |
| test_lcxl_grid.py | Loading commit data... | |
| test_orphan_orbits.py | Loading commit data... | |
| test_setlist.py | Loading commit data... | |
| test_silent_eval.py | Loading commit data... |