open-standards/wai/ietf/nmsf-comment.md
Transaction Science 0e56b96963
Some checks failed
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Successful in 3m1s
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 4s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 6s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Successful in 1m27s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
joule-code conformance gate / joule-moq-relay, every target (pull_request) Successful in 2m15s
wai cross-architecture byte-equality / does this change touch it (pull_request) Successful in 5s
WAI conformance / does this change touch it (pull_request) Successful in 5s
WAI energy receipts / does this change touch it (pull_request) Successful in 4s
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 4s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been skipped
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been skipped
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 4s
wai-web wasm32 / does this change touch it (pull_request) Successful in 5s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 54s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m51s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Successful in 31s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m29s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m28s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 32s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 10m0s
wai-pack / wai-pack · linux (pull_request) Successful in 1m31s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m36s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m4s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m3s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 1m58s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Successful in 40s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 9m28s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 51s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Failing after 4m46s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 23s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 50s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m22s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m59s
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Successful in 25s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m22s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 8s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 19m25s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 3m48s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m22s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 3m9s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 36s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m13s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 16m51s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m45s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 1m9s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 27m13s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 50s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m43s
wai-pack / wai-pack · macos (pull_request) Successful in 1m7s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m4s
wai/ietf: draft-charlot-moq-wai-packaging-00 and a comment on NMSF
The Internet-Draft (xml2rfc v3 source and its text rendering) for WAI as
an MSF packaging: the "wai" and "wai-receipts" packaging values; the
envelope, dispatch with fallback, the parameter-set pin by SHA-256 and the
determinism tiers; catalog fields wai_capabilities, wai_determinism,
wai_priors, the receipts fields and wai_staged; the receipts track (WJR1),
its verification and the WAI_RECEIPT object property; the codecs
parameter; security and IANA considerations (WAI_RECEIPT requested from
the Specification Required range, 0x3A41 meanwhile; no action for the
packaging values; application/wai registered). 36 pages; idnits 3.3.0
reports only the three normative references to Internet-Drafts.

Not submitted, and the NMSF comment is not sent: both are the owner's
decision. Author email is a placeholder until the owner confirms it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 05:19:38 -04:00

5.2 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.

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-00 §6; 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-00 (in preparation): the same, as an MSF packaging.

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