RTOS (open) — docs sheet
RFC sheet
Drawing
RT-RFC-HANDSHAKE-BU
Sheet
03 / 04
Rev
C
Scale
NTS
RFC index · issued 2026-09-28
Handshake Budget: One RTT Against the Cover Sheet
Not financial advice. Verify claims independently.
A cold WebSocket can spend the entire 100 ms ceiling before the first quote. The drawing has to count setup.
Status: Note, REV A. Not an RFC. It annotates the cover sheet. The 100 ms ceiling from exchange tick to phone screen has always been drawn as if the socket already exists. On a handset, that is often false. Setup is a line item, and today it is unbudgeted.
The cold path we actually ship
The flight edge speaks WebSocket. A cold client pays, in order:
- TCP handshake.
- TLS handshake.
- HTTP upgrade to the WebSocket.
That is multiple round trips before the first application byte. The WebTransport overview and the FOSDEM 2026 walkthrough of the same protocol put a number on the alternative: HTTP/3 and QUIC merge the transport and cryptographic handshakes into one RTT. A resumed session can send application data in 0-RTT. Those are protocol facts. They are not yet parts on this manifest.
Do the arithmetic in the open. A phone with a 40 ms round trip, which is an ordinary LTE or congested Wi-Fi figure and not a lab loopback, spends 120 ms on three RTTs and has already missed the cover sheet. No tick has been normalized. No shard has been consulted. The handset is still negotiating the right to listen. Cross-region adds more. The public dashboard already shows that region, not the normalize step, dominates p99. Setup is region. It belongs on the same strip.
What one RTT does not buy
Cutting setup to a single round trip does not make quotes faster once the session is warm. A warm WebSocket already holds the TCP session. The steady-state budget is still ingest, normalize, shard, fan-out, edge, paint. One RTT matters at:
- Cold start of the reference client.
- Radio change, when the phone leaves Wi-Fi and the TCP session dies.
- Silent NAT timeout, when the middlebox drops a flow that heartbeated too slowly.
- Region failover, when the edge the handset pinned is no longer the edge.
QUIC connection migration is the part that would keep a session across a radio change without a new handshake. It is real in the transport. It is not flight here. The reference client reconnects and requests a snapshot. Marking migration FLIGHT because a slide said "connection IDs" would be a documentation defect. This note records it as HOLD, same as raw UDP on the manifest.
0-RTT is a sharper hold. Resumption replays the bytes you sent early. An idempotent "latest quote for this symbol" can survive replay. A subscribe that mutates the interest index cannot. Replay would mint a second interest entry, which RFC-001 forbids by the one-owner rule. Until the comment ledger has a replay rule, 0-RTT stays off the flight binary. One RTT for a cold authenticated session is the saving we can take without lying about replay.
Where the ceiling should be redrawn
Propose four setup rows under the existing 100 ms ceiling, so the sheet stops pretending the socket is free:
| Row | Part | Cold budget | Warm budget |
|---|---|---|---|
| Session | RT-300 | 1 RTT on the QUIC path, else measured upgrade | 0, session cached |
| Snapshot | RT-310 | one reliable exchange after session | only on gap or resume |
| Fan-out | RT-210 | unchanged, 12 ms | unchanged |
| Paint | RT-600 | inside the handset, not the bus | inside the handset |
If the cold session row exceeds one RTT, the cover sheet is already blown and the rest of the ledger is fiction for that launch. Publish cold and warm separately. A single p99 that averages a long-lived desktop socket with a phone that just left a tunnel is how the strip stays green while the reference client stutters at the open.
Heartbeats stay a few seconds, not 30. A quiet flow that the NAT forgets is indistinguishable from a shard failure, and the reconnect pays the cold budget again. Two missed heartbeats drop the interest entry. That rule is already on RFC-001. This note only adds that the cost of being wrong is a full handshake, not a repaint.
See the cold start, not the average
The production consumer is Stock Picks. Force-quit it, open it on a phone that is not on the same LAN as the edge, and time the gap before the first quote. That gap is the unbudgeted line. If it is longer than the cover sheet, no amount of shard tuning inside the bus will move the number the handset actually feels. Comments on this note should argue with the table, not with a vibe about QUIC.