wai: a carousel schedule extends, what a receiver needs rides in band, a node schedules its own instance, and Raptor #658

Closed
dcharlot wants to merge 4 commits from wai/carousel-monotone-inband into main

2026-11-05

Transaction Science
wai dev's test: the stand-in room service listens without a reverse lookup
Some checks failed
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m57s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 5m35s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 18m11s
wai-pack / wai-pack · macos (pull_request) Successful in 2m53s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 5m47s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 7m45s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 16m7s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 41m5s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 16m50s
wai-quantum studio and desktop / desktop app · windows (pull_request) Successful in 9m33s
wai-quantum WebGPU member / member · GPU, Vulkan (jetson-hub) (pull_request) Successful in 18m38s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 2m42s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 5m29s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 2m0s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 7m12s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 1m53s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 3m35s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 3m9s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 3m49s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 10m3s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 19m6s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 9m5s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 4m53s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 3m15s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 20m21s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 55s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 2m6s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Failing after 39m56s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 10m37s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h42m31s
tests/cli_studio.rs failed on every run on one macOS runner and passed on
every other runner, 3 of 3 against 19 of 19 on 5 November, with "the room
service's clock on the relay: not within 30 s".

The stand-in room service starts an HTTPServer, whose server_bind calls
socket.getfqdn before the server listens. On that host, under the runner's
Python 3.15.2, getfqdn("127.0.0.1") takes 35 s, past the 30 s wai dev waits, and
a stack dump of the stalled stand-in shows it there. The stand-in relay opens a
plain socket and answers in 0.1 s. Nothing here reads the name, so the fixture
no longer asks for it.

On that host and Python the room stand-in took 35.5 s and now takes 0.12 s. A
socket.getfqdn planted to stall for 40 s fails the test without this change,
with the same message, and passes with it.

Changelog: none

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-05 18:25:45 -05:00
Transaction Science
wai: a schedule names Raptor (RFC 5053), the code MBMS download uses
Some checks failed
wai-quantum for JavaScript / javascript · linux (pull_request) Has been cancelled
wai-quantum studio and desktop / does this change touch it (pull_request) Has been cancelled
wai-quantum studio and desktop / studio · browser (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (pull_request) Has been cancelled
wai-quantum WebGPU member / does this change touch it (pull_request) Has been cancelled
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness (pull_request) Has been cancelled
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · GPU, Vulkan (jetson-hub) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · GPU, Vulkan (thor) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Has been cancelled
wai-sink-android native sink library / does this change touch it (pull_request) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Has been cancelled
wai-sink-swift native sink package / does this change touch it (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been cancelled
WAI Studio / does this change touch it (pull_request) Has been cancelled
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Has been cancelled
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Has been cancelled
WAI Studio / Studio in WebKit · linux (pull_request) Has been cancelled
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Has been cancelled
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Has been cancelled
wai-web wasm32 / does this change touch it (pull_request) Has been cancelled
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Has been cancelled
Carousel §4.1, §5.5: an entry's fec may be raptor (FEC Encoding ID 1), with RFC
5053's F, T, Z, N and Al, held to its fields and to its block sizes, 4 to 8,192
source symbols, with ESIs in 16 bits. 3GPP TS 26.346 §7.2.2 requires a receiver
of MBMS download to support the code.

Carousel §5.3: RFC 5053 states no bound on a decoder's failure. An independent
implementation failed on 14 to 31 blocks in 100 at K + 2, so a Raptor block is
held at K and a margin set by measurement, 8, 16 or 28 at overhead 0, 1 or 2,
and failure_one_in is null. tests/carousel.rs decodes each Raptor object a case
holds available with that implementation, a new development dependency, holds a
fixed sample of it to the measurement, and keeps the measurement as an ignored
test.

no-code stays the default, and carousel §11 keeps the IETF's disclosures on RFC
5053 for implementers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-05 12:08:21 -05:00
Transaction Science
wai: a §9 line of cache-authority with a ladder
Cache-authority §9 derives timeliness §6.3's lines for an entry from all three
kinds of held-at statement. Its text and its corpus still spoke of one fallback.
The text now reads every rung, and states a ladder's line as timeliness §6.3 does,
the list of each rung's least instant. The corpus writes a line through
timeliness' own form, which it did not: an array's instants were lost.

The case timeliness_line_ladder holds a rung in the group and a rung in another:
each held alone, on time over both, and the first late with the second in time.
wai-rs and cache_authority_verify.py reach it, the verifier with two more mutated
copies and a weakened check that reads only the first rung.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-05 12:08:21 -05:00
Transaction Science
wai: a later schedule adds passes, what a receiver needs rides on the bearer, and a node schedules its own one-way sending
Carousel §4.5 and §6.2 step 4: along their chain, a later schedule of one
instance that keeps every earlier entry, with at least its passes at the same
instants sending the same symbols, extends the one before it and may add
objects. The last stands and the earlier are labelled `extended`. A schedule
that drops an object, or withdraws, moves or changes a pass, still sets aside
every schedule of its instance. Timeliness plans read the same schedule.

Carousel §8.1 and §8.2: on an instance whose schedule stands, the publisher
sends the group receipt, its claims from the head of their chain to the
instance's last schedule, and the head of its origin's key log, at least once
per the schedule's interval. A verifier given what a receiver acquired checks
that it suffices: inband_chain_incomplete, inband_not_scheduled or
inband_key_log_missing otherwise.

Cache-authority §5.6, §7.2 step 4, §7.3 and carousel §4.3 step 2: a node states
its plan for its own cache instance in a schedule claim signed by its own key.
The cache verdict reads schedules, publisher's and nodes', sets aside another
key's schedule of a node's instance (cache_schedule_signer_mismatch), and holds
a statement of carousel §6.4 to the schedule that stands. A node's schedule
credits nothing.

Vectors for each rule in the carousel, timeliness and cache-authority corpora,
verified by wai-rs and by the Python verifiers, each with mutated copies and
weakened checks for the new rules. On the timeliness ladder: a plan and a run take
a rung over a schedule a later one extends, a plan loses it over the same two
withdrawing a pass, and timeliness §7.5.1 says a run does not date its claims.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-05 12:08:21 -05:00