wai-quantum 0.4.3: metered runs, placement by a run's energy, and a fabric that falls back #226

Merged
dcharlot merged 4 commits from wai-quantum-fabric-energy into main 2026-10-12 19:59:15 -04:00

2026-10-12

Transaction Science
wai-quantum fabric: the review of the energy stage, fixed
All checks were successful
standards workspaces build + test / joulehook-rs (pull_request) Successful in 1m12s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m20s
standards workspaces build + test / sense-rs (pull_request) Successful in 1m11s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m28s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 4m12s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m59s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 8m44s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 9s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 32s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 54s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 2m10s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 1m11s
WAI neural sink gates / model-free refusals of the neural sink (pull_request) Successful in 1m36s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 5s
wai-pack / wai-pack · macos (pull_request) Successful in 1m5s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m11s
wai-quantum WebGPU member / shader checks · browser build · wasip2 inertness · MSRV (pull_request) Successful in 2m44s
wai-quantum WebGPU member / member · software Vulkan (linux) (pull_request) Successful in 1m47s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 17m12s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 5s
WAI mbt2018_mean integer decode (regenerated vectors) / regenerate mbt2018_mean integer vectors → Rust decode, required (pull_request) Successful in 4m50s
workflow hygiene / every workflow supersedes its own queue (pull_request) Successful in 5s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 3m15s
wai-pack / wai-pack · linux (pull_request) Successful in 1m18s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 24s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 3m59s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m17s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m47s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m9s
An independent review found no wrong figure, pairing or fallback in the
arithmetic; it found four things the code did not hold.

- A receipt's member was whatever Member the caller paired with a runner:
  nothing compared them, so a member paired with another adapter's runner gave a
  signed, verifying receipt for work it did not do. A Runner now states the
  member it is (member_id), and Fabric::run refuses a pairing whose ids differ
  as a defect, before anything runs.
- "Figures on both members or on neither" was documented, not held: a
  calibration that earns no figure on one member (its readings under the
  resolution floor, say) left the other placed first whatever it cost. place is
  unchanged; place_for and Fabric now read figures on only some candidates as
  figures on none.
- Tests: the assertion that only placeable candidates are predicted held for
  any implementation, and is now a closure that panics on an unplaceable one
  over a list that holds two; a runner that hands back a refused label, or a
  label with no figure, is sealed as unmetered; the device test runs the tile
  implementation metered and on the fabric.
- The member's detail said a window "covers device work only"; it also holds
  the host's waits and copies between submissions, and says so.

Also: a calibration whose uncertainty no longer fits its field once the rounding
is added earns no figure rather than a capped one; ready() drives Fabric::run
natively without an executor; &R is a Runner and &mut M a RunMeter.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-12 15:38:07 -04:00
Transaction Science
wai-quantum 0.4.3: metered runs, placement by run, and the fabric wrapper
Additive release of Stage 6. The CHANGELOG gains a 0.4.3 section above 0.4.2; the
version changes in Cargo.toml and in the version line of the six lockfiles that
resolve wai-quantum. The quantum-wasip2 job requires each new fabric test by name.
The place_for test now also drops the CPU's prediction, so a missing prediction
read as zero would place the CPU where place places the GPU, and fail.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-12 05:25:03 -04:00
Transaction Science
wai-quantum fabric: run meters, metered calibration, place_for, and the Fabric wrapper
Stage 6 of the WebGPU member plan (energy, and placement that can choose the GPU).

- quantum_fabric: the member-neutral RunMeter trait (no meter ships in the crate);
  a reading reaches a result only when check_label accepts it, every start is
  matched by one stop, and a refused run's reading is discarded. EnergyCalibration
  turns metered runs into a KernelEntry figure (nJ per pair-update, rounded up,
  the runs' class with the rounding folded into its uncertainty), or no figure at
  all; detect_local_metered gives the CPU reference its figure. place_for places
  one run by a caller's picojoule model when every candidate has a prediction,
  else as place. Fabric runs a circuit on the placed member, falls back down the
  placement order on TooWide, OutOfRange, Memory, Timeout or Device, and seals the
  receipt with the member that produced the result, the refusals beside it.
- quantum_fabric_webgpu: simulate_metered brackets a run from its first submission
  to its last readback (device work only; detail says so), member_metered
  certifies and calibrates in one pass, the member is a Runner for its own
  implementation, and WebGpuError maps onto MemberError.
- Tests: CPU-side tests with synthetic meters, figures, models and refusing
  members; device test g13 (metered runs, a metered calibration, and the fabric
  falling back from a member held to three qubits); the member script expects 14
  tests and a fabric line per declared adapter.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-12 05:08:11 -04:00