wai/ietf: draft-charlot-moq-wai-packaging-00 (review only, not submitted) + wai_priors #383
Loading…
Reference in a new issue
No description provided.
Delete branch "wai/ietf-draft"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
For review only. Not for submission. This PR adds the source and text rendering of an Internet-Draft,
draft-charlot-moq-wai-packaging-00, WAI Packaging for the MOQT Streaming Format. Nothing has been submitted to the IETF and nothing has been posted to any list; both are the owner's decision. The comment for the NMSF authors is in the tree and has not been sent.What is in it
wai/ietf/draft-charlot-moq-wai-packaging-00.xml(xml2rfc v3) and.txt(rendered, 36 pages). Informational, Media Over QUIC. Contents:wai(one wholeWAI1envelope per object) andwai-receipts;wai.prior.setlisting and the refusal order), and the determinism tiers (entropy-consistency,decode-equivalence,none);wai_capabilities,wai_determinism,wai_priors(new, below),wai_receipts,wai_receipt_alias,wai_receipts_trackandwai_staged, with the six-step stage-set check;WJR1, the receipts track andmoqt_mismatch, and verification steps 1–6 with inclusion-verified, the group total, holding and anchoring;WAI_RECEIPTobject property, with its value layout;codecsparameter, Implementation Status (RFC 7942), Security Considerations (receipt keys, replay, relay transparency, catalog integrity, parameter sets, resource consumption, privacy) and IANA Considerations;wai/ietf/nmsf-comment.md: a short, factual comment ondraft-herz-moq-nmsf-01. It proposes an OPTIONALmodelDigest(SHA-256 of the weights) and anentropyDeterminismfield (integer-exact|unchecked), explains what each lets a subscriber check, and points to WAI SPEC §3.1, determinism-tiers §2–§3 and moq-streaming-format §4.2. Not sent.moq-streaming-format§4.2,wai_priors. This is an OPTIONAL track member listing the pins the track's objects carry: capability, sha256, form, and an advisory tier. With it, a receiver can tell before subscribing whether it holds the weights. The lead approved it on one condition, which the text meets: the catalog never stands in for the envelope. Two reasons are defined:catalog_priors_malformed: the member does not read, and the track is not subscribed to.catalog_prior_mismatch: an object's pin is unlisted or listed differently (capability, digest, form, unpinned, the fallback's set, or an empty list). The object is refused, and the track with it.A listed tier is advisory. The tier a receiver claims is the one its own decode earns.
wai-rsstaged::moq::{CatalogPriors, CatalogPrior, PriorsRefusal}:read,check,check_manifest, with unit tests that include a negative control for each case.staged-conformance/moq/priors.json: 30 generated cases (11 accepted, 8 mismatches, 11 malformed).wai_staged_vectors verifyre-checks them, and so doesstaged_verify.py, which shares no code with wai-rs.wai_priors, and the regenerated registry export.moq-streaming-format§5: theWAI_RECEIPTvalue layout, as joule-moq writes it, and its interim type0x3A41inside Immutable Properties.jwp-receipts§3 step 3: the text never stated the link hash's domain separator. It said only "the resulting hash". Both Rust verifiers andjwp_verify.pycomputeBLAKE3("moq-jwp:receipt-link\x01" ‖ canonical_bytes), and the text now says so. No byte changes.Design decisions
decode-equivalence,entropy-consistencyandnone. Another list proposed during planning (replicate,entropy-consistency,tolerance) is not WAI's vocabulary.WAI_RECEIPTis requested from the Specification Required range (0x80–0x37FF) of the "MOQ Properties" registry (MOQT-22 §16.8).0x3A41stays in use until a value is assigned. MOQT-22 §8.4 forbids registration in 0x3800–0x3FFF, so no code point can be requested from that range.application/waiis registered in the standards tree, via the IETF-document route of RFC 6838.WAI1and only the binary receipt form (WJR1). JSON receipts, claims, key discovery, the gap-history algorithm andWAI2are cited as informative references, so the draft can be implemented from its own text for everything it requires.Checks (all passed)
xml2rfc 3.34.1 --v3 --text --html(build host, own venv)@ietf-tools/idnits 3.3.0on.txtand on.xmlNORMATIVE_REFERENCE_TO_DRAFT: MOQT-22, MSF-01 and BLAKE3, which have no RFC. All other warnings were fixed: wide artwork, bare BCP 14 keywords, bracket notation read as referencescargo test --locked --no-default-features --features staged --lib staged::moq… --lib codecs::registry(after the jwp-receipts edit)cargo test --no-default-features --features staged,video_int,receipt_claims --test staged_moqwai_staged_vectors gen, thenverify ../staged-conformancestaged-conformance: OKpython3 -I staged-conformance/staged_verify.py staged-conformancewai registry export --checkcargo clippy --no-default-features --features video_int,audio_int,splat_int,staged --all-targetscargo build --lockedinwai/wai-packclaim_verify.py,jwp_verify.py,signer_verify.pyon theirvectors.jsoncheck-tests-in-ci.py,check-workflow-concurrency.sh,check-spec-refs.py,check-wai-section-refs.py,check-no-vanity-metrics.sh,test-public-text-checks.sh,check-comparative-prose.sh(also on the two new text files),check-orphan-sources.pycheck-public-names.shneeds the private denylist, which CI supplies. I could not run it locally.Falsifications (run after committing; every mutation was restored)
staged_verify.pymismatch_unpinnedandmismatch_fallbackformnot comparedmismatch_formandmismatch_form_droppedwai_capabilitiesmalformed_undeclaredandmalformed_no_capabilitiesmismatch_formchanged to expect acceptance inpriors.jsonEach MUST against the reference implementation
Implemented:
replicateand tier rules (wai-rscontainer,pin,codecs,neural);SetTrack, wai-pack, joule-moq-ingest, joule-moq-web);staged::moq, joule-moq mock relay);app.js);WJR1,moqt_mismatch(joule-moq-web, joule-moq-relay door), verification steps 1–6, inclusion-verified, the group total, the holding bound and anchoring (wai-rsjwp_delivery, joule-moqreceipt);WAI_RECEIPTlayout and rules inside Immutable Properties (joule-moqcarriage);OsRng;wai_priorsreading and checking (wai-rs, as a library).Not yet implemented, or only partly:
wai_priors. The rules "list every pin" and "no tier above the class" therefore hold only because the member is never written.CatalogPriors::check. The browser receiver dispatches no capability that decodes against a parameter set.wai_determinismis written (wai-pack) but read by no receiver.Open questions for the owner (before any submission)
application/waiin the standards tree through an IETF RFC makes the IETF the registration's change controller. The alternatives are the community-format route ofdraft-ietf-mediaman-6838bis-10, which needs evidence of adoption, or a vendor-tree name.[WAI]references point atmainon the forge. Before submission, pin them to a tag or commit.draft-aumasson-blake3-00. The alternative is the BLAKE3 specification paper.draft-charlot-moq-jwp-extensions. This draft already carries the receipts, so decide whether that separate draft is still needed.🤖 Generated with Claude Code
The text said "the resulting hash" without saying which. Both reference verifiers (wai-rs jwp_delivery, joule-moq receipt) and jwp_verify.py compute BLAKE3("moq-jwp:receipt-link\x01" || canonical_bytes(G)); the text now says so, and §2.4.1's parent_receipt_hash row points to it. No byte changes. Co-Authored-By: Claude Opus 5.5 <[email protected]>dcharlot referenced this pull request2026-10-21 15:05:27 -04:00