wai conform: JUnit and HTML reports, independent verifiers beside an implementation, the corpus union as one command, and wai doctor #642

Closed
dcharlot wants to merge 4 commits from wai/conform-output into main
Owner

What this is

wai conform writes reports a CI system reads, runs a corpus's independent verifier beside an implementation, and runs every corpus's independent verifier as one command. The conformance workflow runs that one command in place of a step per corpus. The release runs the quickstart from each archive as a new user runs it. wai doctor says which wai runs when you type it, and what the quickstart needs.

Merge order. Stacked on #634, merge after it. #634 is wai/toolchain-fixes; the two rewrite the same text in wai-release.yml, scripts/check-wai-ops-doors.py and wai/catalogue/README.md, and this branch carries the reconciliation. Both sit on #632's commit, 946f3beda, which moves changelog entries into wai/changes/ and the conformance workflow's lists into step files, so #632 merges before either. Until they merge, this pull request's diff also shows their changes.

What it carries. Two commits on wai/toolchain-fixes' converted commit, 1f0ab6ebf:

  • b582725df: the change of wai/conform-output (69f88e62f..ce85900ca) in #632's layout. Its message lists the source commits.
  • a511f1dee: what the two changes need from each other once one sits on the other (below).

What it defines

Reports. wai conform --format text|json|junit|html (operation conformance.run). junit prints a JUnit XML report: a test suite for each signed record and a test case for each case, with a failure exactly where a case failed and the record's corpus digest, implementation and signing key as its properties. html prints one page with the same. Both are made from the signed records alone, so they say what the records say.

An independent verifier beside an implementation. wai conform <kind> --suite <s> --impl <i> --independent runs the corpus's independent verifier, its second implementation written from the extension's text, on the same cases. Its outcome is a second signed record beside the implementation's (<suite>.independent.wai-conform.json). The run passes only when both conform and the two agree. Every case on which they reach different outcomes, or which both pass with different answers, is named and fails the run. A suite with no verifier in the table says so.

The corpus union as one command. wai conform --independent alone runs every corpus's independent verifier, or those --suite names, each in wai/ with the command line its README gives. With --out <dir> it writes a signed record for each corpus, which wai verify <dir> checks. A record's corpus digest is of the files the run reads. wai-conformance.yml ran each corpus's Python verifier in a step of its own, a list kept by hand. It now runs wai conform --independent --format junit, uploads the records and the report, and checks the records with wai verify. The union gains the pin corpus's verifier, which ran on one leg alone, and the OER corpus's oer2_verify.py, which no workflow ran. wai mcp's conformance_list and conformance_run read the same table.

The table is read from the step files. The table is not kept by hand in dx/independent.rs. wai-rs/build.rs reads it, through dx/independent_table.rs, from the # independent: lines of the step files in .github/wai-conformance/verifiers/, one line for each entry: <name> <area> [needs=<packages>] [verdicts=<file>] [dir=<dir>] python3 [-I] <script> <args>. A corpus's verifier joins the union by a line in its own step's file, which no other change edits. A step whose only job was its verifiers keeps its file, with its header and prose, as a declaration with no body. A wai built without the step files has no table: it refuses wai conform --independent with the code no-independent-table, and wai conform --list says it has none, rather than running nothing and passing. A verifier that a step's body runs itself is covered by that step, so a change that adds a step without an # independent: line merges with this one in either order.

The release runs the quickstart from each archive. Before attaching an archive, wai-release.yml runs wai/quickstart/test/clean-machine.sh on it. The script checks the archive against its SHA-256 and unpacks it on a fresh home directory and a PATH of the system's own directories. It then runs wai hello, wai verify, wai create my-room --template video-room and wai dev --check in the project. clean-machine.ps1 is its twin for the .zip archive, step for step.

wai doctor (operation toolchain.doctor, preview; toolchain_doctor in the agent door) checks, in order:

  • which program runs when a person types wai;
  • this install, and how it was installed;
  • the relay, the room service and the room client's files that wai dev runs;
  • whether loopback can be listened on, and whether the default ports of wai dev and wai http origin are free;
  • the browsers registered to open web pages;
  • where a credential is kept.

It exits 1 when a check fails, and warnings do not. The catalogue's verbs gain doctor.

