open-standards/wai/ietf/nmsf-comment.md
Transaction Science 94fef38698
Some checks failed
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 18s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 35s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Failing after 4m26s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 5m17s
The MSF packaging draft, revision -01: current MOQT and MSF, the floor, and a check of our catalogs
draft-charlot-moq-wai-packaging-01 (xml, and the txt and html xml2rfc renders; -00 kept):

- Written against draft-ietf-moq-transport-23 and draft-ietf-moq-msf-01, with the per-role
  required fields and packagingMetadata of MSF's editor's copy of 9 November 2026. MOQT
  citations move where -23 moved them (relay object handling 7.9, the delivery-timeout
  parameters 9.19.3 and 9.19.4); WAI_RECEIPT states its scope, its single instance and the
  65535-byte bound on a property value.
- New: how a receiver falls back, per object to the envelope's fallback and per track to a
  floor track of another packaging in the "wai" track's altGroup (Section 6), as the
  packager writes it; wai_delivery_timeout_ms, which the packager writes on layer tracks;
  the MSF fields a "wai" track carries; one ordered dispatch procedure per object.
- IANA: MSF keeps no registry of packaging values, so "wai" and "wai-receipts" need no IANA
  action (and are asked for should one be created); WAI_RECEIPT stays requested in MOQ
  Properties. application/wai and its codecs parameter leave this draft.
- xml2rfc 3.35.0: no warning. idnits 2.17.1: 0 errors, 0 flaws, 1 warning (no
  first-submission date on the datatracker for this name).

wai/ietf/catalog_check.py, run by the repository checks: the catalogs the packager wrote,
held to the draft's packaging values, "wai" track fields, receipts links and stage-set
checks. Passes on all 18; notes three departures from MSF itself (version written as the
number 1; cmaf floor tracks without isLive or initRef). Its self-test plants 21 faults in
a copy of a real catalog and requires each caught.

wai/ietf/README.md says what the draft defines, the revisions it targets, and how to
rebuild and check it. nmsf-comment.md notes that draft-herz-moq-nmsf-01 has expired.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-10 13:24:32 -05:00

5.3 KiB

Comment on draft-herz-moq-nmsf-01: a model digest and a determinism field

Status: draft comment for the authors of draft-herz-moq-nmsf-01 and the moq list. Not sent. Sending it is the owner's decision. Section numbers below are those of draft-herz-moq-nmsf-01 unless another document is named. draft-herz-moq-nmsf-01 (last revised 7 April 2026) expired on 9 October 2026, as the datatracker showed on 10 November 2026; no later revision exists.

Thank you for the draft. Two catalog fields would let a subscriber check two things the current text leaves to agreement between the endpoints: which model weights a track needs, and whether a decoder on another device reproduces what the encoder's context assumes. Both proposals are small and OPTIONAL, and neither changes the object wire format of §3.2.

1. A model digest

§3.9's modelVersion is a version string. Two endpoints can hold different weights under the same string, through a fine-tune, a re-export or a quantised variant. A learned decoder run against weights other than the encoder's does not fail: it produces a plausible picture that is wrong.

Proposal: an OPTIONAL modelDigest member in the nvc object, the SHA-256 of the weights' bytes as 64 lowercase hexadecimal digits, with two rules:

  • a subscriber that holds no weights with that digest SHOULD NOT subscribe, which extends §3.9's existing "SHOULD NOT subscribe" rule to a check a subscriber can make;
  • a decoder MUST NOT decode a track against weights whose digest differs.

Where the weights span several files (networks, entropy tables), the digest can cover a listing of per-file digests. The WAI specification defines one form for such a listing: one line per file, giving its SHA-256 and its path, in byte order of the paths. A checksum utility can verify it without WAI software (WAI SPEC.md §3.1, "What the digest covers").

2. A determinism field

§4.6 has the encoder run the synthesis transform so that its context buffer "contains exactly the same data that a decoder would produce". That holds only where the decoder computes the same values as the encoder, on whatever device it runs:

  • Entropy decode. §4.2 step 4 entropy-decodes the latent with CDF parameters derived from the decoded hyperprior. If that derivation runs in floating point, two devices can derive different parameters from one bitstream, select different distributions, and decode different symbols from then on.
  • Context. §4.1 feeds each reconstructed frame back as the next frame's context. Where the reconstruction differs between devices, the difference carries forward until the next Intra frame. Where the entropy model also reads that context (a temporal prior), the entropy decode itself diverges.

Floating-point basic operations are correctly rounded, but runtimes choose accumulation order, fused multiply-add, vector width and reduced precision per device, so the same network does not in general give the same bits on two devices.

Proposal: an OPTIONAL entropyDeterminism member in the nvc object, with two values:

  • integer-exact: the decoder derives every entropy-coding parameter in integer or fixed-point arithmetic, or reads it from the bitstream, and so decodes the same symbols on every device;
  • unchecked: no such guarantee is made. This is the meaning when the member is absent.

A codec whose whole decode, synthesis and context included, is integer could also state that, so that a subscriber knows the reconstructed frames themselves reproduce. WAI names these two levels entropy-consistency and decode-equivalence, and explains why parameter transmission reaches the first but not the second (extensions/determinism-tiers.md §2).

Both levels are attainable in practice. WAI registers learned decoders whose hyper-decoder, entropy-parameter derivation and synthesis are integer (wai.neural.int_hyper, and wai.video.int_hyper for integer motion-compensated P-frames after such a keyframe). The repository's CI decodes their committed test vectors on Linux x86_64, Linux arm64 and macOS arm64, and requires the same output hashes on each (extensions/determinism-tiers.md §6). Those vectors are small, and the full-scale model is checked against its exporter's integer reference on one machine per run.

3. Integrity, for completeness

§8 relies on hop-by-hop TLS. TLS protects each hop, but not a payload against a relay that alters it. A publisher signature per group, over the hashes of the group's objects, carried on a separate track, lets a subscriber detect alteration across relays and account for objects a relay dropped. If that is of interest, the WAI receipts track defines one way to do it (draft-charlot-moq-wai-packaging-01 §8; extensions/jwp-receipts.md §2 and §3).

Pointers

  • WAI SPEC.md §3.1: the parameter-set pin, by SHA-256 over the whole set, its verification order and its refusal reasons.
  • extensions/determinism-tiers.md §2 and §3: the two tiers and what each lets a receiver hash.
  • extensions/moq-streaming-format.md §4 and §4.2: catalog fields that declare a track's capabilities, its weakest tier, and the parameter sets its objects pin, by digest.
  • draft-charlot-moq-wai-packaging-01 §5.3 and §5.5: the same, as an MSF packaging.

All in the WAI repository: https://git.transaction.science/Transaction-Science/open-standards (directory wai/).