wai breaking and wai conform: the compatibility gate on every WAI pull request, and conformance runs with signed results #507

Merged
dcharlot merged 11 commits from wai/breaking-conform into main 2026-10-28 05:08:42 -04:00

2026-10-28

Transaction Science
Merge remote-tracking branch 'origin/main' into wai/breaking-conform
All checks were successful
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m16s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m52s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m16s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 21s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m46s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 17m51s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m26s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 11m38s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 23m53s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m14s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m35s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (pull_request) Successful in 39s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 7m11s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Successful in 1m0s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 6m59s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h2m53s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 10m16s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 27s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m8s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 21m2s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m55s
wai-fleet service / service · macos (pull_request) Successful in 39s
wai-ledger service / service · macos (pull_request) Successful in 51s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 19m13s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 13m40s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 10m49s
wai-pack / wai-pack · macos (pull_request) Successful in 2m54s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 3m35s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 7m5s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 15m37s
2026-10-28 03:20:00 -04:00
Transaction Science
Merge remote-tracking branch 'origin/main' into wai/breaking-conform
All checks were successful
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (pull_request) Successful in 47s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 5m59s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Successful in 2m10s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m35s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 20m52s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m41s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m49s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 8m26s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 6m19s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 26s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 1m43s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m43s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 26m49s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m35s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m9s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 18m3s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 28s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 9m49s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m7s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 9m29s
wai-fleet service / service · macos (pull_request) Successful in 54s
wai-ledger service / service · macos (pull_request) Successful in 58s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 23m25s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 19m4s
wai-pack / wai-pack · macos (pull_request) Successful in 3m14s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 10m52s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m57s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 7m48s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h7m13s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 18m4s
# Conflicts:
#	.github/workflows/wai-conformance.yml
#	wai/CHANGELOG.md
#	wai/wai-rs/Cargo.toml
#	wai/wai-rs/src/bin/wai_cli/dx/mod.rs
#	wai/wai-rs/src/bin/wai_cli/dx/verify.rs
#	wai/wai-rs/src/lib.rs
2026-10-28 01:53:55 -04:00

2026-10-27

