The -32603 error-frame guard was added only to WSTransport.write/write_async;
StdioTransport.write still ran json.dumps outside its try, so the same class
(pool worker dies silently, client waits forever) survived for the Ink TUI /
stdio bridge on any other unserializable payload. One module-level
transport.serialize_frame(obj, peer, log) now serves both transports; the WS
wrapper method is gone.