What the checks hold

  • The table's tests read the step files. The table compiled in is their lines as they are now (the_table_is_the_step_files_lines). Every *_verify.py in the tree is an entry, is run by a step's own body, or says where it runs instead, as pack_verify.py does for wai-pack.yml (every_verifier_in_the_tree_is_an_entry_or_says_why_not). No step file's body runs an entry's command line (the_union_is_one_command_and_the_workflow_keeps_no_copy). Every suite names its corpus's verifier where the table has one. wai-breaking.yml runs these tests and now runs on a change under .github/wai-conformance/verifiers/.
  • scripts/wai-conformance-lists.py reads the same lines. check refuses a line it cannot read, a name given twice, a script or corpus that is not there, and a step that runs an entry itself. dry-run and independent print the entries, and its self-test covers them.
  • tests/cli_conform.rs covers the JUnit and HTML reports, --independent beside an implementation and alone, two passing answers that differ failing the run, and a verifier that fails without its package naming it.
  • scripts/check-wai-release-quickstart.py, in the repository checks on every change, holds each release leg to running its script before the archive is attached. That step may be neither skipped (if:) nor allowed to fail (continue-on-error:). The check also holds the twin to the script's steps and commands, and both unpack steps to checking the archive's SHA-256 first. Its self-test shows it failing each way.
  • The doors' check reads the verbs and their near-synonyms from catalogue.rs itself, so it holds doctor, upscale and tonemap with no list of its own.
  • tests/cli_doctor.rs covers this wai first on PATH, another program of that name first (a failure, which names it), the wai-cli package's binary named as that, and an install with nothing beside it for wai dev to run (a failure).

The conversion, and the two changes together

Onto main and #632. The source branch conflicted with main itself: in the sink kind and the native sink suite, the {case} placeholder, the README and wai-breaking.yml comments, and the repository checks. Those are resolved. The native sink suite now names its corpus's verifier, both repository-check steps are kept, and ops.json and Studio's actions are regenerated. Step names are unchanged, so #632's frozen baseline still matches them. Prose edits to step files are applied word by word, without reflowing. A fourth entry file describes the derived table; the three original entries are kept verbatim. Rebased onto 946f3beda, one file conflicted, wai/CONTRIBUTING.md: #632's # paths: wording and this change's # independent: sentences. Both are kept, and only that paragraph is rewrapped.

Onto wai/toolchain-fixes. Three files conflicted:

  • wai-release.yml keeps toolchain's schema paragraph, --studio on each build line and the wai-quantum --version run on the .zip leg. It also keeps this change's clean-machine.sh and .ps1 steps, in place of toolchain's inline try-run.
  • scripts/check-wai-ops-doors.py is this change's version, which reads VERBS and NEAR_SYNONYMS from catalogue.rs. That file already holds upscale, tonemap, doctor and up.
  • The catalogue README's paragraph gives the list with doctor, up as start, toolchain's record of upscale and tonemap, and doctor beside them.

These three are the only files whose change differs from this change on #632 alone.

a511f1dee then fixes what the stack broke.

  1. Toolchain's test every_text_that_states_the_verb_list_states_the_same_list looked for the doors' check's own lists, which this change removes. It now checks that the script names catalogue.rs and keeps no list. It also checks that what the script's reader takes from catalogue.rs's source is exactly VERBS and NEAR_SYNONYMS. The README must also record doctor. The test spells the definitions' openings in two pieces, so catalogue.rs holds each opening once and the doors' check's self-test can change it in a copy.
  2. Toolchain's clean-machine.sh adds a contents step and checks WAI Studio in wai dev --check. clean-machine.ps1 gains both, so the release quickstart check's rule, that the twin runs the script's steps and commands, holds. The check lists the contents step. It takes a step's wai command up to the first ;, }, ', |, > or && after it.
  3. The .ps1 help range follows its longer header.

How it was verified

