-
feat(surface): retire gMask, freeing ^41 for d1's gate — and stop the board denying d9 exists · 37857225
Two changes PLN asked for, plus the five tests that had to be rewritten because they encoded the behaviour we just removed. == 1. gMask IS RETIRED == PLN: "kill gMask! its unprevisible anyway. we can then consider a gMask per track ... tbh gmask is risky id rather invest all on my own manual masking perf" It was `midiOn "^41" (mask "t!7 f")` — top-left button chopping the last eighth out of every bar on every stream wrapped in gM1/gM2/gM3, which in practice is every orbit of every track. A global that silently removes events from everything is exactly what makes a rig feel haunted, and the gesture plays better by hand. It becomes `gMask = id` rather than being deleted: 230 .tidal files name it directly and removing the binding would stop every one of them compiling. Same retirement pattern already used for the midiG family (#73) — keep the name, empty the behaviour, delete the usages at leisure. gM1/gM2/gM3 are now just the mutes. The payoff is the SURFACE, not the sound: ^41 is button-top-row column 1, the one slot the column-aligned button map needs for d1's gate. With it free, the top button row can be fully per-orbit d1..d8 and the whole board reduces to one sentence. That unblocks phase 2 (#92). Worth recording how visible this was: gig-log reported `41 127 gMask someCyclesBy gate -- gates 100% of cycles`. gMask had been fully ARMED on the live board since 15:36 while PLN was testing the set. Nothing was broken; a global was simply switched on and nothing put that in front of him. He has since pushed the state buttons back off. == 2. THE BOARD WAS DENYING d9 EXISTS == PLN, on bombe_dj: "i see no led under d9 while d9 has a sound a FMRhodes". A1-A4 are d9-d12's LEVEL, MIDI-learned in Ardour to the Tidal 09-12 track gains (#46). No .tidal writes ^13-^16 — and it must not, since Tidal never sees those CCs — so a "^NN" scan finds nothing and the knobs went dark. Dark means "not mapped here" (feedback_dark_means_unmapped_outranks_all), so the board asserted that four working controls did nothing. To be precise about a phrasing that confused things: the ORBITS d9-d12 are entirely Tidal's, they carry real sounds (wap's d9 is vec1_acid), and every orbit-parsing tool sees them — HUD, pvlint, silent-eval, surface-columns. What belongs to Ardour is only the four CC NUMBERS. The orbit was always visible; the knob-to-orbit LINK was the missing piece. parse_track now lights A_N exactly when the track DECLARES d(8+N), coloured by that orbit's own family — these are per-orbit by construction, unlike the shared filters and mutes. A track with no d11 still gets a dark A3, because there is nothing there to level. So the row answers the question actually asked mid-set: which extra orbits does this track have, and where is their volume? == 3. FIVE TESTS REWRITTEN, NOT DELETED == They asserted gM1 -> {41,73} and "the mask is measured by DENSITY". Both were true and are now false. Each was retargeted at the new truth rather than removed, and one was ADDED that the old design never needed: test_gMask_is_retired_and_claims_no_cc — asserts ^41 is owned by NOTHING, scanning every helper. A gMask that quietly reclaimed CC 41 would put two jobs on one button, which is the precise failure this remap exists to remove. That deserves a guard, not a comment. Verified: check-boot all 4 passes green (helpers audible against an untouched controller, and the block-seam replay confirms 32 blocks each parse as one statement); silent-eval --seeded on bombe_dj still emits on every declared orbit; 305 tests pass. NOTE the retirement only takes effect on a Tidal REBOOT — the running ghci loaded BootTidal at 16:36, seven minutes before this edit. Until then ^41 still masks.PLN (Algolia) authored37857225
×