Findings No. 30
An AnalyserNode downmixes to mono
Feed a stereo signal to one AnalyserNode and you are quietly measuring a different signal: it downmixes its input. Split with a ChannelSplitterNode into one analyser per channel.
An AnalyserNode downmixes its input to mono before analysis. Feed it a stereo signal and every reading it produces describes the mono sum, not the channels, with no warning that a conversion happened.
For level meters that is usually tolerable. For anything that needs the channels apart it is quietly wrong: Stem Shovel's LUFS readout follows the loudness standard, which sums the channels' mean squares after filtering, and the mean square of a mono downmix is not the same number. Correlated content inflates it; anti-correlated content can cancel entirely.
The fix costs one node: a ChannelSplitterNode feeding one AnalyserNode per channel, with the per-channel reads combined in code the way the measurement actually requires.
The general rule: before trusting any analysis node, check what channel conversion it performs on input, because the signal you wired is not always the signal it measured.
Receipt: Stem Shovel (#readLoudness; FINDINGS.md, Web Audio).