Rust: one toolchain, the latest stable #606

Merged
dcharlot merged 7 commits from chore/rust-latest-stable into main 2026-11-04 14:18:27 -05:00
Owner

The policy is one toolchain: the latest stable Rust, pinned at the repository root, with no floor beneath it and no second toolchain anywhere in CI.

Two open pull requests each did half of that and neither did all of it, so this replaces both. They were not duplicates — they overlapped in exactly one file:

  • #601 removed the minimum-supported-version floor (rust-version out of 476 Cargo.toml files, plus the docs that promised it) but left the pin at 1.98.0.
  • #594 moved the pin 1.98.0 → 1.99.1 and fixed what the new clippy reports, but kept the MSRV job and its second toolchain.

Merging either alone leaves the repository in a state the policy forbids: #601 alone tracks a stale stable, #594 alone still installs a 1.97.0 toolchain beside the pin to check a floor that is not supposed to exist.

The one conflict, and how the policy settles it

Both touched .github/workflows/wai-quantum-webgpu.yml. #601 deletes the MSRV 1.97.0 job and its cargo +1.97.0 check step; #594 keeps the job and bumps its version. There is no technical tiebreak — the directive decides it. One toolchain means the job goes, so this takes #601's structure with #594's version: the job and its install are deleted, and what remains installs 1.99.1 only.

What lands

  • rust-toolchain.toml → channel = "1.99.1".
  • The rust-version key removed from 476 manifests. It was a cargo convenience that turns an old toolchain into a readable message; it was never a support promise, and leaving it in print made it look like one.
  • The clippy findings that 1.99.1 newly reports, fixed ahead of the pin so the pin commit does not also carry lint churn.
  • Two macOS CI legs that depended on runner state the pin change clears or never had.
  • No MSRV job and no second toolchain in any workflow.

What deliberately does not move

Thirteen 1.98.0 strings stay exactly as they are, because they are not pins — they are dated records of what was measured, and rewriting them would falsify the measurement. For example standards-build.yml says the jouleclaw fp16 flag was "Verified on a native arm64 Linux container (rustc 1.98.0): without the flag, 12 errors; with it, 4457 tests pass." That observation was made under 1.98.0 and remains true of 1.98.0.

Three kinds of version string look alike in a grep and must not be treated alike: a pin (moves), an MSRV floor (is removed, because it implies a second toolchain), and a provenance record (is left alone).

One rust-version key also remains, at joule-code/joule-code-rs/vendor/wtransport/Cargo.toml — a vendored third-party crate, correctly untouched.

Verification

  • rust-toolchain.toml is 1.99.1; zero occurrences of 1.97.0 in any manifest or workflow; the only 1.98.0 left under .github/ is the provenance comment above.
  • Exactly one rust-version key remains, and it is the vendored one.
  • 77 workflows parse; all 66 gate-class jobs are on linux, confirming this rebase preserved #603 rather than reverting it.
  • check-lockfiles (60 lockfiles, all current), check-workflow-concurrency (77 workflows, each grouped per ref), check-tests-in-ci, check-spec-refs (1966 citations across 17 standards, all resolve) and check-no-vanity-metrics all pass locally. check-public-names needs a forge secret, so CI runs that one.

One commit from #594 is intentionally absent: it was byte-identical to the proof-gate fix in #599, which has already merged.

🤖 Generated with Claude Code

