### WAI Studio on the web: one front end, its core in WebAssembly, served by `wai dev` at `/_wai/`

- **[`wai-studio`](wai-studio/)**: one front end with two hosts, chosen when the page starts.
  Hosted, its core runs in the tab and nothing is uploaded; served by `wai dev` at `/_wai/`, the
  local `wai` does what a tab does not hold. Its panels: Inspect (a `.wai` file's envelope,
  capabilities, provenance, SPEC §4 verdict and receipts), Verify and receipts, Encode, decode,
  package (the floor in the tab, every codec the local `wai` holds through it), Rooms (a room
  shown and joined as a viewer, a pre-call test of a relay), Run (`wai dev` only: the stack, its
  services on loopback, their logs) and Quantum (Quantum Studio as a panel). Its command palette
  lists every operation of the catalogue by its id, and says where one runs that its host does
  not.
- **The actions come from the operation catalogue**: `scripts/actions.mjs` generates Studio's
  action table from `ops.json`, and `--check` fails on an action with no operation, an operation
  placed for the browser with no action, or a mismatched name.
- **The core** (`wai-studio/core`): the `wai` crate with the floor and the receipt checks, bound
  for WebAssembly, each call an operation named `noun_verb` and answering the command line's JSON
  envelope.
- **`wai dev` serves Studio at `/_wai/`** on the origin it already serves, when Studio's files
  are found (`$WAI_STUDIO`, or `share/wai/studio` beside the binary), with the dev stack's own
  routes for the page under `/_wai/api/`, answered to this origin alone. It opens no listener.

