moq-streaming-format: declare WAI as a MoQ streaming format #85
Merged
dcharlot
merged 1 commit from 2026-09-10 12:21:10 -04:00
wai/moq-streaming-format into main 2026-09-10
moq-streaming-format: declare WAI as a MoQ streaming format
Some checks failed
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Successful in 2s
standards workspaces build + test / eoc-rs (pull_request) Successful in 1m51s
standards workspaces build + test / aac-rs (pull_request) Successful in 35s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m16s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 45s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m14s
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 2m24s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 35s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 1m59s
standards workspaces build + test / map-rs (pull_request) Successful in 29s
standards workspaces build + test / mesh-rs (pull_request) Successful in 31s
standards workspaces build + test / openpay (pull_request) Successful in 1m22s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 2m37s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 39s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 31s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 18s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 14s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 39s
standards workspaces build + test / arl-rs (pull_request) Successful in 9m20s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 9m41s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 9m53s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 9m4s
standards workspaces build + test / sense-rs (pull_request) Successful in 9m30s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 1m10s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 20s
WAI conformance / cargo-class corpora · windows (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · windows (pull_request) Has been cancelled
WAI already references MoQ for confidentiality (MLS + SFrame), and that binding treats MoQ as a pipe. MoQ is not a pipe — it is a two-layer design, and the upper layer has an open slot exactly where a container of capability-dispatched objects belongs. MOQT moves objects in groups on tracks and does not know what an object means. MSF (draft-ietf-moq-msf) says what objects mean: it fragments a stream into objects, declares what a publisher emits in a catalog, and sets prioritisation. The alignment with WAI is structural rather than aspirational — MSF's unit is an object in a group, WAI envelopes are already objects, and jwp-receipts already commits per object and signs per group. Neither layer has to change to agree. THE SLOT IS OPEN, AND CHEAPLY. MSF's `packaging` field has a fixed value set and no central registry, which reads closed. draft-ietf-moq-cmsf shows it is not: a sibling I-D that declares packaging value `cmaf`, says it extends the allowed values defined in MSF, inherits MSF wholesale, adds two track-level catalog fields, and registers nothing — "this document has no IANA actions". LOCMAF is a second instance. A sibling draft, no registry action, no permission sought. What CMSF did NOT take is the per-object slot. MSF §12 defines properties at Track AND Object scope with an IANA type registry holding essentially one entry (MSF_COMPRESSION); CMSF defines no per-object property. §5 takes that slot with WAI_RECEIPT — content hash, joules, acquisition class, group-receipt hash — which is the shape jwp-receipts already has. `acquisition` MUST accompany `joules_micro`, because a joule figure without its acquisition class is what energy-measurement §2 forbids, and putting it on a wire does not make it acceptable. The load-bearing rule is §3: the object boundary MUST be the envelope boundary. That is what makes MOQT's object identity and the receipt's per-object commitment the same unit. If they diverge, every guarantee that composes them is void. §4 makes the catalog do work rather than decorate: `wai_capabilities` MUST be exhaustive, a sink MUST NOT subscribe assuming an undeclared capability will not appear, and `wai_determinism` is the WEAKEST tier on the track — declaring the strongest would let a track advertise a guarantee most of its objects do not meet. §6 states what this does not do, so it is not re-argued: no MOQT wire encoding, no replacement for CMSF or LOC, no making MoQ WAI's transport, and no pinning of a draft revision. MOQT is pre-Last-Call; where it and this text disagree, MOQT wins and this text is what changes. Ingest queue item 13b from the landscape survey (#80 §4.4). Sourced from direct reads of draft-ietf-moq-msf and draft-ietf-moq-cmsf-00. Co-Authored-By: Claude Opus 5 <[email protected]>