docs(audio-rooms): full moq-lite wire spec + IETF gap call-outs
Background research turned up the complete moq-lite (Lite-03) wire
format from kixelated/moq-rs and @moq/lite v0.1.7. Folded the spec
into nestsClient/plans/2026-04-26-moq-lite-gap.md as a phase-5
implementation plan:
- ALPN ("moq-lite-03"); no SETUP/control message in Lite-03 (the WT
handshake IS the handshake)
- Per-request bidi streams keyed by ControlType varint (Announce=1,
Subscribe=2, Fetch=3, Probe=4)
- AnnouncePlease(prefix) / Announce(status, suffix, hops) shape
- Subscribe with priority (raw u8), ordered, maxLatency (ms),
startGroup/endGroup (off-by-one None-encoded), reply Ok/Drop
- Group = uni stream with (DataType=0, subscribeId, sequence)
header followed by varint-length frames until QUIC FIN
- No datagrams; no per-frame envelope beyond size
- Mandatory path normalisation; FIN-as-unsubscribe; RESET_STREAM
for errors
Phase-5a..e implementation plan included (~1 week scope).
Doc + KDoc updates so the IETF MoQ-transport code is correctly
labelled and the moq-lite gap is discoverable from every entry point:
- .claude/CLAUDE.md project description and architecture diagram
- nestsClient/plans/2026-04-26-audio-rooms-completion.md status block
- MoqSession.kt, MoqMessage.kt, MoqObject.kt, MoqCodec.kt KDoc — flag
these as "IETF draft-ietf-moq-transport-17, NOT moq-lite", with
pointers to the gap doc
- NestsConnect.kt — note that step 3 of the listener handshake
(SETUP) does NOT match nostrnests's relay framing
This commit is contained in:
@@ -43,6 +43,13 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||
* bearer token.
|
||||
* 3. Run the MoQ SETUP handshake.
|
||||
*
|
||||
* Note: step 3 runs the IETF `draft-ietf-moq-transport-17` SETUP, which is
|
||||
* NOT what nostrnests's relay (moq-lite) expects. Steps 1 and 2 are
|
||||
* already on the moq-rs wire shape (path = `/<namespace>`, JWT in
|
||||
* `?jwt=`). The MoQ framing layer needs a moq-lite codec swap before
|
||||
* end-to-end interop works — see
|
||||
* `nestsClient/plans/2026-04-26-moq-lite-gap.md`.
|
||||
*
|
||||
* The returned [NestsListener] is in state [NestsListenerState.Connected];
|
||||
* if any step fails, the listener is returned in
|
||||
* [NestsListenerState.Failed] with the underlying cause attached and the
|
||||
|
||||
Reference in New Issue
Block a user