open-standards/.github/workflows/wai-conformance.yml
Transaction Science 6a97bc6701 wai: prove carriage of every registered class + decode the two open flagships
WAI's job is carriage + dispatch; decoders are sink-supplied (even the floor
codecs are wrapped reference libs). Make "implemented and demonstrated" mean
exactly that, end to end:

- `wai wrap <cap> <payload>` / `wai unwrap <in.wai>`: the universal carriage
  operation — carry ANY registered capability's canonical bytes in an envelope
  and extract them BYTE-IDENTICALLY, reporting the capability's tier + license.
  The payload is opaque to WAI, so the same envelope carries a JPEG 2000
  codestream, an IAMF stream, a Draco buffer, or a proprietary AC-4 frame
  identically — the reason WAI need not re-implement any of them.
- tests/carriage.rs: carriage conformance over the ENTIRE registry (every known
  capability, 0 B … 64 KiB payloads round-trip byte-exact, dispatch + tier +
  license preserved). Pure container + registry — no codec feature — so it runs
  in the no-system-deps CI matrix (wired into wai-conformance).
- tools/wai_carriage_demo.sh: real bytes end to end. JPEG 2000 (cinema, via
  OpenJPEG) and IAMF (immersive audio, via ffmpeg) run the full carry →
  dispatch → REAL DECODE path; the rest carry byte-exact with sink-supplied /
  proprietary decoders. (Disney's top two asks — cinema mezzanine + immersive
  audio — are the two demonstrated real-decoded.)

research/media-codec-registry.md gains the per-capability implementation/
demonstration status (carriage-proven / real+decode / sink-supplied /
proprietary).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-18 07:36:43 -04:00

96 lines
4.6 KiB
YAML

name: WAI conformance
# WAI's load-bearing claim is bit-exact reconstruction on every machine,
# no tolerance parameter. This workflow enforces it mechanically: every
# cargo-class corpus — and the one neural decoder that can make the same
# promise, the integer-synthesis path (i64-only, no float ONNX) — is
# re-derived on a four-platform matrix (x86-64 + arm64 across Linux, macOS,
# Windows) and must reproduce its frozen BLAKE3 hashes; and the integer
# byte-equality goldens (rANS / int_synth / JPEG-AI mANS, generated once on
# a reference machine) must decode identically everywhere. All of it is pure
# Rust (no C codec chain, no ONNX Runtime), so the matrix needs no system
# dependencies.
on:
push:
branches: [main]
paths:
- 'wai/wai-rs/**'
- 'wai/*-conformance/**'
- 'wai/byte-exact-conformance/**'
- '.github/workflows/wai-conformance.yml'
pull_request:
paths:
- 'wai/wai-rs/**'
- 'wai/*-conformance/**'
- 'wai/byte-exact-conformance/**'
- '.github/workflows/wai-conformance.yml'
defaults:
run:
shell: bash
jobs:
cargo-classes:
name: cargo-class corpora · ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# Both architectures across all three OS families. x86_64 is covered
# by ubuntu-latest + windows-latest, arm64 by ubuntu-24.04-arm +
# macos-latest — what matters for the Fx integer floor is the arch,
# not the OS. The deprecated Intel-Mac runner (macos-13) is omitted:
# it adds no arch coverage and its hosted runners are scarce.
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v5
- name: Rust 1.96.0
run: rustup toolchain install 1.96.0 --profile minimal && rustup default 1.96.0
- name: Build the cargo classes (pure Rust, no C codec chain)
working-directory: wai/wai-rs
# neural_int joins the pure-Rust set: the integer-synthesis decoder is
# i64-only (no ONNX, no float), so it carries the same bit-exact promise
# and is checkable on this matrix with no ONNX Runtime present.
run: cargo build --no-default-features --features world,audio_scene,haptic,splat4d,score,provenance,neural_int,film
- name: Library unit tests (the fixed-point determinism floors)
working-directory: wai/wai-rs
run: cargo test --lib --no-default-features --features world,audio_scene,haptic,splat4d,score,provenance,neural_int,film
- name: Carriage conformance — every registered capability round-trips byte-exact
working-directory: wai/wai-rs
run: cargo test --no-default-features --test carriage
- name: Every cargo-class corpus reproduces its frozen hashes
working-directory: wai/wai-rs
run: |
set -euo pipefail
F=world,audio_scene,haptic,splat4d,score,provenance,neural_int,film
v() { echo "::group::$1"; cargo run -q --no-default-features --features "$F" --bin "$2" -- verify "$3"; echo "::endgroup::"; }
v worlds wai_world_vectors ../world-conformance
v spatial-audio wai_audio_vectors ../audio-conformance
v haptics wai_haptic_vectors ../haptic-conformance
v state-feeds wai_feed_vectors ../feed-conformance
v avatars wai_avatar_vectors ../avatar-conformance
v volumetric wai_splat4d_vectors ../volumetric-conformance
v score wai_score_vectors ../score-conformance
v int-synth wai_int_synth_vectors ../neural-conformance
v film wai_film_vectors ../film-conformance
byte-exact:
name: cross-arch byte-equality · ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# Both architectures across all three OS families. x86_64 is covered
# by ubuntu-latest + windows-latest, arm64 by ubuntu-24.04-arm +
# macos-latest — what matters for the Fx integer floor is the arch,
# not the OS. The deprecated Intel-Mac runner (macos-13) is omitted:
# it adds no arch coverage and its hosted runners are scarce.
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v5
- name: Rust 1.96.0
run: rustup toolchain install 1.96.0 --profile minimal && rustup default 1.96.0
- name: Integer rANS + int_synth + JPEG-AI mANS goldens (one machine → every machine)
working-directory: wai/byte-exact-conformance
run: cargo test --release