Stereo Web Audio: real panning and per-channel routing
The Web Audio render was mono end to end - every node reduced to a single value, and the destination's one value was copied to every output channel. That made three whole node classes impossible to express, because each is defined by moving signal between channels: StereoPannerNode (pan a source left/right), ChannelSplitterNode (fan a stereo input out to separate mono channels) and ChannelMergerNode (recombine mono channels into a stereo output). A page could call createStereoPanner() and get a node that ran but did nothing. The render now carries a real two-channel bus through every node: the panner uses the spec's equal-power law (a centred mono source comes out at 1/sqrt(2) on each side, not half), gain, filters, delay and waveshaping process each channel independently, and splitter/merger route per channel using the output and input indices on connect(). A mono signal up-mixes to stereo by copy and down-mixes by averaging, per the Web Audio speaker rules. Crucially the engine's stand-out property survives the rewrite: the render is still byte-identical every run - now proven THROUGH the stereo path, including a panned graph whose two channels genuinely differ. Media moves 36 to 37; overall holds at 51.