Zdůvodnění
Spustitelný soubor v Rustu zpřístupňuje tytéž věci přes několik rozhraní. Tabulka nástrojů v kódu MCP, tabulka rout v kódu HTTP, ručně psaný dokument OpenAPI a Markdown inventář by byly čtyři kopie jednoho faktu a kopie se rozcházejí v okamžiku, kdy se jedna upraví. Registr v apps/majordomus-cli/src/capability/ je jediné místo, kde schopnost existuje; docs/CAPABILITIES.md říká, co je kanonické, co odvozené a co není autoritativní.
Požadované chování
Spustitelná schopnost je jeden typovaný deskriptor s jedním handlerem, složený do registru v capability/builtin.rs. Deklarativní objekt je soubor, který sources.yaml vrstvy mapuje na druh, jehož čtení deklarují share/kinds.yaml a share/schemas/, načítaný za běhu; repozitář přidává druhy a schémata pod .ai/repo/knowledge/ a nikdy neupravuje Rust kvůli dalšímu objektu známého druhu. Nástroje a zdroje MCP, HTTP routy, dokument OpenAPI, shell Swagger UI, příkazy capabilities, docs/generated/ a stránky /registry/ webu jsou projekce sestavené z registru na požádání; žádná z nich nedeklaruje vlastní jméno, popis, schéma ani routu. Allow-listy shellového nástroje pod share/allow/ jsou generovány ze schémat.
Chování při selhání
Recenzent rozhoduje o tomto pravidle u změny, která přidává definici do projekce; sady crate rozhodují o strojově kontrolovatelné části: tests/projections.rs selže, když projekce nese položku, kterou registr nemá, nebo postrádá takovou, kterou deklaruje, a majordomus generate --check selže, když se commitnutá projekce liší od registru.
Příkazová řádka je jediné rozhraní, které je deklarováno dvakrát — clap vlastní parsování, --help a množiny hodnot, takže CliExposure je tvrzení o deklaraci, která žije jinde, ne projekce vybudovaná průchodem registru. Obojí se porovnává: capability/closure.rs shodí schopnost, která si nárokuje příkazovou řádku, na niž deklarace clap neodpovídá (CLOSURE_CLI_ABSENT) nebo odpovídá jen skupinou, kterou nelze spustit (CLOSURE_CLI_NOT_RUNNABLE), v tests/projections.rs, ve vlastních testech cratu a jako řádek projection z capabilities validate, který skončí s exit 10. Spustitelný příkaz, který si žádná schopnost nenárokuje, se hlásí, ne odmítá — příkazy procesů a slovesa životního cyklu jsou legitimně psána ručně a počet je mírou toho, kolik příkazové řádky se stále neodvozuje — ale nikdy to není tiché. Každý takový příkaz jednou řekne, proč je lokální, v apps/majordomus-cli/src/cli/local.rs, s jedním ze čtyř strukturálních důvodů a poznámkou o daném příkazu; quality::parity toto tvrzení kontroluje v obou směrech, capabilities projections nese příkazy, které žádné nenesou, a scripts/ci/projection-check skončí s exit 10 na prvním z nich. Nikde jinde neexistuje soupis takových příkazů: seznam jmen bez důvodů je třetí kopie množiny, kterou už pinují dvě deklarace, a ten, který tento repozitář držel, dvakrát zastaral, než byl odstraněn.
Ověření
Review, cargo test --manifest-path apps/majordomus-cli/Cargo.toml, majordomus capabilities validate (řádek projection) a majordomus capabilities projections --unmet, a test/cases/76_capabilities_projections.sh, který sestaví spustitelný soubor, nemění nic než data a přečte tutéž schopnost zpět přes každé rozhraní. Web je jedno další rozhraní: jeho stránky o spustitelném souboru se vykreslují z datové sady registru a routují z manifestu registru (test/cases/95_executable_reference.sh) a scripts/site-check odmítne šablonu, generátor nebo navigační soubor, který schopnost jmenuje ručně.