This stack, at a511f1dee.

  • Locally (git and Python checks only), all of these pass:

    • scripts/wai-conformance-lists.py selftest and check, and scripts/wai-conformance-lists-selftest.sh. The hand list's steps all run, the declarations among them through the union.
    • scripts/check-changelog-fragment.py against main, scripts/changelog-assemble.py --check and scripts/changelog-fragments-selftest.sh.
    • The ops doors' check and the release quickstart check, each with its self-test.
  • On a Linux x86_64 build host, compiling this checkout's own sources (every tracked file touched first, so the shared target directory rebuilds them and reruns build.rs), these all pass:

    • wai ops export leaves catalogue/ops.json unchanged.
    • cargo test --lib catalogue.
    • Under quickstart,score,key_discovery,native_sink: the wai binary's unit tests and cli_breaking, cli_conform, cli_conform_sinks, cli_doctor, cli_mcp and cli_ops.
    • Under quickstart: the binary's unit tests and floor, cli_dx, cli_fleet, cli_studio and cli_doctor.
    • cargo check of mcp for the wai binary, and of holdings, quickstart and quickstart,app with --tests.
    • cargo clippy of the wai binary and of --lib --tests, with no error.
    • The ops doors' and release quickstart checks with their self-tests.

    The system's python3 was first on PATH there, since the claim verifier needs its cryptography package.

  • The adapted verb-list test fails when it should. Each of these mutations makes it fail, and the tree as it is passes:

    • the README's list without doctor;
    • the README without its record of doctor;
    • a quoted word in VERBS' definition that is no verb;
    • a quoted pair in NEAR_SYNONYMS' definition that is no near-synonym;
    • the doors' check keeping a list of its own;
    • the doors' check reading another file;
    • the README's up given another verb.
  • Not run: the lines a511f1dee adds to clean-machine.ps1. No host here has the shell, and the runner of the .zip leg was offline. The release workflow's comment and the changelog entry say so.

On the conversion's first base, #632's earlier tip 14f1abb7c, before it was stacked:

  • The table. Parsed from the step files, the table equals the source branch's hand-kept table field for field and in order, plus the catalogue-prior record's verifier.

  • The union. On the build host, wai conform --independent --root . --out records --format junit passed every entry, wai verify records accepted every record, and the JUnit report held no failure.

  • Planted gaps. Two were planted on the build host, and the files were then restored:

    • With holdings.sh's # independent: line removed, every_verifier_in_the_tree_is_an_entry_or_says_why_not fails and names holdings_verify.py.
    • With a hand-run of carousel_verify.py added to carousel.sh's body, the_union_is_one_command_and_the_workflow_keeps_no_copy fails and names the line.

    the_table_is_the_step_files_lines passed in both runs, so the build recompiled the table from the planted files. With the files restored, the tests pass.

With the other converted branches. This branch, stacked as it is, merges without conflict with each of the other branches converted to #632's layout (by git merge-tree). Merging all of them in forward, reverse and a mixed order gives one tree. On the build host, that tree passes these runs: cargo check --tests under the derived WAI_FEATURES and under WAI_PQ_FEATURES; cargo check --tests of quickstart,app; the catalogue's library tests; and the wai binary's unit tests.

On the CI hosts. Results on the CI runners come from this pull request's own CI run. None of the runs above is a CI result.

🤖 Generated with Claude Code


Closed: Superseded: the work continues as direct commits to main under the working model of 2026-11-06. wai doctor landed from wai/toolchain-doctor as the fuller of the two, so this branch's doctor is dropped and the rest (JUnit and HTML reports, independent verifiers beside an implementation) is rebased onto main and gated on a build host before landing.


Closed: Superseded: the work continues as direct commits to main under the working model of 2026-11-06. wai doctor landed from wai/toolchain-doctor as the fuller of the two, so this branch's doctor is dropped and the rest (JUnit and HTML reports, independent verifiers beside an implementation) is rebased onto main and gated on a build host before landing.

