Co to znamená
Přidání spustitelné schopnosti je jeden blok capability! v souboru modulu, do něhož patří, s typovaným vstupem a výstupem a případy měření výkonu vstupu. module() modulu vypisuje jeho schopnosti; compose_modules! v kořeni vypisuje moduly a nic jiného. MCP, HTTP, OpenAPI, Swagger UI, příkazový řádek, cíle měření výkonu, chování cache, generovaná reference a manifest registru z bloku vyplývají; žádný jiný soubor se nemění. Schopnost, jejíž jmenný prostor id není její modul, modul složený dvakrát, neplatné id modulu, politika cache, která nic neuchovává, cachovaný příkaz nebo politika měření výkonu odporující druhu zastaví sestavení registru, s uvedeným id a původem.
Princip
apps/majordomus-cli/src/capability/handler.rs drží capability!, který sestaví deskriptor (id, druh, název, popis, schémata z typů, původ, vystavení, stabilitu, tagy, politiku měření výkonu a cache) s jeho handlerem a poskytovatelem případů vstupního typu; capability/module.rs drží module! a compose_modules!, prosté macro_rules!, které sestavují hodnoty; capability/builtin/mod.rs je jediná kořenová kompozice; capability/registry.rs drží moduly (složené, odvozené z namespace nebo jeden na deklarativní druh) a vynucuje invarianty při buildu, než cokoli začne sloužit.
Jak to vidět
apps/majordomus-cli/target/debug/majordomus capabilities validate # OK modules … every executable composed in the module its namespace names
apps/majordomus-cli/target/debug/majordomus capabilities describe objects.search --format json | jq '{module, kind, cache, benchmark}'
sed -n '/compose_modules!/p' apps/majordomus-cli/src/capability/builtin/mod.rsCo nepokrývá
Příkazy shellového nástroje nejsou schopnosti programu v Rustu a mají svůj vlastní registr (share/commands.yaml). Deklarativní objekty skládá repozitář prostřednictvím sources.yaml, ne modul v Rustu; jejich modulem je jejich druh. Nový modul stále potřebuje jedno jméno v compose_modules!: to je jediné ruční složení a je to modul, nikdy schopnost.
Proč existuje
Invariantou operátora: jedna kanonická deklarace, moduly skládají schopnosti, kořen skládá moduly, projekce odvozují vše ostatní. ADR 0004 ji zaznamenává; project.rust-canonical-declaration je pravidlo. apps/majordomus-cli/tests/registry.rs prokazuje invarianty modulů, tests/projections.rs že změna jednoho deskriptoru dosáhne každé projekce, tests/bench.rs že dosáhne cílů benchmarků a test/cases/91_canonical_architecture.sh čte registr, generované soubory a živý spustitelný soubor zpět proti sobě v repozitáři, který napsal init.