### wai-quantum: the version and deprecation contract, schemas as data, and versions in what is written

Anyone building on WAI Quantum can read what is stable and for how long, and is told by the tools before anything they use changes.

- **The policy** ([`wai-quantum/VERSIONING.md`](wai-quantum/VERSIONING.md)), linked from every WAI Quantum README: the public surface (the engine's documented API, the command line's verbs, flags, exit statuses and `--json`, the job JSON, both MCP servers' tools and schemas, the receipt, the job service's API, the Python package, the provider protocol, the editor extension's settings, the grammar's node names), what each part of a version number promises, the support windows the owner decided on 2026-10-27 (at least a year between majors, six months of fixes for the previous major, deprecation at least one minor release before removal), how a deprecated item says so on each surface, and the rule before 1.0 (the first non-zero component is the major; the windows begin at 1.0). [`DEPRECATIONS.md`](wai-quantum/DEPRECATIONS.md) lists each deprecated item with its replacement; none today.
- **Schemas as data:** versioned JSON Schemas (2020-12), `wai.quantum.<document>/<major>` kept as `<document>.v<major>.json`: the job request, the job result, the job, the receipt (its second form; the first still verifies), the plan, a compile with its certificate, the engine's tools' answers (the reader's diagnostic codes among them), the versions a host reports (`wai-quantum/schemas/`); the local MCP server's own tools' answers (`wai-quantum-cli/schemas/`), the job service's (`wai-quantum-service/schemas/`), and the provider protocol's messages (`wai-quantum-qpu/schemas/`). `engine::schema` checks a document against them; the tests also refuse a member a schema does not name, so a change to what the code writes fails until its schema changes with it.
- **Every MCP tool says what it answers:** each tool of both servers carries its answer's schema as its `outputSchema`, standing alone. A test calls every tool and holds its answer to it. The local server's tool list is committed (`wai-quantum-cli/docs/local-mcp.json`) beside the service's, both held to the live lists.
- **Versions in what is written:** every result names the engine that made it and the schema it follows (`"engine": {"name": "wai-quantum", "version": …}`, `"schema": "wai.quantum.job-result/1"`), inside what its receipt seals. The receipt's form did not change; the canonical text of a new result holds two more members. Two job bodies sealed by the engine as it was before (a run here and a run on a provider) are kept with their digests pinned, and still verify.
- **Versions reported:** `wai-quantum version [--json]`; both MCP servers in `initialize` under `_meta["science.transaction.wai/versions"]`; the job service in `GET /v1` and `quantum_service_info`. The agent docs (llms.txt, llms-full.txt, the `AGENTS.md` block, the Agent Skill) say how to read them and where the policy is.
- **CI:** `wai-quantum-contract.yml` on Linux: `cargo-semver-checks` 0.51.0 against wai-quantum 0.6.16 and wai-quantum-cli 0.1.4 (it lists every breaking change, and fails only on one made without a major bump), the schema tests by name, the policy linked from every README, and the deprecations page's table.