The policy is one toolchain: the latest stable Rust, pinned at the repository root, with no floor beneath it and no second toolchain anywhere in CI. Two open pull requests each did half of that and neither did all of it, so this replaces both. They were not duplicates — they overlapped in exactly one file: - **#601** removed the minimum-supported-version floor (`rust-version` out of 476 `Cargo.toml` files, plus the docs that promised it) but left the pin at 1.98.0. - **#594** moved the pin 1.98.0 → 1.99.1 and fixed what the new clippy reports, but kept the MSRV job and its second toolchain. Merging either alone leaves the repository in a state the policy forbids: #601 alone tracks a stale stable, #594 alone still installs a 1.97.0 toolchain beside the pin to check a floor that is not supposed to exist. ## The one conflict, and how the policy settles it Both touched `.github/workflows/wai-quantum-webgpu.yml`. #601 **deletes** the `MSRV 1.97.0` job and its `cargo +1.97.0 check` step; #594 **keeps** the job and bumps its version. There is no technical tiebreak — the directive decides it. One toolchain means the job goes, so this takes #601's structure with #594's version: the job and its install are deleted, and what remains installs 1.99.1 only. ## What lands - `rust-toolchain.toml` → `channel = "1.99.1"`. - The `rust-version` key removed from 476 manifests. It was a cargo convenience that turns an old toolchain into a readable message; it was never a support promise, and leaving it in print made it look like one. - The clippy findings that 1.99.1 newly reports, fixed ahead of the pin so the pin commit does not also carry lint churn. - Two macOS CI legs that depended on runner state the pin change clears or never had. - No MSRV job and no second toolchain in any workflow. ## What deliberately does not move **Thirteen `1.98.0` strings stay exactly as they are**, because they are not pins — they are dated records of what was measured, and rewriting them would falsify the measurement. For example `standards-build.yml` says the jouleclaw fp16 flag was "Verified on a native arm64 Linux container (rustc 1.98.0): without the flag, 12 errors; with it, 4457 tests pass." That observation was made under 1.98.0 and remains true of 1.98.0. Three kinds of version string look alike in a grep and must not be treated alike: a **pin** (moves), an **MSRV floor** (is removed, because it implies a second toolchain), and a **provenance record** (is left alone). One `rust-version` key also remains, at `joule-code/joule-code-rs/vendor/wtransport/Cargo.toml` — a vendored third-party crate, correctly untouched. ## Verification - `rust-toolchain.toml` is `1.99.1`; **zero** occurrences of `1.97.0` in any manifest or workflow; the only `1.98.0` left under `.github/` is the provenance comment above. - Exactly one `rust-version` key remains, and it is the vendored one. - 77 workflows parse; all 66 gate-class jobs are on `linux`, confirming this rebase preserved #603 rather than reverting it. - `check-lockfiles` (60 lockfiles, all current), `check-workflow-concurrency` (77 workflows, each grouped per ref), `check-tests-in-ci`, `check-spec-refs` (1966 citations across 17 standards, all resolve) and `check-no-vanity-metrics` all pass locally. `check-public-names` needs a forge secret, so CI runs that one. One commit from #594 is intentionally absent: it was byte-identical to the proof-gate fix in #599, which has already merged. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This repository had four different answers to "what Rust does this need":

  rust-toolchain.toml  1.98.0   (the pin CI actually installs)
  59 Cargo.toml files  1.97     (rust-version)
  1 Cargo.toml file    1.88     (rust-version)
  INGEST.md            1.95.0   ("CI enforces both")

The floor was enforced in exactly one place -- `wai-quantum-webgpu.yml` ran
`cargo +1.97.0 check` against one crate's one feature. So 59 manifests declared
a minimum nothing verified, and the top-level document told readers a version
that had not been the pin for some time, crediting CI with checking it.

The policy is to track the latest stable. That makes a floor below the pin
something this repository does not promise, so the unenforced check goes, and
the documents stop claiming a version and an enforcement that were not there:

- `wai-quantum-webgpu.yml`: the `MSRV 1.97.0` step, the second toolchain its
  install step existed to fetch, and `MSRV` in the job's name.
- `INGEST.md`: states the pin at the root, that CI installs exactly it, and
  that there is no floor beneath it.
- `openpay/README.md` and `openpay/docs/00-foundation.md`: both named 1.95
  as the toolchain, and the README credited CI with enforcing an MSRV.

A version written in a document is a claim like any other. Stating 1.95 while
the pin is 1.98.0, and "CI enforces both" while one crate was checked, is worse
than stating nothing -- it reads as verified.

**Not done here, deliberately.** The 59 `rust-version = "1.97"` keys and the one
`1.88` stay for now. Removing them is not the small change it looks like: most
member crates inherit via `rust-version.workspace = true`, which fails to parse
the moment the workspace key is gone, so it is a coordinated edit across
hundreds of manifests rather than sixty. The key also has value independent of
any promise, since it turns an old toolchain into a clear message instead of a
compile error. What it must not do is state a floor nobody checks, so the
options are to delete it everywhere or to move it with the pin -- a decision
with consumer-facing consequences, which is its own change.

