From 532608db63b6543702d45772f9cac94b89bf6889 Mon Sep 17 00:00:00 2001 From: teknium1 <127238744+teknium1@users.noreply.github.com> Date: Wed, 16 Sep 2026 14:37:49 -0700 Subject: [PATCH] fix(gateway): fanout transport uses the shared serialization guard too Third json.dumps twin of the same class (multi-client fanout of one session): route through transport.serialize_frame so every peer gets the -32603 frame instead of the writer raising. --- tui_gateway/transport.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tui_gateway/transport.py b/tui_gateway/transport.py index 5b3820e5cd..5051d6da51 100644 --- a/tui_gateway/transport.py +++ b/tui_gateway/transport.py @@ -237,8 +237,9 @@ class FanoutTransport: return def write(self, obj: dict) -> bool: - # Freeze the queued frame so a caller cannot mutate it after admission. - encoded = json.dumps(obj, ensure_ascii=False) + # Freeze the queued frame so a caller cannot mutate it after admission. Same serialization + # guard as the single-peer transports: an unserializable frame reaches every peer as -32603. + encoded = serialize_frame(obj, "fanout", logger) size = len(encoded.encode("utf-8", errors="surrogatepass")) frame = json.loads(encoded) with self._lock: