ci: thirteen WAI workflows run only when the pull request's own diff touches them #252

Merged
dcharlot merged 2 commits from ci/gate-on-pr-diff into main 2026-10-14 10:09:41 -04:00
Owner

Thirteen WAI workflows now run only when the pull request's own diff touches their paths.

Why

This forge matches a workflow's paths: filter against the push, not the pull request (measured earlier: a jcp-only change ran 2 workflows on a fresh branch and 15 after a rebase). So every merge of main into a branch fired nearly every WAI workflow, whatever the pull request changed. That includes the three-platform conformance matrix, the Kani shards, the vector and operator legs, and the hour-long neural and JPEG AI end-to-end runs. Merges of main are routine here, and these runs filled the queue.

wai-pack and wai-web-reach already guarded against this with scripts/pr-touches-paths.py. This applies the same gate to the rest.

What changes

In each of the 13 workflows:

  • a job relevant ("does this change touch it") runs on linux-arm64, a few seconds, and answers whether base...head touches any path in the workflow's own paths: lists;
  • every other job gets needs: relevant and if: needs.relevant.outputs.run == 'true'. The one existing condition (conformance's spec-vector-coupling, pull requests only) is kept, joined with &&.

The gate fails open: a push to main, a scheduled run, or a diff it cannot compute answers true, so those run everything as before. Nothing else in the workflows changes.

The workflows: wai-conformance, wai-formal-verification, wai-vector, wai-ops, wai-quantum-webgpu, conformance, wai-energy-receipts, wai-byte-equality, wai-jpegai-e2e, wai-neural-e2e, wai-sota-vectors, wai-neural-gates and wai-web-wasm.

Evidence

  • Every non-gate job in the 13 files depends on relevant and is conditioned on it; checked by parsing each file.
  • The concurrency check passes.
  • Each workflow lists its own file among its paths, so on this pull request every gate answers true and every workflow runs in full. That is the end-to-end test of the gate's true path. The false path is the one wai-pack and wai-web-reach have used for weeks.

🤖 Generated with Claude Code

Thirteen WAI workflows now run only when the pull request's own diff touches their paths. ## Why This forge matches a workflow's `paths:` filter against the push, not the pull request (measured earlier: a jcp-only change ran 2 workflows on a fresh branch and 15 after a rebase). So every merge of main into a branch fired nearly every WAI workflow, whatever the pull request changed. That includes the three-platform conformance matrix, the Kani shards, the vector and operator legs, and the hour-long neural and JPEG AI end-to-end runs. Merges of main are routine here, and these runs filled the queue. `wai-pack` and `wai-web-reach` already guarded against this with `scripts/pr-touches-paths.py`. This applies the same gate to the rest. ## What changes In each of the 13 workflows: - a job `relevant` ("does this change touch it") runs on `linux-arm64`, a few seconds, and answers whether `base...head` touches any path in the workflow's own `paths:` lists; - every other job gets `needs: relevant` and `if: needs.relevant.outputs.run == 'true'`. The one existing condition (`conformance`'s `spec-vector-coupling`, pull requests only) is kept, joined with `&&`. The gate fails open: a push to main, a scheduled run, or a diff it cannot compute answers `true`, so those run everything as before. Nothing else in the workflows changes. The workflows: `wai-conformance`, `wai-formal-verification`, `wai-vector`, `wai-ops`, `wai-quantum-webgpu`, `conformance`, `wai-energy-receipts`, `wai-byte-equality`, `wai-jpegai-e2e`, `wai-neural-e2e`, `wai-sota-vectors`, `wai-neural-gates` and `wai-web-wasm`. ## Evidence - Every non-gate job in the 13 files depends on `relevant` and is conditioned on it; checked by parsing each file. - The concurrency check passes. - Each workflow lists its own file among its paths, so on this pull request every gate answers `true` and every workflow runs in full. That is the end-to-end test of the gate's `true` path. The `false` path is the one `wai-pack` and `wai-web-reach` have used for weeks. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ci: thirteen WAI workflows run only when the pull request's own diff touches them
Some checks failed
spec citations resolve / Code cites no section its SPEC lacks (pull_request) Has been cancelled
standards workspaces build + test / arl-rs (pull_request) Has been cancelled
standards workspaces build + test / eoc-rs (pull_request) Has been cancelled
standards workspaces build + test / jcp-rs (pull_request) Has been cancelled
standards workspaces build + test / joule-ui-rs (pull_request) Has been cancelled
standards workspaces build + test / joulehook-rs (pull_request) Has been cancelled
standards workspaces build + test / proof-rs (pull_request) Has been cancelled
standards workspaces build + test / sandbox-rs (pull_request) Has been cancelled
standards workspaces build + test / sense-rs (pull_request) Has been cancelled
standards workspaces build + test / smart-byte-rs (pull_request) Has been cancelled
tests in CI / every test file is run by a job or listed with its reason (pull_request) Has been cancelled
wai formal verification (integer core) / every harness in one shard (pull_request) Has been cancelled
wai formal verification (integer core) / kani (arith) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (isqrt512) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (plan) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (sound) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (stage) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (rans64-t2) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (stage-long) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (integer-core) (pull_request) Has been cancelled
WAI neural decoders end-to-end / synthetic fixtures → Rust decode → reference (±4) (pull_request) Has been cancelled
wai-vector vector graphics / linux-aarch64 (pull_request) Has been cancelled
wai-vector vector graphics / linux-x86_64 (pull_request) Has been cancelled
wai-vector vector graphics / macos-arm64 (pull_request) Has been cancelled
wai-vector vector graphics / wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
wai-vector vector graphics / wasm32 under Node (pull_request) Has been cancelled
wai-vector vector graphics / wasm32 in three browser engines (pull_request) Has been cancelled
wai-vector vector graphics / fuzz, peak allocation, comparison count (pull_request) Has been cancelled
wai-vector vector graphics / independent checker (Python) (pull_request) Has been cancelled
workflow hygiene / every workflow supersedes its own queue (pull_request) Has been cancelled
c392092d84
The forge matches a workflow's paths: against the push, not the pull request,
so merging main into a branch fired every path-filtered workflow whatever the
pull request changed. wai-pack and wai-web-reach already guarded against this
with scripts/pr-touches-paths.py; wai-conformance, wai-formal-verification,
wai-vector, wai-ops, wai-quantum-webgpu, conformance, wai-energy-receipts,
wai-byte-equality, wai-jpegai-e2e, wai-neural-e2e, wai-sota-vectors,
wai-neural-gates and wai-web-wasm now do too: a light job on linux-arm64
answers whether the pull request's diff touches the workflow's paths, and every
other job waits on it. A push to main, a schedule, or anything the script
cannot determine answers true.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
pr-touches-paths: a comment inside a path list no longer ends it
Some checks failed
wai formal verification (integer core) / kani (isqrt512) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (plan) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (sound) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (stage) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (rans64-t2) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (stage-long) (pull_request) Has been cancelled
wai formal verification (integer core) / kani (integer-core) (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 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 cross-architecture byte-equality / linux-aarch64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / linux-x86_64 (pull_request) Has been cancelled
wai cross-architecture byte-equality / macos-arm64 (reference) (pull_request) Has been cancelled
smart-byte conformance gate / Validate conformance JSON files (pull_request) Has been cancelled
smart-byte conformance gate / Second implementation reproduces every vector (pull_request) Has been cancelled
smart-byte conformance gate / Spec changes require vector-pack updates (pull_request) Has been cancelled
smart-byte conformance gate / VERSIONS.md and README.md must exist (pull_request) Has been cancelled
standards workspaces build + test / openpay (pull_request) Has been cancelled
26a6c1454d
The parser stopped reading a paths: list at its first comment line, so every
glob after it was dropped and a pull request touching only those paths was
answered false: its workflow's tests skipped, silently. wai-http, which has
used this gate for weeks, was read as 10 of its 41 paths. The list now
continues past comments and blank lines, and a trailing comment is not part of
a glob; every workflow's list is read exactly as its YAML states it. The
self-test gains the case, and fails it with the old parser.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Transaction-Science/open-standards!252
No description provided.