feat(pvlint): PV014 + PV011-as-error — and they immediately found mafia's acid
PLN, at rehearsal, on take_5_drops' d7 coming out muffled:
"i saw also its crushbus was 41, a d7 with sub 4 is sus -- and two effects on
same bus is a redflag as it means fighting for bus! so we gotta flag warning
any 'bus nXY on dX' as sus (e.g. bus 41 (d4's) on d7 here), and any shared
bus (^41 on d4 and d7) as PV error"
Two rules, exactly as specified.
PV014 (warning) — a bus slot numbered for a different orbit. The convention is
<orbit><slot>: d4 owns 41/42, d10 owns 101/102, and a bare `bus 4` on d4 is the
same idea with one slot. MEASURED before encoding it rather than assumed: 894
of 984 bus references under live/ conform, 90.9%. A real convention, not a
tidiness preference. Mis-numbering is *how you accidentally share* a bus, so
this rule sits upstream of PV011 and catches the cause, not the symptom.
PV011 promoted warning -> error. It shipped as a warning on the theory that
sharing a bus is legitimate glue. Rehearsal disproved that theory.
The asymmetry with PV008 is deliberate and now documented in both rules and
pinned by a test, so no future refactor quietly aligns them: yesterday PLN
DEMOTED a shared button to a warning ("its ok when two percs are linked"),
today he PROMOTED a shared bus to an error. A shared button is one hand doing
two things on purpose and you hear it instantly. A shared bus is two orbits
fighting over one effect instance with the winner decided by event density —
you don't hear a mistake, you hear a slightly wrong sound and blame the synth.
Surprises you can hear are warnings; surprises you cannot are errors.
THE PAYOFF, first run, in a track still in the set. mafia_sans_serif's d7 was
already carrying PLN's own note "FIXME ACID WEIRD NOT GOOD". It had THREE
collisions with d4's moog bass, none visible in the code:
# cut 4 every acid note truncated the bass, and vice versa
# crushbus 41 one crush instance, ^35 and ^32 fighting over it
# octerbus 42 one octer instance, ^55 and ^52 fighting over it
d7 now owns cut 7 and slots 71/72. That is a diagnosis for a FIXME he wrote
without knowing the cause, produced by a rule written twenty minutes earlier.
Set is 0 errors / 9 warnings, silent-eval --seeded 14/14 ok, pvlint 68/68.
Showing