Zdůvodnění
Rust executable zpřístupňuje tytéž věci přes MCP, HTTP, OpenAPI, Swagger UI, příkazovou řádku, projekci měření výkonu, cache a generovanou referenci. Fakt, který žije ve dvou z nich, driftuje při první úpravě, která zapomene na druhý. Registr v apps/majordomus-cli/src/capability/ je jediné místo, kde schopnost existuje; ADR 0004 zaznamenává rozhodnutí a zamítnuté alternativy.
Požadované chování
Nová schopnost je jeden blok capability! v souboru jejího modulu pod apps/majordomus-cli/src/capability/builtin/, s typovaným vstupem a výstupem a BenchmarkCases vstupu. Nový modul je jeden modul Rustu s module() sestaveným module! a jedním jménem přidaným do compose_modules! v builtin/mod.rs. Po obojím majordomus generate obnoví docs/generated/ a majordomus capabilities validate prokáže registr, projekce a pokrytí měřením výkonu. Žádný jiný soubor se neupravuje, aby operace existovala všude, kde má.
Chování při selhání
Registr odmítne sestavení, s uvedením id a provenance, při schopnosti složené mimo modul svého jmenného prostoru, modulu složeném dvakrát, neplatném id, cache politice, která nic nedrží, cachovaném příkazu nebo politice měření výkonu, která odporuje druhu; tests/projections.rs selže, když projekce nese položku, kterou registr nemá, nebo postrádá takovou, kterou deklaruje, a když vystavení cli jmenuje příkaz, který deklarace clap nemá — příkazový řádek je jediná projekce, kterou registr nedokáže sestavit sám, a proto jediná, která se může se svou deklarací rozejít; generate --check selže na zastaralém generovaném souboru; recenzent odmítne změnu, která přidává definici do projekce.
Ověření
scripts/rust-check; apps/majordomus-cli/tests/{registry,projections,bench}.rs; test/cases/76_capabilities_projections.sh a test/cases/91_canonical_architecture.sh.