Transport reliability
Lost operator control must not leave gameplay running.
Authentication
client.hello is first; do not send ready before accepted server.hello. HTML5 connect has a finite timeout including socket opening. Never automatically reuse an old manifest. The platform authorizes another session.
Heartbeat and load
Heartbeat is independent of game time and continues while paused. Messages are bounded to one MiB; HTML5 checks bufferedAmount. These are accumulation guards, not delivery or queue-recovery guarantees.
Duplicates
seq is not an acknowledged-delivery protocol. Deduplicate scoring by shot_id within a round. complete is guarded locally; after an interruption do not assume durable storage or replay the result in another session.
Shutdown
Block input on failed/disconnected and stop. Unsubscribe and close the client during disposal. Never replace failed transport with direct RS-485 to continue gameplay.