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
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]>
100 lines
5.3 KiB
Markdown
100 lines
5.3 KiB
Markdown
# 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/`).
|