Decision — Bus commands and app actions
Status: accepted 2026-10-24. Amends verb classes, instance verb families, executed commands, egui applications and commands take parameters.
The decision
- A dotted name a service answers is a Bus command. The command
registry, command classes and command families keep the meaning the verb
registry, classes and families had. Payloads say
command, as the frame header already does. - An app's registry entry is an action.
<app>.actionslists them,<app>.executeruns one,<app>.action.executedpublishes each run, and the registry crate islibs/action. The MCP edge tools areapp_actionsandapp_execute. - One refusal per kind: rc 10 with
UNKNOWN_COMMANDfor an unknown Bus command, from every component;UNKNOWN_ACTIONfor an unknown action. - "Verb" is retired outside history (superseded decisions and
changelogs).
tools/terminology_gate.mixrefuses it elsewhere.
Why
Most command names are not verbs, the wire and Mix already say "command", and ARexx, whose model Mix follows, sends commands to ports. Readers who know HTTP take "verb" to mean a closed method set, which in MixOS is the command class. Agents read these docs cold, so one concept gets one word, and one word means one concept.
Consequences
- Command registry schema 5:
commands.conf.mix, gatetools/command_registry.mix. - Every component's unknown-name refusal is renamed; tests and pages follow.
- Names other systems own keep their words: the generic bridge protocol's
engine.commandsandengine.execute, and polkit'saction.lookup("verb"). - Stored state moves with the code: the props store renames its events
column on open, and an install migrates hostd's standing grants
(
commands:) and receipts ("command"). - No aliases: the change is wire-breaking and ships in one release.