The change of wai/toolchain-fixes (69f88e62f..074658780, 21 commits), on the fix branch: its changelog entries as files of wai/changes/, its wai-conformance.yml edits as step files, corpus files and test tags, and every other file as the branch has it. - b04013914 holdings: the registry lists WHD1, the record's magic (§4.1) - a184abb87 catalogue: upscale and tonemap are recorded in N3's verb list, and the doors' check knows them - 8db31a778 wai mcp: MCP 2026-07-28, the stateless revision, beside the three initialize negotiates - 052830194 wai.json: $schema, wai and name, and the schema of version 1 committed beside the reader - 163fc2017 wai create: every template carries an AGENTS.md - fe9b26fbc joule-moq-room: the example names the relay's WebSocket port, 4480, and one test holds every port - 359b5ba9d quickstart: the archive carries WAI Studio, wai-ingest and wai-quantum - 6334d88c8 joule-moq-room: the port table holds every daemon's default, and the listeners off until set - d38610de6 wai.json: the two workflows that hold the schema to its reader run when the schema changes - 179df52b7 catalogue: the two verbs joined the list after wai 0.4.0, not in toolchain 0.3.0 - 971cf5862 wai.json: a file of a later version is refused as that version before any member it adds - 1a59a39f7 wai.json: the reader takes a whole number however it is written, and the tests run the name pattern - d752fd9b4 wai.json: the release waits for the schema to be served, and version 1 is fixed by the first release that writes it - c213ed9db wai mcp: -32022 names as supported only the revisions a request may name, never the one asked for - 99b800f29 wai mcp: initialize negotiates 2025-11-25, the last revision with a handshake - e33021c3f catalogue: the near-synonym list is held in every text that states it, and the doors' check knows up - b99bb70be catalogue: the changelog records the near-synonym list held with the verb list - a0beb2163 quickstart: the wai formula and manifest depend on wai-quantum's own instead of installing a second copy - 0e5084031 quickstart: Studio's build leaves the checkout as it found it, and the examples workflow runs clean-machine.sh - 4cc4ae3d7 joule-moq-room: the port test reads the gateway's example with the gateway's own reader, and starts the gateway from it - 074658780 quickstart: the changelog names where Studio's build goes, not where it went before it shipped Co-Authored-By: Claude Opus 5.5 <[email protected]>
1.8 KiB
Project file schemas
wai-json-1.schema.json is the JSON Schema of wai.json, a WAI
project file, version 1 (JSON Schema 2020-12). Its $id, and the $schema member every project
file wai create writes names, is https://wai.transaction.science/schema/wai.json/1, the
address it is to be served from. The release of wai waits for it: the tag build
(.github/workflows/wai-release.yml) fails while that address does not serve this file, so no
release writes a project file that names a schema an editor or an agent cannot fetch.
wai/wai-rs/src/bin/wai_cli/dx/project.rs is the reader. Its tests hold this file to it: the
same members in the file and in its dev block, the same modes, the same name rule, and the
same verdict, accept or refuse, on every template's project file and on a set of files each
breaking one rule. A change to either is a change to both.
Versions
Version 1 stays open until the first release of wai that writes it. From that release on, its
readers are in use, and a reader refuses any member it does not know, so version 1 does not
change: a member added to it would be refused, as unknown, by every reader of that release. A
later version is a new schema at …/schema/wai.json/<version>, beside this one. A reader
refuses a file of a later version as that version (upgrade wai), by its wai member or by its
$schema, before it reads any other member, so the members the later version adds never stop
it first.
The project file's other members in the toolchain's design (requires, room, package,
conform, breaking, targets, receipts, and port in dev) are version 2's. Each joins
the file with the operation that reads it, as every member of version 1 has its reader; a member
accepted with nothing to read it would be one the strict reader ignores, which is what it
refuses to do.