CI: wai-conformance's independent verifiers compile wai-rs once per profile #477

Merged
dcharlot merged 3 commits from ci/compile-once into main 2026-10-26 08:58:08 -04:00

2026-10-26

Transaction Science
wai-conformance: the differentials run against both builds; features-alone on linux-arm64
All checks were successful
WAI conformance / does this change touch it (pull_request) Successful in 7s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 8s
standards workspaces build + test / macOS energy backends (pull_request) Has been skipped
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 25s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 27s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 15s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m9s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 34s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m45s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m0s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 7m52s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 15m9s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 16m51s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 49m29s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 2m4s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 27s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 15m25s
The last step of the independent verifiers ran differential.py, the chain and gap
differentials and `signer_verify.py verdicts` against target/debug's wai_claim_vectors,
wai_jwp_vectors and wai_signer_vectors. Each `cargo test --test` writes those copies
again (cargo builds every binary for integration tests), so the build those
differentials tested was whichever wrote last: on main, the hybrid signatures step's
`pq_signatures` build. The step's comment names the key-discovery build.

Now neither depends on build order. The first step builds the three explicitly twice:
once with the union's features (key_discovery, no pq_signatures) and once with the
hybrid signatures' features. It copies them to $RUNNER_TEMP/wai-bins/union and
$RUNNER_TEMP/wai-bins/pq, beside the other tools the steps run. The last step runs
each differential against both copies, each in its own labelled group of the log.

features-alone is a set of `cargo check` runs, so any architecture serves. It moves
from `linux`, which has a long queue, to `linux-arm64`, and stays a job of its own.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 06:28:35 -04:00
Transaction Science
wai-conformance: the independent verifiers' one build is not undone by the next
Some checks failed
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 7s
standards workspaces build + test / macOS energy backends (pull_request) Has been skipped
WAI conformance / does this change touch it (pull_request) Successful in 6s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m52s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 23s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 52s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 13s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 30s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m40s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 14m58s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 16m16s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 41m9s
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
Builds of wai-rs that differ in features, or in their dependencies' features, write the
same library file, so each switch between two of them rebuilds the library and relinks
every integration test built before the switch. In the job as restructured, two such
switches remained. On the build host they printed `Compiling wai` in each of the job's
wai-rs steps:

- `cargo build` and `cargo test`: the dev-dependencies turn on wai-ops' `oracle` and
  serde_json's `preserve_order`, so the steps' `cargo build` and `cargo run` of the corpus
  tools rebuilt the library each time, and the next `cargo test` rebuilt it back;
- the hybrid signatures' feature list, which the first step built after the union's.

The first step now builds the four programs the steps run (wai_http_vectors,
wai_stage_measure, wai_browser_sink_vectors and wai_pq_vectors) as `cargo build` builds
them, and copies them to $RUNNER_TEMP/wai-bins. The union's test build comes last. The
steps run those copies, so every later cargo command is a `cargo test`. The hybrid
signatures step builds its own tests, the one other build of the test profile.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 02:59:20 -04:00
Transaction Science
wai-conformance: the independent verifiers build wai-rs once per profile
Some checks failed
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 7s
standards workspaces build + test / macOS energy backends (pull_request) Has been skipped
WAI conformance / does this change touch it (pull_request) Successful in 7s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 23s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 52s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m51s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 16m12s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 15s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 16m11s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 11s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 25s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m41s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 48m58s
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
Every wai-rs step of the independent-verifiers job ran `cargo test` with its own
one-feature list, so each step rebuilt the crate from scratch: 79 compiles of `wai`
in one run, 28 of its 64 minutes.

The job now declares three feature lists and every step uses one of them, so the
first step builds each target once and every later step finds it fresh:

- WAI_FEATURES: the union of the steps' features, except the hybrid signatures';
- WAI_PQ_FEATURES: the hybrid signatures step. `pq_signatures` changes what a build
  without it refuses (pq-signatures §6.3), so it stays out of the union and every other
  step keeps testing a build without it;
- WAI_RELEASE_FEATURES: the steps that run their tests with `--release`.

Each step selects its tests exactly as before (`--lib <module>::` or `--test <name>`,
with its filters). wai-live-web's browser tests run once, with `int_video`: its tests
are a superset of the default build's, and the feature gates nothing off.

A new job, features-alone, keeps the isolation the old steps gave: each feature list a
step used to build alone is checked alone (`cargo check --tests`), and wai-live-web
without `int_video`.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-26 00:48:57 -04:00