Transaction Science
Merge remote-tracking branch 'origin/main' into wai/breaking-conform
Some checks failed
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 3m7s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 3m26s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m25s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Successful in 2m21s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 1m3s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 31s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m40s
WAI conformance / faces from keypoints under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m42s
wai-key-proxy / proxy · linux (pull_request) Successful in 1m11s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 2m25s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 13m13s
wai-ledger service / service · linux (pull_request) Successful in 1m30s
wai-pack / wai-pack · linux (pull_request) Successful in 1m49s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 3m13s
wai-ops-gpu integer operators on GPUs / builds · no adapter is not a pass (linux) (pull_request) Successful in 3m51s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m57s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 10m31s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 28m56s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 27m53s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 20m20s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 6m24s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 10m22s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 12m16s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 15m44s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 4m27s
wai-pack / wai-pack · macos (pull_request) Successful in 4m37s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 20m14s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 8m1s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 18m42s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Failing after 1h6m41s
2026-10-27 14:33:38 -04:00
Transaction Science
wai breaking: the base holds every standard its crate reaches by path
The Rust surface extracted only wai/ from the base. Once wai depended by
path on joule-ui's crates (wai-app), documenting the base failed: the
dependency's directory was missing, and a crate in another workspace also
needs that workspace's root manifest for the fields it inherits. Each
top-level directory in the base crate's path closure is now extracted
whole, once.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 14:33:37 -04:00
Transaction Science
wai conform: no process-group kill; the sidecar test names the record corpus
All checks were successful
WAI energy receipts / energy receipts · linux (pull_request) Successful in 11m14s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 12m22s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m32s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m37s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 16m41s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m53s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 23s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 9m46s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m28s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m54s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m24s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 23m38s
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (pull_request) Successful in 36s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Successful in 59s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 6m35s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 1m30s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m50s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 25s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m2s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 14m55s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m37s
wai-ledger service / service · macos (pull_request) Successful in 50s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 16m51s
wai-pack / wai-pack · macos (pull_request) Successful in 2m47s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 59m13s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m42s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 11m53s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 9m54s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 6m39s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 14m50s
The runner job died with exit 137 the moment the adapter test's 200 ms timeout fired.
In the CI image (Ubuntu 22.04's procps kill), `kill -KILL -<pgid>` signals the
caller's own process group, not the one named: the test, cargo and the step's shell
were killed, and the timed-out `sh` and `sleep` survived. Reproduced in that image
with a small program; the same call with no such group also killed the caller. It was
not memory: the step, built cold and run in that image under a 16 GB cap, peaks at
4.6 GB. The adapter now kills the shell alone, as before, and reads output for at most
two seconds after it exits, so a child that keeps the output open no longer holds the
run; the command stays in the caller's process group.

tests/int_kernels_vectors.rs walks every wai/*-conformance/ directory and requires a
sha256.json sidecar of decoded outputs, or an exclusion with its reason.
conform-result-conformance holds signed records and no decoded output, so it is listed
with that reason, as the other record corpora are.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 11:17:06 -04:00
Transaction Science
conform-result-conformance: each summary count wrong alone, its other counts right
The falsification of the reference found that leaving out the check of summary.cases
alone left the corpus passing: every summary vector had passed and failed wrong too.
Three vectors now carry each count wrong alone.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 11:17:06 -04:00
Transaction Science
conformance-results: conform-result/1 in the standard, its corpus and a second verifier
extensions/conformance-results.md specifies the record a conformance run signs: its
members (§2) and corpus digest (§2.1), its signing input (the domain
`wai:conform-result` and 0x01, then the record without `sig` in RFC 8785 form) and
Ed25519 signature under SPEC §7's strict rule (§3), what a verifier checks and in what
order (§4: it reads, its version, its members, its signature, its summary, its verdict)
and the codes of each refusal (§5). conform-result/1 is registered as a document kind
(registry export and REGISTRY.md regenerated); SPEC §7 points to it.

wai-rs gains the module conform_result (feature conform_result, in quickstart): sign,
check and verdict, the corpus digest, and the corpus of §7, whose outcomes are stated
from the text and asserted before anything is written. `wai conform` signs with it and
`wai verify` checks with it. conform-result-conformance/ holds accepted records and
refused ones (a case flipped, the corpus digest changed, the summary alone changed, a
bad signature, S past L, a small-order key, a summary or verdict that disagrees though
signed, an unknown version, members missing, added or named twice, a fractional count,
a digest out of form, bytes that are not JSON); wai_conform_result_vectors generates
and verifies it, and conform_result_verify.py, written from the text and sharing no code
with wai-rs, reaches every outcome and fails the corpus with each check of §4 left out.
`wai conform` gains the verifier suite conform-result.

`wai breaking` leaves out an explicit list of corpus files that record a measured run
(the format probes' external decodes, the relay's recorded metering run), each with
its reason, and says so in a note; the vectors built from them stay compared.

A command `wai conform` runs is put in a process group of its own, so a timed-out
command's children are stopped too.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 11:17:05 -04:00
Transaction Science
2026-10-27 11:16:57 -04:00
Transaction Science
wai breaking and wai conform: the compatibility gate, and conformance anyone can run
`wai breaking --against <git-ref>` (operation compat.check) reports what the working
tree breaks against the merge base of a ref, in three cumulative categories: wire (the
registry export, the media and delivery corpora), record (the signing domains, magics
and versions in the WAI crates' sources, the record corpora, the published JSON
Schemas) and API (the Rust public API of wai and wai-quantum from rustdoc's JSON, the
C header, the room service's OpenAPI document). Each finding names its item, category,
what changed and why it breaks; additions are compatible. A break passes only when a
line the change adds to wai/CHANGELOG.md, in an entry that says Breaking, names its id.

`wai conform <kind> --suite <suite> --impl <command or URL>` (operation
conformance.run) runs a corpus against another implementation through a command-line
or an HTTP adapter: verifiers (claim, jwp, signer), a decoder (score), a packager
(policy) and an origin (http). The result is a signed conform-result/1 record that
`wai verify` checks. Both follow the agent rules: the envelope/1 JSON output, the exit
statuses, --dry-run.

.github/workflows/wai-breaking.yml runs the gate on every pull request that touches
WAI, the tests of both commands, and the corpora's independent Python verifiers and
the reference packager through wai conform.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 11:16:57 -04:00