open-standards/.github/workflows/wai-energy-receipts.yml
Transaction Science ac511a78ff
Some checks failed
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
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 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 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 neural decoders end-to-end / does this change touch it (pull_request) Has been cancelled
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (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-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 CUDA member / does this change touch it (pull_request) Has been cancelled
wai-quantum CUDA member / member · CUDA (jetson-hub) (pull_request) Has been cancelled
wai-quantum CUDA member / member · CUDA absent (linux) (pull_request) Has been cancelled
wai-quantum dataflow member / does this change touch it (pull_request) Has been cancelled
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:b140) (pull_request) Has been cancelled
wai-quantum dataflow member / member · dataflow device, simulated (pci 1e52:401e) (pull_request) Has been cancelled
wai-quantum dataflow member / member · dataflow device absent (macos) (pull_request) Has been cancelled
wai-quantum signal processor / does this change touch it (pull_request) Has been cancelled
wai-quantum signal processor / processor and member · signal processor, emulated (pull_request) Has been cancelled
wai-quantum FPGA member / does this change touch it (pull_request) Has been cancelled
wai-quantum FPGA member / member · FPGA datapath, simulated (macos) (pull_request) Has been cancelled
wai-quantum FPGA member / member · FPGA simulation absent (linux) (pull_request) Has been cancelled
wai-quantum HIP member / does this change touch it (pull_request) Has been cancelled
wai-quantum HIP member / member · HIP (framework-128gb) (pull_request) Has been cancelled
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Has been cancelled
wai-quantum Metal member / does this change touch it (pull_request) Has been cancelled
wai-quantum Metal member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum Metal member / member · Metal absent (linux) (pull_request) Has been cancelled
wai-quantum npu-cores member / does this change touch it (pull_request) Has been cancelled
wai-quantum npu-cores member / member · npu-cores, neural processor (framework-128gb silicon) (pull_request) Has been cancelled
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Has been cancelled
wai-quantum neural-processor member / does this change touch it (pull_request) Has been cancelled
wai-quantum neural-processor member / member · neural processor (macos) (pull_request) Has been cancelled
wai-quantum neural-processor member / member · neural processor absent (linux) (pull_request) Has been cancelled
wai-quantum OpenCL member / does this change touch it (pull_request) Has been cancelled
wai-quantum OpenCL member / member · OpenCL GPU and CPU (jetson-hub) (pull_request) Has been cancelled
wai-quantum OpenCL member / member · OpenCL GPU (framework-128gb) (pull_request) Has been cancelled
wai-quantum OpenCL member / member · OpenCL GPU (macos) (pull_request) Has been cancelled
wai-quantum OpenCL member / member · OpenCL absent (linux) (pull_request) Has been cancelled
wai-quantum on every processor / emulated · loongarch64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · powerpc64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · powerpc64le-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · riscv64gc-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · s390x-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · sparc64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · i686-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum-qpu / does this change touch it (pull_request) Has been cancelled
wai-quantum-qpu / clients against their contracts (linux) (pull_request) Has been cancelled
wai-quantum on every processor / emulated · aarch64-unknown-linux-gnu (pull_request) Has been cancelled
wai-quantum on every processor / emulated · armv7-unknown-linux-gnueabihf (pull_request) Has been cancelled
wai-quantum matrix-extension member / does this change touch it (pull_request) Has been cancelled
wai-quantum matrix-extension member / member · matrix extension, emulated (aarch64 Linux) (pull_request) Has been cancelled
wai-quantum matrix-extension member / member · matrix extension absent (macos) (pull_request) Has been cancelled
wai-quantum tensor-engine member / does this change touch it (pull_request) Has been cancelled
wai-quantum tensor-engine member / member · tensor engine, the kernel toolchain's simulator (linux) (pull_request) Has been cancelled
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Has been cancelled
wai-quantum portable tensor program / does this change touch it (pull_request) Has been cancelled
wai-quantum portable tensor program / tensor program · CPU, mutants, GPU builds (pull_request) Has been cancelled
wai-quantum portable tensor program / tensor program · GPUs (jetson-hub) (pull_request) Has been cancelled
wai-quantum portable tensor program / tensor program · integrated GPU (framework-128gb) (pull_request) Has been cancelled
wai-quantum portable tensor program / tensor program · Metal and the arm64 CPU (macos) (pull_request) Has been cancelled
wai-quantum CPU vector units / does this change touch it (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, rvv 1024-bit (riscv64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 128-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, rvv 128-bit (riscv64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 2048-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, avx2 (x86_64 silicon) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit, sve 512-bit (aarch64, emulated) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector units, avx2 and avx512 (framework-128gb silicon) (pull_request) Has been cancelled
wai-quantum CPU vector units / member · vector unit absent (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / does this change touch it (pull_request) Has been cancelled
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Has been cancelled
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · discrete GPU, Vulkan (jetson-hub) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · integrated GPU, Vulkan (framework-128gb) (pull_request) Has been cancelled
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / does this change touch it (pull_request) Has been cancelled
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Has been cancelled
wai-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
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Has been cancelled
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Has been cancelled
WAI HTTP delivery / WAI HTTP · does this change touch it (pull_request) Successful in 6s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 39s
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 HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Has been cancelled
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Has been cancelled
ci: run each suite for what can affect it; re-runs after a merge become nightly
- 27 workflows that ran on pull requests and again on every push to main now run on
  pull requests and nightly (staggered 04:00-08:59 UTC). A merge no longer repeats what
  its pull request ran; the nightly run is the backstop for a combination of two
  pull requests that each passed. repo-checks keeps its push trigger: one of its
  steps runs only on a push.
- Eight heavy WAI workflows (http, jpegai-e2e, neural-gates, pack, quantum-webgpu,
  sota-vectors, web-reach, web-wasm) no longer fire on wai-rs/Cargo.toml,
  wai-rs/src/lib.rs or the registry, which every new feature and capability touches.
  Cargo.lock stays a trigger, so a dependency change still runs them; wai-conformance
  keeps the registry, which it checks.
- wai-http's falsify shards (about an hour and a half of runner time) run when a pull
  request changes the code the falsify patches break, the HTTP corpus, its verifier or
  the workflow, and nightly; other changes on wai-http's list run its corpus jobs only.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 02:49:11 -04:00

198 lines
10 KiB
YAML

name: WAI energy receipts
# Tests of the energy acquisition class (extensions/energy-measurement.md §2):
# the class rules, the optional labels, the resolution floor, the pins that
# hold legacy receipts (unlabelled, or labelled with the legacy HwShunt) and
# labelled ones to the signed bytes they have; the measurement report's
# arithmetic and the liveness rule (§3.1, §6.2) with their fault-injection
# tests; the figure views a report is checked against, for every receipt
# family the set compiles; and the reference meters' report path. Three
# steps, on linux (x86_64), linux-arm64 and macos (arm64):
#
# 1. wai-rs: `cargo test --locked` with the feature set in the step, over
# --lib, --bins and --test video_receipt. That runs the library's unit
# tests under those features (energy_class, energy_report, energy_burst,
# energy_meter, energy_binding, energy_figure, the label and pin tests of
# the wai-rs receipt families, the video and OTT receipt tests, and — with
# receipt_claims — the claim classes and jwp_delivery); the unit tests of
# every bin target
# the set can build (one whose required features are all on), which also
# proves those bins compile; and the one integration test file
# tests/video_receipt.rs.
# 2. wai-quantum: `cargo test --locked --features full --lib --tests`: the
# crate's unit tests, among them the pins and label tests of every quantum
# receipt, and its integration tests — tests/bit_identity.rs, which pins
# one result of each f64 layer so every architecture here must produce
# the same bits, and tests/utility_reference.rs, which holds the 127-qubit
# results to published values. The tests already marked #[ignore] stay
# ignored.
# 3. wai-quantum-serve: `cargo test --locked --lib`, native: the verdict
# logic behind POST /verify, for a receipt in either form, and that an
# unmetered receipt's 0 is rendered as the unmetered marker (null), never
# as zero joules; and that /run and /receipt build in the gateset the
# request names (circuit2 by default), name its capability, give the
# corpus's GHZ3 hashes in each, and answer 400 for an unknown gateset or
# a circuit with no circuit hash.
#
# It does NOT:
# - check that a newly sealed receipt in a family with an optional label
# (§2.8) is labelled. A verifier cannot: there an unlabelled receipt
# sealed today has the bytes of a legacy one. A test of each producer's
# labelling path could, and none is written; those families'
# constructors take no class, and a label is added afterwards. It checks
# the label rules for the receipts that carry one, and that four of the
# five reference meter bins still build with their report path
# (wai_video_meter, wai_meter, wai_world_meter, wai_quantum_meter).
# - run a meter against a power reader. The report path is tested in the
# library (energy_figure::meter_report), and the protocol against
# scripted readers (energy_burst, energy_meter).
# - build wai_prov (needs `codecs`, which links system libjxl; the
# codec-wrappers job of wai-conformance.yml builds and runs it) or the
# wai-quantum CLI bin (needs quantum_toolchain, quantum_qir,
# quantum_channel, quantum_comm and quantum_qudit). Cargo skips a bin whose
# required features are off without saying so.
# - run any other integration test in wai/wai-rs/tests (world_model and
# world_replay among them), or a doc-test of any of the three crates.
# - compile c2pa_emit, which carries the energy binding into a C2PA
# manifest; the c2pa-emitter job of wai-conformance.yml tests it. Nor
# `oer`: an OER receipt grades its figure and carries no acquisition
# class, and energy-measurement.md §1 leaves it out of scope.
# - verify the JWP corpus; wai-conformance.yml does that, and joule-code's
# workflow tests joule-moq against literals copied from it.
# - build wai-web, or the wasm32-wasip2 component of wai-quantum-serve.
# - verify the conformance corpora; wai-conformance.yml does that.
# - run on Windows. The pinned bytes are integers and hashes and make no
# OS-specific claim; the conformance matrix has no Windows leg either (its
# runner is offline).
#
# It triggers only on changes under the paths listed below; a change to
# wai-web alone does not trigger it.
# One run per branch at a time. A push supersedes the run before it.
#
# There is one `macos` runner and it is the dev Mac, so every macOS job in this
# repo queues on it. With no concurrency group, a session pushing four versions
# of a branch queued four complete sets of runs and every one of them had to
# drain: on 2026-10-05 a PR's 21 contexts settled none in 70 minutes behind a
# backlog of 25 runs, and the queue grew faster than it cleared. Only the newest
# commit's verdict is wanted, so the older runs are cancelled.
#
# Verified on this forge (Forgejo 16.0.5) in `ci-test` before being added here:
# the key parses, and a newer push moves an older run to `cancelled` even while
# it is still queued, which is the case that matters.
#
# `cancel-in-progress: true` also applies to `main`. That is deliberate and
# safe here: main advances by merge commits whose tree contains the commits
# before them, so the newer run covers the older one's changes.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
paths:
- 'wai/wai-rs/**'
- 'wai/wai-quantum/**'
- 'wai/wai-quantum-serve/**'
- 'wai/extensions/**'
- 'wai/SPEC.md'
- 'wai/CHANGELOG.md'
# tests/video_receipt.rs reads the WIV1 refusal fixtures.
- 'wai/int-payload-conformance/**'
# wai_quantum_vectors' tests require the committed quantum corpus to be
# what `gen` writes.
- 'wai/quantum-conformance/**'
- '.github/workflows/wai-energy-receipts.yml'
schedule:
- cron: '33 6 * * *'
jobs:
# Does this pull request's own diff touch the paths below? This forge matches a
# workflow's `paths:` against the push, so a merge of main into a branch fires the
# workflow whatever the pull request changes; every job here waits on this answer.
# A push to main, a schedule, or anything the script cannot determine answers
# `true` (scripts/pr-touches-paths.py).
relevant:
name: does this change touch it
runs-on: linux-arm64
outputs:
run: ${{ steps.gate.outputs.run }}
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- id: gate
run: |
set -euo pipefail
r=$(python3 scripts/pr-touches-paths.py .github/workflows/wai-energy-receipts.yml \
"${{ github.event.pull_request.base.sha }}" \
"${{ github.event.pull_request.head.sha }}")
echo "this change touches wai-energy-receipts: $r"
echo "run=$r" >> "$GITHUB_OUTPUT"
energy-receipts:
needs: relevant
if: needs.relevant.outputs.run == 'true'
name: energy receipts · ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [linux, linux-arm64, macos]
steps:
- uses: actions/checkout@v5
# The docker runners (linux / linux-arm64) ship no Rust, so rustup is
# bootstrapped; the macOS host runner has it but launchd's PATH omits
# ~/.cargo/bin.
- 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"
# One feature set that compiles the wai-rs receipts that carry an
# acquisition class, except the C2PA emitter (see the header): the video
# and OTT receipts and their legacy pins, the energy binding, the energy
# meters, the optional-label families and their pins, and the quantum
# re-exports with the cross-crate encoding test. --bins compiles every
# bin whose required features this set enables — among them four of the five
# reference meters (wai_video_meter, wai_meter, wai_world_meter,
# wai_quantum_meter), whose report path needs receipt_claims — so one of
# those that stops building fails here.
# The fifth, wai_prov, is not built here: it requires the `codecs`
# feature, which links system libjxl (>= 0.11). Cargo skips a bin whose
# required features are off without saying so. The codec-wrappers job
# of wai-conformance.yml, on the macOS runner, builds it and runs its
# --carry path against the committed provenance receipt. Its metering is
# energy_burst, whose tests run in the lib suite.
- name: wai-rs — energy classes, labels and legacy pins
working-directory: wai/wai-rs
shell: bash
run: |
cargo test --locked --no-default-features \
--features world,audio_scene,haptic,splat4d,score,provenance,film,ternary_receipt,world_model,video_receipt,video_workflow,energy_meter,quantum_receipt,quantum_ops,quantum_qbom,quantum_phasor_meter,receipt_claims \
--lib --bins --test video_receipt
# wai-quantum is published separately; its receipts' legacy pins and the
# labelled forms are tested in its own workspace, against its own lock,
# with the integration tests that pin its f64 layers' bits on every
# architecture this matrix runs.
- name: wai-quantum — receipt pins, labels and bit identity
working-directory: wai/wai-quantum
shell: bash
run: cargo test --locked --features full --lib --tests
# The HTTP handler's POST /verify must accept a receipt in either form —
# as sealed, or labelled as wai_quantum_meter emits it — and report the
# signer's level beside validity (jwp-receipts §7.1, §7.4). The verdict
# logic is a plain function, tested natively; the wasm32-wasip2 build of
# the component is not part of this workflow.
- name: wai-quantum-serve — POST /verify verdicts, and /run and /receipt in the requested gateset
working-directory: wai/wai-quantum-serve
shell: bash
run: cargo test --locked --lib