Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • tools
  • at
  • tests
  • test_lens.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    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) authored Jul 29, 2026
    37857225
test_lens.py 16 KB
EditWeb IDE
×

Replace test_lens.py

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.