open-standards/.github/workflows/wai-ops-differential.yml
Transaction Science f97757a339 wai: D2c M7b gate 4: the networks against the direct networks, on random networks
tests/int_ops_differential.rs gains a half for jpegai's hyper decoders, context
stages and synthesis (§13.6.2): random weight files in the export's form at the
shapes the direct networks read (multipliers scaled to keep magnitudes, shifts 24
to 40, one convolution in about 64 grown past A32 in a "hot" case), random
hyper-latents, residuals and latents.

- jpegai_random_networks_reconstruct_alike (rec_y, rec_uv): ŷ equals the direct
  hyper decoder's and context stages', or the operator set refuses field_range at
  a checked tensor (the direct networks computed on); a file that breaks a load
  check (a member missing, a shift of 128, a weight short, dims, a bias long) is
  refused model_mismatch, and its bytes and its parsed form lower to the same
  graph or the same refusal.
- jpegai_random_synthesis_networks_decode_alike (syn_y, syn_uv), at the whole
  picture's size: the planes equal the direct synthesis's, or field_range.
- Per push (release, build host): rec 64 cases (alike 56, past A32 3; planned
  breaks: a member missing 1, a shift of 128 2, a weight short 2); synthesis 8
  cases (alike 7, past A32 1). The nightly wai-ops-differential.yml runs both for
  its time, and names them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 01:07:07 -04:00

73 lines
3.4 KiB
YAML

name: wai-ops differential (nightly)
# Each integer decoder that decodes through the integer operator set
# (wai/extensions/integer-operators.md) against its direct decode (the test-only
# `legacy_int` feature), on random parameter sets and payloads, for an hour under each
# build profile: with overflow checks on and with them off. Outside the planned breaks
# of integer-operators §15.3 the two decode to the same bytes or both refuse, and the
# direct decode never panics; under a planned break the decode through the operator set
# refuses (wai/wai-rs/tests/int_ops_differential.rs). Today: wai.neural.int_synth,
# wai.splat.int_codec, wai.audio.int_codec, wai.neural.int_hyper (whose decode is
# also the keyframe of wai.video.int_hyper), wai.neural.int_mlicpp, wai.world.model's
# integer renderer, against its direct renderer with the direct guard, and
# wai.image.jpegai's scale path and entropy decodes, against its direct computation,
# which panics (or, without overflow checks, may compute on) where the operator set
# refuses a stream, and its hyper decoders, context stages and synthesis (the graphs of
# integer-operators §13.6.2), against its direct networks, which compute on where the
# operator set refuses a value past its i32 checks; and WIV1 (wai.video.int_motion, the P-frames of wai.video.int_hyper)
# and WIR1 (the four int_refine capabilities), which decode through the stage operators
# alone and make no planned break.
#
# Each night starts from its own seed, the date, which the log prints; a failing case
# names its seed, and `WAI_DIFF_SEED=<seed>` re-runs it. The same tests run for a fixed
# count on every push, in wai-conformance.yml's fast-kernel steps.
# One run per branch at a time. A push supersedes the run before it.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
schedule:
- cron: '41 2 * * *'
# A change to this file runs it for two minutes per profile, so a broken job is seen
# before the night.
pull_request:
paths:
- '.github/workflows/wai-ops-differential.yml'
jobs:
differential:
name: differential · ${{ matrix.profile }}
runs-on: linux
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
profile: [debug, release]
steps:
- uses: actions/checkout@v4
# The docker image ships no Rust.
- name: Install Rust 1.98.0
shell: bash
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.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Through the operator set against the direct decode, random sets and payloads
working-directory: wai/wai-rs
shell: bash
env:
WAI_DIFF_SECS: ${{ github.event_name == 'schedule' && '3600' || '120' }}
run: |
set -euo pipefail
P=""
if [ "${{ matrix.profile }}" = release ]; then P="--release"; fi
export WAI_DIFF_SEED="$(date -u +%Y%m%d)"
echo "WAI_DIFF_SECS=$WAI_DIFF_SECS WAI_DIFF_SEED=$WAI_DIFF_SEED"
cargo test $P --locked --no-default-features --features legacy_int,splat_int,audio_int,world_int,video_int,staged --test int_ops_differential -- --nocapture