## What this is `wai conform` writes reports a CI system reads, runs a corpus's independent verifier beside an implementation, and runs every corpus's independent verifier as one command. The conformance workflow runs that one command in place of a step per corpus. The release runs the quickstart from each archive as a new user runs it. `wai doctor` says which `wai` runs when you type it, and what the quickstart needs. **Merge order.** Stacked on #634, merge after it. #634 is `wai/toolchain-fixes`; the two rewrite the same text in `wai-release.yml`, `scripts/check-wai-ops-doors.py` and `wai/catalogue/README.md`, and this branch carries the reconciliation. Both sit on #632's commit, 946f3beda, which moves changelog entries into `wai/changes/` and the conformance workflow's lists into step files, so #632 merges before either. Until they merge, this pull request's diff also shows their changes. **What it carries.** Two commits on `wai/toolchain-fixes`' converted commit, 1f0ab6ebf: - b582725df: the change of `wai/conform-output` (69f88e62f..ce85900ca) in #632's layout. Its message lists the source commits. - a511f1dee: what the two changes need from each other once one sits on the other (below). ## What it defines **Reports.** `wai conform --format text|json|junit|html` (operation `conformance.run`). `junit` prints a JUnit XML report: a test suite for each signed record and a test case for each case, with a failure exactly where a case failed and the record's corpus digest, implementation and signing key as its properties. `html` prints one page with the same. Both are made from the signed records alone, so they say what the records say. **An independent verifier beside an implementation.** `wai conform <kind> --suite <s> --impl <i> --independent` runs the corpus's independent verifier, its second implementation written from the extension's text, on the same cases. Its outcome is a second signed record beside the implementation's (`<suite>.independent.wai-conform.json`). The run passes only when both conform and the two agree. Every case on which they reach different outcomes, or which both pass with different answers, is named and fails the run. A suite with no verifier in the table says so. **The corpus union as one command.** `wai conform --independent` alone runs every corpus's independent verifier, or those `--suite` names, each in `wai/` with the command line its README gives. With `--out <dir>` it writes a signed record for each corpus, which `wai verify <dir>` checks. A record's corpus digest is of the files the run reads. `wai-conformance.yml` ran each corpus's Python verifier in a step of its own, a list kept by hand. It now runs `wai conform --independent --format junit`, uploads the records and the report, and checks the records with `wai verify`. The union gains the pin corpus's verifier, which ran on one leg alone, and the OER corpus's `oer2_verify.py`, which no workflow ran. `wai mcp`'s `conformance_list` and `conformance_run` read the same table. **The table is read from the step files.** The table is not kept by hand in `dx/independent.rs`. `wai-rs/build.rs` reads it, through `dx/independent_table.rs`, from the `# independent:` lines of the step files in `.github/wai-conformance/verifiers/`, one line for each entry: `<name> <area> [needs=<packages>] [verdicts=<file>] [dir=<dir>] python3 [-I] <script> <args>`. A corpus's verifier joins the union by a line in its own step's file, which no other change edits. A step whose only job was its verifiers keeps its file, with its header and prose, as a declaration with no body. A `wai` built without the step files has no table: it refuses `wai conform --independent` with the code `no-independent-table`, and `wai conform --list` says it has none, rather than running nothing and passing. A verifier that a step's body runs itself is covered by that step, so a change that adds a step without an `# independent:` line merges with this one in either order. **The release runs the quickstart from each archive.** Before attaching an archive, `wai-release.yml` runs `wai/quickstart/test/clean-machine.sh` on it. The script checks the archive against its SHA-256 and unpacks it on a fresh home directory and a PATH of the system's own directories. It then runs `wai hello`, `wai verify`, `wai create my-room --template video-room` and `wai dev --check` in the project. `clean-machine.ps1` is its twin for the `.zip` archive, step for step. **`wai doctor`** (operation `toolchain.doctor`, preview; `toolchain_doctor` in the agent door) checks, in order: - which program runs when a person types `wai`; - this install, and how it was installed; - the relay, the room service and the room client's files that `wai dev` runs; - whether loopback can be listened on, and whether the default ports of `wai dev` and `wai http origin` are free; - the browsers registered to open web pages; - where a credential is kept. It exits 1 when a check fails, and warnings do not. The catalogue's verbs gain `doctor`. ## What the checks hold - **The table's tests** read the step files. The table compiled in is their lines as they are now (`the_table_is_the_step_files_lines`). Every `*_verify.py` in the tree is an entry, is run by a step's own body, or says where it runs instead, as `pack_verify.py` does for `wai-pack.yml` (`every_verifier_in_the_tree_is_an_entry_or_says_why_not`). No step file's body runs an entry's command line (`the_union_is_one_command_and_the_workflow_keeps_no_copy`). Every suite names its corpus's verifier where the table has one. `wai-breaking.yml` runs these tests and now runs on a change under `.github/wai-conformance/verifiers/`. - **`scripts/wai-conformance-lists.py`** reads the same lines. `check` refuses a line it cannot read, a name given twice, a script or corpus that is not there, and a step that runs an entry itself. `dry-run` and `independent` print the entries, and its self-test covers them. - **`tests/cli_conform.rs`** covers the JUnit and HTML reports, `--independent` beside an implementation and alone, two passing answers that differ failing the run, and a verifier that fails without its package naming it. - **`scripts/check-wai-release-quickstart.py`**, in the repository checks on every change, holds each release leg to running its script before the archive is attached. That step may be neither skipped (`if:`) nor allowed to fail (`continue-on-error:`). The check also holds the twin to the script's steps and commands, and both unpack steps to checking the archive's SHA-256 first. Its self-test shows it failing each way. - **The doors' check** reads the verbs and their near-synonyms from `catalogue.rs` itself, so it holds `doctor`, `upscale` and `tonemap` with no list of its own. - **`tests/cli_doctor.rs`** covers this `wai` first on `PATH`, another program of that name first (a failure, which names it), the `wai-cli` package's binary named as that, and an install with nothing beside it for `wai dev` to run (a failure). ## The conversion, and the two changes together **Onto main and #632.** The source branch conflicted with main itself: in the sink kind and the native sink suite, the `{case}` placeholder, the README and `wai-breaking.yml` comments, and the repository checks. Those are resolved. The native sink suite now names its corpus's verifier, both repository-check steps are kept, and `ops.json` and Studio's actions are regenerated. Step names are unchanged, so #632's frozen baseline still matches them. Prose edits to step files are applied word by word, without reflowing. A fourth entry file describes the derived table; the three original entries are kept verbatim. Rebased onto 946f3beda, one file conflicted, `wai/CONTRIBUTING.md`: #632's `# paths:` wording and this change's `# independent:` sentences. Both are kept, and only that paragraph is rewrapped. **Onto `wai/toolchain-fixes`.** Three files conflicted: - `wai-release.yml` keeps toolchain's schema paragraph, `--studio` on each build line and the `wai-quantum --version` run on the `.zip` leg. It also keeps this change's `clean-machine.sh` and `.ps1` steps, in place of toolchain's inline try-run. - `scripts/check-wai-ops-doors.py` is this change's version, which reads `VERBS` and `NEAR_SYNONYMS` from `catalogue.rs`. That file already holds `upscale`, `tonemap`, `doctor` and `up`. - The catalogue README's paragraph gives the list with `doctor`, `up` as `start`, toolchain's record of `upscale` and `tonemap`, and `doctor` beside them. These three are the only files whose change differs from this change on #632 alone. **a511f1dee then fixes what the stack broke.** 1. Toolchain's test `every_text_that_states_the_verb_list_states_the_same_list` looked for the doors' check's own lists, which this change removes. It now checks that the script names `catalogue.rs` and keeps no list. It also checks that what the script's reader takes from `catalogue.rs`'s source is exactly `VERBS` and `NEAR_SYNONYMS`. The README must also record `doctor`. The test spells the definitions' openings in two pieces, so `catalogue.rs` holds each opening once and the doors' check's self-test can change it in a copy. 2. Toolchain's `clean-machine.sh` adds a contents step and checks WAI Studio in `wai dev --check`. `clean-machine.ps1` gains both, so the release quickstart check's rule, that the twin runs the script's steps and commands, holds. The check lists the contents step. It takes a step's `wai` command up to the first `;`, `}`, `'`, `|`, `>` or `&&` after it. 3. The `.ps1` help range follows its longer header. ## How it was verified **This stack, at a511f1dee.** - **Locally** (git and Python checks only), all of these pass: - `scripts/wai-conformance-lists.py selftest` and `check`, and `scripts/wai-conformance-lists-selftest.sh`. The hand list's steps all run, the declarations among them through the union. - `scripts/check-changelog-fragment.py` against main, `scripts/changelog-assemble.py --check` and `scripts/changelog-fragments-selftest.sh`. - The ops doors' check and the release quickstart check, each with its self-test. - **On a Linux x86_64 build host**, compiling this checkout's own sources (every tracked file touched first, so the shared target directory rebuilds them and reruns `build.rs`), these all pass: - `wai ops export` leaves `catalogue/ops.json` unchanged. - `cargo test --lib catalogue`. - Under `quickstart,score,key_discovery,native_sink`: the `wai` binary's unit tests and `cli_breaking`, `cli_conform`, `cli_conform_sinks`, `cli_doctor`, `cli_mcp` and `cli_ops`. - Under `quickstart`: the binary's unit tests and `floor`, `cli_dx`, `cli_fleet`, `cli_studio` and `cli_doctor`. - `cargo check` of `mcp` for the `wai` binary, and of `holdings`, `quickstart` and `quickstart,app` with `--tests`. - `cargo clippy` of the `wai` binary and of `--lib --tests`, with no error. - The ops doors' and release quickstart checks with their self-tests. The system's `python3` was first on PATH there, since the claim verifier needs its `cryptography` package. - **The adapted verb-list test fails when it should.** Each of these mutations makes it fail, and the tree as it is passes: - the README's list without `doctor`; - the README without its record of `doctor`; - a quoted word in `VERBS`' definition that is no verb; - a quoted pair in `NEAR_SYNONYMS`' definition that is no near-synonym; - the doors' check keeping a list of its own; - the doors' check reading another file; - the README's `up` given another verb. - **Not run:** the lines a511f1dee adds to `clean-machine.ps1`. No host here has the shell, and the runner of the `.zip` leg was offline. The release workflow's comment and the changelog entry say so. **On the conversion's first base**, #632's earlier tip 14f1abb7c, before it was stacked: - **The table.** Parsed from the step files, the table equals the source branch's hand-kept table field for field and in order, plus the catalogue-prior record's verifier. - **The union.** On the build host, `wai conform --independent --root . --out records --format junit` passed every entry, `wai verify records` accepted every record, and the JUnit report held no failure. - **Planted gaps.** Two were planted on the build host, and the files were then restored: - With `holdings.sh`'s `# independent:` line removed, `every_verifier_in_the_tree_is_an_entry_or_says_why_not` fails and names `holdings_verify.py`. - With a hand-run of `carousel_verify.py` added to `carousel.sh`'s body, `the_union_is_one_command_and_the_workflow_keeps_no_copy` fails and names the line. `the_table_is_the_step_files_lines` passed in both runs, so the build recompiled the table from the planted files. With the files restored, the tests pass. **With the other converted branches.** This branch, stacked as it is, merges without conflict with each of the other branches converted to #632's layout (by `git merge-tree`). Merging all of them in forward, reverse and a mixed order gives one tree. On the build host, that tree passes these runs: `cargo check --tests` under the derived `WAI_FEATURES` and under `WAI_PQ_FEATURES`; `cargo check --tests` of `quickstart,app`; the catalogue's library tests; and the `wai` binary's unit tests. **On the CI hosts.** Results on the CI runners come from this pull request's own CI run. None of the runs above is a CI result. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- **Closed:** Superseded: the work continues as direct commits to main under the working model of 2026-11-06. wai doctor landed from wai/toolchain-doctor as the fuller of the two, so this branch's doctor is dropped and the rest (JUnit and HTML reports, independent verifiers beside an implementation) is rebased onto main and gated on a build host before landing. --- **Closed:** Superseded: the work continues as direct commits to main under the working model of 2026-11-06. wai doctor landed from wai/toolchain-doctor as the fuller of the two, so this branch's doctor is dropped and the rest (JUnit and HTML reports, independent verifiers beside an implementation) is rebased onto main and gated on a build host before landing.
wai/toolchain-fixes, converted to the layout of the fix: no shared append point
All checks were successful
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 3m54s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 7m52s
wai-fleet service / service · macos (pull_request) Successful in 43s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 30s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 6m52s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 9m7s
wai-ledger service / service · macos (pull_request) Successful in 1m26s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 17s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 20m26s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 43s
wai-pack / wai-pack · macos (pull_request) Successful in 4m19s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m38s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 13m34s
wai-quantum WebGPU member / member · Metal (macos) (pull_request) Successful in 3m26s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 19m27s
wai-quantum WebGPU member / member · browser WebGPU (macos) (pull_request) Successful in 2m5s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 23m32s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 2m27s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 7m32s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 37s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 19s
wai-ops-gpu integer operators on GPUs / Metal GPU and browser WebGPU (macos) (pull_request) Successful in 11m58s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 5m11s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 7m35s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m25s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m20s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m0s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 10m54s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 17m29s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h30m12s
1f0ab6ebf1
The change of wai/toolchain-fixes (69f88e62f..074658780, 21 commits), on the fix branch: its
changelog entries as files of wai/changes/, its wai-conformance.yml edits as step files,
corpus files and test tags, and every other file as the branch has it.

