joule-moq: draft-ietf-moq-transport-22 wire codec, with the crate moved onto it #283

Merged
dcharlot merged 7 commits from joule-moq/draft-22 into main 2026-10-17 04:04:12 -04:00

2026-10-16

Transaction Science
joule-moq: clippy's style notes on the draft-22 code
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 46s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 1m27s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 2m20s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 5m3s
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:22:34 -04:00
Transaction Science
joule-moq 0.3.0: README, changelog and version for draft-22
The crate README says which draft is implemented, the readings taken where
-22 leaves an encoding open, the carriage code points and the WAI_RECEIPT
layout, what is not implemented yet, and the vector corpus's JSON view.
The version moves to 0.3.0 because the public API changed; both lockfiles
that record it follow.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:20:04 -04:00
Transaction Science
joule-moq: generated draft-22 round trips, hostile input, and the vector check in CI
tests/draft22_roundtrip.rs: a seeded generator builds valid control
messages of every type, subgroup and fetch streams in both Group Orders,
datagrams and WAI_RECEIPT values; encode, decode, encode is the identity.
The encodings and the corpus, mutated, are fed to every decoder, whole and
incrementally; none may panic.

joule-code-conformance runs the independent decoder over the corpus.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:17:12 -04:00
Transaction Science
joule-moq: an independent draft-22 decoder that checks the vector corpus
tests/vectors/draft-22/moqt22_check.py, standard library only, written from
the draft's sections: it reads every good vector as the corpus states and
refuses every negative one with the stated kind and consequence, and fails
on an empty corpus.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:14:39 -04:00
Transaction Science
joule-moq: a draft-22 vector corpus, generated deterministically and held
tests/vectors/draft-22/vectors.json: varints, every control message type,
control, subgroup, fetch and padding streams, datagrams, and the
WAI_RECEIPT property's value, each with its stated reading; and negative
vectors (cut short, a varint past its frame, unknown types, repeated
parameters, lengths past the draft's limits, flags it forbids, delta and
ID overflows), each with the refusal and consequence it must meet.
tests/draft22_vectors.rs generates it and holds the crate to it, whole and
fed in pieces to the incremental decoder.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:12:11 -04:00
Transaction Science
joule-moq: the session, mock, receipts and QUIC transport move onto draft-22
- messages: the control plane is -22's; ObjectHeader stays draft-neutral, and
  a layer cap is an OBJECT_PROPERTY_FILTER on the MRL_LAYER property.
- carriage: the crate's objects ride -22 subgroup objects, their receipt,
  the WAI_RECEIPT property (moq-streaming-format §5) and the MRL fields in
  Immutable Properties at application-range code points; a group's receipts
  ride its receipts track (§4.1).
- session: the draft by ALPN, SETUP options, the JWP extension declared by a
  Setup Option, Request IDs per end.
- mock: objects, receipt bundles and requests cross the -22 codec; the relay
  reads an object's delivery timeout from its OBJECT_DELIVERY_TIMEOUT property.
- transport_quic: ALPN moqt-22, a pair of unidirectional control streams,
  a request stream per request, subgroup and fetch streams, datagrams.
- wire: MOQT's integer is the -22 varint; every u64 encodes.
- MOQT_DRAFT_VERSION is 0xff000016.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 10:07:07 -04:00
Transaction Science
joule-moq: a draft-ietf-moq-transport-22 wire codec beside the draft-08-style one
The codec of -22 as a module of its own (draft22), chosen by a Draft enum
whose ALPN is moqt-22: the leading-ones varint of §8.1, Key-Value-Pairs,
Properties and Setup Options, the Authorization Token, every control
message of Table 5 with its parameters, request IDs and stream rules, and
the data plane (subgroup streams, datagrams, fetch streams, padding).
Decoders are bounded and refuse with a typed error carrying the draft's
consequence. The crate does not use it yet.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 09:58:00 -04:00