SIGN IN SIGN UP

feat(ontology): join capabilities to the commands that invoke them

Capabilities and commands were separate catalogues that never met. An agent
read one to learn what simon can do and the other to learn how to ask, with
nothing checking the two described the same program.

`Capability::command` names the command that exercises each one, and
`every_command_a_capability_names_exists` runs `simon describe --commands`
and checks every one against the binary. A catalogue that tells an agent how
to invoke something and is wrong about it is worse than one that says
nothing.

The join immediately reported something worth knowing: the intrusion
detectors have no command. They are real, tested against this machine's live
socket table, and reachable from nothing a person or an agent can type.
Nobody had noticed because the two catalogues had never been compared.
`capabilities_with_no_command_are_named` prints the stranded set and asserts
the detection surface is wired all-or-nothing, so a half-wired surface cannot
appear either.

MCP is deliberately in that set: it is spoken rather than typed.

Verified the check bites: renaming `cli cpu` to `cli processor` in the
mapping fails with "the binary does not accept it".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A
Adam Erickson committed
dfe9137973416dab4ee13c10c6c5e538727e89c9
Parent: 1a097aa