- b04013914 holdings: the registry lists WHD1, the record's magic (§4.1)
- a184abb87 catalogue: upscale and tonemap are recorded in N3's verb list, and the doors' check knows them
- 8db31a778 wai mcp: MCP 2026-07-28, the stateless revision, beside the three initialize negotiates
- 052830194 wai.json: $schema, wai and name, and the schema of version 1 committed beside the reader
- 163fc2017 wai create: every template carries an AGENTS.md
- fe9b26fbc joule-moq-room: the example names the relay's WebSocket port, 4480, and one test holds every port
- 359b5ba9d quickstart: the archive carries WAI Studio, wai-ingest and wai-quantum
- 6334d88c8 joule-moq-room: the port table holds every daemon's default, and the listeners off until set
- d38610de6 wai.json: the two workflows that hold the schema to its reader run when the schema changes
- 179df52b7 catalogue: the two verbs joined the list after wai 0.4.0, not in toolchain 0.3.0
- 971cf5862 wai.json: a file of a later version is refused as that version before any member it adds
- 1a59a39f7 wai.json: the reader takes a whole number however it is written, and the tests run the name pattern
- d752fd9b4 wai.json: the release waits for the schema to be served, and version 1 is fixed by the first release that writes it
- c213ed9db wai mcp: -32022 names as supported only the revisions a request may name, never the one asked for
- 99b800f29 wai mcp: initialize negotiates 2025-11-25, the last revision with a handshake
- e33021c3f catalogue: the near-synonym list is held in every text that states it, and the doors' check knows up
- b99bb70be catalogue: the changelog records the near-synonym list held with the verb list
- a0beb2163 quickstart: the wai formula and manifest depend on wai-quantum's own instead of installing a second copy
- 0e5084031 quickstart: Studio's build leaves the checkout as it found it, and the examples workflow runs clean-machine.sh
- 4cc4ae3d7 joule-moq-room: the port test reads the gateway's example with the gateway's own reader, and starts the gateway from it
- 074658780 quickstart: the changelog names where Studio's build goes, not where it went before it shipped

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The change of wai/conform-output (69f88e62f..ce85900ca, 11 commits), on the fix branch: its
changelog entries as files of wai/changes/, and every other file as the branch has it, its
conflicts with main resolved (the sink kind and the native sink suite, the {case}
placeholder, the entry files and the wasmtime pin check landed since its base).

