From 0d842beacba6c765c91c82fa2b879afe025ba9e8 Mon Sep 17 00:00:00 2001 From: Maxim Raznatovski Date: Wed, 7 Oct 2026 15:30:40 +0200 Subject: [PATCH 1/3] docs: send `server/command` and `server/state` before binary role data --- README.md | 2 +- messaging.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ffeac9a..b4bee20 100644 --- a/README.md +++ b/README.md @@ -456,7 +456,7 @@ Every client and server MUST implement all messages in this section regardless o [Pairing](#pairing) messages are REQUIRED for all servers; clients implement the subset matching their advertised pairing methods. -WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. +WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command` or `server/state` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. ### Client → Server: `client/init` diff --git a/messaging.md b/messaging.md index a864cea..099027a 100644 --- a/messaging.md +++ b/messaging.md @@ -138,7 +138,7 @@ Every client and server MUST implement all messages in this section regardless o [Pairing](pairing.md#pairing) messages are REQUIRED for all servers; clients implement the subset matching their advertised pairing methods. -WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. +WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command` or `server/state` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. ### Client → Server: `client/init` From e2dc5a002a2b382152cff1595bba9268109c3423 Mon Sep 17 00:00:00 2001 From: Maxim Raznatovski Date: Wed, 7 Oct 2026 15:30:40 +0200 Subject: [PATCH 2/3] docs: send `group/update` before binary role data --- README.md | 2 +- messaging.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b4bee20..cd67d4f 100644 --- a/README.md +++ b/README.md @@ -456,7 +456,7 @@ Every client and server MUST implement all messages in this section regardless o [Pairing](#pairing) messages are REQUIRED for all servers; clients implement the subset matching their advertised pairing methods. -WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command` or `server/state` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. +WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command`, `server/state`, or `group/update` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. ### Client → Server: `client/init` diff --git a/messaging.md b/messaging.md index 099027a..f8dea93 100644 --- a/messaging.md +++ b/messaging.md @@ -138,7 +138,7 @@ Every client and server MUST implement all messages in this section regardless o [Pairing](pairing.md#pairing) messages are REQUIRED for all servers; clients implement the subset matching their advertised pairing methods. -WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command` or `server/state` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. +WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command`, `server/state`, or `group/update` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. ### Client → Server: `client/init` From 38e3cc0a2e51e9cafbb16555332a209f63c7f5cd Mon Sep 17 00:00:00 2001 From: Maxim Raznatovski Date: Tue, 20 Oct 2026 15:53:40 +0200 Subject: [PATCH 3/3] docs: state the send order instead of forbidding any delay --- README.md | 2 +- messaging.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cd67d4f..3534779 100644 --- a/README.md +++ b/README.md @@ -456,7 +456,7 @@ Every client and server MUST implement all messages in this section regardless o [Pairing](#pairing) messages are REQUIRED for all servers; clients implement the subset matching their advertised pairing methods. -WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command`, `server/state`, or `group/update` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. +WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. The server MUST send `server/command`, `server/state`, and `group/update` messages, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. ### Client → Server: `client/init` diff --git a/messaging.md b/messaging.md index f8dea93..3df1af1 100644 --- a/messaging.md +++ b/messaging.md @@ -138,7 +138,7 @@ Every client and server MUST implement all messages in this section regardless o [Pairing](pairing.md#pairing) messages are REQUIRED for all servers; clients implement the subset matching their advertised pairing methods. -WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. Binary role data MUST NOT delay `server/command`, `server/state`, or `group/update` messages: the server sends them, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. +WebSocket preserves message order within each direction, but messages in opposite directions can cross. Clients MUST process `stream/start`, `stream/clear`, and `stream/end` in delivery order, even when discarding role data. Servers MUST likewise process `client-stream/start` and `client-stream/end` in delivery order. The server MUST send `server/command`, `server/state`, and `group/update` messages, together with any earlier `server/activate` it has not yet sent, ahead of any binary role data it has not started transmitting. ### Client → Server: `client/init`