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 23e05b143 (the toolchain's release), the tool
lists blessed again and the CLI, service, qpu, provider, wasmQ and corpus checks rerun.
Changelog entry: wai/changes/2026-11-10-quantum-accepted-shots-and-wasmq2-second-verifier.md
Co-Authored-By: Claude Opus 5.5 <[email protected]>
118 lines
4.6 KiB
JSON
118 lines
4.6 KiB
JSON
{
|
|
"status": "done",
|
|
"method": "provider",
|
|
"why": "on mine, sampler-v2:test_device (sampler-v2): compiled exactly to rzsxxcz on its qubits and checked by simulation here before it was sent",
|
|
"request": {
|
|
"qasm": "OPENQASM 3.0;\nqubit[2] q;\nbit[2] c;\nh q[0];\ncx q[0], q[1];\nc = measure q;\n",
|
|
"shots": 400,
|
|
"provider": "mine"
|
|
},
|
|
"result": {
|
|
"method": "provider",
|
|
"qubits": 2,
|
|
"gates": 2,
|
|
"accuracy": {
|
|
"class": "measured",
|
|
"note": "counts from the processor the provider names, read as counts_source says (shot records, the provider's own counts, or counts rebuilt from probabilities); not reproducible by recomputation: the same job run again gives other counts, and no simulation stands in for them; what was set off at the provider, and what was left to its defaults, is in execution"
|
|
},
|
|
"shots": 400,
|
|
"provider": {
|
|
"name": "mine",
|
|
"kind": "sampler-v2",
|
|
"protocol": "sampler-v2",
|
|
"device": "sampler-v2:test_device",
|
|
"provenance": "silicon",
|
|
"qubits": 6,
|
|
"basis": "rzsxxcz",
|
|
"describe": "f25d38ec41b6c4e16dc2d5d2649b2ca23cddacb67d3de1b06add9766b5e3b879"
|
|
},
|
|
"calibration": null,
|
|
"compiled": {
|
|
"basis": "rzsxxcz",
|
|
"program": "b96b3d2e44387bac1dab89e43e29706788b0b6ed721f88d5c0f64be293c72df9",
|
|
"hash": "BLAKE3 of the program's OpenQASM 3 text, qasm3",
|
|
"qasm3": "OPENQASM 3.0;\ninclude \"stdgates.inc\";\nbit[2] c;\nrz(pi/2) $0;\nsx $0;\nrz(pi/2) $1;\nsx $1;\ncz $0, $1;\nrz(pi) $1;\nsx $1;\nrz(pi/2) $0;\nrz(pi/2) $1;\nc[0] = measure $0;\nc[1] = measure $1;\n",
|
|
"native_gates": 9,
|
|
"two_qubit_gates": 1,
|
|
"swaps": 0,
|
|
"layout": [
|
|
0,
|
|
1
|
|
],
|
|
"final_layout": [
|
|
0,
|
|
1
|
|
],
|
|
"checked": "the compiled program's final state equals the circuit's, each logical qubit on the physical qubit it ends on, by the bit-exact simulator here; nothing has been sent",
|
|
"placement": {
|
|
"chosen": "the compiler's own layout, the fewest swaps: the description does not read as a device target (describe: native_gates lists the device's gates)"
|
|
}
|
|
},
|
|
"job": {
|
|
"id": "job-0",
|
|
"polls": 2
|
|
},
|
|
"ideal": {
|
|
"computed": true,
|
|
"method": "exact",
|
|
"total_variation_distance": 0.01679586563307492,
|
|
"hellinger_fidelity": 0.9997178192716722,
|
|
"sampling_tvd_expected": 0.02027937580214919,
|
|
"ideal_outcomes": 2,
|
|
"note": "the circuit's exact distribution over its classical bits, by the bit-exact state vector here, against the provider's counts: the total variation distance, the Hellinger fidelity, and the distance this many shots of the exact distribution would leave on average (by the normal approximation); a distance well above that is the device's or the simulator's error, or a program not run as sent"
|
|
},
|
|
"cost": {
|
|
"free": false,
|
|
"estimate": {
|
|
"unknown": "the provider gives no estimate"
|
|
},
|
|
"charged": null,
|
|
"confirmed": true
|
|
},
|
|
"energy": {
|
|
"unmetered": "the work ran at the provider; this host's meter would read only the wait"
|
|
},
|
|
"accepted_shots": 387,
|
|
"counts_source": "shots",
|
|
"execution": {
|
|
"stated_by": "client",
|
|
"sent": {
|
|
"fields": [
|
|
"backend",
|
|
"params",
|
|
"program_id"
|
|
],
|
|
"settings": {
|
|
"/params/options/dynamical_decoupling/enable": false,
|
|
"/params/options/twirling/enable_gates": false,
|
|
"/params/options/twirling/enable_measure": false
|
|
}
|
|
},
|
|
"verbatim": false,
|
|
"note": "dynamical decoupling and twirling of gates and measurements are sent off; the request sets nothing for mitigation, remapping or optimisation, so the service's defaults stand; the program is sent on physical qubits in the backend's own gates",
|
|
"mitigation": "default",
|
|
"twirling": "off",
|
|
"decoupling": "off",
|
|
"remapping": "default",
|
|
"optimisation": "default"
|
|
},
|
|
"counts": {
|
|
"00": 200,
|
|
"11": 187
|
|
},
|
|
"distinct_outcomes": 2,
|
|
"omitted_shots": 0,
|
|
"engine": {
|
|
"name": "wai-quantum",
|
|
"version": "0.9.0"
|
|
},
|
|
"schema": "wai.quantum.job-result/1",
|
|
"receipt": {
|
|
"alg": "ed25519",
|
|
"canon": "rfc8785",
|
|
"key": "197f6b23e16c8532c6abc838facd5ea789be0c76b2920334039bfa8b3d368d61",
|
|
"digest": "2c435d759e839887f47a037c331f323a46f70ced0de04721afeda6d2cc1c0bde",
|
|
"signature": "f4c14bc70a4698f24c82d5c6c1dbea643e7082faa7bc91a689954c616460010dbf6bafed2c05e54d9f1a820fef71e3fac786d4825729d73502731a92cafeeb04"
|
|
}
|
|
}
|
|
}
|