| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks failed
wai-audit collector and player integration / does this change touch it (push) Successful in 22s
wai-quantum command line / does this change touch it (push) Successful in 17s
wai-quantum docs, course and locales / does this change touch it (push) Successful in 17s
WAI operation catalogue / does this change touch it (push) Successful in 28s
wai-quantum editors / does this change touch it (push) Successful in 46s
wai-quantum contract / does this change touch it (push) Successful in 1m1s
wai-quantum extension points / does this change touch it (push) Successful in 20s
wai-quantum error correction and mitigation / does this change touch it (push) Successful in 25s
wai-quantum service / does this change touch it (push) Successful in 18s
wai-quantum studio and desktop / does this change touch it (push) Successful in 15s
wai-quantum OpenQASM reader / does this change touch it (push) Successful in 1m0s
wai-quantum for Python / does this change touch it (push) Successful in 51s
wai-quantum pulse and dynamics / does this change touch it (push) Successful in 56s
wai-quantum for JavaScript / does this change touch it (push) Successful in 1m2s
wai-quantum resource estimation / does this change touch it (push) Successful in 1m6s
wai-quantum other formats / does this change touch it (push) Successful in 1m4s
wai-sink-swift native sink package / does this change touch it (push) Successful in 17s
wai-sink-android native sink library / does this change touch it (push) Successful in 18s
wai-quantum views in agent hosts / does this change touch it (push) Successful in 19s
WAI Studio / does this change touch it (push) Successful in 19s
wai-quantum variational and algorithm library / does this change touch it (push) Successful in 38s
wai-quantum verdicts and repairs / does this change touch it (push) Successful in 32s
wai-quantum service / service energy · linux packages (push) Successful in 2m39s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Failing after 3m50s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (push) Successful in 3m28s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (push) Successful in 3m42s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 6m3s
wai-quantum extension points / the registry and the example · linux-arm64 (push) Successful in 7m23s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 15s
wai-quantum wasmQ / does this change touch it (push) Successful in 13s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (push) Successful in 17s
wai-quantum contract / the policy is linked, and the deprecations page reads (push) Successful in 7s
wai-quantum docs, course and locales / the course and the command line's languages · linux (push) Successful in 3m14s
WAI operation catalogue / the catalogue and every door · linux (push) Failing after 3m20s
wai-audit collector and player integration / collector · linux (push) Successful in 5m33s
wai-quantum extension points / the registry under wasm32-wasip2 (wasmtime) (push) Successful in 2m55s
wai-quantum error correction and mitigation / codes, decoders, texts and mitigation · linux, release (push) Successful in 3m8s
wai-quantum OpenQASM reader / corpus under wasm32-wasip2 (wasmtime) (push) Successful in 1m34s
wai-quantum editors / editors · linux (push) Successful in 6m31s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs under wasm32-wasip2 (wasmtime) (push) Successful in 2m1s
wai-quantum studio and desktop / studio · browser (push) Successful in 5m16s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs · linux, release (push) Successful in 3m29s
wai-quantum OpenQASM reader / reader and corpus · linux (push) Successful in 5m49s
wai-quantum contract / API compatibility · linux (push) Successful in 8m40s
wai-quantum other formats / the set under wasm32-wasip2 (wasmtime) (push) Successful in 1m51s
wai-quantum for Python / python · linux (push) Successful in 4m27s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 1m59s
wai-quantum extension points / the registry and the example · linux (push) Successful in 10m22s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux, release (push) Successful in 2m35s
wai-quantum service / service · linux (push) Failing after 10m28s
wai-quantum verdicts and repairs / the intent set and the verdict under wasm32-wasip2 (wasmtime) (push) Successful in 1m44s
wai-quantum for JavaScript / javascript · linux (push) Successful in 7m11s
wai-quantum verdicts and repairs / verdicts, repairs and the intent set · linux (push) Successful in 3m11s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 10m47s
wai-quantum other formats / readers, writers and the set · linux (push) Successful in 6m57s
wai-quantum contract / schemas and the committed tool lists · linux (push) Successful in 13m33s
wai-quantum views in agent hosts / views · a scripted host (push) Successful in 4m42s
wai-quantum views in agent hosts / views · the page and its engine (push) Successful in 6m40s
wai-quantum resource estimation / estimation and calibration · linux, release (push) Successful in 12m3s
WAI Studio / Studio in WebKit · linux (push) Successful in 20m41s
wai-quantum wasmQ / the reference modules rebuild to their modules of record · linux (push) Successful in 41s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Failing after 2m24s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 3m19s
wai-quantum wasmQ / interpreter and vectors under wasm32-wasip2 (wasmtime) (push) Successful in 3m18s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · linux (push) Successful in 10m32s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (push) Successful in 47m14s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 10m0s
wai-quantum command line / command line · linux (push) Failing after 1h0m4s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m9s
wai-quantum editors / editors · macos (push) Successful in 1m43s
wai-quantum command line / command line · macos (push) Successful in 2m44s
wai-quantum pulse and dynamics / the same bits · macos (push) Successful in 1m16s
wai-quantum for Python / python · macos (push) Successful in 2m56s
wai-quantum service / service · macos (push) Successful in 6m52s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 6m6s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 5m48s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 10m39s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 13m10s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · macos (push) Successful in 2m13s
accepted_shots (quantum-providers §5.5, §8.1, §8.3, §8.4). A device may keep another number of
shots than asked (a post-selected or heralded readout discards the shots that fail its test;
some devices run more), and every host refused such counts, so no receipt could record such
a run before the first hardware receipt.
- engine::provider: a stated result whose counts are of another number than its shots
carries `accepted_shots`, their sum (at least 1); the counts rule holds counts and
omitted_shots to it when present, to `shots` when not; the distance to the exact
distribution is over the shots kept. A result without it is of every shot asked, as every
result before was (hosts refused other sums), so no receipt sealed before changes. The
earlier form still takes only every shot. job-result.v1.json names the member.
- wai-quantum-qpu: run_compiled_stated takes counts of any sum of at least 1 (run_compiled
still holds them to the shots); the open protocol's client reads `accepted_shots` from a
`result` answer and refuses counts that sum to neither it nor the shots.
- §8.3 says a device that reads an ensemble gives no counts. counts_source, execution and
approximate were checked against a live run's cases: shot records, vendor counts and
rebuilt probabilities; settings sent or not; a simulator's approximation; and now the shots
kept. A provider's own conformance vectors (provider-v1.json) still expect every shot.
- Receipts corpus: scripted-sampler-v2-post-selected (a sampler-v2 device that answered 387
of 400 shots, wai-quantum-qpu/tests/clients.rs) and crafted receipts at the rule's edges
(kept fewer and more, counts not its sum, of every shot beside one fewer, null).
The second verifier reads wasmQ/2 (quantum-wasmq §11.6). receipt_verify.py read a job whose
result's format is wai.quantum.wasmq.result/2 as no wasmQ job at all; it now holds it to
rules 4, 8, 11, 12 and 30 as that version reads them, and to rule 36, its energy, written from
§11 (one reading, SPEC-GAP [W23], noted: rule 11's accuracy by run's method).
- Corpus: the six wasmQ/2 jobs the command line seals from the second version's envelopes
(jobs/cli-wasmq2-*, with the energy the build host read: OnChipCounter readings of its
process), pinned in made.lock.json; twelve crafted from them, each breaking rule 4, 8, 11,
12 or 36 alone or keeping them (the unmetered form, the stabilizer method at 27 qubits).
- receipt_differential.py: the rules stage holds both verifiers at each bound of rules 4, 8,
11, 12, 30 and 36 as the second version reads them (the exact method at 26 and 27 qubits;
the most shots its fresh state leaves under 2^42 and one more; readings at the floor and one
ppm below, of 0 and of 2^53, an estimate, HwShunt, a reading that says more, each callout's
figure missing, extra or a reading; the first version's energy and format), and the
members-of-another-kind stage covers two second-version jobs.
- wasmq_mutants.py: rust-schemata takes several files, numbering across them, and the nightly
step weakens engine/wasmq2.rs beside engine/wasmq.rs (its rule 36 and rule 1 checks marked).
- quantum-providers §8.4's wasmq_form and quantum-wasmq §11.8 name the second version and its
jobs in the corpus.
The MCP tool lists carry job-result.v1.json as outputSchema, so docs/local-mcp.json and
docs/service-mcp.json are blessed (WAI_QUANTUM_BLESS=1) with the new member.
Tested on the build host (macOS arm64): wai-quantum --features
full --lib --tests (lib 1587 passed, every integration test, wasmq_verdict's corpus walk
over the new jobs among them); wai-quantum-qpu (lib 107 on macOS, 106 elsewhere as pinned;
clients 20; providers 12) and clippy --all-targets -D warnings; wai-quantum-cli
cargo test --release and the service's mcp:: tests (19); receipts generate.py --check and
--self-test, receipt_verify.py --self-test (846 checks); receipt_differential.py against the
reference: the 413 receipts agree three ways (manifest, reference, second), 31 868 one-member
changes agree, the rules stage's 1467 cases (265 at the bounds of the 36 rules) are as
written by both with the same rules stated, the 261 labelled cases as written; each of the
14 plants caught. Weakenings (wasmq_mutants.py), run here for this version's rules:
the second verifier's for rules 4, 8, 11, 12, 30, 31 and 36, 83, every one caught; the
engine's of engine/wasmq2.rs, 34, 27 caught and 7 listed as equivalent with the reason no
input tells each from the text. The first runs left 17 alive: the engine's 7 equivalents,
and 10 answered here, by cases at each bound they showed unheld (a reading's ppm and window below 0 or with a
fraction, and a window of 1; the result's shots written 64.0; the exact method's work at
2^42 exactly and 8 past it; a second-version envelope of 2^27 bytes and one more) and by
replacing a qubit bound of the Python rule 30's own, which no input could tell. Clippy: no
finding in provider.rs or wasmq2.rs; wai breaking: no unacknowledged break (the corpus's
additions are listed as additions). Rebased on
|
||
| .. | ||
| jobs | ||
| generate.py | ||
| made.lock.json | ||
| make.sh | ||
| manifest.json | ||
| README.md | ||
Job receipts
A job's receipt, as the provider protocol's §8 states it, judged by two verifiers that share no code. Each must give every receipt here exactly the reasons the manifest names (§8.4): none for a valid one.
| file | what |
|---|---|
manifest.json |
every receipt in jobs/, the reasons a verifier must give it, how it was made, and what it is. Every expectation is written by hand from §8.4; none is copied from a verifier's output |
jobs/cli-*.json |
made by the command line on this machine, sealed with the published demo key (make.sh): runs by several methods, a compile, runs on the reference provider over a local process, free and priced, and jobs under a contract (§8.7), here, routed to the person's providers and on a provider named under a ceiling |
jobs/cli-wasmq-*.json |
wasmQ jobs (quantum-wasmq) made by the command line from the profile's own envelopes (../wasmq/envelopes/) with the demo key (make.sh): a run of the surface-code round, one of a single instance for the whole run, and faults in a call, of the run's budget, in an instance's init and in a prior |
jobs/cli-wasmq2-*.json |
wasmQ/2 jobs (quantum-wasmq §11) made the same way from the second version's envelopes: the exact method (a Toffoli, a feedback rotation, angle arguments, rotations and a reset), and one Clifford program by each method; each with the energy the host it was made on read of its run (§11.5) |
jobs/service-*.json |
made by the free job service, sealed with its key (make.sh) |
jobs/scripted-sampler-v2-post-selected.json |
a sampler-v2 device that answered 13 fewer shots than it was asked for, as a post-selected readout does: its counts sealed as the shots it kept, accepted_shots (§8.1) (wai-quantum-qpu/tests/clients.rs, a_device_that_keeps_fewer_shots_than_asked_seals_how_many_it_kept) |
jobs/scripted-*.json |
provider jobs of every built-in kind (sampler-v2, prx-circuits, native-turns with and without a noise model, cloud-tasks on a processor and on its simulator, with rows of shots and with probabilities), each through a service that follows that provider's published contract, sealed with the demo key (wai-quantum-qpu/tests/clients.rs, every_built_in_kind_states_what_it_sent_and_its_receipt_keeps_every_rule, with WAI_QUANTUM_RECEIPT_CORPUS set to this directory); and prx-circuits under a contract, its device's counts with a classical method's beside them (a_built_in_kind_runs_under_a_contract_and_a_classical_method_shadows_it) |
jobs/first-form-*.json |
sealed by the job service as it was on 18 October 2026 (commit 72d18742d), so by the first form's own writer, not by a restatement of it |
jobs/fixture-*.json |
the engine's pinned fixtures, sealed by earlier engines: a run before results named their engine, a provider job of the earlier form, and a compile |
jobs/crafted-*.json |
made by generate.py from the receipts above, each changed one way: the seal's form, the strict signature (a weak-key forgery, S + ℓ, a mixed-order key, …), the first form, what any JSON reader and writer may do (and so must change nothing), the strict reader, and each rule of a provider's result and of a wasmQ job's form, each sealed again with the demo key where the change is inside the seal so that one rule alone breaks |
The made receipts are kept as they were made, each pinned by its digest in made.lock.json:
a receipt missing or changed fails generate.py --check. A receipt made again differs in its
times (and, from the service, perhaps its key) and verifies all the same, so none is made again
to pass a test. A row of §8.3 that a client stops writing is held by the receipt that has it.
The two verifiers
wai-quantum verify --json FILE(and--lines FILE, one job a line): the reference,wai_quantum::engine::job::check.../tools/receipt_verify.py: written in Python from §8 alone, by a reader who had not seen the reference. Itswasmq_form, a wasmQ job's form, was written the same way from quantum-wasmq §6.5, whose rules are numbered so that each can be read alone, and the second version's from §11.6 there (rules 4, 8, 11, 12 and 30 as that version reads them, and 36, its energy). Standard library only: its BLAKE3, Ed25519, RFC 8785 text and strict reader are its own, each held to published answers by--self-test.
../tools/receipt_differential.py holds them to each
other:
python3 -I receipts/generate.py --check # the crafted half is as written
python3 -I tools/receipt_verify.py --self-test ../wai-quantum/src/engine/testdata/es-number-tostring.txt
python3 -I tools/receipt_differential.py --reference PATH/wai-quantum
python3 -I tools/receipt_differential.py --reference PATH/wai-quantum --plant lenient-key
python3 -I tools/receipt_differential.py --second-only # no build: the second verifier and the manifest
The differential requires, for every receipt here, that both verifiers and the manifest name the same reasons, and that both verifiers state the same key, form, class read by provenance and counts' source. Then it changes every valid receipt one member at a time (each member of its request, its result, its receipt and its unsealed envelope, removed, and its value replaced) and requires the same reasons from both for every change, and two oracles beside them: a change inside the request, the result or the receipt is never valid, and a change to the unsealed envelope, or a member added to the receipt, never changes the verdict.
A change of one member is caught by the seal before any rule of a job's form is read, so
it cannot hold the two verifiers to those rules. The rules stage does: for each rule of a
wasmQ job's form (quantum-wasmq §6.5),
the genuine wasmQ jobs changed at the rule's bound, on both sides of it where it has two,
and sealed again with the demo key, each with the verdict written for it by hand from the
text (rule_cases in the differential). Both verifiers must give every case its written
verdict, so a rule dropped or a bound moved in either one fails: this stage, and the
manifest, are what back "the two verifiers agree" on the form's rules. --second-only
runs it for the second verifier. Each crafted wasmQ receipt that names one rule breaks that
rule alone: the reference states one problem for it, and the second verifier that rule.
The labelled stage gives both verifiers the second verifier's own hand-labelled wasmQ cases
(receipt_verify.py --wasmq-cases), each as its exact text: the labels its author wrote from
the text bind the reference as they bind the second verifier, so one labelled corpus holds
both.
../tools/wasmq_mutants.py weakens each rule in each verifier,
from the code (each check dropped, each comparison moved by one, a count or a digest read
loosely, a null member read as absent and an absent one as null, the most of many read as the
least), and requires the
differential (--wasmq-only --first) to catch every weakening, counted per rule:
python3 -I tools/wasmq_mutants.py python --reference PATH/wai-quantum
python3 -I tools/wasmq_mutants.py rust-schemata ../wai-quantum/src/engine/wasmq.rs ../wai-quantum/src/engine/wasmq2.rs mutants.json # in a scratch checkout
# build the command line from that checkout, then
python3 -I tools/wasmq_mutants.py rust --reference PATH/wai-quantum --mutants mutants.json
It also changes each number of the provider receipts to values past a double's whole numbers, and sets a job's shots in both its request and its result, to see a limit one verifier has and the other does not; and it seals those of the demo key again, so that each is judged by what it says and not only by its digest.
--plant NAME runs the second verifier with a defect planted in it: a lenient key check,
alg unchecked, the last of a member named twice kept, inexact numbers let through, a
simulator's counts let pass as measured, a ceiling on every whole number, R of small order
let through, and under a contract (§8.7) each route's outcome, the planner's choice or a
shadow's distance taken as it stands. The differential succeeds only when it catches the plant. That is the proof that
it can fail.
--extra DIR adds receipts a person holds and does not publish: both verifiers must find each
valid. A receipt from a cloud account's task names that account's number in its job id, and
the receipt seals it, so the corpus holds none: the shape of such a receipt is here
(scripted-cloud-tasks-*), and real ones are checked with --extra.
CI runs the whole differential beside the build of the command line
(.github/workflows/wai-quantum-cli.yml, job cli-linux), and the second verifier against
the manifest, with its plants, among the independent verifiers
(.github/wai-conformance/verifiers/quantum-receipts.sh).
Making it again
bash receipts/make.sh PATH/wai-quantum receipts/jobs # the command line's and the service's
(cd ../wai-quantum-qpu && WAI_QUANTUM_RECEIPT_CORPUS=$PWD/../quantum-conformance/receipts/jobs \
cargo test --test clients -- every_built_in_kind a_built_in_kind_runs_under_a_contract) # the built-in kinds'
python3 -I receipts/generate.py # the crafted half and the manifest
Making them again replaces receipts a release already judged, and --check then fails: add
receipts under new names, and keep the ones there. A new name is added to MADE in
generate.py; generate.py --pin NAME records its digest, and refuses a name it holds.