wai toolchain: wai.json's schema and version, MCP 2026-07-28, AGENTS.md in every template, WAI Studio in the quickstart archive, and one port table #634
Loading…
Reference in a new issue
No description provided.
Delete branch "wai/toolchain-fixes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What this is
Fixes to the WAI toolchain: the project file, the agent door, the templates, the quickstart archive, the local stack's ports and the catalogue's verb list.
Merge order. This branch sits on #632's commit,
946f3beda, which moves changelog entries intowai/changes/and the conformance workflow's lists into step files. Merge #632 first; until it merges, this pull request's diff also shows #632's change. The pull request ofwai/conform-outputis stacked on this one: the two rewrite the same text inwai-release.yml,scripts/check-wai-ops-doors.pyandwai/catalogue/README.md, and that one carries the reconciliation.What it carries. One commit,
1f0ab6ebf: the change ofwai/toolchain-fixes(69f88e62f..074658780) in #632's layout. Its message lists the source commits. Compared with the source branch:wai/changes/. Its one edit to an existing entry, theWHD1line of the holdings entry, stays an edit ofwai/CHANGELOG.md;wai-conformance.yml, thewai/schema/**trigger path besidewai/examples/**, stays in the workflow as it was;codecs/registry.rstheHOLDINGSdoc constant sits besideJWP_RECEIPTSand theWHD1row beside the JWP rows, instead of at the end of their lists.Every other file is as the source branch has it.
What it defines or fixes
wai.jsonnames its schema, its version and its project, and the schema is committed.$schema, the URL of the file's JSON Schema;wai, the file's version,1; andname, the project's machine name, a DNS label.upgrade wai) before it reads any other member, so a member a later version adds is never refused as unknown in its place. It refuses a$schemaof another schema and a name that breaks the rule. A file without the three reads as before, as version 1.wai/schema/wai-json-1.schema.json(JSON Schema 2020-12), states every member and every rule the reader holds. A whole number is read however it is written (4.0and4e0are4), and none above 2^53 − 1.$idand fails unless it answers with the committed schema.wai createwrites the three members, naming the project for its directory when that is a project name, else for its template. Every template'swai.jsoncarries them.wai mcpspeaks MCP 2026-07-28, the stateless revision, beside the revisionsinitializenegotiates._metanames its revision is served from what it carries alone. Its client capabilities are required (-32602without them). A revision the server does not serve per request is refused-32022, with the revisions a request may name, the one requested, and the onesinitializenegotiates. The supported list never holds the revision asked for, so a client that retries with one of them is served.server/discovergives the revisions the server speaks, newest first, its capabilities and its instructions. Every result of that revision carriesresultTypeand the server's name and version;server/discoverandtools/listcarryttlMsandcacheScope.ping, which that revision removed, is-32601under it.initializenow negotiates 2025-11-25, the last revision with a handshake, and still opens a session in 2025-06-18, 2025-03-26 or 2024-11-05. One process serves both eras, and the tools are the same in both.Every template carries an
AGENTS.md. The templates ofwai createeach carry the instructions a coding agent reads: what the project is, and how to build, run, test and conform it, with what never to do to make a check pass, and that no secret belongs in the repository.wai createwrites it, andwai setup-agentadds its own block to it. The remote desktop template's.gitignorekeeps outhost.key, the private keyhost.shmakes in the project.The quickstart archive carries WAI Studio,
wai-ingestandwai-quantum.share/wai/studio/holds WAI Studio, built once by the newquickstart/build-studio.sh, sowai devfrom an installed archive serves it at/_wai/. Before,/_wai/answered that Studio's files were not there.build.shtakes it as--studio <dir>.bin/wai-ingest, the ingest gateway, andbin/wai-quantum, the quantum command line, join the archive's binaries;build.shruns each before it packages it, where it can.wai-quantumstays its own package: the release's two package-manager files install every binary of the archive butwai-quantum, and depend on its own package instead, so installingwaiandwai-quantum, in either order, gives one copy ofwai-quantum.quickstart/test/formulae_test.py, in the examples workflow, runsformulae.pyagainst a stand-in release and holds both files tobuild.sh.The local stack's ports, in one table.
wai/quickstart/README.mdhas a port table: whatwai dev, the relay, the room service, the ingest gateway, the audit collector, the ledger, the fleet service, the quantum job service, the worlds' relay, the stitched presentation verifier andwai http originlisten on by default, and which setting moves each; no two share a port. The room service's example now names the relay's WebSocket port, 4480, where it named 9681, on which nothing listens.The verbs
upscaleandtonemapare recorded in naming rule N3's list. They joined the closed verb list withmedia.upscaleandmedia.tonemapafter the list was approved; the catalogue's README now says so and why. The doors' check,scripts/check-wai-ops-doors.py, gains both, so a door named with either is held to the catalogue. The near-synonymup(start, as inwai dev) is named in the README and the check, where both had left it out.The registry lists
WHD1, the holdings record's magic (holdings §4.1), andholdings::MAGICis held to that one row.What the checks hold
waibinary, hold the reader and the schema together: the same members, modes and name rule, and the same verdict on every template's file and on files that each break one rule. The schema is read as a validator reads it, with its name pattern run as a regular expression and numbers compared by value.wai-catalogue.ymlandwai-conformance.ymlnow run on a change towai/schema/**.tests/cli_mcp.rscovers the stateless revision,server/discover, the refusals and theirdata, and the earlier revisions' handshake.wai createholds every template to carrying anAGENTS.mdwith each of its sections.quickstart/test/clean-machine.shrefuses an archive that lacks any of its binaries, the room client, or Studio's page and core. It runswai-quantumandwai-ingestfrom the archive and requireswai dev --checkto have served Studio at/_wai/. The examples workflow's archive job builds Studio as the release does, runsclean-machine.shon the archive it built, and fails when the builds leave a file in the checkout.tests/ports.rsholds every row of the port table to the program that serves it and to the example configurations that reach it. It reads the gateway's example with the gateway's own reader and starts the gateway and the room service from their examples.joule-moq-room.ymlruns on a change to each file the test reads.VERBS, and the near-synonyms the two state toNEAR_SYNONYMS. The doors' check's self-test fails a door that names an operation withupscaleortonemapthat the catalogue does not hold.How it was verified
This commit,
1f0ab6ebf.Locally (git and Python checks only):
scripts/wai-conformance-lists.py selftestandcheck,scripts/wai-conformance-lists-selftest.sh,scripts/check-changelog-fragment.pyagainst main,scripts/changelog-assemble.py --check,scripts/changelog-fragments-selftest.sh, and the ops doors' check with its self-test all pass.The layout changes only the layout. A comparison of trees shows that the change is the source branch's change except for the differences listed above. The entry files hold exactly the lines the source branch added to
wai/CHANGELOG.md, and itsWHD1lines stay inwai/CHANGELOG.mdbyte for byte at the same place. The workflow edit is unchanged, and the registry change is the same rows, reordered. That comparison was made on the conversion's first base, #632's earlier tip 14f1abb7c; rebasing onto946f3bedaleft every file's change the same.On a Linux x86_64 build host:
wai/wai-rs,cargo check --locked --no-default-features --testswith each of the feature listsholdings,quickstartandquickstart,app;cargo test --locked --no-default-features --lib catalogue;cargo check --locked --testsandcargo test --locked --test ports.All pass.
On the stack above it. On the checkout of
wai/conform-output's pull request, which holds this commit beneath its own, thewaibinary's unit tests and thecli_mcptests pass too (that pull request lists the runs).With the other converted branches. This branch merges without conflict with each of the other branches converted to #632's layout, with
wai/conform-outputstacked on it (bygit merge-tree). Merging all of them in forward, reverse and a mixed order gives one tree. On the build host, that tree passes these runs:cargo check --testsunder the derivedWAI_FEATURESand underWAI_PQ_FEATURES;cargo check --testsofquickstart,app; the catalogue's library tests; and thewaibinary's unit tests.On the CI hosts. Results on the CI runners come from this pull request's own CI run. None of the runs above is a CI result.
🤖 Generated with Claude Code