-
feat(surface): measure whether each orbit's knobs sit ABOVE its fader — the… · d8fb13bf
feat(surface): measure whether each orbit's knobs sit ABOVE its fader — the whole corpus is off by one PLN, mid-remap, spotted the half of #46 I had not measured: "but we need the coverage of the effects moving in the tracks, e.g. bass from 81 to 80 means effects on 53 now move to 52" He is right, and my earlier conflict scan answered the wrong question. That scan looked for CC *collisions* — two things claiming one control — and found only two (^78, ^14), which is how #46 came to be costed as "two track edits". But the LCXL is a GRID of eight channel strips, and the property that makes a surface readable is not absence-of-collision, it is COLUMN COHERENCE: the knobs directly above a fader must shape the same orbit that fader levels. Otherwise the bass fader is in column 4 while the bass filter is in column 5, and every reach is a lookup. tools/surface-columns.py measures it: per track, per orbit, which grid columns that orbit's "^NN" references actually land in, and what would have to move for column == orbit. It separates two classes, because conflating them would have produced a work list that is mostly noise: * TRACK controls — a raw ^NN in the .tidal. Free to move; a text edit. * HELPER controls — CCs baked into BootTidal (gF1/2/3 on 49/50/51, gMask 41, gMute1-3 on 73/74/75, gPanic 93, plus 18/34/77 — 11 in all). A track cannot move these by editing itself. They are global by construction and will always read as "misaligned" against a per-column model. THE RESULT, over the 13 OPAL setlist tracks — 84 d1-d8 orbits: only 19/84 orbits are column-aligned; full alignment = 174 ^NN renumbers and the pattern is startlingly uniform across all 13 files: d1 -> col 2 d4 -> col 5 d7 -> col 7 (aligned) d2 -> col 3 d5 -> col 6 d8 -> col 8 (aligned) d3 -> col 4 d6 -> col 7 So the corpus convention is "orbit N lives in column N+1" for d1-d6, and N+0 for d7-d8. The +1 is not an accident: column 1's C-knob and both its buttons are already spoken for by gF1 / gMask / gMute1, so per-orbit controls were pushed one column right to dodge them. And the two rules meet badly — column 7 is double booked by d6 and d7 (in desire.tidal both really do react to ^59). The consequence for #46 is the useful part: because the corpus is +1 for six orbits and +0 for two, THERE IS NO FADER MAPPING THAT MAKES TODAY'S TRACKS COHERENT. Shifting the faders +1 to match would strand d8; leaving them arbitrary is where we are. Either the tracks move, or the surface stays a lookup. PLN's instinct — that the Ardour re-learn is only half the job — was exactly right. Survey, not a gate: exits 0 always, because alignment is a design choice and this tool's job is to price it, not to enforce it. --plan prints the exact ^NN -> ^NN moves per track for when we do it (#92).PLN (Algolia) authoredd8fb13bf
×