refactor(corpus): BootTidal is now the ONLY definition of the global helpers — 1705 local shadows removed
PLN loaded bombe_dj to test the new surface and found ^41 still chopping every
bar, two days after gMask was "retired". He asked the right question: "why so
many let gMask in bombe dj? did you do the edits yet?"
THE BUG WAS ARCHITECTURAL, NOT A MISSED EDIT
Every track opened with a copy-pasted stanza:
let gMask = (midiOn "^41" (mask "t . <f t f <f t>> <t f f <t f>>"))
let gMute1 = (midiOn "^73" (mask "f*16"))
let gM1 = gMask . gMute
let gF1 = (# djfbus 1 (range 0.05 0.95 "^49"))
A local `let` SHADOWS the boot definition, so for years every central fix
stopped at the door of 254 files. Two consequences, both live on stage:
* gMask was retired in BootTidal.hs (`gMask = id`) and still masked on the
237 tracks that redefined it. The retirement reached 5 of 13 setlist tracks.
* gF1/2/3 were rewritten to the two-sided gDJF (centre = bypass, left = lpf,
right = hpf, and 0 = a 180 Hz lowpass = silence). 333 local defs kept the
OLD one-directional `(# djfbus N (range 0.05 0.95 "^49"))`. So the DJ-filter
fix that took a whole afternoon to get right was invisible in performance.
Two tracks even carried `let midiGGlobal = "^77" * 1.5` — reading fader ^77,
which is now MIDI-learned to Ardour's Tidal 01 gain. That is bug #53 alive: an
accidental nudge of fader 1 would attenuate every midiG-using stream.
WHAT LANDED
tools/deshadow-helpers.py, --plan/--apply, two passes:
pass 1 1551 deletions of exact boilerplate, so boot's definition takes over
pass 2 154 deletions of defs pass 1 ORPHANED (a local `let gMute` whose only
user was the `let gM1 = gMask . gMute` just removed). BootTidal has no
`gMute`, so pass 1 cannot touch it, and half a stanza reads like it
still does something. Referenced nowhere = zero events change.
11 COMMENTED OUT, not deleted, with a DESHADOW(#96) marker
The safety property is that direction: a def is deleted ONLY if its body
positively matches a known boilerplate regex. Anything unrecognised is
commented, so a bad regex leaves a comment instead of deleting PLN's music. It
earned that immediately — the 11 include real composition that only worked
BECAUSE it shadowed:
let gF2 = (whenmod 64 48 (# djf (slow 16 $ range 0.5 0.2 saw))) -- Parts DJF
let gF1 = (someCyclesBy "<f!10 t!6 f!112>" (# djfbus 1 ...)) -- Intro DJF
let gMask = mask "t t <t <t f> t <f [f t]>>" -- a fixed compositional mask
and one latent build error, `let gF1 = (y# djfbus 1 ...)`, which cannot compile.
DELIBERATELY NOT TOUCHED
* gDJF (65 files). Local is `let gDJF = …` (0 args); boot's is `gDJF ch`
(1 arg). Removing the shadow is a TYPE ERROR, not a global. Own pass, #96.
* gMute/gM/gF/gM'/gDJF1/gMaskEnd16/… (315 defs) — names BootTidal does not
define at all. Deleting breaks the build.
VALIDATION — verdict equality, not "it looks fine"
silent-eval over the 13-track OPAL setlist, before vs after, with an EMPTY
control map. Every single line of the diff is a line NUMBER shifting by 7, the
height of the deleted stanza. Same tracks, same orbits, same counts:
before: 9 tracks with a silent orbit, 4 unbuildable by the harness (#93)
after: 9 tracks with a silent orbit, 4 unbuildable by the harness
-> VERDICTS IDENTICAL
check-boot OK — all g* helpers audible with an untouched controller
check-boot-blocks OK — 32 blocks, each still one statement
pytest 471 passed
surface-columns 5 knob misalignments at HEAD -> 4 now (desire's borrowed ^52
is gone). No regression; the remaining 4 pre-date this.
Also in desire.tidal, on PLN's call ("just simplify to make it finish the job,
losing nothing, leaving FIXMEs"): d3's ^52 was borrowing d4's column because the
grid gives d3 exactly one knob (B3, already used; C3 is the gF3 family filter).
Parked as a static `# legato 0.55` with the knob form one line above in a
comment, and the d7/d9 open question closed as a FIXME rather than left
blocking. Nothing deleted, everything re-enableable by removing two dashes.
Excluded from this commit: live/midi/nova/lounge/ouais_je_funk.tidal, which was
already in PLN's modified set. The deshadow is applied on disk there; his to
commit.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| FFF | Loading commit data... | |
| FM | Loading commit data... | |
| acid | Loading commit data... | |
| ambient | Loading commit data... | |
| beatober | Loading commit data... | |
| boombap | Loading commit data... | |
| breaks | Loading commit data... | |
| disco | Loading commit data... | |
| dnb | Loading commit data... | |
| dub | Loading commit data... | |
| dubstep | Loading commit data... | |
| fusion | Loading commit data... | |
| grime | Loading commit data... | |
| grunge | Loading commit data... | |
| instruments | Loading commit data... | |
| jamuary | Loading commit data... | |
| jazz | Loading commit data... | |
| jungle | Loading commit data... | |
| lofi | Loading commit data... | |
| lounge | Loading commit data... | |
| nujazz | Loading commit data... | |
| party | Loading commit data... | |
| punk | Loading commit data... | |
| remix | Loading commit data... | |
| techno | Loading commit data... | |
| wave | Loading commit data... | |
| 120_techoirs.tidal | Loading commit data... | |
| 80fonk.tidal | Loading commit data... | |
| DX_tech.tidal | Loading commit data... | |
| breaks.tidal | Loading commit data... | |
| computer_riddub.tidal | Loading commit data... | |
| dub.tidal | Loading commit data... | |
| feu.tidal | Loading commit data... | |
| fm.tidal | Loading commit data... | |
| giant.tidal | Loading commit data... | |
| harder_crime.tidal | Loading commit data... | |
| minneapolis.tidal | Loading commit data... | |
| once_upon_a_loop.tidal | Loading commit data... | |
| party_hard.tidal | Loading commit data... | |
| superFM.tidal | Loading commit data... | |
| tidal_crime.tidal | Loading commit data... | |
| waves.tidal | Loading commit data... | |
| zelda.tidal | Loading commit data... |