Co-Authored-By: Claude Opus 5 <[email protected]>
The repository tracks the latest stable Rust, pinned at the root. A
`rust-version` key states a *floor* -- the oldest toolchain a crate supports --
which is a different promise, and one this repository does not make. It also
said 1.97 while the pin was 1.98.0 and nothing verified it, so it was a claim in
the wrong direction and unchecked in both.

So it goes, everywhere:

    59  rust-version = "1.97"            (workspace and package declarations)
   417  rust-version.workspace = true    (members inheriting them)
   476  files, 476 deletions, 0 insertions

The 417 are why this is not the sixty-file change it looks like from a grep for
the value. A member inheriting a key that no longer exists does not fall back to
a default -- its manifest stops resolving. Removing the declarations without the
inherits would have broken every workspace that has members.

Deliberately untouched: `joule-code-rs/vendor/wtransport/Cargo.toml`. That is a
vendored third-party crate declaring a floor about itself, not about us, and our
pin is above it. Editing vendored source to satisfy our own policy would make
the copy diverge from upstream for no benefit.

Verified rather than assumed:

- all 493 `Cargo.toml` files in the tree parse (`tomllib`)
- `cargo metadata --no-deps --locked` resolves on `joule-code-rs`, `wai-rs`,
  `openpay`, `mesh-rs`, `sandbox-rs` and `jcp-rs` -- the check that actually
  exercises workspace inheritance, which a TOML parse does not
- no `Cargo.lock` changed; `rust-version` is not lockfile state

`wai/wai-verify/Cargo.toml` already carried a comment saying it omits
`rust-version` on purpose, so this makes the rest of the tree agree with the one
crate that had already decided.

What this gives up, stated plainly: cargo can no longer greet an older
toolchain with "requires rustc 1.97" and will instead fail wherever the code
first needs something newer. That is the cost of not maintaining a floor, and
it is the right cost when the floor was fiction.

Co-Authored-By: Claude Opus 5 <[email protected]>
These are the only lints clippy 1.99.1 reports that clippy 1.98.0 does not.
Every cargo root in the tree was compared on both toolchains (the evidence is
in the next commit). 1.98.0's clippy also builds every target of the fixed
code, and reports nothing it did not report before, so this commit stands
under either pin.

What changed, and why

