Create on the toolchain's names: wai-app (a library), wai create --from app.oui, wai app check, wai mcp --toolset app, wai dev --show #508
Loading…
Reference in a new issue
No description provided.
Delete branch "wai/create-2"
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?
Replaces #501. Create on the toolchain names approved on 2026-10-27. It is stacked linearly on #505 (
wai/dx-agent-mcp-2), so #505 merges first.What is in it
Commits 1 to 9 are #501's nine commits cherry-picked unchanged. The one conflict was the CHANGELOG. Commits 10 to 12 adopt the names.
wai-uibecomes the librarywai-app, with no binary.wai/wai-app, libwai_app, has no[[bin]]and noclifeature.wai, built with its new featureapp, is its command line and its MCP server. Its files are served aswai-app-*, and the WebAssembly package iswai_app.Create's export is
wai create <dir> --from app.oui(app.export):wai.jsoncomes fromproject::render, the one writer of project files, which DX-A'sminimalnow calls; a test holdsrenderto three templates' own files byte for byte. The file names the program ("app": "app.oui") and the roomwai devruns for it:dev.modeisroom,watchorshow, withdev.watchfor a watch room anddev.audiencefor a show.wai_app::export:app.ouiin canonical form,index.html,README.md,AGENTS.md,.gitignore,vendor.json, andvendor/.--runtime DIR,$WAI_APP_RUNTIME, orshare/wai/appbesidewai. Each file is checked against the runtime's listing.app.json,room.toml,relay.toml,package.json,check.mjsorserve.mjs.wai devruns the project,wai app checkchecks it, and no Node is needed.tests/cli_app.rsholds both to it.Templates and exports are Apache-2.0.
wai createwrites, from a template or from an app, carriesLICENSE, the Apache-2.0 text held in the binary.--list --jsonlists it.wai app guideandwai app check [<dir> | <app.oui>] [--json](app.guide,app.check):wai.jsonnames against the app's own, andvendor/againstvendor.json.wai mcp --toolset app:app_guide,app_check,app_streamandapp_export.app_exportwrites inside the project directory alone, through the same code aswai create --from.setup-agent --toolsettakesappin a build that serves it.wai dev --show [--audience N](or"mode": "show"inwai.json): a room with co-performance. The room gets its[co]block, and the relay gets[floor]with the room's clock key, read from the relay lines.wai dev's front never serves a dot-path. It now refuses every path segment that starts with a dot. Before this change, a project served at/("site": ".", as every room template has) exposed/.wai/dev/room-keys.toml..ouiis now served as text.The page. Export hands over
app.ouiand the command that makes it a project. The ZIP writer and the page's in-WebAssembly export are gone. For the coding agent, the page nameswai mcp --toolset app.The browser end-to-end test (
wai/wai-app/e2e/run.sh, on the macOS host):wai dev --show.wai create --frombuilds the exported project, andwai app checkchecks it, including the negative controls.wai devruns the exported project's own room. There a host joins, chats and opens a poll; a viewer reads the chat and votes; both pages show the result the room's clock signed.wai mcp --toolset appstreams into the page through its bridge, andapp_exportwrites the project.Checks
Each check ran on the Studio (macOS, plain
rb). The Framework box's disk was below rb's 40 GiB floor for the whole of this branch, and only the Studio could host the browser test anyway.wai/wai-app:cargo test --lockedwai/wai-app:cargo clippy --locked --all-targets -- -D warningswai/wai-app: the same clippy for wasm32 (--no-default-features --features web)wai/wai-rs, featureapp:--bin wai --test cli_app --test cli_mcp --test cli_setup_agentwai/wai-rs, featuremcp:--bin wai --test cli_mcp --test cli_setup_agentwai/wai-rs, featurequickstart:--bin wai --test floor --test cli_dx(templates withLICENSE, held byte for byte to the examples)wai/wai-rs:--lib ops::wai/wai-rsclippy (--bin wai --testswithapp, withmcp, withquickstart, with no feature), filtered to the touched filesscripts/check-lockfiles.shnode --test web/web.test.mjspython3 -I joule-ui/conformance/lang_verify.py(local);--mutationswai/wai-app/e2e/run.sh, in Chrome 156 under memguardcheck-tests-in-ci,check-workflow-concurrency,check-spec-refs,check-wai-section-refs,check-no-vanity-metrics,test-public-text-checks,check-comparative-prose,check-orphan-sources)check-public-names.shon the changed files; the commit messages and this bodywfsteps.py HEAD origin/main <#501 head> <#505 head> <this branch's CI commit>; YAML parseFalsifications
Each was run with the branch committed: break one thing, run the guard on the Studio, then restore with
git checkout --.app.exportnamedcreate.export(the oldcreate_export)cli_app::create_through_the_app_toolsetleft: [..., "create_export"] right: [..., "app_export"]wai createwrites noLICENSE--bin wai(every_template_writes_a_project_that_reads)wai app checkstops holdingdev.modeto the app's roomcli_app::the_check_refuses_a_project_that_is_not_wholewai dev's front serves dot-paths again--bin wai(the_origin_serves_the_page_and_nothing_outside_its_roots)/.wai/dev/room-keys.toml: 200The misnamed MCP tool and misnamed
operationIdof the core and dev toolsets are #505's.Not done
waiis built withoutapp, and the archive carries no Create runtime (share/wai/app). Sowai create --fromneeds a source build ofwaiwith--features appand--runtime DIR(a runtime laid out byweb/runtime.mjs). Adding both to the archive is a follow-up for the release pipeline.wai buildand nodist/.check.mjsused to writedist/; nothing replaces that yet.test/directory in the export. Template projects carry none either; spec conflict 15 lists one.wai.jsonhas noroommember yet. The room lives indev, which is whatwai devreads.quantumtoolset is not mounted (see #505).🤖 Generated with Claude Code
The two verbs join the one table, dx::VERBS, beside hello, create, dev and verify; wai.rs keeps no second command table. A verb ends either as a check (0 held, 1 did not, 2 usage) or with an exit status of the toolchain's table, which setup-agent uses. wai mcp (agent.mcp): each tool is an operation of the catalogue, named by it with `_` for the dot, and nothing else names it. The tools come in toolsets, chosen with --toolset (core when none is named): - core: envelope_inspect, registry_list, registry_show, receipt_verify, package_build, conformance_list, conformance_run, docs_search; - dev: dev_start, dev_stop, room_grant, room_join, room_leave, room_session, on the target local alone (a target named must be it). receipt_verify takes the four kinds the verify tools took one each (delivery, claim, room_session, audit_bundle), by `kind` or read from the arguments, and answers with the kind beside the verifier's verdict. tools/list gives each tool's operation and toolset in its _meta. The development room's program is found as wai dev finds it: beside wai, then on PATH. envelope_inspect counts what this build decodes as wai inspect does, the floor included. wai setup-agent (agent.setup): AGENTS.md always; a CLAUDE.md only where the project has one, which gains an import of AGENTS.md. --toolset registers the server with those toolsets. Off a terminal it answers in the toolchain's JSON envelope (envelope/1: op, ok, error {code, message, hint, retryable}, result, and on exit 4 the proposed changes and the confirming command), with the table's exit statuses: 2 usage, 3 permission, 4 confirmation required, 5 not found, 7 another I/O error. wai::ops holds the rule operation names keep: noun.verb, lowercase letters, the verb from a closed list, and the few names the catalogue gives as they are (room.session among them). The quickstart's wai holds `mcp`, so the server setup-agent registers is in the archive's binary. Co-Authored-By: Claude Opus 5.5 <[email protected]>