open-standards/wai/wai-quantum/docs/job-refusals.md
Transaction Science 74f1a30c75
Some checks failed
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 17s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 20s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 18s
wai-app and Create / wai-app · does this change touch it (push) Successful in 36s
WAI operation catalogue / does this change touch it (push) Successful in 26s
wai-audit collector and player integration / does this change touch it (push) Successful in 15s
wai-key-proxy / does this change touch it (push) Successful in 17s
wai-ledger service / does this change touch it (push) Successful in 17s
wai-quantum resource estimation / does this change touch it (push) Successful in 19s
wai-fleet service / does this change touch it (push) Successful in 57s
wai-quantum docs, course and locales / does this change touch it (push) Successful in 44s
wai-quantum editors / does this change touch it (push) Successful in 38s
wai-quantum command line / does this change touch it (push) Successful in 52s
wai-quantum pulse and dynamics / does this change touch it (push) Successful in 18s
wai-quantum-landscape-fpga reference design / does this change touch it (push) Successful in 25s
wai-quantum for JavaScript / does this change touch it (push) Successful in 40s
wai-quantum contract / does this change touch it (push) Successful in 47s
wai-quantum for Python / does this change touch it (push) Successful in 17s
wai-quantum other formats / does this change touch it (push) Successful in 48s
wai-quantum OpenQASM reader / does this change touch it (push) Successful in 34s
wai-quantum error correction and mitigation / does this change touch it (push) Successful in 16s
wai-quantum variational and algorithm library / does this change touch it (push) Successful in 14s
wai-quantum extension points / does this change touch it (push) Successful in 36s
wai-quantum service / does this change touch it (push) Successful in 34s
wai-quantum qudit jobs / does this change touch it (push) Successful in 39s
wai-quantum studio and desktop / does this change touch it (push) Successful in 20s
wai-sink-android native sink library / does this change touch it (push) Successful in 17s
wai-quantum views in agent hosts / does this change touch it (push) Successful in 37s
wai-quantum verdicts and repairs / does this change touch it (push) Successful in 41s
WAI Studio / does this change touch it (push) Successful in 46s
wai-sink-swift native sink package / does this change touch it (push) Successful in 47s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Successful in 2m13s
wai-quantum-landscape-fpga reference design / the board's code on the board's processor's architecture · linux-arm64, release (push) Successful in 2m11s
wai-quantum pulse and dynamics / the same bits · linux-arm64 (push) Successful in 2m46s
wai-quantum service / service energy · linux packages (push) Successful in 2m14s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux-arm64, release (push) Successful in 4m7s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 3m53s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 6m53s
joule-moq-room room service / joule-moq-room, every target (push) Successful in 7m40s
wai-quantum extension points / the registry and the example · linux-arm64 (push) Successful in 6m25s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 26s
wai-quantum energy-landscape jobs / does this change touch it (push) Successful in 13s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 1m15s
wai-key-proxy / proxy · linux (push) Successful in 1m22s
wai-fleet service / service · linux (push) Successful in 2m21s
wai-audit collector and player integration / collector · linux (push) Successful in 4m10s
wai-quantum docs, course and locales / the Studio's words in every locale · linux (push) Successful in 15s
wai-ledger service / service · linux (push) Successful in 4m21s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs under wasm32-wasip2 (wasmtime) (push) Successful in 2m13s
wai-quantum editors / editors · linux (push) Successful in 3m25s
wai-quantum contract / the policy is linked, and the deprecations page reads (push) Successful in 8s
wai-quantum pulse and dynamics / reader, simulator and pulse jobs · linux, release (push) Successful in 3m54s
wai-quantum wasmQ / does this change touch it (push) Successful in 13s
wai-quantum resource estimation / estimation and calibration · linux, release (push) Successful in 6m46s
wai-quantum OpenQASM reader / corpus under wasm32-wasip2 (wasmtime) (push) Successful in 50s
wai-quantum docs, course and locales / the course and the command line's languages · linux (push) Successful in 6m28s
wai-quantum other formats / the set under wasm32-wasip2 (wasmtime) (push) Successful in 1m58s
wai-quantum energy-landscape jobs / the same bits · linux-arm64 (push) Successful in 12m17s
wai-quantum variational and algorithm library / parameters, gradients, optimisers, VQE, QAOA and builders · linux, release (push) Successful in 2m5s
wai-quantum contract / API compatibility · linux (push) Successful in 5m46s
wai-quantum extension points / the registry under wasm32-wasip2 (wasmtime) (push) Successful in 1m8s
wai-quantum OpenQASM reader / reader and corpus · linux (push) Successful in 4m59s
wai-quantum for JavaScript / javascript · linux (push) Successful in 6m59s
wai-quantum for Python / python · linux (push) Successful in 4m47s
wai-quantum error correction and mitigation / codes, decoders, texts and mitigation · linux, release (push) Successful in 5m43s
wai-quantum qudit jobs / the module and the conformance set under wasm32-wasip2 (wasmtime) (push) Successful in 1m55s
wai-quantum other formats / readers, writers and the set · linux (push) Successful in 7m49s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 15m51s
wai-quantum qudit jobs / the module, the job, the conformance set, the referee and the verb · linux (push) Failing after 4m5s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 56s
wai-quantum verdicts and repairs / the intent set and the verdict under wasm32-wasip2 (wasmtime) (push) Successful in 2m21s
wai-quantum extension points / the registry and the example · linux (push) Successful in 7m50s
wai-quantum verdicts and repairs / verdicts, repairs and the intent set · linux (push) Successful in 5m14s
wai-quantum service / service · linux (push) Successful in 8m29s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 7m3s
wai-quantum contract / schemas and the committed tool lists · linux (push) Successful in 14m30s
wai-quantum studio and desktop / studio · browser (push) Successful in 8m13s
wai-quantum views in agent hosts / views · the page and its engine (push) Successful in 8m15s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 54s
wai-quantum views in agent hosts / views · a scripted host (push) Successful in 9m43s
wai-quantum docs, course and locales / every command and snippet in the docs · linux (push) Successful in 22m57s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 9m46s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m19s
wai-fleet service / service · macos (push) Successful in 37s
wai-ledger service / service · macos (push) Successful in 1m19s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 6m4s
wai-quantum editors / editors · macos (push) Successful in 2m11s
wai-quantum command line / command line · macos (push) Successful in 2m23s
wai-quantum pulse and dynamics / the same bits · macos (push) Successful in 1m48s
wai-quantum command line / command line · linux (push) Successful in 29m0s
WAI Studio / Studio in WebKit · linux (push) Successful in 15m46s
wai-quantum for Python / python · macos (push) Successful in 2m29s
wai-quantum qudit jobs / the same bits · macos (push) Successful in 2m31s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 5m33s
wai-quantum service / service · macos (push) Successful in 6m11s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 5m20s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 16m59s
wai-quantum-landscape-fpga reference design / the member against the model of the logic, and the logic against the model · linux, release (push) Successful in 42m39s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 11m13s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 17m1s
wai-quantum wasmQ / the reference modules rebuild to their modules of record · linux (push) Successful in 39s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Successful in 3m55s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 5m33s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · linux (push) Successful in 4m47s
wai-quantum wasmQ / interpreter and vectors under wasm32-wasip2 (wasmtime) (push) Successful in 5m41s
wai-quantum energy-landscape jobs / native against WebAssembly, over many seeds (push) Successful in 8m57s
wai-quantum energy-landscape jobs / reader, kernels, answers and the stated result · linux, release (push) Successful in 11m22s
wai-quantum energy-landscape jobs / the module under wasm32-wasip2 (wasmtime) (push) Successful in 22m26s
wai-quantum wasmQ / profile, engines, reference modules, adversarial, vectors · macos (push) Successful in 4m7s
wai-quantum energy-landscape jobs / the same bits · macos (push) Successful in 7m27s
wai-quantum: qudits of 4 and 6 levels, every constant exact or the nearest value, and qudit jobs in the engine
quantum_qudit takes d = 4 (roots ±1, ±i, exact) and d = 6 (coordinates ±1/2,
±√3/2, as d = 3's) beside 2 and 3: the dimensions whose roots of unity have
degree at most two. Every other dimension is refused. Each irrational constant
(√3/2 and the Fourier entries 1/√2, 1/√3, 1/(2√3), 1/√6, 1/(2√6), √2/4) is
the nearest multiple of 2^-30, found in whole numbers and proved nearest by a
test; the module had called a floor square root "exact", and 1/√3 was a floor
of a floor, 1.13 units low. The Fourier gate's entries are ω^m/√d applied with
circuit2's arithmetic, so d = 2 is circuit2's H on any state and F_4 is the
two-qubit QFT on every basis state; F_6 is F_2 ⊗ F_3 under the CRT relabelling.
Each gate's rounding and constants are counted (gate_bound), carried to a
2-norm bound on the state (program_bound) and a total-variation bound on the
outcomes (outcomes_bound); the worst measured is 0.79 of the bound.

engine::qudit is the job: a program of shift, clock, fourier, csum and phase
gates, measured with a seed, sealed in the receipt every job takes
(wai.quantum.qudit/1; refusals J090, J091, J092; at most 2^24 amplitudes and
2^32 work, measured at 9.6 s natively and 49.9 s on wasm32). The command line
runs it (wai-quantum qudit run, check, example). extensions/quantum-sim.md §9
states all of it; quantum-conformance/qudit/ holds the constants, 29 vectors
and 35 refusals, the same bytes on arm64 macOS, x86_64 Linux and wasm32-wasip2
(wai-quantum-qudit.yml), with a second implementation in Python.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-10 15:14:59 -05:00

113 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Job refusals: codes
The reader gives every refusal and warning about a program's text a code
(`Q…`, [qasm-diagnostics.md](qasm-diagnostics.md)). What is asked of a
program has codes of its own (`J…`): the request, the method, an intent, a
repair, the host that runs the job, a program the job service writes for a
task (`J080` to `J082`), and a qudit job (`J090` to `J092`). A refusal reads,
on every surface:
```text
stabilizer needs a Clifford circuit: … [J011]
```
A refusal whose cause is a reader's code keeps that code before its own:
```text
exact: exact needs dyadic angles: the angle 0.3 is not a dyadic multiple of 2π (2πm/2^k, k ≤ 32) [Q500] [J011]
```
As data (the verdict's `refusal`, an MCP tool's error), a refusal carries its
`message`, its `code` (the last it gives), every code it gives in order
(`codes`), the code's `outcome` and its `meaning`. A failure that no code
names (an internal error) has `code` null and the outcome `failed`.
**Stability.** A code never changes meaning once released. New codes are
only ever added; a retired code keeps its row, so a code in an old log or
receipt still means what it meant then.
**Outcomes.**
- `refused`: the job does not run as asked. Change it, as the message says,
or run it elsewhere.
- `retry`: the host did not take the job now. The same job may be sent
again later.
An answer's view statements (the answer view layer,
[quantum-answers.md](../../extensions/quantum-answers.md)) have codes of their
own, `J100` to `J112`, each saying what becomes of the statement:
- `dropped`: the statement is left out, and the rest of the answer is drawn.
An answer's errors, the ones a model is sent back, are its dropped codes.
- `defaulted`: the statement is read as the default the code names.
- `warned`: the statement is drawn as written, with a note that is not sent
back to the model.
A program in an answer is read by the reader, so its refusals and warnings keep
the reader's codes (`Q…`).
The table is also served as data: `wai_quantum::engine::refusal::codes()` in
Rust, `wai-quantum diagnostics [--json]` on the command line (beside the
reader's codes, under `job_codes`), the `qasm_diagnostics` tool of both MCP
servers (`code` takes either kind), and `engine_diagnostic_codes()` in the
browser engine. A test holds this page to the code's table.
| Code | Outcome | Meaning |
|---|---|---|
| `J001` | refused | A request that is not a job: not a JSON object, or no `qasm` program in it. |
| `J002` | refused | A job that names a provider, sent to a host that reaches none: it runs where the person's credentials are (the command line's `run --provider`, its MCP server's `run_on_provider`, or the desktop app). |
| `J003` | refused | A field of the job that does not read: an observable, an amplitude's bit string, the noise or the method's options (the message names the field and what it takes). |
| `J004` | refused | A job that asks for nothing: give shots, observables or amplitudes. |
| `J005` | refused | More than one job may ask: shots, observables or amplitudes past their limits, or a whole number past ±(2^53 − 1), which JSON readers would not all read alike. |
| `J006` | refused | The compile the job asked for did not complete, or its options do not read (the message says why). |
| `J007` | refused | A set that does not read, or a set sent where one job is read: `programs` not a list of programs or jobs, a `sweep` whose names are not the program's inputs or whose values are not lists of numbers, both given, or more items than a set holds. |
| `J008` | refused | The mitigation the job asked for does not read or cannot be done: no noise model, no observables (no shots, for readout), a program that measures in the middle, more qubits or work than it takes, a device target beside it, or options that do not read (the message says which). |
| `J009` | refused | An error-correction request that does not read or cannot be done: an unknown code or decoder, a decoder the code does not admit, a syndrome or an error that does not fit the code, circuit text or a model that does not read, or sizes past the limits (the message says which). |
| `J010` | refused | A method that does not exist: the methods list names them. |
| `J011` | refused | The method named cannot take this job: a gate it does not hold, more qubits, memory or work than it takes here, or an answer it does not give (noise it cannot take is `J061`); the message says which, and `auto` picks a method that can. A job on `mps` runs under a meter of the bonds it reaches, so this can also come from a job that has started: it stopped where its work passed what a job may take. |
| `J012` | refused | No method takes this job: each method's reason is listed, so the job can be changed to suit one. |
| `J013` | refused | A placement on the fabric (`fabric`) this host cannot honour: no member by that name, no certified accelerator member here, a state or a partition larger than a member holds, a partition count that is not a power of two, or a method or program the fabric's members do not run (the message says which, and what is here). |
| `J020` | refused | An intent that does not read: not one of `distribution`, `equivalent` or `prepares`, a distribution whose outcomes are not the program's bits or whose probabilities do not sum to 1, or a reference program that does not read, or more intents than the host takes. |
| `J021` | refused | A proposed repair that changes a line no diagnostic flags, or adds lines away from one: rejected, and the program left as it was. |
| `J022` | refused | A repair's choices that do not read (`max_iterations`, `dyadic_bits`, `sizes`), or a proposal that is not a program's text. |
| `J030` | retry | The host takes no more from this client for now (submissions in a window, or jobs at once): send it again shortly. |
| `J031` | refused | A job or a check larger than this host takes, its reading included: run it on your own machine, with the command line or its MCP server. |
| `J032` | retry | The host is full (its queue, the checks running at once, or the requests being read, yours or all of them): send it again later. |
| `J033` | refused | A host that takes requests only with one of its API keys: give yours as `Authorization: Bearer <key>`; a key it does not hold is refused the same way. |
| `J034` | refused | An idempotency key (`Idempotency-Key`, or a tool's `idempotency_key`) that does not read, or that this client sent before with another request: a key names one job, so another request needs another key. A key is 1 to 255 visible ASCII characters, and should be unguessable (a UUID, or 128 random bits). |
| `J040` | refused | A pulse run that does not read or cannot be done: a field it does not take, options or device parameters that do not read, a target without the qubit, or a schedule outside the simulator's model (two tones on one qubit at once, a play after its qubit's capture, more levels and qubits than it holds, a frame far from its qubit); the message says which. |
| `J041` | refused | A pulse run whose integration error cannot be stated within its tolerance: a step longer than the generator's norm allows, or a schedule so long that the bound or the rounding passes the tolerance; the message names the steps that would meet it, or says that none does. |
| `J050` | refused | A job's `params` that do not read: not an object of finite numbers, a name the program does not declare as a parameter (`input float`, `input angle`), or a parameter of the program left without a value. |
| `J051` | refused | A gradient that cannot be taken: a differentiation method that does not exist, a parameter the reader cannot carry to the gates (its cause `Q129`), a program that measures in the middle, noise, no Hamiltonian, or more qubits or work than it takes (the message says which). |
| `J052` | refused | An optimisation, a variational eigensolver or a QAOA run that does not read or cannot be done: an unknown optimiser, settings or steps past their limits, a Hamiltonian or a graph that does not read (the message says which). |
| `J053` | refused | An algorithm builder's request that does not read: an unknown algorithm, sizes past its limits, or arguments it does not take (the message says which). |
| `J060` | refused | A compiler pass a request names (`compile.passes`) that this host does not hold: the components list names every method, pass, noise channel and front end here, and no host loads a component from a request. |
| `J061` | refused | A noise channel the method cannot take: a method that models no noise, or a channel the method has no form for (amplitude damping on the stabilizer's Pauli frames, a registered channel on a method that takes only the built-in ones); the message names what does take it. |
| `J062` | refused | A noise channel whose parameters do not read or whose operators fail its validity check: a value outside its range, Kraus operators that are not completely positive and trace preserving (their sum of K†K off the identity), or a Pauli form whose probabilities are negative, do not sum to 1, or are not the channel its operators make (the message says by how much). |
| `J063` | refused | A component the registry does not take: a name its kind holds already (a built-in's among them), a name or version that is empty or not plain text, a descriptor that is not a JSON object, a channel on other than one or two qubits, or a pass whose check states no bound. |
| `J064` | refused | A registered component's answer that breaks the engine's contract: a method's result without an accuracy class it declared, or one that writes a member the engine writes (method, qubits, gates, compiled, repaired, engine, schema, components, receipt, verdict); a pass's gates on qubits the program does not have, or that do not read back; a front end's program that does not read. Nothing it gave is returned. |
| `J065` | refused | An intent on a job whose noise names a registered channel: the intent checks model the built-in channels alone, so the check is refused rather than made against another model. |
| `J070` | refused | A contract that does not read: not an object, a member a contract does not have, an exactness that is no class, a max_cost that is not an amount in decimals and a currency, a deadline or an energy ceiling that is not above zero, providers that is neither never nor allowed, or a job that names a provider while its contract does not allow one (providers: never is the default). |
| `J071` | refused | No route this host can see meets the contract: each route's price or reason is listed, so the contract or the job can be changed. Nothing fell back to a route the contract does not allow. |
| `J072` | refused | A route's result whose accuracy class does not meet the class its job wants: the contract's, or under a contract that names none the class the job keeps. Nothing it gave is returned, since its receipt would not verify. |
| `J073` | refused | A contract where it cannot be honoured: on a set or an item of one (each program runs under its own contract, alone), or on a build with no planner. It is refused rather than read as absent. |
| `J074` | refused | A run stopped at its contract's deadline, by a host that can stop one: the job service's worker, or a provider's job the command line cancels where it waits. The estimate it was planned on was wrong here, and nothing was sealed. |
| `J080` | refused | A write sent to a host with no model to write with: `GET /v1` says under `write` whether a host has one; write the program where the model is, with `wai-quantum-writer write --model DIR TASK.json`. |
| `J081` | refused | A write's task that does not read: a task is an exercise in the course's form (`wai.quantum.exercise/1`), a JSON object with an `intent`, or `cases` that each have one (a case without one takes the task's), so the engine has something to check each program against. |
| `J082` | refused | A write's options that do not read or are out of range: `rounds` a whole number from 0 to 4, `max_new` one from 1 to 4000, and nothing beside `task`, `rounds` and `max_new`. |
| `J090` | refused | A qudit job that does not read: a member it does not take, a gate that is not shift, clock, fourier, csum or phase, a qudit outside the register, a csum on one qudit, a power or a phase outside what the gate takes, or shots, a seed or an amplitude's digits that do not read (the message says which). |
| `J091` | refused | A qudit job in a dimension whose roots of unity the engine does not hold: d is 2, 3, 4 or 6, whose roots have the coordinates 0, ±1, ±1/2 and ±√3/2; every other dimension is refused rather than given roots from a float or a series. |
| `J092` | refused | A qudit job larger than one job may be: more amplitudes (d to the power of the qudits) than a register holds, more gates, shots or amplitudes asked for than a job takes, or more work than a job may do (the message gives each figure and its limit). |
| `J100` | dropped | A line of an answer that is not a statement (`name = View(...)`), a program (a fenced `qasm` block with its name), a comment or a marker: left out. |
| `J101` | dropped | A view the answer layer does not have: left out (the views are listed in the layer's specification). |
| `J102` | dropped | An `@` call the engine does not have: the statement is left out. |
| `J103` | dropped | A view or an `@` call without an argument it requires: the statement is left out. |
| `J104` | dropped | An argument of the wrong kind, such as a number where a view takes the engine's call (a number in a view comes from the engine), or a program where a list is taken: the statement is left out. |
| `J105` | warned | More arguments than a view or an `@` call takes: the extra ones are left out. |
| `J106` | dropped | A name no statement declares, or one whose statement was left out (a program the reader refused, say): the statement that names it is left out. |
| `J107` | defaulted | No `root = Answer([...])`: the views are drawn in the order they are written. |
| `J108` | dropped | The answer ends inside a program or a statement: the unfinished part is left out. |
| `J109` | dropped | Statements that name each other in a cycle: each is left out. |
| `J110` | warned | A name declared again: the later declaration stands, which is how an answer is edited. |
| `J111` | warned | A number written in a view's text, which no engine call gave: let a view show it. |
| `J112` | warned | A statement the root does not reach: it is not drawn. |