Every change to WAI added an entry at the head of wai/CHANGELOG.md, and every new module appended to the hand-kept lists of .github/workflows/wai-conformance.yml. So any two branches conflicted on those lines and had to merge one after another. This moves both into files a change adds. - Changelog entries: a change adds wai/changes/<yyyy-mm-dd>-<slug>.md holding the entry text. scripts/changelog-assemble.py renders the entries into CHANGELOG.md's Unreleased section for a release, in a stable order. scripts/check-changelog-fragment.py, run by repo-checks on every pull request, fails a pull request that changes wai/ and adds or edits no entry file directly in wai/changes/ (a release passes, and so does a commit with the trailer line "Changelog: none"). A pull request opened before the check reached main passes as it is; one opened after it that adds its entry to the head of Unreleased fails and is told where the entry goes. wai breaking reads breaking changes from entry files too. - The conformance workflow: each per-module verifier step is a file in .github/wai-conformance/verifiers/, each corpus a file in corpora/, and the integer-kernel tests carry a tag line. scripts/wai-conformance-lists.py derives every list the workflow kept by hand (WAI_FEATURES, the union --bin and --test lists, the features-alone lists, the kernel and corpus steps) from those files when the workflow runs. Its `selftest --exact` holds the derived lists to the hand lists of the commit before this one, and its dry-run prints every command each job runs: the dry-runs before and after this change differ only in the gate's path list, which gains the two paths this change adds. - What stays shared, and how to insert there, is written in wai/CONTRIBUTING.md and wai/changes/README.md: wai-rs Cargo.toml features and [[test]] entries, lib.rs, registry rows, wai/.gitattributes and the live corpus table take an insert beside the related entry, never at the end. Co-Authored-By: Claude Opus 5.5 <[email protected]>
2.4 KiB
What wai-conformance.yml runs, one file a step
wai-conformance.yml keeps no hand list of its verifier steps, corpora or kernel tests. Its
lists are derived, when it runs, from the files here and from tags in the test files, by
scripts/wai-conformance-lists.py, whose
docstring states every key; its gate reads the steps' paths: through
scripts/pr-touches-paths.py. A change that adds a verifier, a corpus or a kernel test adds
a file, or a line to a file of its own, and edits no line of the workflow, unless a step's
paths: names a file under none of the trigger's paths (check names it). Its features and
[[test]] entries in wai/wai-rs/Cargo.toml stay shared
(wai/CONTRIBUTING.md).
verifiers/<name>.sh: one step of theindependent-verifiersjob. Its body is the step's shell, run inwai/(orworking-directory:) withbash -eo pipefail, as a workflow step runs. Its header, the leading# key: valuelines, givesstep:(its name),order:(steps run in ascending order, a tie by file name),features:(each list compiles alone infeatures-alone, and every feature joinsWAI_FEATURES), and where it needs themalone:,build: pq,release-features:,bins:,pq-bins:,paths:(the extension texts it reads, which the workflow's gate then runs on) andworking-directory:. Prose comments follow the header, after a#line.corpora/<name>.txt: one cargo-class corpus, verified by its own tool on every leg ofcargo-classes(corpus:,order:,bin:,dir:).- A test file of
wai/wai-rs/tests/whose first line is// wai-conformance: int-kernelsruns in the fast integer kernels' steps of both profiles (int-kernels-release: the release step only;int-kernels-amd: the AVX-512 host too). The steps' features are the tagged tests'required-features. baseline.json: the lists the workflow kept by hand before they were derived. The repository checks require every derived list to hold every entry of it, and every step it names to run.
To see what the workflow runs: python3 scripts/wai-conformance-lists.py dry-run (of another
commit: --ref <commit>; two of them diff line by line). To run one step as CI does:
python3 scripts/wai-conformance-lists.py run --only <name>. To check the files:
python3 scripts/wai-conformance-lists.py check.