wai merge train C: SYN-3, DRED exact, telemetry aggregation, gain maps, soft bindings, splat exact, hybrid post-quantum signatures (#425 #434 #429 #430 #433 #431 #435) #461

Merged
dcharlot merged 73 commits from train/wai-c into main 2026-10-25 23:50:23 -04:00
Owner

WAI merge train C: seven slices on the wai-rs side

Seven reviewed WAI slices, integrated by meaning on #428's train and then on origin/main (b16816671, which holds #428 as aa61ab3b). Each PR was merged with git -c rerere.enabled=false merge --no-ff --no-edit pr/<n>, and checked on the build host before the next.

order PR slice merged head
1 #425 SYN-3, wai-mark:tent64s: the mark found again after crops, rotations and captures of a screen 2016ec180570ff19d07250c084bbe192519f0773
2 #434 B3a, wai.audio.opus.dred.int: DRED decoded exactly 3ad5e8b0cf1b5e1f5b5342a6a5849375cce11536
3 #429 TEL, wai.telemetry.aggregate: QoE received only as sums 8a853e4347d7ab73e86c63340150f641f0085fdd
4 #430 B3b, gain maps, ST 2094-50 and exact tone mapping 17ff17d84f7eada31549c6446db843ffbd376ee1
5 #433 SOFT, soft-binding spans and robustness evidence 01579796be2718db57deed89d21850e50ed14d8c
6 #431 SPLAT, wai.splat.exact 3ec983a53388e36fa4fe02b2add136911244ffbd
7 #435 PQ1, hybrid Ed25519 + ML-DSA-65 signatures 7eaf3927454166a5faa92543c55c9efdd830705b

Then 9f63561b (#428's last commit), origin/main at 41c5bafba, and origin/main at b16816671, each merged without conflict.

Branch train/wai-c, head 9bebdcdac929c6c70e00c395ec28721b50664986.

How they were integrated

  • Shared lists kept both sides: CHANGELOG (each PR's entry on top, as it landed), REGISTRY rows in byte order, the live-conformance index (rows, provenance sentences, verifier lines), the registry's constants, rows, records and wire identifiers, Cargo features, bins and tests.
  • Generated files were never merged by hand. capabilities.json and v2.ttl were taken from one side and regenerated with registry export (after #429, #430, #433, #435). Every corpus was regenerated by its generator after the last merge, and a second run was byte-identical (checks below).
  • Code and spec text, by meaning:
    • codecs/mod.rs: is_companion_only lists the HDR descriptors, the gain map, LCEVC and both DRED layers. The licence test keeps DRED's and the HDR companions' patent-pool entries.
    • tests/carriage.rs: DRED's base_of() gains B3b's gain-map case, an image base.
    • codecs/registry.rs: WireKind gains both frame-metadata (browser sink, in the base) and gltf-extension (SPLAT). all() holds 16 kinds, and the schema's enum lists both labels.
    • SPEC §7.1: the companion list and rule 2 keep the gain map's image class and DRED's base admission side by side.
    • SPEC §5: TEL's, SOFT's, SPLAT's and PQ1's paragraphs, in landing order.
    • determinism-tiers §2: exact-upscale's paragraph, then B3b's HDR paragraph.
    • synthesis §2's origin-claim table: the base's samples subject and SPLAT's volumetric media.
    • jwp-receipts §3.1: PQ1's hybrid sentence in step 3. Step 4 keeps the class range up to §2.4.15 (the bearer classes). §7's authority table names soft-binding-span beside transmission and reconciliation.
    • claim_receipt.rs and claim_verify.py: the bearer classes' reasons and SOFT's span rules, both kept, with PQ1's Pq(..) reason.
    • lib.rs: every module.
    • int_kernels_vectors.rs: the live-conformance exclusion reason names the VDAF vectors, splat/ and dred/.
  • Workflows. Every conflicting step was rebuilt as whole steps, never one step with two run: bodies, and every paths: list was unioned. In wai-ops-gpu.yml, the build step builds the ops_gpu, exact-upscale and splat GPU test targets under SPLAT's name ("test targets"), and DRED's build stays its own step. On Metal, the exact-upscale, DRED and splat steps are each whole.
  • Cargo.lock (#429 × #435): the train's lock with PQ1's dependency resolved into it (cargo metadata, resolve only). Its packages are exactly the union of both sides': 11 added, none removed or re-versioned. After main's advisory sweep, the lock is main's plus TEL's and PQ1's additions.

Interactions fixed (each its own commit)

commit interaction fix
6b693f114 #425 × #408 (base): #408 made synthesis_verify.py's outcome() read a case's held priors. #425's tiled-case loop gave none, so every tent64s case read unreadable: KeyError('priors') the tiled cases state an empty priors list, as tent64's do
00d0041e7 #434 × #430: SPEC §7.1's list of what was registered companion-only after the rules named the HDR companions. It went on to say "every other registered capability is standalone media", which became false with DRED the sentence names the DRED layers too
0e786908b #425 × #433: #425 added Attack::CropSide and Attack::Screen, and #433's Transform::of_attack became non-exhaustive (E0004) of_attack gives None for the two attacks robustness-evidence §4 does not register (§4 leaves further transforms to a later revision). The unit test also checks §7.9.6's registered additions (crop-25%, rotate-5) against the battery's bytes
b57f92347 #435 × the base's bearer receipts: bearer_receipts/corpus.rs builds a key_log::Revision literal without hybrid (E0063) hybrid: None; the corpus is byte-identical
fb7603289 #434 × the sentence #429 and #431 extended: the live-conformance exclusion reason said only splat/ decodes against a parameter set the reason names dred/ too
74d575014 base defect (#428's merges): the live-conformance README's provenance paragraph held three merged variants, each ending in a dangling "joule_moq_e2ee_vectors gen (in" one sentence names every directory's source
f338e61b9 #435's own gap, found by the train: pq-conformance/ had no **Provenance.** line and no reason under the sha256 rule, so corpus_provenance and int_kernels_vectors every_decoded_output_states_a_sha256 failed a provenance line (generator, seeds, the ACVP derivation and notice, the composite draft's vector) and a reason in the exclusion list
9bebdcdac #435 × main's new advisory gate (#443): ml-dsa brought ctutils 0.4.3, which RUSTSEC-2026-0385 names cargo update -p ctutils --precise 0.4.4; wai-rs's advisories are exactly main's again
21625504f #433's own note: the one clippy warning the train has that the base lacks (type_complexity, robustness/corpus.rs) a local type alias

Checked with no change needed:

  • The anchor sentence. synthesis §7.5.8's "For pictures, these attacks, each with the parameter measured:" is unchanged by #425 (its §7.9.7 uses its own sentence). SOFT's robustness.rs, robustness_verify.py, and SYN-2's tests/synthesis_mark.rs and synthesis_mark_verify.py all read the same text.
  • The claim corpus. #435 adds no claim vectors (its hybrid claims are in pq-conformance/). claim-conformance/vectors.json regenerates byte for byte with pq_signatures on (CI's F). The base's 567 vectors are an unchanged prefix of the 615, compared vector by vector. Rust and claim_verify.py agree on every vector, and the differential found no difference.
  • Key logs with pq_signatures on. Every corpus that builds key logs reproduces with the feature on, among them TEL's WQS1/WQA1 statements and every live-conformance corpus (second generator run below).
  • Consent wording. delivery-telemetry §8.1 keeps TEL's text, with no consent gate.
  • DRED weights. They are fetched by digest (dred/fetch.sh) and never committed.
  • Uniqueness. REGISTRY has 313 rows, with no duplicate (name, kind) and no duplicate among its 51 magics. The export has 140 capabilities and 173 wire identifiers, with no duplicate (name, kind). The names under two kinds are the existing ones (wai1, wai2, urn:wai:event:1).

Checks

Unless noted, every check ran on the build host through rb. Union features:

  • F_ALL: every wai-rs feature except default, codecs, neural, semantic, c2pa_emit, cli_tls and quantum* (72 features, the seven slices' among them).
  • F_BASE: the same set at the base.
  • CI F: the regeneration loop's features, pq_signatures among them.

The full run. It ran on acfab1c8c: the train with origin/main at 41c5bafba, before the last main merge and before 21625504f. All results are rc 0 except the three noted.

check command (wai/wai-rs unless noted) result
registry export cargo run -q --locked --no-default-features --bin wai -- registry export --check up to date
C header touch src/container.rs && cargo build -q --locked --no-default-features --lib && git diff --exit-code -- include/wai.h unchanged
compile, pq on / off / default cargo check --locked --no-default-features --features F_ALL[,pq_signatures] --all-targets; cargo check --locked --features pq_signatures --all-targets all three build
CI lib feature set cargo test --locked --no-default-features --features world,…,http --lib, and with ,pq_signatures,synthesis 854 passed; 901 passed
codecs, no features cargo test --locked --no-default-features --lib codecs:: 53 passed
corpus_provenance, cli_registry … --test corpus_provenance --test cli_registry 8 passed (after f338e61b9; failed before it, the gap above)
sha256 rule … --features neural_int,video_int,audio_int,world_int,splat_int --test int_kernels_vectors every_decoded_output_states_a_sha256 1 passed (after f338e61b9)
carriage … --test carriage --test manifest_builders --test cli_wrap_intent; cargo test --locked --test carriage (default features) 15 passed; 3 passed
#425 cargo test --release … --features synthesis_mark --lib -- synthesis::mark synthesis_mark:: and --test synthesis_mark; --features synthesis --lib synthesis:: and --test synthesis 17, 7, 20, 4 passed
#434 bash ../live-conformance/dred/fetch.sh $D vectors; --features dred_exact --lib dred_exact::; WAI_DRED_WEIGHTS=… cargo test --release … --test dred_exact; WAI_DRED_WEIGHTS=… WAI_DRED_VECTORS=… --release --test dred_exact_measure digests match; 18, 4, 1 passed
#429 --features telemetry_aggregate --lib -- telemetry_aggregate:: telemetry:: and --test telemetry_aggregate; --features live_metering --test live_metering 23, 6, 4 passed
#430 --features exact_tonemap --lib -- exact_tonemap:: png_still:: and --test exact_tonemap 11, 4 passed
#433 --release --features robustness --lib robustness:: and --test robustness; --features http,receipt_claims --lib http_binding::tests_receipts; --test staged_moq --test cli_http 5, 7, 17, 17 passed
#431 --features splat_exact --lib splat_exact:: and --test splat_exact; --features contribution --test contribution 5, 4, 4 passed
#435 --features pq_signatures --lib pq_sig::; --features synthesis,pq_signatures --lib synthesis::; --test pq_signatures; --features key_discovery,pq_signatures --lib key_log:: 11, 21, 3, 25 passed
integration tests, pq on and off cargo test --release --locked --no-default-features --features F_ALL[,pq_signatures], with --test for each of: capture_take, derive_edge, energy_steering, live_ads, ad_presentation, live_metering, live_record, live_room, live_events, live_watermark, live_moderation, live_compose, wai_keys_cli, cli_http, staged_moq, synthesis, synthesis_mark, contribution, settlement, access_services, ai_usage, bearer_receipts, age_assurance, co_performance, takedown, browser_sink, influence, direction, exploration, exact_upscale, telemetry_aggregate, exact_tonemap, splat_exact and robustness 161 passed each way
wai-ops-gpu.yml build steps cargo test --locked --no-default-features --features ops_gpu,…,world_int --test ops_gpu --no-run, then the same for ops_gpu,exact_upscale --test exact_upscale_gpu, splat_exact,ops_gpu --test splat_exact_gpu and dred_exact,ops_gpu --test dred_exact_gpu all build
DRED on Metal (headless) the step's command, WAI_OPS_GPU_EXPECT=gpu-metal-0 WAI_OPS_GPU_REQUIRE=1 …, with its two greps dred-gpu: key=gpu-metal-0 payloads=3 streams=2 same=true graphs_on_gpu=29 (acc32 0, acc64 29) on_cpu=0 compared=29 differed=0 errors=[]
splat on Metal the step's command, with its two greps splat-exact gpu: key=gpu-metal-0 views=13 differ=0 mutants_survived=0
exact-upscale on Metal (base's step) the step's command, with its two greps … differ=0 errors=0 equal
wai-ops-gpu crate WAI_OPS_GPU_REQUIRE=1 cargo test --locked --release -- --test-threads=1 (wai/wai-ops-gpu) 6 passed
every live-conformance generator, own features for each README row: cargo run -q --locked [--release] --no-default-features --features <its feature> --bin <gen> -- gen ../live-conformance/<dir> [weights], then git status --porcelain empty. Release for synthesis-mark, robustness, splat and DRED 33 of 33 byte for byte
second run, union + pq cargo build --release --locked --no-default-features --features F_ALL,pq_signatures --bins, then each generator again, tree clean 33 of 33 byte for byte
e2ee generator cargo run -q --locked -p joule-moq-mls --bin joule_moq_e2ee_vectors -- gen ../../wai/live-conformance/e2ee (joule-code-rs), tree clean byte for byte
cargo-class corpora, as CI's loop runs them cargo run -q --no-default-features --features "<CI F>" --bin <gen> -- verify <dir> for the 22 of wai-conformance.yml (pq-signatures among them) 22 of 22 pass
claim and pq corpora regenerate wai_claim_vectors gen ../claim-conformance (CI F); wai_pq_vectors gen ../pq-conformance; tree clean byte for byte
claim corpus prefix a script comparing claim-conformance/vectors.json with 793bd478's, vector by vector 567 of 567 unchanged; 615 in all
Python verifiers (-I) every live-conformance/*_verify.py the workflows run (33, with DRED's on the fetched weights); claim_verify.py (vectors, consumption, bearer); jwp_verify.py; signer_verify.py; pq_verify.py; edge_verify.py; staged_verify.py; pin_verify.py; pack_verify.py; int_payload_verify.py; measure_verify.py; sim_verify.py; tools/wai_audio_provenance_check.py; quantum-conformance/tools/referee.py. http_verify.py imports a sibling module, so it ran as CI runs it, without -I all pass: synthesis-mark PASS (after 6b693f114), tonemap 38 cases and 0 failures, robustness 43 cases, splat 0 failures, aggregate PASS, DRED 16 mutated copies fail, pq all checks, claims 615, http 1055/1055, and so on
verdict differentials signer_verify.py verdicts vs wai_signer_vectors verdicts; pq_verify.py verdicts vs wai_pq_vectors verdicts identical (161; 46)
differentials claim-conformance/differential.py <wai_claim_vectors> --random 2000 --seed 1; jwp-conformance/chain_differential.py --n 3000 and chain_gap_differential.py --n 400, seeds 1 and 2; sim_diff.py, seeds 1 and 2 0 differ, 0 crash
lockfiles cargo metadata --locked --offline --format-version 1 in each of the 10 lockfiles holding wai 9 OK. joule-moq-room failed: its lock trailed wai-quantum 0.6.14, red on main since #427, fixed by main's #447, merged here (rerun below)
dependents cargo check --locked --all-targets (wai-relay, wai-pack, joule-moq-room); cargo test --locked --all-targets and --features int_video --lib (wai-live-web); cargo check --locked --target wasm32-unknown-unknown (wai-web) build; 7 and 8 passed. joule-moq-room as above
clippy against the base cargo clippy --locked --keep-going --no-default-features --features F_ALL,pq_signatures --all-targets --message-format=short, and at 793bd478 with F_BASE, compared by (file, message) one warning new against the base (robustness/corpus.rs, type_complexity), fixed by 21625504f (rerun below)

After the last main merge (21625504f, on b16816671), rerun on the build host:

check command result
registry, header, compile as above: registry export --check; include/wai.h regenerates; cargo check F_ALL with and without pq_signatures, and default features with pq_signatures, --all-targets up to date; unchanged; all build
library and shared tests the CI lib set (and with pq_signatures,synthesis); --lib codecs::; corpus_provenance, cli_registry; int_kernels_vectors (whole target); carriage (no features, default features) 854, 901, 53, 8 and 8 passed; 15 and 3 passed
robustness (21625504f) --release --features robustness --lib robustness:: and --test robustness; wai_robustness_vectors gen (release), tree clean 5 and 7 passed; byte for byte
integration tests, pq on and off the 34 targets above, F_ALL with and without pq_signatures, release 161 passed each way
cargo-class corpora CI's loop, 22 corpora; claim and pq corpora regenerate; the base's claim vectors are an unchanged prefix 22 of 22; byte for byte; 567 of 567
lockfiles cargo metadata --locked --offline in all 10 lockfiles holding wai 10 of 10 OK, joule-moq-room among them
dependents wai-relay, wai-pack, joule-moq-room check --all-targets; wai-live-web tests; wai-web wasm32 build; 7 and 8 passed
clippy against the base as above, compared by (file, message) no warning the base lacks. Both stop on the base's score/mod.rs deny-level lint, with --keep-going past it
repo-checks lockfile gate ./scripts/check-lockfiles-selftest.sh; ./scripts/check-lockfiles.sh passes; 47 lockfiles, all current
repo-checks advisory gate ./scripts/check-advisories-selftest.sh; python3 -I scripts/check-advisories.py the self-test passes. The gate fails on RUSTSEC-2026-0385 (ctutils) and RUSTSEC-2026-0387 (crypto-bigint), across main's lockfiles too, which main's own fix handles. In wai-rs, ctutils came in with PQ1's ml-dsa, so the train cleared it: 9bebdcdac, cargo update -p ctutils --precise 0.4.4, nothing else re-resolved. wai-rs now carries exactly main's advisories (crypto-bigint 0.5.5, rsa, zip; cargo audit --file on both locks)

After 9bebdcdac (ctutils 0.4.4), rerun:

check command result
lock and compile cargo metadata --locked --offline; cargo check F_ALL with pq_signatures, --all-targets OK; builds
PQ1's tests --features pq_signatures --lib pq_sig:: (every ACVP key, signature and verdict, the composite's vector); --features synthesis,pq_signatures --lib synthesis::; --test pq_signatures; --features key_discovery,pq_signatures --lib key_log:: 11, 21, 3, 25 passed
pq corpus wai_pq_vectors gen ../pq-conformance, tree clean; CI's loop verify byte for byte; 46 of 46 verdicts
second implementation python3 -I pq-conformance/pq_verify.py pq-conformance; its verdicts against wai_pq_vectors verdicts all checks pass; identical, 46
lockfiles ./scripts/check-lockfiles.sh 47 lockfiles, all current

Local checks (light), on the pushed head:

check command result
workflow steps python3 wfsteps.py HEAD origin/main pr/425 pr/434 pr/429 pr/430 pr/433 pr/431 pr/435 2 workflow files, 1 problem(s), the one deliberate change: wai-ops-gpu.yml [checks] 'wai-rs builds with ops_gpu, and its GPU test targets' holds the union of the base's and SPLAT's --no-run commands, so its body matches neither source
workflows parse ruby -ryaml -e 'ARGV.each{|f| YAML.load_file(f)}' .github/workflows/*.yml 46 parse
repo checks python3 -I scripts/check-tests-in-ci.py, ./scripts/check-workflow-concurrency.sh, python3 scripts/check-spec-refs.py, python3 scripts/check-wai-section-refs.py, bash scripts/check-no-vanity-metrics.sh, bash scripts/test-public-text-checks.sh, bash scripts/check-comparative-prose.sh, python3 scripts/check-orphan-sources.py all exit 0
public names scripts/check-public-names.sh with the private list on every file the train changes against origin/main; every pattern with grep -E over the train's commit messages and this body clean; 0 hits

Not done

  • robustness-evidence §4 registers no transform for synthesis §7.9.6's side crops and screen captures. So wai-mark:tent64s has no robustness records yet (#433's own open item), and of_attack gives None for those two attacks.
  • REGISTRY's prose list of extensions with wire identifiers names neither telemetry-aggregation (WQS1, WQA1), exact-tonemap (WGM1, WD50), opus-dred nor pq-signatures. Each slice left it so, and the rows themselves are present. Not changed here.
  • Clippy at the base and the train both stop on one deny-level lint already at 793bd478: absurd_extreme_comparisons, src/score/mod.rs:230, in the lib test target. --keep-going lints every other target.
  • GPU legs ran on Metal only, on the build host. Linux arm64, Vulkan, DX12 and browser WebGPU legs come from CI.
  • Main's advisory gate stays red on RUSTSEC-2026-0387 (crypto-bigint 0.5.5), in main's lockfiles and in wai-rs's, which main's own fix handles; not changed here.
  • No forge CI run yet. The lead opens the PR.
  • The open items of each slice's own report stand (see #425, #434, #429, #430, #433, #431 and #435).

Main merged again (head b35ce4af): main's 312b6825 (#449: the advisory gate's answers for RUSTSEC-2026-0385/0387, and the quick-xml fix) merged cleanly.

  • scripts/check-lockfiles.sh: 47 lockfiles, all current.
  • scripts/check-advisories.py: passes (15 allowed advisories).
  • wfsteps.py: only the one deliberate combined step in wai-ops-gpu.yml.
  • All workflows parse.

🤖 Generated with Claude Code

## WAI merge train C: seven slices on the wai-rs side Seven reviewed WAI slices, integrated by meaning on #428's train and then on `origin/main` (`b16816671`, which holds #428 as `aa61ab3b`). Each PR was merged with `git -c rerere.enabled=false merge --no-ff --no-edit pr/<n>`, and checked on the build host before the next. | order | PR | slice | merged head | |---|---|---|---| | 1 | #425 | SYN-3, `wai-mark:tent64s`: the mark found again after crops, rotations and captures of a screen | `2016ec180570ff19d07250c084bbe192519f0773` | | 2 | #434 | B3a, `wai.audio.opus.dred.int`: DRED decoded exactly | `3ad5e8b0cf1b5e1f5b5342a6a5849375cce11536` | | 3 | #429 | TEL, `wai.telemetry.aggregate`: QoE received only as sums | `8a853e4347d7ab73e86c63340150f641f0085fdd` | | 4 | #430 | B3b, gain maps, ST 2094-50 and exact tone mapping | `17ff17d84f7eada31549c6446db843ffbd376ee1` | | 5 | #433 | SOFT, soft-binding spans and robustness evidence | `01579796be2718db57deed89d21850e50ed14d8c` | | 6 | #431 | SPLAT, `wai.splat.exact` | `3ec983a53388e36fa4fe02b2add136911244ffbd` | | 7 | #435 | PQ1, hybrid Ed25519 + ML-DSA-65 signatures | `7eaf3927454166a5faa92543c55c9efdd830705b` | Then `9f63561b` (#428's last commit), `origin/main` at `41c5bafba`, and `origin/main` at `b16816671`, each merged without conflict. Branch `train/wai-c`, head `9bebdcdac929c6c70e00c395ec28721b50664986`. ## How they were integrated - **Shared lists** kept both sides: CHANGELOG (each PR's entry on top, as it landed), REGISTRY rows in byte order, the live-conformance index (rows, provenance sentences, verifier lines), the registry's constants, rows, records and wire identifiers, Cargo features, bins and tests. - **Generated files** were never merged by hand. `capabilities.json` and `v2.ttl` were taken from one side and regenerated with `registry export` (after #429, #430, #433, #435). Every corpus was regenerated by its generator after the last merge, and a second run was byte-identical (checks below). - **Code and spec text**, by meaning: - `codecs/mod.rs`: `is_companion_only` lists the HDR descriptors, the gain map, LCEVC and both DRED layers. The licence test keeps DRED's and the HDR companions' patent-pool entries. - `tests/carriage.rs`: DRED's `base_of()` gains B3b's gain-map case, an image base. - `codecs/registry.rs`: `WireKind` gains both `frame-metadata` (browser sink, in the base) and `gltf-extension` (SPLAT). `all()` holds 16 kinds, and the schema's enum lists both labels. - SPEC §7.1: the companion list and rule 2 keep the gain map's image class and DRED's base admission side by side. - SPEC §5: TEL's, SOFT's, SPLAT's and PQ1's paragraphs, in landing order. - determinism-tiers §2: exact-upscale's paragraph, then B3b's HDR paragraph. - synthesis §2's origin-claim table: the base's `samples` subject and SPLAT's `volumetric` media. - jwp-receipts §3.1: PQ1's hybrid sentence in step 3. Step 4 keeps the class range up to §2.4.15 (the bearer classes). §7's authority table names `soft-binding-span` beside `transmission` and `reconciliation`. - `claim_receipt.rs` and `claim_verify.py`: the bearer classes' reasons and SOFT's span rules, both kept, with PQ1's `Pq(..)` reason. - `lib.rs`: every module. - `int_kernels_vectors.rs`: the live-conformance exclusion reason names the VDAF vectors, splat/ and dred/. - **Workflows.** Every conflicting step was rebuilt as whole steps, never one step with two `run:` bodies, and every `paths:` list was unioned. In `wai-ops-gpu.yml`, the build step builds the ops_gpu, exact-upscale and splat GPU test targets under SPLAT's name ("test targets"), and DRED's build stays its own step. On Metal, the exact-upscale, DRED and splat steps are each whole. - **Cargo.lock** (#429 × #435): the train's lock with PQ1's dependency resolved into it (`cargo metadata`, resolve only). Its packages are exactly the union of both sides': 11 added, none removed or re-versioned. After main's advisory sweep, the lock is main's plus TEL's and PQ1's additions. ## Interactions fixed (each its own commit) | commit | interaction | fix | |---|---|---| | `6b693f114` | #425 × #408 (base): #408 made `synthesis_verify.py`'s `outcome()` read a case's held priors. #425's tiled-case loop gave none, so every tent64s case read `unreadable: KeyError('priors')` | the tiled cases state an empty priors list, as tent64's do | | `00d0041e7` | #434 × #430: SPEC §7.1's list of what was registered companion-only after the rules named the HDR companions. It went on to say "every other registered capability is standalone media", which became false with DRED | the sentence names the DRED layers too | | `0e786908b` | #425 × #433: #425 added `Attack::CropSide` and `Attack::Screen`, and #433's `Transform::of_attack` became non-exhaustive (E0004) | `of_attack` gives `None` for the two attacks robustness-evidence §4 does not register (§4 leaves further transforms to a later revision). The unit test also checks §7.9.6's registered additions (`crop-25%`, `rotate-5`) against the battery's bytes | | `b57f92347` | #435 × the base's bearer receipts: `bearer_receipts/corpus.rs` builds a `key_log::Revision` literal without `hybrid` (E0063) | `hybrid: None`; the corpus is byte-identical | | `fb7603289` | #434 × the sentence #429 and #431 extended: the live-conformance exclusion reason said only splat/ decodes against a parameter set | the reason names dred/ too | | `74d575014` | base defect (#428's merges): the live-conformance README's provenance paragraph held three merged variants, each ending in a dangling "`joule_moq_e2ee_vectors gen` (in" | one sentence names every directory's source | | `f338e61b9` | #435's own gap, found by the train: `pq-conformance/` had no `**Provenance.**` line and no reason under the sha256 rule, so `corpus_provenance` and `int_kernels_vectors every_decoded_output_states_a_sha256` failed | a provenance line (generator, seeds, the ACVP derivation and notice, the composite draft's vector) and a reason in the exclusion list | | `9bebdcdac` | #435 × main's new advisory gate (#443): ml-dsa brought ctutils 0.4.3, which RUSTSEC-2026-0385 names | `cargo update -p ctutils --precise 0.4.4`; wai-rs's advisories are exactly main's again | | `21625504f` | #433's own note: the one clippy warning the train has that the base lacks (`type_complexity`, `robustness/corpus.rs`) | a local type alias | Checked with no change needed: - **The anchor sentence.** synthesis §7.5.8's "For pictures, these attacks, each with the parameter measured:" is unchanged by #425 (its §7.9.7 uses its own sentence). SOFT's `robustness.rs`, `robustness_verify.py`, and SYN-2's `tests/synthesis_mark.rs` and `synthesis_mark_verify.py` all read the same text. - **The claim corpus.** #435 adds no claim vectors (its hybrid claims are in `pq-conformance/`). `claim-conformance/vectors.json` regenerates byte for byte with `pq_signatures` on (CI's F). The base's 567 vectors are an unchanged prefix of the 615, compared vector by vector. Rust and `claim_verify.py` agree on every vector, and the differential found no difference. - **Key logs with `pq_signatures` on.** Every corpus that builds key logs reproduces with the feature on, among them TEL's WQS1/WQA1 statements and every live-conformance corpus (second generator run below). - **Consent wording.** delivery-telemetry §8.1 keeps TEL's text, with no consent gate. - **DRED weights.** They are fetched by digest (`dred/fetch.sh`) and never committed. - **Uniqueness.** REGISTRY has 313 rows, with no duplicate (name, kind) and no duplicate among its 51 magics. The export has 140 capabilities and 173 wire identifiers, with no duplicate (name, kind). The names under two kinds are the existing ones (`wai1`, `wai2`, `urn:wai:event:1`). ## Checks Unless noted, every check ran on the build host through `rb`. Union features: - **F_ALL**: every wai-rs feature except `default`, `codecs`, `neural`, `semantic`, `c2pa_emit`, `cli_tls` and `quantum*` (72 features, the seven slices' among them). - **F_BASE**: the same set at the base. - **CI F**: the regeneration loop's features, `pq_signatures` among them. **The full run.** It ran on `acfab1c8c`: the train with `origin/main` at `41c5bafba`, before the last main merge and before `21625504f`. All results are rc 0 except the three noted. | check | command (wai/wai-rs unless noted) | result | |---|---|---| | registry export | `cargo run -q --locked --no-default-features --bin wai -- registry export --check` | up to date | | C header | `touch src/container.rs && cargo build -q --locked --no-default-features --lib && git diff --exit-code -- include/wai.h` | unchanged | | compile, pq on / off / default | `cargo check --locked --no-default-features --features F_ALL[,pq_signatures] --all-targets`; `cargo check --locked --features pq_signatures --all-targets` | all three build | | CI lib feature set | `cargo test --locked --no-default-features --features world,…,http --lib`, and with `,pq_signatures,synthesis` | 854 passed; 901 passed | | codecs, no features | `cargo test --locked --no-default-features --lib codecs::` | 53 passed | | corpus_provenance, cli_registry | `… --test corpus_provenance --test cli_registry` | 8 passed (after `f338e61b9`; failed before it, the gap above) | | sha256 rule | `… --features neural_int,video_int,audio_int,world_int,splat_int --test int_kernels_vectors every_decoded_output_states_a_sha256` | 1 passed (after `f338e61b9`) | | carriage | `… --test carriage --test manifest_builders --test cli_wrap_intent`; `cargo test --locked --test carriage` (default features) | 15 passed; 3 passed | | #425 | `cargo test --release … --features synthesis_mark --lib -- synthesis::mark synthesis_mark::` and `--test synthesis_mark`; `--features synthesis --lib synthesis::` and `--test synthesis` | 17, 7, 20, 4 passed | | #434 | `bash ../live-conformance/dred/fetch.sh $D vectors`; `--features dred_exact --lib dred_exact::`; `WAI_DRED_WEIGHTS=… cargo test --release … --test dred_exact`; `WAI_DRED_WEIGHTS=… WAI_DRED_VECTORS=… --release --test dred_exact_measure` | digests match; 18, 4, 1 passed | | #429 | `--features telemetry_aggregate --lib -- telemetry_aggregate:: telemetry::` and `--test telemetry_aggregate`; `--features live_metering --test live_metering` | 23, 6, 4 passed | | #430 | `--features exact_tonemap --lib -- exact_tonemap:: png_still::` and `--test exact_tonemap` | 11, 4 passed | | #433 | `--release --features robustness --lib robustness::` and `--test robustness`; `--features http,receipt_claims --lib http_binding::tests_receipts`; `--test staged_moq --test cli_http` | 5, 7, 17, 17 passed | | #431 | `--features splat_exact --lib splat_exact::` and `--test splat_exact`; `--features contribution --test contribution` | 5, 4, 4 passed | | #435 | `--features pq_signatures --lib pq_sig::`; `--features synthesis,pq_signatures --lib synthesis::`; `--test pq_signatures`; `--features key_discovery,pq_signatures --lib key_log::` | 11, 21, 3, 25 passed | | integration tests, pq on and off | `cargo test --release --locked --no-default-features --features F_ALL[,pq_signatures]`, with `--test` for each of: capture_take, derive_edge, energy_steering, live_ads, ad_presentation, live_metering, live_record, live_room, live_events, live_watermark, live_moderation, live_compose, wai_keys_cli, cli_http, staged_moq, synthesis, synthesis_mark, contribution, settlement, access_services, ai_usage, bearer_receipts, age_assurance, co_performance, takedown, browser_sink, influence, direction, exploration, exact_upscale, telemetry_aggregate, exact_tonemap, splat_exact and robustness | 161 passed each way | | wai-ops-gpu.yml build steps | `cargo test --locked --no-default-features --features ops_gpu,…,world_int --test ops_gpu --no-run`, then the same for `ops_gpu,exact_upscale --test exact_upscale_gpu`, `splat_exact,ops_gpu --test splat_exact_gpu` and `dred_exact,ops_gpu --test dred_exact_gpu` | all build | | DRED on Metal (headless) | the step's command, `WAI_OPS_GPU_EXPECT=gpu-metal-0 WAI_OPS_GPU_REQUIRE=1 …`, with its two greps | `dred-gpu: key=gpu-metal-0 payloads=3 streams=2 same=true graphs_on_gpu=29 (acc32 0, acc64 29) on_cpu=0 compared=29 differed=0 errors=[]` | | splat on Metal | the step's command, with its two greps | `splat-exact gpu: key=gpu-metal-0 views=13 differ=0 mutants_survived=0` | | exact-upscale on Metal (base's step) | the step's command, with its two greps | `… differ=0 errors=0 equal` | | wai-ops-gpu crate | `WAI_OPS_GPU_REQUIRE=1 cargo test --locked --release -- --test-threads=1` (wai/wai-ops-gpu) | 6 passed | | every live-conformance generator, own features | for each README row: `cargo run -q --locked [--release] --no-default-features --features <its feature> --bin <gen> -- gen ../live-conformance/<dir> [weights]`, then `git status --porcelain` empty. Release for synthesis-mark, robustness, splat and DRED | 33 of 33 byte for byte | | second run, union + pq | `cargo build --release --locked --no-default-features --features F_ALL,pq_signatures --bins`, then each generator again, tree clean | 33 of 33 byte for byte | | e2ee generator | `cargo run -q --locked -p joule-moq-mls --bin joule_moq_e2ee_vectors -- gen ../../wai/live-conformance/e2ee` (joule-code-rs), tree clean | byte for byte | | cargo-class corpora, as CI's loop runs them | `cargo run -q --no-default-features --features "<CI F>" --bin <gen> -- verify <dir>` for the 22 of `wai-conformance.yml` (pq-signatures among them) | 22 of 22 pass | | claim and pq corpora regenerate | `wai_claim_vectors gen ../claim-conformance` (CI F); `wai_pq_vectors gen ../pq-conformance`; tree clean | byte for byte | | claim corpus prefix | a script comparing `claim-conformance/vectors.json` with `793bd478`'s, vector by vector | 567 of 567 unchanged; 615 in all | | Python verifiers (-I) | every `live-conformance/*_verify.py` the workflows run (33, with DRED's on the fetched weights); `claim_verify.py` (vectors, `consumption`, `bearer`); `jwp_verify.py`; `signer_verify.py`; `pq_verify.py`; `edge_verify.py`; `staged_verify.py`; `pin_verify.py`; `pack_verify.py`; `int_payload_verify.py`; `measure_verify.py`; `sim_verify.py`; `tools/wai_audio_provenance_check.py`; `quantum-conformance/tools/referee.py`. `http_verify.py` imports a sibling module, so it ran as CI runs it, without -I | all pass: synthesis-mark PASS (after `6b693f114`), tonemap 38 cases and 0 failures, robustness 43 cases, splat 0 failures, aggregate PASS, DRED 16 mutated copies fail, pq all checks, claims 615, http 1055/1055, and so on | | verdict differentials | `signer_verify.py verdicts` vs `wai_signer_vectors verdicts`; `pq_verify.py verdicts` vs `wai_pq_vectors verdicts` | identical (161; 46) | | differentials | `claim-conformance/differential.py <wai_claim_vectors> --random 2000 --seed 1`; `jwp-conformance/chain_differential.py --n 3000` and `chain_gap_differential.py --n 400`, seeds 1 and 2; `sim_diff.py`, seeds 1 and 2 | 0 differ, 0 crash | | lockfiles | `cargo metadata --locked --offline --format-version 1` in each of the 10 lockfiles holding `wai` | 9 OK. joule-moq-room failed: its lock trailed wai-quantum 0.6.14, red on main since #427, fixed by main's #447, merged here (rerun below) | | dependents | `cargo check --locked --all-targets` (wai-relay, wai-pack, joule-moq-room); `cargo test --locked --all-targets` and `--features int_video --lib` (wai-live-web); `cargo check --locked --target wasm32-unknown-unknown` (wai-web) | build; 7 and 8 passed. joule-moq-room as above | | clippy against the base | `cargo clippy --locked --keep-going --no-default-features --features F_ALL,pq_signatures --all-targets --message-format=short`, and at `793bd478` with F_BASE, compared by (file, message) | one warning new against the base (`robustness/corpus.rs`, type_complexity), fixed by `21625504f` (rerun below) | **After the last main merge** (`21625504f`, on `b16816671`), rerun on the build host: | check | command | result | |---|---|---| | registry, header, compile | as above: `registry export --check`; `include/wai.h` regenerates; `cargo check` F_ALL with and without `pq_signatures`, and default features with `pq_signatures`, `--all-targets` | up to date; unchanged; all build | | library and shared tests | the CI lib set (and with `pq_signatures,synthesis`); `--lib codecs::`; `corpus_provenance`, `cli_registry`; `int_kernels_vectors` (whole target); carriage (no features, default features) | 854, 901, 53, 8 and 8 passed; 15 and 3 passed | | robustness (`21625504f`) | `--release --features robustness --lib robustness::` and `--test robustness`; `wai_robustness_vectors gen` (release), tree clean | 5 and 7 passed; byte for byte | | integration tests, pq on and off | the 34 targets above, F_ALL with and without `pq_signatures`, release | 161 passed each way | | cargo-class corpora | CI's loop, 22 corpora; claim and pq corpora regenerate; the base's claim vectors are an unchanged prefix | 22 of 22; byte for byte; 567 of 567 | | lockfiles | `cargo metadata --locked --offline` in all 10 lockfiles holding `wai` | 10 of 10 OK, joule-moq-room among them | | dependents | wai-relay, wai-pack, joule-moq-room `check --all-targets`; wai-live-web tests; wai-web wasm32 | build; 7 and 8 passed | | clippy against the base | as above, compared by (file, message) | no warning the base lacks. Both stop on the base's `score/mod.rs` deny-level lint, with `--keep-going` past it | | repo-checks lockfile gate | `./scripts/check-lockfiles-selftest.sh`; `./scripts/check-lockfiles.sh` | passes; 47 lockfiles, all current | | repo-checks advisory gate | `./scripts/check-advisories-selftest.sh`; `python3 -I scripts/check-advisories.py` | the self-test passes. The gate fails on RUSTSEC-2026-0385 (ctutils) and RUSTSEC-2026-0387 (crypto-bigint), across main's lockfiles too, which main's own fix handles. In wai-rs, ctutils came in with PQ1's ml-dsa, so the train cleared it: `9bebdcdac`, `cargo update -p ctutils --precise 0.4.4`, nothing else re-resolved. wai-rs now carries exactly main's advisories (crypto-bigint 0.5.5, rsa, zip; `cargo audit --file` on both locks) | After `9bebdcdac` (ctutils 0.4.4), rerun: | check | command | result | |---|---|---| | lock and compile | `cargo metadata --locked --offline`; `cargo check` F_ALL with `pq_signatures`, `--all-targets` | OK; builds | | PQ1's tests | `--features pq_signatures --lib pq_sig::` (every ACVP key, signature and verdict, the composite's vector); `--features synthesis,pq_signatures --lib synthesis::`; `--test pq_signatures`; `--features key_discovery,pq_signatures --lib key_log::` | 11, 21, 3, 25 passed | | pq corpus | `wai_pq_vectors gen ../pq-conformance`, tree clean; CI's loop `verify` | byte for byte; 46 of 46 verdicts | | second implementation | `python3 -I pq-conformance/pq_verify.py pq-conformance`; its `verdicts` against `wai_pq_vectors verdicts` | all checks pass; identical, 46 | | lockfiles | `./scripts/check-lockfiles.sh` | 47 lockfiles, all current | **Local checks (light), on the pushed head:** | check | command | result | |---|---|---| | workflow steps | `python3 wfsteps.py HEAD origin/main pr/425 pr/434 pr/429 pr/430 pr/433 pr/431 pr/435` | `2 workflow files, 1 problem(s)`, the one deliberate change: `wai-ops-gpu.yml [checks] 'wai-rs builds with ops_gpu, and its GPU test targets'` holds the union of the base's and SPLAT's `--no-run` commands, so its body matches neither source | | workflows parse | `ruby -ryaml -e 'ARGV.each{\|f\| YAML.load_file(f)}' .github/workflows/*.yml` | 46 parse | | repo checks | `python3 -I scripts/check-tests-in-ci.py`, `./scripts/check-workflow-concurrency.sh`, `python3 scripts/check-spec-refs.py`, `python3 scripts/check-wai-section-refs.py`, `bash scripts/check-no-vanity-metrics.sh`, `bash scripts/test-public-text-checks.sh`, `bash scripts/check-comparative-prose.sh`, `python3 scripts/check-orphan-sources.py` | all exit 0 | | public names | `scripts/check-public-names.sh` with the private list on every file the train changes against `origin/main`; every pattern with `grep -E` over the train's commit messages and this body | clean; 0 hits | ## Not done - **robustness-evidence §4 registers no transform for synthesis §7.9.6's side crops and screen captures.** So `wai-mark:tent64s` has no robustness records yet (#433's own open item), and `of_attack` gives `None` for those two attacks. - **REGISTRY's prose list of extensions with wire identifiers** names neither telemetry-aggregation (WQS1, WQA1), exact-tonemap (WGM1, WD50), opus-dred nor pq-signatures. Each slice left it so, and the rows themselves are present. Not changed here. - **Clippy at the base and the train** both stop on one deny-level lint already at `793bd478`: `absurd_extreme_comparisons`, `src/score/mod.rs:230`, in the lib test target. `--keep-going` lints every other target. - **GPU legs ran on Metal only**, on the build host. Linux arm64, Vulkan, DX12 and browser WebGPU legs come from CI. - **Main's advisory gate** stays red on RUSTSEC-2026-0387 (crypto-bigint 0.5.5), in main's lockfiles and in wai-rs's, which main's own fix handles; not changed here. - **No forge CI run yet.** The lead opens the PR. - The open items of each slice's own report stand (see #425, #434, #429, #430, #433, #431 and #435). **Main merged again (head `b35ce4af`):** main's `312b6825` (#449: the advisory gate's answers for RUSTSEC-2026-0385/0387, and the quick-xml fix) merged cleanly. - `scripts/check-lockfiles.sh`: 47 lockfiles, all current. - `scripts/check-advisories.py`: passes (15 allowed advisories). - `wfsteps.py`: only the one deliberate combined step in `wai-ops-gpu.yml`. - All workflows parse. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The script moved to the repository's root before reading its arguments, so paths
given from a subdirectory (a builder in wai/ or wai/wai-rs) did not exist and grep
exited 2 for the whole list; a list built from git diff after main moved, naming a
file absent from the work tree, failed the same way with nothing to say which. Each
relative argument is now resolved against the caller's directory, and every argument
that is not a readable regular file is named before the scan (still exit 2, fail
closed). The self-test gains cases for relative paths, many files, a missing file and
a directory among many.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The 64 x 64 grid is cut into 2 x 2 tiles of 32 x 32 cells, each tile holding the same
layout, four positions a bit, so a bit keeps 16 cells and the embedding is tent64's,
spending nothing on synchronisation. Stage 1 reads the grid in place in the 8
orientations, as tent64 does. Stage 2, where stage 1 reads nothing: the tile lattice from
the exact autocorrelation (a number-theoretic transform) of a sign plane matched to the
cell pattern, eight candidates scored over their four lattice points; each folded onto one
tile by the parity of its tiles, the cells' phase by how well the tiles agree; the
orientation and the tile's offset by how many pairs of a bit's four cells agree; at most
four words decoded. Integer throughout.

The verifier dispatches over the registered schemes (§7.6's recomputation and rerun).
The battery adds crops from each side, a crop of 25%, a rotation of 5 degrees and two
simulated captures of a screen; tent64's corpus files regenerate unchanged. The scheme's
corpus files sit beside tent64's and share its frames; frames a crop, a rotation or a
capture makes are derived at verify time, not stored.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
§7.9 specifies the tiled layout, the two stages of the detector step by step in integers,
the bound over all 12 decodes and its check, the battery's additions (crops from each
side, a crop of 25%, a rotation of 5 degrees, two simulated captures of a screen) and the
measurement: both generated sets survive every attack; the claims are what the
photographs survived too. §7.4, §7.6 to §7.8 and §13, §14 cover both registered schemes;
§1 drops the crop-and-rotation exclusion. Registry, export, SPEC §5, CHANGELOG, READMEs
and the CI step's description follow.

_wai_mark.py gains the tiled scheme from the text (the autocorrelation by one integer
product a frame, the fold, the phase and a bit-sliced agreement count); synthesis_verify.py
recomputes and reruns either scheme; synthesis_mark_verify.py checks the tiled files,
derives the frames they name, mutates them and weakens itself against them. Tests pin
§7.9.1's definition and digest, §7.9.2's shuffle, §7.9.5's figures and §7.9.7's table and
claims to the reference.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The crop-and-rotation unit test takes its pictures and attacks from synthesis_mark, so it
runs under that feature; the lib's synthesis:: tests build without it. Three clippy notes
in the detector (an indexed loop, a sort by key, a cloned slice) rewritten without
changing what it computes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The test checked §7.9.7's claims against the generated sets' tallies alone, so a claim
the photographs' column refutes passed it (screen-b, falsified); it now reads the row's
three columns, as the second implementation does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
tent64s corpus: each detect vector states stage 2's trace
All checks were successful
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 1m13s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m14s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 34s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 9m9s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 2m21s
wai-pack / wai-pack · linux (pull_request) Successful in 1m24s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 6m11s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 29s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 8m25s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m55s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 19m10s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m55s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m10s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m16s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m35s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 23m44s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 1m17s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m46s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m5s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 44m56s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m6s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 13m36s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 18s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 44s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m58s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 2m39s
wai-pack / wai-pack · macos (pull_request) Successful in 1m15s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m15s
2016ec1805
Every candidate stage 2 keeps (its vectors, refined lattice, bins and phase) and the
hypotheses it decodes, for every detect vector, stored or derived. The vectors' payloads
alone did not tell the phase rule apart: choosing the phase by the tile's energy rather
than the tiles' agreement passed the second implementation (falsified); with the traces
the two implementations compare the whole pipeline, and a mutated phase is caught.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Fields, TurboSHAKE128 (RFC 9861 vectors) and XofTurboShake128, the FLP in the
Lagrange basis, sharding, verification, aggregation, unsharding and the
ping-pong messages; the draft's published Prio3 vectors (commit 888e4b1)
vendored under live-conformance/aggregate/vdaf-22/ and run by
tests/telemetry_aggregate.rs. New dependencies behind the feature: keccak,
aes-gcm, hkdf (RustCrypto, Apache-2.0 OR MIT); the lockfile only gains entries.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
A soft-binding-span claim declares a value computed over a span of one track:
its media time (both ends included, C2PA's timespan) and, where stated, the
groups or objects that carry it. Recovery through it needs a verified delivery
receipt within the span and attests the span, never one object of it; a
receipt outside it is recovery_outside_span. Whole-object soft-binding claims
and their vectors are byte-identical. claim_receipt, claim_verify.py and the
differential learn the class; 48 vectors appended to claim-conformance.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
extensions/telemetry-aggregation.md: four measures over session metrics
(Prio3SumVec, Prio3Sum, Prio3Histogram), the DAP task's task_info layout and
id, the floor of fifty reports each aggregator enforces, the WQS1 statement
each aggregator signs, the WQA1 receipt the collector signs, verification,
and a room's cell. delivery-telemetry: a class and what it reveals for every
CMCD key the mapping writes (§3.4), delivery-only Request mode (§4.3), §8.1
stated as facts with no consent gate, §8.4 pointing to aggregation.
live-metering §4.7/§6.5: a room may aggregate its QoE instead of sending logs.

wai-rs: HPKE base mode (RFC 9180 A.1.1), DAP-20 messages, a reference
client, leader, helper and collector, the receipt verifier, and the corpus
generator; live-conformance/aggregate/vectors.json from fixed seeds.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Written from the extension's text and the drafts it cites, sharing no code
with wai-rs: Keccak-p[1600,12], TurboSHAKE128 and the VDAF XOF; Field64 and
Field128, the Lagrange-basis FLP and Prio3 (passing the draft's vectors);
X25519, HKDF, AES-128-GCM and HPKE (RFC 9180 A.1.1); every flow re-run from
its reports with the test keys, byte for byte; receipts and cells in §8.1's
order; delivery-telemetry §3.4's classes read from the text. Every mutated
copy of the corpus fails and every weakened verifier fails the corpus.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
decode_grey_or_rgb reads colour type 0 or 2 under the reader's rules (a
palette refused in a greyscale picture); encode_grey writes colour type 0
with the same Sub filter and fixed deflate. decode and encode are unchanged.
A gain map's picture is carried as such a PNG (extensions/exact-tonemap.md).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The extension text (extensions/exact-tonemap.md), the exact_tonemap module
of wai-rs (integer log2/exp2, the sRGB table, wai-tonemap:gainmap and
wai-tonemap:st2094-50, the rendition record and its verification), the
registry rows and SPEC §5 / §7.1 text for the two companions, the glossary
entries, and the corpus live-conformance/tonemap/ written by
wai_tonemap_vectors gen.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The wai-rs module behind the feature splat_exact: the asset read as a
compression extension of KHR_gaussian_splatting, the decode through the
envelope's pin, the fixed-point camera, projection, order and integer
compositing, the identity set the corpus carries authored scenes with,
the commitment and view statement records, and a float renderer of the
same model for measurement. The corpus live-conformance/splat/ written by
wai_splat_exact_vectors gen, and its second implementation
splat_exact_verify.py with its own integer renderer. Synthesis origin
claims may now name volumetric media.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The record and its magics (WQS1, WQA1) in the registry and its export; a SPEC
§5 paragraph; the live-conformance table's row with its generator; the
corpus exclusion's reason names the vendored VDAF vectors; a CI step runs the
module's tests, tests/telemetry_aggregate.rs and the independent verifier,
with both extension texts in the workflow's paths. A unit test of the
delivery-only Request mode.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
tonemap_verify.py, written from extensions/exact-tonemap.md: its own integer
log2/exp2, sRGB table, gain map and ST 2094-50 derivations, Annex C reader,
PCHIP on exact rationals and PNG reader; envelopes and SPEC §7.1's component
rules through staged_verify.py, which now knows the two new companions' base
classes. It agrees with wai-rs on every case, recomputes §6's measurement,
and catches every mutation and every dropped check. Two cases added so the
binding check is load-bearing: a base index that names the companion, and a
gain map bound by id to another rendition than the record's base.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
extensions/splat-exact.md registers wai.splat.exact: carriage in glTF as
EXT_gaussian_splatting_compression_wai under KHR_gaussian_splatting, the
attribute layout and its dequantization, the renderer wai-splat-render:i1,
the commitment, the view statement, provenance, verification, reasons and
the measured quality cost. The draft JSON Schema of the extension object is
extensions/gltf/. The corpus gains cases the second implementation's
self-falsification showed were missing: an unrequired extension, a buffer
view past the envelope, a set whose bytes or pin alone disagree, a
commitment naming another object or set, and statements naming another
object or renderer or another pose's frame.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
telemetry-aggregation: a configuration that does not read is task_invalid; plainer §3.2
Some checks failed
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
WAI neural sink gates / does this change touch it (pull_request) Has been cancelled
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Has been cancelled
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Has been cancelled
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
8a853e4347
Co-Authored-By: Claude Opus 5.5 <[email protected]>
The wai-conformance step runs the module's and the PNG reader's unit tests,
tests/exact_tonemap.rs and tonemap_verify.py; the extension is in the
workflow's paths. determinism-tiers §2 names HDR display adaptation as
processing that alters the decode, and the pinned derivations as the way a
sink keeps its tier. The research registry records what was read for the two
companions and why both are classified conservatively. The carriage test
binds the gain map to an image, as rule 2 now requires. png_still gains a
greyscale round-trip test; clippy notes in the new code fixed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
tonemap_verify: a refusal with a code §9 does not list fails the corpus
Some checks failed
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been cancelled
WAI neural sink gates / does this change touch it (pull_request) Has been cancelled
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
wai-pack / wai-pack · does this change touch it (pull_request) Has been cancelled
wai-pack / wai-pack · linux (pull_request) Has been cancelled
wai-pack / wai-pack · linux-arm64 (pull_request) Has been cancelled
wai-pack / wai-pack · macos (pull_request) Has been cancelled
wai-pack / wai-pack · independent verifier (Python) (pull_request) Has been cancelled
wai-pack / wai-pack · the floor through a media prober (pull_request) Has been cancelled
wai-pack / wai-pack · dependency licences (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-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
17e56b609b
Falsified: §9 without frame_uncovered passed before this check (exit 0)
and fails with it (exit 1).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-ops-gpu gains the kernel wgsl/splat.wgsl, one invocation a pixel and
one workgroup a 16 x 16 tile, over the operator set's probed 64-bit
products; the host projects, culls and orders. wai-rs's splat_exact::gpu
(features splat_exact, ops_gpu) composes on every adapter found, and
tests/splat_exact_gpu.rs holds every canonical and own-pose view of the
splat corpus to the CPU's frame byte for byte and requires three edited
kernels to be caught. The macos job of wai-ops-gpu.yml runs it under
WAI_OPS_GPU_REQUIRE; the linux job builds it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The record wai.splat.exact; the document kinds wai-splat-commitment and
wai-splat-view, the scheme wai-splat-render:i1, and the proposed glTF
extension name EXT_gaussian_splatting_compression_wai under a new wire
identifier kind, gltf-extension (schema enum, REGISTRY.md prose). The
wai-conformance.yml step runs the module's tests and splat_exact_verify.py,
and its paths take the extension, its schema and wai_ops_check.py. The
extension's §11 records the GPU run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A falsification showed the corpus's renditions do not expose every error in
the arithmetic: tan's series cut to five terms still regenerated the corpus
(slopes off by less than a code value's worth). vectors.json now states L2,
E2, the sRGB table, tan across its range of angles and the video's slopes at
fixed points; both implementations check them, and a stated tan changed by
one is a mutation the Python verifier requires to fail.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
extensions/robustness-evidence.md: a corpus named item by item by the SHA-256
of its samples, the attack battery as registered integer transforms with
parameters and seeds (synthesis §7.5.7's battery with its parameters free, and
gamma), the signed robustness record whose table the harness recomputes and
whose rates are exact fractions, and the robustness claim that holds only
where every item of a cited record's corpus survived the attack and no
negative was read as marked. wai-rs module robustness (feature robustness),
wai_robustness_vectors, the corpus with wai-mark:tent64's records over the
measurement sets and its claim, and robustness_verify.py, which reruns the
conformance battery end to end with _wai_mark.py.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
A second falsification: L2's squarings rounded instead of truncated still
regenerated the corpus (the variant differs on about 3 in 100000 mantissas).
vectors.json now states the SHA-256 of L2 at 2^18 spread values, of E2's
mantissa for every fraction and of tan for every angle; both implementations
check them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
splat_exact: clippy's range loops, partial order, slice and as_chunks notes
Some checks failed
wai-pack / wai-pack · independent verifier (Python) (pull_request) Has been cancelled
wai-pack / wai-pack · the floor through a media prober (pull_request) Has been cancelled
wai-pack / wai-pack · dependency licences (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
3ec983a533
Co-Authored-By: Claude Opus 5.5 <[email protected]>
tonemap corpus: no cast of L2's value to its own type (clippy)
Some checks failed
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
wai cross-architecture byte-equality / does this change touch it (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-relay, every target (pull_request) Has been cancelled
joule-code conformance gate / joule-moq-ingest, every target (pull_request) Has been cancelled
17ff17d84f
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
cbindgen parses every module, and the robustness module's constants and its
reason table reached include/wai.h. The module is cbindgen:ignore, as the live
modules are, and a forced regeneration gives main's header again.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
http_binding: a recovery record naming a span declaration is checked within the span
Some checks failed
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
01579796be
Over HTTP the record is checked with a delivery item that passed and lies within
the span, or, with none, refused recovery_outside_span.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The DRED extension found in an Opus packet's padding (RFC 6716 framing, the
extension draft's iterator with its repeat mechanism), its payload parsed to
integers over RFC 6716's range decoder, the decoder weights file parsed and
expanded from its storage layouts, and the lowering dred-int/1: weights
quantized from their float32 bits, tanh and the sigmoid as lut16 tables of a
fixed integer computation, the decoder as two WHG1 graphs loaded under acc64.
A floating-point reference with a deterministic exponential, the draft's
feature comparison, a stream under a seeded loss pattern, and the corpus
generator. Behind the feature dred_exact; the weights are pinned by digest
and fetched, never committed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Adds the pq_signatures feature (one new dependency, ml-dsa 0.1.1, default
features off) and src/pq_sig.rs: the suite id-MLDSA65-Ed25519-SHA512 of
draft-ietf-lamps-pq-composite-sigs-19 (M' = Prefix || Label || 0 || SHA-512(M),
the ML-DSA half with the label as context, the Ed25519 half under WAI's strict
rule), the policy that requires hybrid, the hybrid JSON members and the shared
helper for records signed as wai:<domain>\x01 || JCS.

Before anything is built on it, the ML-DSA-65 implementation is checked
against the ACVP internal projections vendored in pq-conformance/acvp
(keyGen 25, deterministic sigGen 45 over three interfaces, sigVer 45), each
file pinned by SHA-256, and the composite against the draft's Appendix E
vector for this suite. Corpus, bin and test are stubs here.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Under the pq_signatures feature each family reads and verifies the hybrid form
beside the classical one, whose bytes and verdicts are unchanged:

- group receipts: the labelled payload's third version, moq-jwp:group-sign\x03,
  the v2 fields then the ML-DSA-65 key; canonical bytes end with both
  signatures, so the link hash covers both; JSON sign_version 3 with pq_key and
  pq_sig, and the binary form reads it; verify_policy(RequireHybrid);
- claims: pq_suite, pq_key and pq_sig, all or none, the first two signed;
- key logs: a hybrid entry (pq_suite, pq_key), a hybrid root (root_pq_key,
  pq_sig) committed to by BLAKE3(wai:key-set-next\x02 || K || P), rules 1, 3,
  5 and 6 extended, an anchor that requires hybrid (only hybrid-signed
  revisions descend from it, it moves only by pinning), and confirmation step
  4a: hybrid_downgrade, pq_key_mismatch, hybrid_required;
- synthesis records: the shared check of pq_sig::verify_record.

A labelled group whose sign_version is 3 with no hybrid member stays
group_label_invalid, so the JWP corpus gives every vector its verdict with the
feature on or off.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
pq-conformance/vectors.json, written by wai_pq_vectors gen from published
seeds (one byte repeated 32 times, for Ed25519 and for ML-DSA's xi) and
deterministic signing, so it regenerates byte for byte. 45 cases: hybrid
group receipts (JSON and the WJR1 binary form, objects inclusion-verified),
claims, records of the wai:<domain>\x01 || JCS pattern and key logs, with the
negative controls the extension names (the post-quantum half stripped, made
over other bytes, flipped; a classical item under a hybrid key and under
require_hybrid; a hybrid entry later listed without its key; another
parameter set by suite and by length) and confirmations under pinned
anchors that do and do not require hybrid. The sizes section 9 states are
read from the corpus's own items.

wai_pq_vectors verify regenerates and checks every verdict; verdicts prints
them for the differential; bench times both suites.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The deep redundancy of draft-ietf-mlcodec-opus-dred-07 registered as two
companion-only enhancement layers over wai.audio.opus.packet: the draft's
decoding within its tolerances, and the integer profile dred-int/1. The
extension text (registration, finding DRED, the profile, a stream under
loss, the measurement, receipts and the synthesis lattice, refusals), SPEC
§5 and §7, the registry export, the research registry's basis and licence
note, the corpus live-conformance/dred/ with its fetch script, its second
implementation dred_verify.py, CI steps, the CHANGELOG, and the proposal
to the working group, drafted and not filed.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
- extensions/pq-signatures.md: the suite (id-MLDSA65-Ed25519-SHA512 of
  draft-ietf-lamps-pq-composite-sigs-19, ML-DSA-65 of FIPS 204 beside
  Ed25519) and why -65 and why the composite; the hybrid members; signing and
  verifying in WAI's order and what stripping does; the require-hybrid policy;
  key logs (hybrid entries and roots, the hybrid commitment, anchors that
  require hybrid, confirmation step 4a), group receipts (the payload's third
  version), claims and the shared check for wai:<domain>\x01 || JCS records;
  security considerations; the reasons; sizes and costs measured on the build
  host; the corpus.
- jwp-receipts: pointers at section 2.3, 2.4.1, 2.4.3, 2.7.1, 3, 3.1, 3.3, 7.2,
  7.4 and 7.7; SPEC section 5 and section 7 Signatures paragraphs; CHANGELOG.
- pq-conformance/pq_verify.py and _mldsa.py: ML-DSA-65 verification written
  from FIPS 204 in pure Python (all 90 ACVP vectors), every case, the sizes,
  section 8's table, 26 mutated cases refused, and every one of 14 checks
  caught when dropped. README: the corpus rules and the provenance of the
  vendored vectors, with the notice their licence asks kept intact.
- the suite registered as a wire identifier; registry export regenerated.
- CI: the reference's tests, the corpus's cross-platform regeneration, both
  verifiers, and a diff of their verdicts.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The carriage test bound every companion to a video base; the two DRED
enhancement layers bind to their one base, wai.audio.opus.packet. The GPU
test now decodes the corpus's streams as well as its payloads.
determinism-tiers §5 and §6 record the profile, and the live-conformance
index lists its corpus.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-rs: tests/dred_exact.rs holds §4.8: both graphs load under acc64, are refused under acc32, and use wai-ops/1-i32 only
Some checks failed
wai-pack / wai-pack · dependency licences (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / does this change touch it (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Has been cancelled
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Has been cancelled
WAI neural sink gates / does this change touch it (pull_request) Has been cancelled
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
3ad5e8b0cf
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
pq-signatures: a log listing a published ML-DSA key is reported
Some checks failed
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Has been cancelled
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Has been cancelled
WAI energy receipts / does this change touch it (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI conformance / does this change touch it (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
standards workspaces build + test / which workspaces this change touches (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Has been cancelled
7eaf392745
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged head 2016ec1805.

Shared lists kept both sides: the CHANGELOG entry above exact-upscale's;
the live-conformance index keeps the base's generator column, with the
synthesis-mark row naming both schemes (§7.4 to §7.9). Code merged without
conflict; the registry export is regenerated in the next commit.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The base train's merges left three variants of the paragraph's middle
(contribution and takedown; contribution and upscale; contribution and
influence), each ending in a dangling "joule_moq_e2ee_vectors gen (in".
One sentence now names every directory's source: c2pa-live, contribution
and influence, takedown, upscale.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Interaction of #425 (wai-mark:tent64s) with #408 (exact-upscale, in the
base): #408 made synthesis_verify.py's outcome() read a case's held priors
(synthesis §11.1) and gave tent64's cases an empty list; #425's tent64s
case loop, written before #408 landed, built its cases without one, so
every tiled case read as unreadable (KeyError 'priors'). The tiled cases
now state an empty list, as tent64's do.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged head 3ad5e8b0cf.

By meaning:
- wai-ops-gpu.yml: paths unioned (exact-upscale's and DRED's); the build
  step keeps exact-upscale's two --no-run commands and DRED's build is its
  own whole step after it; on Metal, exact-upscale's step then DRED's, each
  whole.
- Cargo.toml: both features (exact_upscale, dred_exact), both bins
  (wai_browser_sink_vectors, wai_dred_vectors), both tests (browser_sink;
  dred_exact, dred_exact_measure, dred_exact_gpu).
- Shared lists kept both sides: CHANGELOG (DRED's entry above tent64s'),
  the live-conformance index (dred/ row after upscale/, the base's
  generator column and the tiled synthesis-mark row kept).
The weights file stays uncommitted: fetched by digest (dred/fetch.sh).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged head 8a853e4347.

Shared lists kept both sides: the workflow's paths (opus-dred.md beside
telemetry-aggregation.md and delivery-telemetry.md), CHANGELOG (TEL's
entry on top), REGISTRY's magics in order (WP*, then WQA1, WQS1), the
registry's extension constants (EXACT_UPSCALE, TELEMETRY_AGGREGATION),
Cargo bins and tests, the live-conformance index (aggregate/ row, one
provenance sentence naming the vendored VDAF vectors and DRED's fetched
weights, and both verifier lines). capabilities.json taken from the PR and
regenerated next. delivery-telemetry §8.1 keeps TEL's text, with no
consent gate.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
capabilities.json was taken from the PR's side of the merge; the export
now lists every record and companion of the train (age assurance,
DRED and the rest the PR's side lacked).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged head 17ff17d84f.

By meaning:
- codecs/mod.rs: is_companion_only lists the HDR descriptors, the gain map,
  LCEVC and both DRED layers; the licence test's patent-pool list keeps
  DRED's and the HDR companions' entries.
- tests/carriage.rs: base_of() (DRED's) gains B3b's gain-map case, an
  image base (wai.image.png); the test reads the base from base_of() as
  DRED left it.
- SPEC §7.1: the companion list names the HDR descriptors with ST 2094-50,
  the gain map, LCEVC and the DRED layers; rule 2 keeps the gain map's
  image class and DRED's base admission side by side.
- determinism-tiers §2: exact-upscale's paragraph (pinned integer
  derivations keep the tier), then B3b's (HDR display adaptation, pinned
  by exact-tonemap).
- wai-conformance.yml: paths unioned; the step that conflicted is rebuilt
  as two whole steps, QoE aggregation's then exact tone mapping's.
- Shared lists kept both sides: CHANGELOG (B3b's entry on top), REGISTRY
  rows in order, registry constants and wire identifiers, the
  live-conformance index (tonemap/ row, its provenance sentence, its
  verifier line). capabilities.json and v2.ttl taken from the PR and
  regenerated next.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Interaction of #434 (DRED) and #430 (gain maps, ST 2094-50): #430 added
the HDR companions to the paragraph that names what was registered
companion-only after the companion rules; #434 registered its two
enhancement layers companion-only too but left the paragraph's "every
other registered capability is standalone media" in place. With both in,
the sentence names the DRED layers beside the HDR companions.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
capabilities.json and v2.ttl were taken from the PR's side; the export now
holds the train's records and companions with B3b's.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged head 01579796be.

By meaning:
- jwp-receipts §7's authority table names every claim class: SOFT's
  soft-binding-span beside the bearer classes transmission and
  reconciliation the base added.
- claim_verify.py: the bearer classes (BEARERS) and SOFT's span rules,
  span membership and receipt-context reader, each kept.
- lib.rs: exact_upscale's module and SOFT's robustness module.
- REGISTRY's prose names exploration, browser-sink and
  robustness-evidence; its rows kept from both sides, in order.
- wai-conformance.yml: paths unioned; the step that conflicted is rebuilt
  as two whole steps, exact upscale's then robustness evidence's.
- SPEC §5: TEL's paragraph, then SOFT's.
- Shared lists kept both sides: CHANGELOG (SOFT's entry on top), registry
  constants, rows, records and wire identifiers, Cargo features, bins and
  tests, the live-conformance index (robustness/ row, its provenance
  sentence, its verifier line). capabilities.json and v2.ttl taken from
  the PR and regenerated next.
synthesis §7.5.8's claims sentence, which robustness reads, is unchanged
by #425, so the three readers of it agree.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
capabilities.json and v2.ttl were taken from the PR's side; the export now
holds the train's records with SOFT's.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Interaction of #425 (wai-mark:tent64s) and #433 (robustness evidence):
#425 added two attacks to synthesis_mark's battery for §7.9.6,
Attack::CropSide and Attack::Screen; #433's Transform::of_attack maps
every attack of the battery to a registered transform and became
non-exhaustive (E0004). robustness-evidence §4 registers synthesis
§7.5.7's battery with its parameters free and leaves further transforms to
a later revision, so of_attack now gives None for the two attacks §4 does
not register (§7.9.6's crop-25% and rotate-5 are crop and rotate). The
tent64 corpus calls it on §7.5.7's lists only and expects a transform; the
unit test also holds §7.9.6's registered additions to the battery's bytes
and requires the unregistered ones to be exactly the side crops and the
screen captures.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged head 3ec983a533.

By meaning:
- codecs/registry.rs: WireKind gains both new kinds, frame-metadata
  (browser sink, in the base) and gltf-extension (SPLAT); all() holds
  sixteen; the schema's enum lists both labels.
- synthesis §2's origin-claim table: the base's subject row (with the
  samples subject of exact-upscale) and SPLAT's media row (volumetric).
- int_kernels_vectors.rs: the live-conformance exclusion reason names
  both the vendored VDAF vectors (TEL) and splat/'s decoded attribute
  tensors (SPLAT).
- wai-ops-gpu.yml: paths unioned; the build step builds the ops_gpu,
  exact-upscale and splat GPU test targets (SPLAT's name, "test
  targets"), DRED's build stays its own step; on Metal, exact-upscale's,
  DRED's and the splat step, each whole.
- wai-conformance.yml: paths unioned; the step that conflicted is rebuilt
  as two whole steps, QoE aggregation's then exact splats'.
- REGISTRY's prose names exploration, browser-sink, robustness-evidence
  and splat-exact, and every wire kind.
- Shared lists kept both sides: CHANGELOG (SPLAT's entry on top),
  registry constants, rows, records and wire identifiers, Cargo
  features, bins and tests, the live-conformance index (splat/ row, its
  provenance sentence, its verifier line). The export is regenerated next.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merged head 7eaf392745.

By meaning:
- jwp-receipts §3.1 step 3 gains PQ1's hybrid sentence; step 4 keeps the
  base's class range (§2.4.5 to §2.4.15, the bearer classes included).
- claim_receipt.rs: the bearer classes' reasons and labels and PQ1's
  Pq(..) reason, each kept.
- Cargo.lock: the train's lock with PQ1's dependency resolved into it
  (cargo metadata, resolve only): its packages are exactly the union of
  both sides' (11 added beside TEL's keccak 0.1.6, aes-gcm, hkdf; none
  removed or re-versioned, every checksum as either side has it).
- Cargo.toml: TEL's and PQ1's optional dependencies, both tests.
- wai-conformance.yml: paths unioned; PQ1's step and its corpus in the
  regeneration loop merged without conflict.
- Shared lists kept both sides: CHANGELOG (PQ1's entry on top), SPEC §5
  (PQ1's paragraph after SPLAT's), REGISTRY rows in order, registry
  constants and wire identifiers. capabilities.json taken from the PR and
  regenerated next.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Interaction of #435 (hybrid signatures) with the base's bearer receipts
slice: #435 adds the hybrid field to key_log::Revision and fills it in
every literal it knew; the bearer corpus's revision() builds one it did
not (E0063, with or without pq_signatures). The corpus's revisions stay
classical, so its bytes are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
capabilities.json was taken from the PR's side; the export now holds the
whole train's registrations with PQ1's suite.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
#428's train moved one commit past 793bd478: wai-conformance.yml's age
assurance, direction and takedown steps get back the bodies their PRs
gave them. Merged without conflict.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
#435 added wai/pq-conformance/ without the two entries every corpus
directory needs on main: a `**Provenance.**` line in its README
(tests/corpus_provenance.rs) and, having no sha256.json sidecar, a reason
in the exclusion list of int_kernels_vectors'
every_decoded_output_states_a_sha256. Both tests enumerate every
*-conformance directory, so #435 fails them on its own; the train found it.
The provenance line names the generator and its seeds, the ACVP vectors'
derivation and notice, and the composite draft's vector; the reason says
the corpus is signed content with no decoded output.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Interaction of #434 (DRED) with the sentence #429 and #431 extended:
the exclusion reason for live-conformance said nothing there decodes
against a parameter set but splat/'s objects; #434's dred/ decodes its
payloads and streams under the draft's weights file and states the
SHA-256 of their integers and feature rows. The reason now says so. The
test reads the list, not the text.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
#428's train landed on main as aa61ab3b (its head 9f63561b, merged here
before), beside wai-quantum 0.6.14 (#427), the sandbox's TDX checks
(#415, #436), sandbox-conformance (#422), jouleclaw (#414, #418) and
jcp-x402 (#442). Merged without conflict.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Main moved past 41c5bafba: the advisory sweep (#443: dependency bumps
across every workspace's lockfile, a cargo-audit gate) and joule-moq-room's
lockfile following wai-quantum 0.6.14 (#447). Merged without conflict;
wai-rs/Cargo.lock takes main's bumps beside PQ1's additions.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
clippy's type_complexity note on the tuple type of the tent64 measurement
sets (src/robustness/corpus.rs, from #433) was the one warning the train
has that the base 793bd478 lacks; a local type alias names it. No
behaviour changes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
PQ1 (#435) brought ctutils in through ml-dsa at 0.4.3, which
RUSTSEC-2026-0385 names (non-constant-time mask generation and u128
comparisons; patched in 0.4.4). Main's lock for wai-rs holds no ctutils,
so the advisory is the train's to clear: cargo update -p ctutils --precise
0.4.4, nothing else re-resolved. crypto-bigint 0.5.5 (RUSTSEC-2026-0387)
is in main's lock as well and is left to main's advisory fix.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge remote-tracking branch 'origin/main' into train/wai-c
Some checks failed
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m13s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 8m5s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m37s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m48s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 10m14s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m43s
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Successful in 21s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 13m59s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 21s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h4m54s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 50s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 47m43s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m55s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 46m0s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Failing after 6m14s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 6m44s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 4s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 8m6s
wai-pack / wai-pack · macos (pull_request) Successful in 1m14s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Failing after 6m22s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m45s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m13s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m16s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 16s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m26s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m11s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 2m39s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m7s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m52s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 46m23s
b35ce4af8e
#433 extended the comment above step6's binding-recovery arm, and the train moved its
lines, so decision-unchecked and recovery-record-unchecked no longer applied
(HTTP corpus falsify shards 0/3 and 2/3 failed). Each patch makes the same edit as
before, against the new context.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge origin/main into train/wai-c (Train D landed: co-watch beside DRED, telemetry, splat, soft bindings and PQ)
All checks were successful
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Successful in 28m46s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 7m42s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m29s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 5m41s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 10m45s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m1s
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Successful in 22s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 14m22s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 22s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 49s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h2m44s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 47m52s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 6m18s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 48m48s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 6m2s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 6m41s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 5s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 9m10s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m47s
wai-pack / wai-pack · macos (pull_request) Successful in 1m16s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m15s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m22s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 6m30s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 21s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m32s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m16s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m13s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 4m22s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 1m53s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 48m43s
a46eba3c0a
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Merge origin/main into train/wai-c (the relay's chain-order input count, wai-quantum-service)
All checks were successful
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 14m24s
wai-pack / wai-pack · linux (pull_request) Successful in 1m39s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 21s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 3m5s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 55s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m53s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 3m18s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 2m10s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 5m17s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 4m34s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 6m0s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 8m34s
wai-pack / wai-pack · macos (pull_request) Successful in 1m15s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m13s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 2m33s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 2m0s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 48m59s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h3m57s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 47m58s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 6m20s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 6m53s
WAI HTTP delivery / HTTP corpus · every patch and mutation in exactly one shard (pull_request) Successful in 6s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m42s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m14s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 5m53s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m20s
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 1m18s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 4m5s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 49m0s
e77b92f765
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!461
No description provided.