A destination channel ROLE — which leg of a (stereo, later surround) bus a port carries. The
tokens are capitalised to match the main_L / main_R native port suffixes. Today 'L' /
'R'; the union is deliberately OPEN so LCR / 5.1 / 7.1 add 'C' / 'LFE' / 'Ls' / 'Rs' /
'Lrs' / 'Rrs' LATER as a purely additive change (a new token, a new entry in
CHANNEL_ROLE_ORDER, a new native role_slot index) — never a re-break of the shape.
'C' lands here now (#176, an internal spec §2.1) — this is the
SAME commit that gives it a native tail (main_C, phase-1 increment 2, already on main) and
gates it in the output-leg row (PatchOutputLegState's station refuses a C leg on a bus
whose format is not 'lcr', patch-crosspoint-rows.ts), per §2.1's ruling: never widen the
union before both exist. LFE/Ls/Rs/Lrs/Rrs remain future, additive, phase-2/3 tokens.
A destination channel ROLE — which leg of a (stereo, later surround) bus a port carries. The tokens are capitalised to match the
main_L/main_Rnative port suffixes. Today'L'/'R'; the union is deliberately OPEN so LCR / 5.1 / 7.1 add'C'/'LFE'/'Ls'/'Rs'/'Lrs'/'Rrs'LATER as a purely additive change (a new token, a new entry in CHANNEL_ROLE_ORDER, a new nativerole_slotindex) — never a re-break of the shape.'C'lands here now (#176,an internal spec§2.1) — this is the SAME commit that gives it a native tail (main_C, phase-1 increment 2, already onmain) and gates it in the output-leg row (PatchOutputLegState's station refuses aCleg on a bus whose format is not'lcr',patch-crosspoint-rows.ts), per §2.1's ruling: never widen the union before both exist.LFE/Ls/Rs/Lrs/Rrsremain future, additive, phase-2/3 tokens.