-
fix(lcxl): the watcher paints the LOADED track, so dead knobs go DARK (#78) · 2acbd9cd
PLN, after the value ramp landed: "now all knobs have lights, i cant trust anymore 'is there sth mapped there or not?' knobs should always be no-lit if they are not-mapped, in that track, to help not touch dead controls". The interesting part is that the colour code was never wrong. build_frame() already paints only the CCs present in `bindings` and leaves everything else OFF. The lie was in WHICH BINDINGS IT WAS HANDED: the watcher runs with no track argument, so load_bindings(None) returns the CONVENTION board — all 40 controls lit by lane role, regardless of what is actually loaded. That was equally untrue before the ramp; dim role-hue just made it easy to ignore, and saturated colour made the board finally READ as "everything here is live". So the feature did not create the problem, it made a pre-existing lie legible — and fixing the colour back would have hidden the fault again. MEASURED: convention board (what the watcher painted) 40/40 lit do_it_right 19/40 -> 21 dead knobs lit wap 25/40 -> 15 desire 22/40 -> 18 Fifteen to twenty-one controls were glowing on every track while doing nothing. On a dark stage that is a knob you reach for and a change you do not get. The fix is a published current-track file (~/.cache/parvagues/current-track): * `--map TRACK` now PUBLISHES as well as paints. Without that, a one-shot paint at boot showed the right board for 30 seconds and then the watcher's re-assert overwrote it with the convention paint — the same board, lying again. One writer, one meaning. * `--watch` with no pinned track follows the file on a 1s poll and repaints on change. Polled rather than inotify on purpose: a watch that dies unnoticed is exactly this rig's signature failure (a binding resolved once, never rechecked), and one stat/second of a small file costs nothing measurable. * touched-state clears on track change (carrying it would claim you had already worked controls on a track you just opened); VALUES persist, because the knobs did not physically move. * bindings moved into a shared box — three reads in the aseqdump loop and the re-assert thread would otherwise have kept painting the previous track's map. load_bindings(None) now also SAYS it is painting a board that may be lying, instead of reporting "40 controls lit by lane role" as though that were good news. The remaining gap, deliberately not closed here: nothing publishes the track when PLN ctrl+enters a file in Pulsar — only `tidal-remote boot` does. The clean signal is a five-line hook in the HUD package, which already tracks the active .tidal. Filed rather than rushed the day before rehearsals. 458 tests (was 453). NOTE: the running watcher must be RESTARTED to pick this up; not done now, because PLN is about to play and a dark board mid-set beats a correct board that arrived by surprise.PLN (Algolia) authored2acbd9cd
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| fixtures | Loading commit data... | |
| tests | Loading commit data... | |
| __init__.py | Loading commit data... | |
| __main__.py | Loading commit data... | |
| harness.py | Loading commit data... | |
| lens.py | Loading commit data... |