The full hub — 42 macros, one object
Beat sits in the middle. Each colored loop is one entry in
public/lib/macros/catalog.js. Color = wire family.
Wedge width is proportional to family size — FX has 13 macros so it
gets the widest arc; Tempo has 3 so it's narrower. The takeaway:
the runtime's macro pool isn't a tree of cases, it's a single
monoid acting on one state object.
FX
13 distinct fxKey wires. The runtime's biggest family.
Mute
One shared mute wire — sequential within family, freely parallel with everything else.
Feel
Two-wire dom (fx:lp-freq ⊗ tempo) — conflicts with both FX and Tempo macros.
Tempo
Three macros, all on the tempo wire. Disruptors — usually macrosDisabled in seed contexts.
Pitch
Routes through master-pitch fxKey, so technically an FX wire — but isolated so it parallel-composes with everything else.
Pan · Shape · One-Shot
Each on its own dedicated wire. The oneshot:hitN family is fully orthogonal — all four pads can fire simultaneously.