26. Oblast modulu schopnosti se odvozuje z funkcí, které ho jmenují, a není deklarována vedle něj
Kontext
Šestnáct modulů schopností v postranním panelu bylo plochým abecedním seznamem a zřejmým dalším krokem bylo je seskupit. Každý způsob začíná odpovědí na jedinou otázku: odkud se bere skupina modulu?
Svůdná odpověď je nová — model jmenných prostorů, id se segmenty, soubor, který deklaruje strom. Je to zde také špatná odpověď, protože tento repozitář už má potřebné části a přidání sedmnácté taxonomie by byl sediment, který project.no-new-nouns existuje, aby odmítal. Co má:
ModuleIduž je jmenný prostor. Je validován regulárním výrazem, je strojově vynucen — registr odmítne schopnost složenou mimo jmenný prostor jejího modulu (RegistryError::ModuleMismatch) — a je už sjednocen přes oba druhy modulů: zabudovaný modul v Rustu jej deklaruje a modul deklarativního objektu je jeho druh. Je to také už tag OpenAPI. Typovaný model jmenných prostorů by byl druhý.- Oblasti už existují, seřazené.
.ai/repo/why/areas/drží devět provozních oblastí, každou s titulkem, shrnutím aweight, které říká, jak moc na ní operátorovi záleží. - Funkce už oba spojují. Funkce deklaruje
modules:, z nichž je postavena, aareas:, kterým slouží (ADR 23). Hrana z modulu do oblasti už v datech byla; nic ji nečetlo.
Chybějící věc tedy nikdy nebyl jmenný prostor. Byla to jedna úroveň rodiče a jedna funkce.
Rozhodnutí
Oblast modulu schopnosti jsou oblasti funkcí, které ho jmenují, rozřešené vlastním weight katalogu: nejnižší první, shody rozhodne id. Žádný modul oblast nedeklaruje, žádný soubor nevypisuje dvojice a boční panel Cockpitu se ptá produktového modelu místo toho, aby držel vlastní seskupení.
Kde dvě funkce jmenují jeden modul a jejich množiny oblastí se vůbec nepřekrývají, neshodnou se na tom, k čemu modul slouží. Řešení zůstává deterministické — rozhoduje pořadí — a neshoda je hlášena jako contested_area proti modulu, aby byla urovnána v souboru funkce, kde žije sémantika, a ne rozhodnutím remízy ve funkci. V tomto repozitáři jsou to přesně dva moduly, health a repository, a zjištění jmenuje oba žadatele a oblasti, které každý obsluhuje.
Modul, který nejmenuje žádná funkce s oblastí, se zobrazí pod žádným nadpisem. Kanonické pořadí (ADR 25) už chybějící skupinu řadí na konec, takže nic nevyžaduje zvláštní zacházení.
Řešení čte pořadí, ne katalog: resolve_module_areas bere oblasti jako váhy a vrací přiřazení a neshody. To je vše, co pravidlo potřebuje, a to testy cvičí.
Zamítnuté alternativy
Pole namespace: nebo area: v deklaraci modulu. Jeden řádek na modul v Rustu, a taxonomie pak žije na dvou místech — ve funkci, která říká, k čemu modul je, a v modulu, který říká, kam patří — a nic je nenutí k souladu.
Soubor namespaces. namespaces.yaml s id, rodiči a názvy je seznam, který udržuje člověk, což je způsob selhání, který tento repozitář všude jinde odstranil: poskytovatelé, druhy, schopnosti, funkce, okamžiky a oblasti se všechny objevují, a jediná věc, kterou si nikdo nemusí pamatovat aktualizovat, je seznam, který neexistuje.
Nová hierarchická identita (governance.rules, ai.providers). Byl by to druhý jmenný prostor vedle ModuleId a potřeboval by vlastní validaci, vlastní rozlišení, vlastní aliasy pro id, která už jsou publikována v URI zdrojů MCP, HTTP routách a tazích OpenAPI. Rodič je jeden odvozený atribut; nová identita by byla migrace.
Vybrat většinovou oblast, nebo oblast první funkce. Ani jedno není faktem o doméně. Váha je: oblasti řadil operátor, když byly psány, a znovupoužití tohoto pořadí je znovupoužití odpovědi, ne vymýšlení nové.
Tiché vybrání vítěze, když se funkce neshodnou. Rozhodnutí při shodě musí existovat, aby byl boční panel deterministický, ale neshoda dvou souborů funkcí je vada dat a nástroj to říká. Dva ze šestnácti modulů jsou dnes sporné, což je dost malé číslo na to, aby stálo za pozornost člověka, a příliš malé na to, aby ospravedlnilo mechanismus.
Důsledky
- Postranní panel Cockpitu seskupuje své moduly pod pět nadpisů oblastí, všech šestnáct je umístěno, v kanonickém pořadí na obou úrovních.
- Odvození našlo skutečnou mezeru hned při prvním běhu: funkce
installnedeklarovala žádnéareas:, takžedistributionnemělo rodiče. To je nyní deklarováno —verificationadocumentation, což je přesně to, co popisuje vlastní shrnutí funkce — a mezera by byla nahlášena, ne skryta, kdyby nebyla. product validatezískalo varovánícontested_area; repozitář jich má dvě.- Nic dalšího se nemění, aby se modul přidal do hierarchie: složit ho, pojmenovat z funkce a objeví se pod oblastí této funkce na každé ploše, která seskupuje.
- Stejné odvození je k dispozici každému jinému povrchu, který chce seskupovat moduly. Dnes má jednoho konzumenta a bylo napsáno pro něj, ne předem.