The client's OnReceived routing drops any synchronize push whose resultCode != Success(1) — and absent counts as 0(None), which is also dropped. Our InitNetwork ack and BattleFinish already included resultCode=1, but the five lifecycle bodies (Matched, BattleStart, Deal, Swap response, Ready) didn't, so the client silently dropped every one of them. Symptom: battle-traffic.ndjson capture showed the client receiving InitNetwork/Matched/BattleStart, but the UI stayed at the matchmaking screen until timeout — Matched/BattleStart were dropped at the routing layer before they ever reached the state machine. Move the resultCode injection into the shared EnvelopeForPush helper so every scripted push gets it. Caught during v1 smoke walkthrough. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
6.3 KiB
6.3 KiB