Its table of independent verifiers is no hand-kept list: wai-rs/build.rs reads it from the
`# independent:` lines of the step files (.github/wai-conformance/verifiers/), which
take the verifiers' command lines out of the steps' bodies; a step with only verifiers to
run keeps its file as a declaration. scripts/wai-conformance-lists.py reads and checks the
same lines, and the table's tests read the step files instead of the workflow.

- 0b653a415 wai conform: JUnit and HTML reports, the independent verifiers beside an implementation or alone, and the corpus union as one command; wai doctor
- c37330ac8 wai-release: the quickstart from every archive, as a new user runs it, and its PowerShell twin for Windows
- 0e1f3eb8a wai conform: the union's rule reads the workflow's commands, not its comments
- 741bd2bd1 wai: the README names wai doctor, toolchain_doctor and wai conform's independent verifiers
- ba302c439 wai doctor: a shim is the program its .shim file names, and 0.3.0 is WAI's
- bb7451190 wai conform: two passing answers that differ are a disagreement, each record digests what its run reads, and the rules are held
- a60f59c8f wai mcp: conformance_run on a corpus's directory runs its own verifier, as before the claims runs joined the table
- 710490dfa check-wai-ops-doors: the verbs and their near-synonyms are the catalogue's, read from it
- fb0ae3151 check-wai-release-quickstart: the release's quickstart is held in the repository checks, gated and ordered too
- 7fa7b506d wai/quickstart/test/clean-machine: the help is the header, its first line to its last
- ce85900ca wai: the README says a run beside the independent verifier passes only when the two agree

