changedOutput schema / anyOf
Previous value: -[
- {
- "description": "A pulse answer as every host gives it (engine::pulse: pulse_schedule and pulse_check on both servers, wai-quantum pulse, POST /v1/pulse/*, the Studio): the request, and the result sealed in a job's form. A pulse program's schedule on frames, or a pulse job checked by running it again. A pulse run itself is a job (method pulse) and follows job-result.v1.json. A result names the engine that made it and this schema (engine and schema). docs/pulse.md explains each.",
- "properties": {
- "request": {
- "description": "The call's request, as given.",
- "type": "object"
- },
- "result": {
- "anyOf": [
- {
- "description": "A pulse program's schedule (pulse_schedule, wai-quantum pulse schedule, POST /v1/pulse/schedule): its frames and ports, every instruction at its sample, each waveform's samples, the gate calls, the reader's notes, and the digests a run binds.",
- "properties": {
- "answer": {
- "const": "schedule"
- },
- "bits": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "calibration": {
- "description": "What a pulse run's receipt binds of the program: the BLAKE3 of the control program's text, of its calibrations as written (every cal, defcal and defcalgrammar, joined by newlines), and of the schedule's JSON; a run adds the device's and the target snapshot's.",
- "properties": {
- "calibrations": {
- "type": "string"
- },
- "device": {
- "type": "string"
- },
- "program": {
- "type": "string"
- },
- "schedule": {
- "type": "string"
- },
- "target": {
- "properties": {
- "calibration": {
- "type": "object"
- },
- "hash": {
- "type": "string"
- },
- "name": {
- "type": "string"
- }
- },
- "type": "object"
- }
- },
- "required": [
- "program",
- "calibrations",
- "schedule"
- ],
- "type": "object"
- },
- "calls": {
- "items": {
- "properties": {
- "end": {
- "type": "integer"
- },
- "line": {
- "type": "integer"
- },
- "name": {
- "type": "string"
- },
- "params": {
- "items": {
- "type": "number"
- },
- "type": "array"
- },
- "qubits": {
- "items": {
- "type": "integer"
- },
- "type": "array"
- },
- "start": {
- "type": "integer"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "decimated": {
- "type": "string"
- },
- "diagnostics": {
- "items": {
- "description": "A reader's note or warning (qasm::diag).",
- "properties": {
- "code": {
- "type": "string"
- },
- "column": {
- "type": "integer"
- },
- "length": {
- "type": "integer"
- },
- "line": {
- "type": "integer"
- },
- "message": {
- "type": "string"
- },
- "outcome": {
- "type": "string"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "dt_ns": {
- "description": "The sample period, ns.",
- "type": "number"
- },
- "duration": {
- "description": "The latest time of any frame, samples.",
- "type": "integer"
- },
- "duration_ns": {
- "type": "number"
- },
- "engine": {
- "description": "The engine that made the result: the wai-quantum crate's name and version.",
- "properties": {
- "name": {
- "const": "wai-quantum"
- },
- "version": {
- "type": "string"
- }
- },
- "required": [
- "name",
- "version"
- ],
- "type": "object"
- },
- "frames": {
- "items": {
- "properties": {
- "frequency_hz": {
- "type": "number"
- },
- "kind": {
- "enum": [
- "drive",
- "measure",
- "acquire"
- ]
- },
- "name": {
- "type": "string"
- },
- "phase": {
- "type": "number"
- },
- "port": {
- "type": "string"
- },
- "qubit": {
- "type": "integer"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "grammar": {
- "type": [
- "string",
- "null"
- ]
- },
- "instructions": {
- "items": {
- "properties": {
- "bit": {
- "type": [
- "string",
- "null"
- ]
- },
- "carrier": {
- "description": "The carrier's phase at the play's first sample, cycles in [0, 1).",
- "type": "number"
- },
- "frame": {
- "type": "integer"
- },
- "frequency_hz": {
- "type": "number"
- },
- "length": {
- "type": "integer"
- },
- "line": {
- "type": "integer"
- },
- "op": {
- "enum": [
- "play",
- "delay",
- "shift_phase",
- "set_phase",
- "shift_frequency",
- "set_frequency",
- "capture",
- "barrier"
- ]
- },
- "phase": {
- "type": "number"
- },
- "start": {
- "type": "integer"
- },
- "value": {
- "type": "number"
- },
- "waveform": {
- "type": "integer"
- }
- },
- "required": [
- "frame",
- "op",
- "start",
- "length"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "ports": {
- "items": {
- "properties": {
- "kind": {
- "enum": [
- "drive",
- "measure",
- "acquire"
- ]
- },
- "name": {
- "type": "string"
- },
- "qubit": {
- "type": "integer"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "qubits": {
- "items": {
- "type": "integer"
- },
- "type": "array"
- },
- "receipt": {
- "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) signed serde_json's own text under the domain ending \\x01; they still verify.",
- "properties": {
- "alg": {
- "const": "ed25519"
- },
- "canon": {
- "const": "rfc8785",
- "description": "The canonical form the digest is taken over."
- },
- "digest": {
- "description": "The digest signed, 32 bytes in hex.",
- "maxLength": 64,
- "minLength": 64,
- "type": "string"
- },
- "key": {
- "description": "The signing key, 32 bytes in hex.",
- "maxLength": 64,
- "minLength": 64,
- "type": "string"
- },
- "signature": {
- "description": "The signature, 64 bytes in hex.",
- "maxLength": 128,
- "minLength": 128,
- "type": "string"
- }
- },
- "required": [
- "alg",
- "canon",
- "key",
- "digest",
- "signature"
- ],
- "title": "wai.quantum.receipt/2",
- "type": "object"
- },
- "schema": {
- "const": "wai.quantum.pulse/1"
- },
- "waveforms": {
- "items": {
- "properties": {
- "length": {
- "type": "integer"
- },
- "name": {
- "type": "string"
- },
- "samples": {
- "items": {
- "items": {
- "type": "number"
- },
- "maxItems": 2,
- "minItems": 2,
- "type": "array"
- },
- "type": "array"
- },
- "samples_every": {
- "description": "Each k-th sample is drawn, when the schedule holds more than the view writes out.",
- "type": "integer"
- }
- },
- "type": "object"
- },
- "type": "array"
- }
- },
- "required": [
- "answer",
- "dt_ns",
- "duration",
- "frames",
- "waveforms",
- "instructions",
- "calls",
- "calibration"
- ],
- "type": "object"
- },
- {
- "description": "A pulse job checked (pulse_check, wai-quantum pulse check, POST /v1/pulse/check): its receipt's signature, its program's digest, and the request run again with the result held to the one given.",
- "properties": {
- "answer": {
- "const": "check"
- },
- "calibration": {},
- "density_hash": {
- "properties": {
- "given": {},
- "recomputed": {}
- },
- "type": "object"
- },
- "differences": {
- "description": "Each field (or field.member) whose value differs from the run here.",
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "engine": {
- "description": "The engine that made the result: the wai-quantum crate's name and version.",
- "properties": {
- "name": {
- "const": "wai-quantum"
- },
- "version": {
- "type": "string"
- }
- },
- "required": [
- "name",
- "version"
- ],
- "type": "object"
- },
- "key": {},
- "program": {
- "type": "boolean"
- },
- "receipt": {
- "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) signed serde_json's own text under the domain ending \\x01; they still verify.",
- "properties": {
- "alg": {
- "const": "ed25519"
- },
- "canon": {
- "const": "rfc8785",
- "description": "The canonical form the digest is taken over."
- },
- "digest": {
- "description": "The digest signed, 32 bytes in hex.",
- "maxLength": 64,
- "minLength": 64,
- "type": "string"
- },
- "key": {
- "description": "The signing key, 32 bytes in hex.",
- "maxLength": 64,
- "minLength": 64,
- "type": "string"
- },
- "signature": {
- "description": "The signature, 64 bytes in hex.",
- "maxLength": 128,
- "minLength": 128,
- "type": "string"
- }
- },
- "required": [
- "alg",
- "canon",
- "key",
- "digest",
- "signature"
- ],
- "title": "wai.quantum.receipt/2",
- "type": "object"
- },
- "reproduced": {
- "type": "boolean"
- },
- "schema": {
- "const": "wai.quantum.pulse/1"
- },
- "signature": {
- "type": "boolean"
- },
- "statement": {
- "type": "string"
- },
- "verified": {
- "type": "boolean"
- }
- },
- "required": [
- "answer",
- "verified",
- "signature",
- "program",
- "reproduced",
- "differences",
- "statement"
- ],
- "type": "object"
- }
- ],
- "description": "A schedule or a check, with its receipt."
- }
- },
- "required": [
- "request",
- "result"
- ],
- "title": "wai.quantum.pulse/1",
- "type": "object"
- },
- {
- "description": "A refusal as data: the message, every code in it (the last is the code), its outcome and meaning as the code's table gives them. A host that refuses for its own reasons gives the error alone.",
- "properties": {
- "code": {
- "type": [
- "string",
- "null"
- ]
- },
- "codes": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "error": {
- "type": "string"
- },
- "meaning": {
- "type": "string"
- },
- "message": {
- "type": "string"
- },
- "outcome": {
- "enum": [
- "refused",
- "retry",
- "failed",
- "lowered",
- "carried",
- "preserved",
- "warned",
- "dropped",
- "defaulted"
- ]
- }
- },
- "required": [
- "error"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "description": "A pulse answer as every host gives it (engine::pulse: pulse_schedule and pulse_check on both servers, wai-quantum pulse, POST /v1/pulse/*, the Studio): the request, and the result sealed in a job's form. A pulse program's schedule on frames, or a pulse job checked by running it again. A pulse run itself is a job (method pulse) and follows job-result.v1.json. A result names the engine that made it and this schema (engine and schema). docs/pulse.md explains each.",
+ "properties": {
+ "request": {
+ "description": "The call's request, as given.",
+ "type": "object"
+ },
+ "result": {
+ "anyOf": [
+ {
+ "description": "A pulse program's schedule (pulse_schedule, wai-quantum pulse schedule, POST /v1/pulse/schedule): its frames and ports, every instruction at its sample, each waveform's samples, the gate calls, the reader's notes, and the digests a run binds.",
+ "properties": {
+ "answer": {
+ "const": "schedule"
+ },
+ "bits": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "calibration": {
+ "description": "What a pulse run's receipt binds of the program: the BLAKE3 of the control program's text, of its calibrations as written (every cal, defcal and defcalgrammar, joined by newlines), and of the schedule's JSON; a run adds the device's and the target snapshot's.",
+ "properties": {
+ "calibrations": {
+ "type": "string"
+ },
+ "device": {
+ "type": "string"
+ },
+ "program": {
+ "type": "string"
+ },
+ "schedule": {
+ "type": "string"
+ },
+ "target": {
+ "properties": {
+ "calibration": {
+ "type": "object"
+ },
+ "hash": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "program",
+ "calibrations",
+ "schedule"
+ ],
+ "type": "object"
+ },
+ "calls": {
+ "items": {
+ "properties": {
+ "end": {
+ "type": "integer"
+ },
+ "line": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "params": {
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "qubits": {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ "start": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "decimated": {
+ "type": "string"
+ },
+ "diagnostics": {
+ "items": {
+ "description": "A reader's note or warning (qasm::diag).",
+ "properties": {
+ "code": {
+ "type": "string"
+ },
+ "column": {
+ "type": "integer"
+ },
+ "length": {
+ "type": "integer"
+ },
+ "line": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "outcome": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "dt_ns": {
+ "description": "The sample period, ns.",
+ "type": "number"
+ },
+ "duration": {
+ "description": "The latest time of any frame, samples.",
+ "type": "integer"
+ },
+ "duration_ns": {
+ "type": "number"
+ },
+ "engine": {
+ "description": "The engine that made the result: the wai-quantum crate's name and version.",
+ "properties": {
+ "name": {
+ "const": "wai-quantum"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "version"
+ ],
+ "type": "object"
+ },
+ "frames": {
+ "items": {
+ "properties": {
+ "frequency_hz": {
+ "type": "number"
+ },
+ "kind": {
+ "enum": [
+ "drive",
+ "measure",
+ "acquire"
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "phase": {
+ "type": "number"
+ },
+ "port": {
+ "type": "string"
+ },
+ "qubit": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "grammar": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "instructions": {
+ "items": {
+ "properties": {
+ "bit": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "carrier": {
+ "description": "The carrier's phase at the play's first sample, cycles in [0, 1).",
+ "type": "number"
+ },
+ "frame": {
+ "type": "integer"
+ },
+ "frequency_hz": {
+ "type": "number"
+ },
+ "length": {
+ "type": "integer"
+ },
+ "line": {
+ "type": "integer"
+ },
+ "op": {
+ "enum": [
+ "play",
+ "delay",
+ "shift_phase",
+ "set_phase",
+ "shift_frequency",
+ "set_frequency",
+ "capture",
+ "barrier"
+ ]
+ },
+ "phase": {
+ "type": "number"
+ },
+ "start": {
+ "type": "integer"
+ },
+ "value": {
+ "type": "number"
+ },
+ "waveform": {
+ "type": "integer"
+ }
+ },
+ "required": [
+ "frame",
+ "op",
+ "start",
+ "length"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "ports": {
+ "items": {
+ "properties": {
+ "kind": {
+ "enum": [
+ "drive",
+ "measure",
+ "acquire"
+ ]
+ },
+ "name": {
+ "type": "string"
+ },
+ "qubit": {
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "qubits": {
+ "items": {
+ "type": "integer"
+ },
+ "type": "array"
+ },
+ "receipt": {
+ "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) sealed their writer's compact text under the domain ending \\x01; they still verify. wai/extensions/quantum-providers.md section 8.2 states the seal in full, and section 8.4 what a verifier checks.",
+ "properties": {
+ "alg": {
+ "const": "ed25519"
+ },
+ "canon": {
+ "const": "rfc8785",
+ "description": "The canonical form the digest is taken over."
+ },
+ "digest": {
+ "description": "The digest signed, 32 bytes in lower-case hex.",
+ "maxLength": 64,
+ "minLength": 64,
+ "pattern": "^[0-9a-f]{64}$",
+ "type": "string"
+ },
+ "key": {
+ "description": "The signing key, 32 bytes in lower-case hex.",
+ "maxLength": 64,
+ "minLength": 64,
+ "pattern": "^[0-9a-f]{64}$",
+ "type": "string"
+ },
+ "signature": {
+ "description": "The signature, 64 bytes in lower-case hex.",
+ "maxLength": 128,
+ "minLength": 128,
+ "pattern": "^[0-9a-f]{128}$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "alg",
+ "canon",
+ "key",
+ "digest",
+ "signature"
+ ],
+ "title": "wai.quantum.receipt/2",
+ "type": "object"
+ },
+ "schema": {
+ "const": "wai.quantum.pulse/1"
+ },
+ "waveforms": {
+ "items": {
+ "properties": {
+ "length": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string"
+ },
+ "samples": {
+ "items": {
+ "items": {
+ "type": "number"
+ },
+ "maxItems": 2,
+ "minItems": 2,
+ "type": "array"
+ },
+ "type": "array"
+ },
+ "samples_every": {
+ "description": "Each k-th sample is drawn, when the schedule holds more than the view writes out.",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "answer",
+ "dt_ns",
+ "duration",
+ "frames",
+ "waveforms",
+ "instructions",
+ "calls",
+ "calibration"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "A pulse job checked (pulse_check, wai-quantum pulse check, POST /v1/pulse/check): its receipt's signature, its program's digest, and the request run again with the result held to the one given.",
+ "properties": {
+ "answer": {
+ "const": "check"
+ },
+ "calibration": {},
+ "density_hash": {
+ "properties": {
+ "given": {},
+ "recomputed": {}
+ },
+ "type": "object"
+ },
+ "differences": {
+ "description": "Each field (or field.member) whose value differs from the run here.",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "engine": {
+ "description": "The engine that made the result: the wai-quantum crate's name and version.",
+ "properties": {
+ "name": {
+ "const": "wai-quantum"
+ },
+ "version": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "version"
+ ],
+ "type": "object"
+ },
+ "key": {},
+ "program": {
+ "type": "boolean"
+ },
+ "receipt": {
+ "description": "A result's receipt: an Ed25519 signature, by the key it names, over digest = BLAKE3(\"wai:quantum-service-receipt\\x02\" ‖ len ‖ request ‖ len ‖ result), each of request and result in its RFC 8785 canonical text (the result without its receipt member), each length 8 bytes big-endian. Whatever members the request and the result hold are sealed, the result's engine and schema among them. The first receipts (no canon member, $defs/first) sealed their writer's compact text under the domain ending \\x01; they still verify. wai/extensions/quantum-providers.md section 8.2 states the seal in full, and section 8.4 what a verifier checks.",
+ "properties": {
+ "alg": {
+ "const": "ed25519"
+ },
+ "canon": {
+ "const": "rfc8785",
+ "description": "The canonical form the digest is taken over."
+ },
+ "digest": {
+ "description": "The digest signed, 32 bytes in lower-case hex.",
+ "maxLength": 64,
+ "minLength": 64,
+ "pattern": "^[0-9a-f]{64}$",
+ "type": "string"
+ },
+ "key": {
+ "description": "The signing key, 32 bytes in lower-case hex.",
+ "maxLength": 64,
+ "minLength": 64,
+ "pattern": "^[0-9a-f]{64}$",
+ "type": "string"
+ },
+ "signature": {
+ "description": "The signature, 64 bytes in lower-case hex.",
+ "maxLength": 128,
+ "minLength": 128,
+ "pattern": "^[0-9a-f]{128}$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "alg",
+ "canon",
+ "key",
+ "digest",
+ "signature"
+ ],
+ "title": "wai.quantum.receipt/2",
+ "type": "object"
+ },
+ "reproduced": {
+ "type": "boolean"
+ },
+ "schema": {
+ "const": "wai.quantum.pulse/1"
+ },
+ "signature": {
+ "type": "boolean"
+ },
+ "statement": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "answer",
+ "verified",
+ "signature",
+ "program",
+ "reproduced",
+ "differences",
+ "statement"
+ ],
+ "type": "object"
+ }
+ ],
+ "description": "A schedule or a check, with its receipt."
+ }
+ },
+ "required": [
+ "request",
+ "result"
+ ],
+ "title": "wai.quantum.pulse/1",
+ "type": "object"
+ },
+ {
+ "description": "A refusal as data: the message, every code in it (the last is the code), its outcome and meaning as the code's table gives them. A host that refuses for its own reasons gives the error alone.",
+ "properties": {
+ "code": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "codes": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "error": {
+ "type": "string"
+ },
+ "meaning": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "outcome": {
+ "enum": [
+ "refused",
+ "retry",
+ "failed",
+ "lowered",
+ "carried",
+ "preserved",
+ "warned",
+ "dropped",
+ "defaulted"
+ ]
+ }
+ },
+ "required": [
+ "error"
+ ],
+ "type": "object"
+ }
+]