- clippy::assert_is_empty is new in 1.99. 36 sites, all in test code
  (#[cfg(test)] modules; no lib or bin build reports any):
  aac-core and access-core, 23 sites; openpay's op-crypto-extra, op-emv,
  op-iso20022, op-reconciliation, op-routing, op-screening, op-settlement
  and op-tax, 13 sites. `assert!(x.is_empty())` becomes
  `assert_eq!(x, [] as [T; 0])`, `assert_ne!` for the negation, or `""` for
  strings, so a failure prints the value instead of only "false". aac-core and
  access-core are `#![deny(warnings)]` and `#![deny(clippy::all)]`, so without
  this their clippy run fails on 1.99.1.
  Judgment call: at 18 of the 36 sites, clippy's own "MachineApplicable"
  suggestion does not compile. It names local types by crate-relative path
  (`finder::Found`, which is not in scope in a test module), or offers a bare
  `[]` whose element type cannot be inferred. So each site names its element
  type as its own module sees it (`[] as [Found; 0]`, `[] as [f64; 0]`). The
  four lines rustfmt would wrap are wrapped the way rustfmt wraps them.

- clippy::approx_constant (deny-by-default) now knows EULER_GAMMA and
  GOLDEN_RATIO. Both are in std::f{32,64}::consts and stable since 1.94; the
  jouleclaw workspace MSRV is 1.97.
  - jouleclaw-omni, inference/architecture/mochi.rs: `1.618_034` becomes
    `std::f32::consts::GOLDEN_RATIO`. They are the same f32
    (1.61803400516510009765625), so the latents do not change. This file is
    in standards-build.yml's macOS gate (`cargo clippy -p jouleclaw-omni
    --features metal -- -D warnings`), which fails on 1.99.1 without the fix.
  - jouleclaw-outlier, c_factor: `0.5772156649` becomes
    `std::f64::consts::EULER_GAMMA`. Judgment call: the literal was
    truncated, so c(n) moves by 3.1e-12. The normalisation in the
    isolation-forest paper uses the Euler-Mascheroni constant itself, so this
    is the intended value. No other crate and no committed vector reads these
    scores, and the crate's tests pass unchanged.

- smart-byte-rs/Cargo.lock: async-trait 0.1.89 becomes 0.1.92, which adds
  syn 3.0.9 as its dependency. 0.1.89 put `#[must_use]` on every trait method
  it generates. clippy 1.99 now counts the returned `Pin<Box<dyn Future>>` as
  must_use already, so clippy::double_must_use fired at 9 #[async_trait] trait
  methods. The attribute there is the macro's, not ours, so the right fix is
  the macro: 0.1.92 no longer emits it, and every other lockfile in this tree
  already uses 0.1.92. A narrow `cargo update -p async-trait --precise 0.1.92`
  also moved data-encoding-macro-internal (which accepts syn >=1, <3) from syn
  2 to syn 1. That was put back to syn 2.0.117, as on main, so the lock
  changes only what the bump needs. `cargo update --workspace --locked` and
  scripts/check-lockfiles.sh accept it.

Left as they are

- openpay op-dispute-evidence evidence.rs:92 (clippy::double_must_use) is
  reported on 1.98.0 too. Only the message's wording changed in 1.99.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Approved by the owner on 2026-10-22. Procedure: change `channel`, run
`rustup show`, then run the pipeline.

What changed
- rust-toolchain.toml and eoc/eoc-rs/rust-toolchain.toml: channel "1.98.0"
  becomes "1.99.1". These are the only two pins in the tree, and the root one
  governs every other cargo root.
- 64 workflows under .github/workflows (the forge's CI): every `Install Rust
  1.98.0`, `rustup toolchain install / default / component add / target add
  --toolchain 1.98.0` and `--default-toolchain 1.98.0` now names 1.99.1
  (409 lines). Two of those lines are in build steps rather than install
  steps (wai-conformance.yml's two `wasm32 (unix)` steps each
  `rustup target add --toolchain`), and they move with the rest: a target
  added to a toolchain that is not installed is an error.
- Left as they are, because they record what was measured on 1.98.0:
  standards-build.yml's "Verified on a native arm64 Linux container (rustc
  1.98.0)", wai-conformance.yml's note on Rust 1.98's LLD 22, and the
  "rustc 1.98.0 (example)" strings in receipts, vectors and docs. The
  one-codegen-unit workaround that note explains also stays. 1.99.1 ships
  LLD 23.1.1, which the note says links those inputs, but removing the
  workaround should wait for a run at the CI path on x86_64.

Why
- 1.98.0 has a P-critical miscompile, rust-lang/rust#161441 (I-miscompile,
  regression-from-stable-to-stable). rustc emits a vacant (null) method slot
  in a trait-object vtable, so a safe dynamic call jumps to address zero
  (undefined behaviour). RELEASES.md records the fix in 1.98.1 ("rustc: fix
  miscompilation in generating vtables").
- 1.99.1 is the current stable (channel manifest dated 2026-10-15; rustc
  58cf8f9c3 2026-10-13). It also fixes 1.99.0's own regressions: wcslen on
  UEFI and embedded targets, x86_64 FFI `bool` returns, and the rust-lld rpath
  on macOS.

Evidence
All of it ran on the build host ([email protected], aarch64-apple-darwin)
through ~/kani-logs/remote/rb. Nothing was built on the dev Mac.

- `rustup show`: the active toolchain is 1.99.1-aarch64-apple-darwin,
  "overridden by .../rust-toolchain.toml" (and by eoc/eoc-rs's own file
  there). rustc 1.99.1 (58cf8f9c3 2026-10-13), LLVM 23.1.1, clippy 0.1.99,
  rustfmt 1.10.0. The baseline is rustc 1.98.0 (88d9e12ae 2026-08-18).
- Scope: every cargo root the pin governs, which is 46 of the 49 tracked
  lockfiles. The other three: two are vendored crates that resolve inside
  their parents, and wai/wai-rs/fuzz builds on its own pinned nightly.
- Trees. The final tree is main at 96117c570 plus these two commits. Main
  moved four times while this ran, and each root's evidence comes from the
  newest tree it was run on:
  - 13 roots on the final tree: every root main changed after 1a465f23d,
    and every root that consumes such a crate by path.
  - 12 roots on 1a465f23d plus these two commits.
  - 7 roots on b16816671 plus these two commits.
  - 14 roots on aa61ab3b9 plus the pin change.
  For each root in the last three groups, checked with git diff and the
  lockfiles' path packages: none of its files, and no crate it reaches by
  path, differs on the final tree.
- Each root got:
  (a) `cargo fmt --all -- --check` on the pin and on 1.98.0. The output is
      byte-identical in all 46. CI gates no root on rustfmt, and none is
      rustfmt-clean on main.
  (b) `cargo clippy --locked --keep-going --workspace --all-targets` on both
      toolchains, with the diagnostics compared line by line. After the
      previous commit, no root has a diagnostic that only 1.99.1 reports.
      openpay's one differing line is the same lint at the same site,
      reworded.
  (c) `cargo test --workspace --locked`.
  (d) the root's other CI steps that can run on this host: feature-gated
      tests, conformance suites, release-profile tests, the aac page-set
      checks, and every clippy -D warnings gate. The gates are
      standards-build's macOS meter and omni lints (jouleclaw-energy x2,
      jouleclaw-omni metal, jouleclaw-loader-gguf, jcp, proof, eoc, sandbox),
      wai-pack, wai-quantum-cli (default, no-default and metal),
      wai-quantum-service, wai-quantum-qpu and wai-quantum-desktop.
- Totals: `cargo test --workspace` ran in 43 roots: 12,532 passed, 1 failed,
  101 ignored. The other 3 roots are wasm32-only, and their
  `cargo build --release --target wasm32-unknown-unknown` passed. Every
  other CI step passed (62 of 62).
- On the final tree: scripts/check-lockfiles.sh (cargo 1.99.1) found all 47
  lockfiles current, and scripts/check-advisories.py passes.
- tokio is 1.54.1 in every lockfile cargo reads. That is patched for both
  RUSTSEC-2026-0386 (>= 1.53.3) and RUSTSEC-2026-0384 (>= 1.54.1). The 1.53.1
  in vendor/wtransport/Cargo.lock is the upstream file kept with the vendored
  source; cargo resolves wtransport inside its parents, and both gates skip
  that file.
- What is not green, each one reproduced on 1.98.0:
  - wai-ops-gpu: under the debug profile, `corpus` trips the debug_assert at
    exec.rs:187 on both toolchains. CI runs it in release only, and that
    passes (6/6).
  - wai-ops: clippy::derived_hash_with_manual_eq (deny-by-default) on both
    toolchains. No CI job runs clippy there.
  - wai-vector/wasm: `--all-targets` cannot build the lib-test target (its
    own `panic_impl`) on either toolchain. `clippy --lib` for wasm32 reports
    0 diagnostics on both.
  - eoc-cascade's hit_calibration_process_energy test reads real energy
    counters, and it fails some of the time on the loaded shared host. In
    interleaved runs each toolchain passed 18 of 20. The full eoc-rs suite
    passed on the final tree (741 passed).
- Environment, not code:
  - wai-quantum-desktop embeds the Studio's build, so wai/quantum-studio was
    built first (`npm ci`, `node build.mjs`), as CI does.
- Not covered here: the x86_64 and arm64 Linux and Windows legs; the GPU,
  NPU, FPGA, emulator and hardware-meter legs; wasm32 tests under Node,
  wasmtime and wasip2; and the fuzz job.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
The two commits before this were written against a main 903 commits older than
this one, so their comparison of clippy 1.98.0 against 1.99.1 was re-run over
every cargo root that has gained Rust code since. It found these.

Method, because the first attempt was wrong

`rustup run <toolchain> cargo clippy` does NOT select that toolchain's clippy.
`cargo` resolves the `clippy` subcommand by searching PATH for `cargo-clippy`,
and on this machine Homebrew's (1.99.1) comes first, so both toolchains reported
`clippy 0.1.99` and the comparison was of one clippy against itself. The runs
behind this commit call each toolchain's own binary by path
(`~/.rustup/toolchains/<tc>/bin/cargo-clippy`, with `RUSTC` set to match and
`RUSTUP_TOOLCHAIN` unset), which gives `clippy 0.1.98` and `clippy 0.1.99`.
Confirming the delta that way: of the 24 constants `std::f64::consts` has
carried, 1.98.0 flags 18 and 1.99.1 flags 20 — the two added are exactly
EULER_GAMMA and GOLDEN_RATIO, as the previous commit says.

What changed

- wai-quantum, engine/synth/kak.rs: `1.618_033_988_749_895` becomes
  `std::f64::consts::GOLDEN_RATIO`. This is a `clippy::approx_constant`, which
  is deny-by-default, so it is an error and not a warning. The line arrived on
  2026-10-27, two days after the comparison was made, as one of six "mixing
  weights with nothing in common" that `kak` tries in turn. The literal and the
  constant are the same f64 — both `0x3ff9e3779b97f4a8` — so no value the
  decomposition computes changes. The constant is stable well below this tree's
  1.97 MSRV (it compiles on 1.96.0). The other five weights are not flagged:
  1/sqrt(3) and Feigenbaum's delta are not constants clippy knows.
  No workflow runs clippy inside wai/wai-quantum, so this was latent in CI and
  would have met anyone who ran clippy there by hand.

- Six `assert!(x.is_empty())` the previous commit missed, five of which were
  already in the tree when it was written: aac-core (translations, prediction
  twice, symbols), access-core (scan_order) and openpay's op-connect (account).
  `clippy::assert_is_empty` is new in 1.99, is allow-by-default, and reaches
  these crates through their own `#![warn(clippy::pedantic)]`, which
  `#![deny(warnings)]` then makes an error in the two aac crates.
  Each gains a message naming the value instead of the array comparison the
  previous commit used, because none of these six is a Vec or a slice: four are
  a HashMap, a BTreeSet or `OrderDiff`, which cannot be compared to `[] as [T; 0]`
  at all, and `Vec<PredictionCandidate>` derives Debug but not PartialEq, which
  `assert_eq!` against an empty array needs. A message is what the lint asks for
  anyway — it exists so a failure prints the value rather than only "false" — and
  it is the reason the lint does not fire at the other 147 `assert!(…is_empty())`
  sites that have arrived since: with a message supplied, it stays quiet.

Not changed, with the reason

- The 1.97 MSRV. `rust-version` is the floor a consumer of these reference
  implementations must meet, not the compiler this tree builds with; raising it
  narrows who can build an open standard and buys nothing, since no code here
  needs 1.98 or 1.99. `wai-quantum-webgpu.yml` installs 1.97.0 beside 1.99.1 to
  hold that floor, and that leg is untouched.

Co-Authored-By: Claude Opus 5 <[email protected]>
CI: two macOS legs depended on runner state the pin change cleared or never had
All checks were successful
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 14s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 45s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 2m34s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 16m53s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 25m24s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 30m46s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 44m11s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 43m39s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 25m26s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m47s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m51s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 48m21s
wai-ops-npu integer operators on neural processors / builds · no device is not a pass (linux-arm64) (pull_request) Successful in 49s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 6m58s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 3m47s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h21m25s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 3m50s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 16s
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Successful in 1m18s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 29m56s
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Successful in 30s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 9m22s
wai-ops integer operators / linux-aarch64 (pull_request) Successful in 2m17s
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Successful in 24s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (pull_request) Successful in 2m23s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (pull_request) Successful in 2m57s
wai-quantum extension points / the registry and the example · linux-arm64 (pull_request) Successful in 3m32s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 3m24s
wai-vector vector graphics / linux-aarch64 (pull_request) Successful in 4m12s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 29m3s
e31c74ffc3
Both failed on this branch for reasons that are about how the `macos` label is
provisioned, not about the code. That label is served by four hosts, which are
not identically set up:

  tx-dev-mac         Mac Studio M3 Ultra      full Xcode
  tx-mbp-m5max-48    MacBook Pro M5 Max 48    full Xcode
  tx-mbp-m4max-128   MacBook Pro M4 Max 128   full Xcode
  tx-imac-pro-macos  iMac Pro (x86_64)        Command Line Tools only

Which host takes a job is not predictable, so a leg that needs more than the
base install passes or fails by where it lands.

wai-examples, the apple-app step
  `rustup target add` had never named the apple slices' targets; the job ran on
  targets some earlier toolchain happened to have left on the runner. A target's
  std belongs to one toolchain, so moving the pin to 1.99.1 left the job with
  none of them and the macos slice failed at x86_64-apple-darwin with E0463,
  "can't find crate for `core`". The five targets are now added by name, the
  same set and the same line as wai-sink-swift.yml, which has always done this.
  The tvos slices' nightly is a separate toolchain and keeps its own targets, so
  it is not re-added.

jouleclaw-fabrics, the Metal shader step
  Xcode ships the Metal compiler as a downloadable component, and an Xcode or
  macOS upgrade uninstalls it. Three of the four hosts reported
  `Status: uninstalled` (Xcode 27B47), and on those every `xcrun metal` fails
  with "missing Metal Toolchain" -- which check-metal-shaders.py reports as all
  44 shaders failing to compile, so a provisioning gap reads as a code failure.
  The job now installs the component if it is absent. It is idempotent and
  persists on the host, so the download happens once per host per Xcode version,
  and it makes the job correct wherever it lands instead of only on the host
  that was provisioned by hand. Where there is no full Xcode -- the iMac Pro --
  it now fails with that as the stated reason rather than as 44 broken shaders.

  Verified on two real hosts rather than reasoned about: the absent branch takes
  the download path on a host reporting `uninstalled`, and the present branch
  short-circuits on the Studio, printing `Apple metal version 32023.922`. The
  component was installed on the Studio by hand first and
  `scripts/check-metal-shaders.py` then reported 44 compiled, 0 failed,
  0 skipped, which is what confirmed the shaders themselves are fine.

Neither leg's workflow had said what it needed; both read it off a host. That is
the class of fault a toolchain change exposes, because it clears per-toolchain
state while leaving the host otherwise untouched.

Co-Authored-By: Claude Opus 5 <[email protected]>
wai-quantum-views: rebuild the committed page for the new toolchain
All checks were successful
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 1m24s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 14m0s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 10m40s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 16m4s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 4m13s
WAI HTTP delivery / HTTP corpus · falsify patches 0/3 (pull_request) Successful in 14m57s
WAI HTTP delivery / HTTP corpus · falsify mutations 0/3 (pull_request) Successful in 31m25s
WAI HTTP delivery / HTTP corpus · falsify mutations 2/3 (pull_request) Successful in 31m11s
WAI HTTP delivery / HTTP corpus · falsify patches 1/3 (pull_request) Successful in 14m43s
WAI HTTP delivery / HTTP corpus · verified both ways, and the differential (pull_request) Successful in 2m13s
WAI HTTP delivery / cache rules · controls and labelled caches (pull_request) Successful in 1m9s
wai-ops-npu integer operators on neural processors / builds · no device is not a pass (linux-arm64) (pull_request) Successful in 17s
wai-ops integer operators / linux-aarch64 (pull_request) Successful in 1m1s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m35s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 18s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 13s
wai-quantum HIP member / member · HIP absent (linux-arm64) (pull_request) Successful in 46s
wai-quantum npu-cores member / member · npu-cores absent (linux-arm64) (pull_request) Successful in 21s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (pull_request) Successful in 1m17s
WAI HTTP delivery / HTTP corpus · falsify mutations 1/3 (pull_request) Successful in 39m51s
wai-quantum tensor-engine member / member · tensor engine absent (linux-arm64) (pull_request) Successful in 24s
wai-quantum extension points / the registry and the example · linux-arm64 (pull_request) Successful in 2m14s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 6m40s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (pull_request) Successful in 2m19s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m10s
wai-vector vector graphics / linux-aarch64 (pull_request) Successful in 2m26s
WAI HTTP delivery / HTTP corpus · falsify patches 2/3 (pull_request) Successful in 15m30s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h21m35s
wai-quantum WebGPU member / member · DX12 and Vulkan (cbio-windows) (pull_request) Successful in 11m47s
wai-quantum studio and desktop / desktop app · windows (pull_request) Successful in 9m44s
eee9a558a2
The page WAI Quantum's views are served from is committed, and its
manifest.json records a SHA for each of the 49 sources it was built from.
This branch edits one of them -- wai/wai-quantum-views/Cargo.toml loses its
rust-version key like every other manifest -- so the check refused the
committed page, correctly.

Rebuilt with build.sh. The compiled WebAssembly changes too, because the
pin moved 1.98.0 to 1.99.1 and this artifact is built by that toolchain, so
this is not only a manifest refresh.

Built on the build host. The check is a per-source digest rather than a byte
comparison of the artifact, so it does not require the host CI runs on.

Co-Authored-By: Claude Opus 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!606
No description provided.