The socket carried rpc but not ctx, so a socket transport could not fetch a
context and every app needed an HTTP connection beside it. Dispatches through
the same execute_context the HTTP view calls; that view's origin-side cache is
a CDN concern with nothing in front of a socket, so it is not on this path.
Both backends now answer subscribe/unsubscribe/message/rpc/ctx on one envelope.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>