### wai-quantum 0.8.0, wai-quantum-qpu 0.4.0 and wai-quantum-cli 0.2.3: QIR and jeff, the variational and algorithm library, pulse and dynamics, the state vector on a fabric's members and resident on the GPU, and components a host registers

This release carries the six entries below it, down to pulse and dynamics. Two of them change
`engine::schema::FILES`, a public array whose length is part of its type, so the engine moves to its next 0.y,
a major bump before 1.0 (`wai-quantum/VERSIONING.md`), and `wai-quantum-qpu`, whose functions take the engine's
types, moves with it. Everything else in them only adds: `wai-quantum-cli` 0.2.3 requires `wai-quantum` 0.8.0 and
`wai-quantum-qpu` 0.4.0; the job service is 0.2.1, and the Python package and `@transaction-science/wai-quantum`
are 0.1.1, each carrying the 0.8.0 engine. The desktop app stays 0.1.0; its installers are released with its update
key. Nothing is deprecated.

- **wai-quantum 0.8.0:**
  - programs in QIR 1.x and 2.x under their profiles, and in jeff 0.3, read and written, each conversion checked by
    the equivalence ladder (`engine::formats`, the codes `Q700` to `Q721`);
  - the variational and algorithm library: a job's parameters bound, exact gradients, deterministic optimisers, the
    variational eigensolver, QAOA and algorithm builders (`engine::variational`, `engine::algorithms`, the schema
    `wai.quantum.algorithms/1`, the codes `J050` to `J053`);
  - pulse and dynamics: OpenPulse read, a pulse simulator, the method `pulse`, schedules and checks, and receipts
    that bind the calibrations (`qasm::pulse`, `quantum_pulse`, `engine::pulse`, `schemas/pulse.v1.json`, the codes
    `J040` and `J041`);
  - the state vector on a fabric's members, and split across several devices on one node (`engine::fabric`, a job's
    `fabric`), and the method `stabilizer_rank` for Clifford+T;
  - the state vector resident on the GPU, `auto` placed by committed measurements (`engine::fabric_measured`), and
    sparse Pauli dynamics on a GPU with the CPU's bits (`quantum_spd::device`, the `pauli` method on the fabric);
  - methods, compiler passes, noise channels and file formats behind four traits, every built-in registered
    through them, and a host's own components checked and marked uncertified in what they produce
    (`engine::registry`, the codes `J060` to `J065`).
- **wai-quantum-qpu 0.4.0:** requires `wai-quantum` 0.8.0, and nothing else changes.
- **wai-quantum-cli 0.2.3:** `convert`, `components`, `fabric`, `gradient`, `optimize`, `vqe`, `qaoa`, `build`,
  `pulse schedule | check`, and `run --fabric | --param | --method pulse`; every verb reads `.ll`, `.qir` and `.jeff`.
  The local MCP server gains `convert_program`, `list_components`, `list_fabric`, `gradient_qasm`, `optimize_qasm`,
  `vqe_ground_state`, `qaoa_maxcut`, `build_algorithm`, `pulse_schedule` and `pulse_check`.
- **The job service 0.2.1:** `POST /v1/convert`, `/v1/gradient`, `/v1/optimize`, `/v1/vqe`, `/v1/qaoa`, `/v1/build`,
  `/v1/pulse/schedule` and `/v1/pulse/check`; a job's `source` in another format, its `fabric` and `params`, and the
  method `pulse`; its components in `GET /v1`; and its MCP server's tools to match.
- **The Python package 0.1.1 and `@transaction-science/wai-quantum` 0.1.1:** the 0.8.0 engine; their names are
  unchanged.
- **What moves with the version:** the engine's version is among the sealed bytes of a stamped result, so the
  page's pinned digests move (the course check's 969b2c1c… to 1a9aa0ad…, the compile's ac948133… to beffb3cb…, the
  estimate's 8715e76b… to db90b147…), the answer set's stored seal is written again (`WAI_ANSWER_BUNDLE_WRITE=1`),
  and the notebooks' stored outputs are stored again. The job pins strip the engine and schema, and do not move.
- **What a caller may have to change:** `engine::schema::FILES`, as the two entries below say; and a caller of
  `wai-quantum-qpu`'s `job::run` or `job::compiled_json` passes 0.8.0's types.
- Every lockfile that holds one of these crates moves with them (seventeen), so a `--locked` build still reads its
  own, and `wai-rs`'s optional requirement on the engine moves to 0.8.0.
- **Breaking:** `wire:corpus:wai/quantum-conformance/answers/cases/bell-stored.wqa`: the stored answer's receipt
  marker seals the engine's version, so it is written again at 0.8.0, as at each release. A conformance run checks a
  stored answer with the engine that wrote it: 0.7.0's corpus with 0.7.0, this one with 0.8.0.
- **Breaking:** `wire:corpus:wai/quantum-conformance/answers/cases/bell-stored-changed.wqa`: the same stored answer
  with one sample's shots changed, written again with it; it still does not verify.
- **Breaking:** `wire:corpus:wai/quantum-conformance/answers/bundle.json`: the corpus inline, written again with both
  stored answers.

