So WebGL calls the "default framebuffer" the drawing buffer.
https://registry.khronos.org/webgl/specs/latest/1.0/#THE_DRAWING_BUFFER
The answer is to call context.drawingBufferStorage() with an sRGB format. BUT... the reason this was so hard to find maybe is that FireFox and Safari don't bother to implement this part of the spec despite it being in WebGL1.0. :(
So it seems the answer really is to insert a worthless shader pass that implements this by hand. Blegh.
Is having sRGB framebuffers not considered fundamental in 20XX?!