SFU is the only receive-audio path. Mesh PCs carry our outbound
mic; their inbound audio is ignored. handleRemoteSfuTrack always
attaches the SFU stream regardless of mesh peer state. mesh
pc.ontrack is a no-op breadcrumb.
SPEAKER_PLAYOUT_DELAY_SEC bumped 0.5s → 0.7s so the worklet
cushion absorbs the 200ms host-wiggle that mesh's lower-latency
path used to absorb. DD_BASE_TARGET_SEC tracks at 0.7s as the
Double Dragon adaptive floor.
Tests pin the new contract:
- SPEAKER_PLAYOUT_DELAY_SEC === 0.7
- SFU attaches across every mesh peer state (connected,
failed, connecting, disconnected, missing)
- in-place setWorkletStream still works (renegotiation path)