### wai-quantum: the specification-and-evaluator workbench

- **A specification** (`engine::discover::Spec`, a JSON file for the command line):
  - the task: the same unitary as a reference generator (`equivalent`), or the same state from
    |0…0⟩ (`prepares`, a new check, `equiv::same_state`);
  - the sizes to check at;
  - the gates allowed, and the connectivity (`all`, or neighbours on a `line`);
  - the cost: weights on the critique's measures, summed over the sizes;
  - the archive's two axes, and a budget in evaluations, seconds and joules.
- **The evaluator is the engine.** A candidate is verified only when it reads, keeps the rules
  and passes the check at every size; the first size that fails decides, and the larger ones are
  not run. The weakest check it passed is named: `tableau`, `exact` and `state` decide it;
  `random` is a check with no false "different".
- **The archive** keeps the cheapest verified generator in every cell of the two axes
  (MAP-Elites). Each entry has its parent, its proposer and a note. A generator seen before is
  not evaluated again.
  - The reference is the first entry, so an improvement means cheaper than what the person
    brought.
  - An archive is bound to its specification's digest, the budget left out.
  - Each entry kept is sealed with the searcher's key, over the specification's digest, the
    source, the proposer and every size's verdict and measures. `Archive::verify` checks every
    seal, and that it binds its entry.
- **Proposers stand outside it.** The built-in one (`mutate`, `search`) makes blind, seeded,
  statement-level edits: a baseline that replays from its seed. A person or an agent submits
  through the same `Archive::submit`.
- **The command line:** `wai-quantum discover new | search | eval | submit | show | verify`.
  A specification's reference may be `@file.qasm` beside it. `search` reports evaluations,
  seconds and, on macOS, the joules its own process spent. Two specifications ship:
  `discover/ghz-line.json` and `discover/ghz-all.json`.
- **For agents:** `wai-quantum mcp` adds `discover_evaluate`, `discover_submit` and
  `discover_archive`, so an outside agent proposes into the same archive and is named as the
  proposer. Every tool that takes a program also takes a generator, with `inputs`.
- **One energy reader** (`engine::energy`), moved from the job service: the figure a worker's
  result carries, unchanged, and a running process's own count (`energy::own`, a lower bound by
  its threads still on a core). The service keeps only its wait-without-reaping.
- Measured on the build host, `ghz-all.json`: 1,500 blind edits in 4.6 s and 24 J. 139 were
  verified and 29 kept, and none beat the reference. The doubling tree costs 25 against the
  reference's 49. Every one of the 29 seals held.

