Status: draft
- Preserve backward compatibility for v1 clients/servers during migration.
- Improve robustness for high-frequency input/layout updates.
- Make ordering/idempotency behavior explicit.
- Add
frameIdandbaseFrameIdmetadata:frameincludesframeIdpatchincludes bothframeIdandbaseFrameId
- Add optional
batchenvelope:type: "batch"messages: ServerMessage[]
- Add explicit
ackandresync-requestclient messages for recovery hooks. - Keep v1 message shapes accepted while v2 is rolled out.
- During migration, server can emit v1-compatible messages by default and v2 when explicitly negotiated.
- Version negotiation rule:
- client advertises supported protocol range on connect
- server selects highest mutually supported version
- If peer version is newer than supported and no overlap exists: explicit error + no partial parse.
- Land fixtures/tests for v1 + v2 conformance.
- Add dual-stack server emit path (v1 default, opt-in v2).
- Add client parse path for v2 metadata while retaining v1 behavior.
- Flip default to v2 in a minor release after compatibility soak.
- Protocol fixture suite passes for both client and server packages.
- Reconnect/resync tests cover out-of-order and duplicate delivery scenarios.
- Release notes include migration guidance and compatibility notes.