open-standards/.github/workflows/wai-conformance.yml
Transaction Science f5e87f3437
Some checks failed
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Failing after 3s
wai cross-architecture byte-equality / linux-aarch64 (pull_request) Failing after 4s
wai cross-architecture byte-equality / windows-x86_64 (pull_request) Failing after 16s
WAI conformance / cargo-class corpora · windows (pull_request) Failing after 10s
WAI conformance / cross-arch byte-equality · windows (pull_request) Failing after 9s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 51s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Failing after 18s
joule-code conformance gate / Build + round-trip C1-C4 vectors (pull_request) Failing after 1m31s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 2m27s
jouleclaw public surface must stay documented / Public-surface audit (jouleclaw-rs) (pull_request) Successful in 59s
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Failing after 14s
WAI conformance / cross-arch byte-equality · macos (pull_request) Failing after 19s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 30s
WAI conformance / cross-arch byte-equality · linux (pull_request) Failing after 14s
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (pull_request) Failing after 1m6s
ci: bootstrap rustup in-workflow — the runner image ships no Rust
First real CI run after enabling Actions went 14/19 red. Root cause, run
down rather than guessed: the docker-executor runners (linux, linux-arm64,
windows) use `catthehacker/ubuntu:act-22.04`, which carries node/curl/git
but no Rust — `docker run … which cargo rustc rustup` returns nothing. The
`macos` runner is a *host* executor on the dev box where cargo exists,
which is exactly why the same `cargo-class corpora` job was green on macos
and red on every other arch.

Both Rust-setup styles in the repo assumed a compiler was already present:

  - raw `rustup toolchain install …` (wai-conformance, wai-neural-e2e)
  - `dtolnay/rust-toolchain` (wai-byte-equality, jouleclaw-public-surface,
    joule-code-conformance) — which is *not* a fix here: the action itself
    shells out to `rustup`, so it fails identically on an image without it.
    wai-byte-equality already used dtolnay and failed the same way; that is
    what ruled the action out.

Every Rust job now bootstraps rustup itself, which works on both executor
kinds: on the docker image it installs via rustup-init; on the macOS host
it finds the existing rustup once ~/.cargo/bin is on PATH (launchd's PATH
omits it). Proven in the actual runner image before writing it —
`docker run catthehacker/ubuntu:act-22.04` + rustup-init installed 1.97.1
and compiled a binary clean.

Scope: this fixes the *toolchain* step for all six Rust jobs. Jobs with
further environment needs (wai-neural-e2e pulls a CPU torch + onnxruntime
stack) may surface their own next failure — that is the following layer,
not this one. The PR's own CI run is the verification.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-25 13:23:57 -04:00

116 lines
5.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:
# Self-hosted fleet labels. Both architectures across all three OS
# families: x86_64 by linux + windows, arm64 by linux-arm64 + macos —
# what matters for the Fx integer floor is the arch, not the OS. No
# Intel-Mac runner exists in the fleet, and it would add no arch
# coverage anyway.
os: [linux, linux-arm64, macos, windows]
steps:
- uses: actions/checkout@v5
# Bootstraps rustup on the minimal docker image (linux / linux-arm64 /
# windows runners ship no Rust at all) and also covers the macOS `host`
# runner, whose launchd PATH omits ~/.cargo/bin. dtolnay/rust-toolchain
# is NOT usable here: it calls `rustup`, which the docker image lacks.
- name: Install Rust 1.97.1
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.97.1
rustup toolchain install 1.97.1 --profile minimal
rustup default 1.97.1
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- 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:
# Self-hosted fleet labels. Both architectures across all three OS
# families: x86_64 by linux + windows, arm64 by linux-arm64 + macos —
# what matters for the Fx integer floor is the arch, not the OS. No
# Intel-Mac runner exists in the fleet, and it would add no arch
# coverage anyway.
os: [linux, linux-arm64, macos, windows]
steps:
- uses: actions/checkout@v5
# Bootstraps rustup on the minimal docker image (linux / linux-arm64 /
# windows runners ship no Rust at all) and also covers the macOS `host`
# runner, whose launchd PATH omits ~/.cargo/bin. dtolnay/rust-toolchain
# is NOT usable here: it calls `rustup`, which the docker image lacks.
- name: Install Rust 1.97.1
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.97.1
rustup toolchain install 1.97.1 --profile minimal
rustup default 1.97.1
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Integer rANS + int_synth + JPEG-AI mANS goldens (one machine → every machine)
working-directory: wai/byte-exact-conformance
run: cargo test --release