Co-Authored-By: Claude Opus 5.5 <[email protected]>
With toolchain-fixes under it, clean-machine.sh has a contents step and checks WAI Studio in
wai dev --check. clean-machine.ps1, its twin, gains both, so check-wai-release-quickstart.py's
rule (the twin runs the script's steps and commands) holds. The check now lists the contents
step, and takes a step's wai command up to the first ; } ' | > or && after it, so the output
the dev-check step keeps is not part of its command. The twin's help range follows its
longer header. The new PowerShell code has not run: no host here has PowerShell, and the
Windows runner is down. The release workflow's comment and the changelog entry say so.

The catalogue test every_text_that_states_the_verb_list_states_the_same_list no longer looks
for the doors' check's own lists, which conform-output removed. It checks that the script
names catalogue.rs as its source and keeps no list, and that what its reader takes from this
file's source is exactly VERBS and NEAR_SYNONYMS. The README must record doctor as well as
upscale and tonemap. The definitions' openings are spelt in two pieces in the test, so that
catalogue.rs holds each once and the doors' check's self-test can change it in a copy.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai-release: the header states what each archive runs, not the state of a runner
Some checks failed
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 2m1s
wai-fleet service / service · macos (pull_request) Successful in 59s
wai-ledger service / service · macos (pull_request) Successful in 1m0s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 16m33s
wai-pack / wai-pack · macos (pull_request) Successful in 4m19s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 18m1s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 7m27s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 8m5s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 8m4s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 12m25s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 21m2s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 18m16s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 1m28s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 1m11s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 4m56s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 34s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 5m47s
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 28s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m55s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m12s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m44s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 17m4s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 26s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 14s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 18m10s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 7m41s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m53s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 12m29s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Failing after 8h46m58s
317ae58c6e
Co-Authored-By: Claude Opus 5.5 <[email protected]>
wai dev's test: the stand-in room service listens without a reverse lookup
Some checks failed
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 / faces from keypoints 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 / each feature of the independent verifiers' steps compiles alone (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 operation catalogue / the catalogue and every door · linux (pull_request) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (pull_request) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Has been cancelled
wai-audit collector and player integration / collector · linux (pull_request) Has been cancelled
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (pull_request) Has been cancelled
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Has been cancelled
b75f6e1034
tests/cli_studio.rs failed on every run on one macOS runner and passed on
every other runner, 3 of 3 against 19 of 19 on 5 November, with "the room
service's clock on the relay: not within 30 s".

The stand-in room service starts an HTTPServer, whose server_bind calls
socket.getfqdn before the server listens. On that host, under the runner's
Python 3.15.2, getfqdn("127.0.0.1") takes 35 s, past the 30 s wai dev waits, and
a stack dump of the stalled stand-in shows it there. The stand-in relay opens a
plain socket and answers in 0.1 s. Nothing here reads the name, so the fixture
no longer asks for it.

On that host and Python the room stand-in took 35.5 s and now takes 0.12 s. A
socket.getfqdn planted to stall for 40 s fails the test without this change,
with the same message, and passes with it.

Changelog: none

Co-Authored-By: Claude Opus 5.5 <[email protected]>
dcharlot closed this pull request 2026-11-06 17:36:38 -05:00
Some checks failed
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 51s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 42s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 55s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (pull_request) Successful in 47s
wai-app and Create / wai-app · does this change touch it (pull_request) Successful in 3m41s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (pull_request) Successful in 1m49s
wai-audit collector and player integration / does this change touch it (pull_request) Successful in 2m7s
WAI operation catalogue / does this change touch it (pull_request) Successful in 2m4s
WAI conformance / does this change touch it (pull_request) Successful in 1m4s
WAI examples / WAI examples · does this change touch them (pull_request) Successful in 1m44s
wai-ledger service / does this change touch it (pull_request) Successful in 1m2s
WAI energy receipts / does this change touch it (pull_request) Successful in 2m13s
wai-fleet service / does this change touch it (pull_request) Successful in 1m12s
wai-quantum for JavaScript / does this change touch it (pull_request) Successful in 51s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 1m25s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 30s
wai-sink-android native sink library / does this change touch it (pull_request) Successful in 21s
WAI Studio / does this change touch it (pull_request) Successful in 34s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 54s
wai-web wasm32 / does this change touch it (pull_request) Successful in 33s
wai-sink-swift native sink package / does this change touch it (pull_request) Successful in 52s
WAI conformance / fast integer kernels, every x86_64 kernel set (AVX-512 silicon) (pull_request) Successful in 3m15s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (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 Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Has been cancelled
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Has been cancelled
WAI Studio / Studio in WebKit · linux (pull_request) Has been cancelled
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Has been cancelled
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Has been cancelled
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Has been cancelled
wai-quantum studio and desktop / studio · browser (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · macos (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · linux (pull_request) Has been cancelled
wai-quantum studio and desktop / desktop app · windows (pull_request) Has been cancelled
wai-quantum for JavaScript / javascript · linux (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-ledger service / service · linux (pull_request) Has been cancelled
wai-ledger service / service · macos (pull_request) Has been cancelled
wai-fleet service / service · linux (pull_request) Has been cancelled
wai-fleet service / service · macos (pull_request) Has been cancelled
WAI examples / WAI examples · portable · linux (pull_request) Has been cancelled
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Has been cancelled
WAI examples / WAI examples · android-app · linux-arm64 (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 / faces from keypoints 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 / each feature of the independent verifiers' steps compiles alone (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 operation catalogue / the catalogue and every door · linux (pull_request) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (pull_request) Has been cancelled
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Has been cancelled
wai-audit collector and player integration / collector · linux (pull_request) Has been cancelled
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Has been cancelled
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (pull_request) Has been cancelled
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Has been cancelled
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Has been cancelled
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (pull_request) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Has been cancelled

Pull request closed

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!642
No description provided.