Zdůvodnění
Tento repozitář už těžkou polovinu měl. Každý soubor pod .ai/ je indexován jako typovaný objekt s druhem, identitou a URI majordomus://; jedna tabulka vztahů rozlišuje každou referenci, kterou objekt deklaruje, a hlásí ty, které se nerozliší na nic; každý objekt je zdroj MCP. Co neměl, byla ta snadná polovina, a ta snadná je ta, s níž se čtenář setká:
- Žádná adresa. Objekt šlo číst na
/cockpit/object?uri=majordomus%3A%2F%2Frule%2Fproject.x%401— parametr dotazu nesoucí URI v procentovém kódování. To je způsob, jak záznam získat, ne adresa, kterou někomu dát. Nic na něj neodkazovalo, nic nešlo uložit do záložek a web nepublikoval žádnou stránku pro rozhodnutí ani pravidlo projektu. - Půl grafu. Tabulka vztahů se četla jen dopředu. Pravidlo říkalo, na čem závisí; nic neodpovídalo na co závisí na tomto, ačkoli hrana, která odpovídá, tam už byla, jen mířila opačně.
- Žádné prohlášení o publikaci. Které druhy se dostanou na veřejný web, bylo implicitní ve dvaceti řádcích shellového generátoru. Druh šel přidat do vrstvy a nedostat se na žádnou veřejnou stránku, aniž by to cokoli kdekoli řeklo — tiché selhání objevování, které tento repozitář už potkal a které je důvodem, proč nyní měří, místo aby předpokládal.
Co pravidlo vyžaduje
Adresa se odvozuje, nikdy nepřiděluje. Cesta objektu je jeho druh a identita zredukované jednou deterministickou funkcí na jeden segment cesty. Neexistuje tabulka mapující objekty na cesty, protože tabulka může být neúplná; funkce nemůže. Může však vytvořit stejný segment pro dvě identity jednoho druhu, a to je kolize, nikoli rozhodnutí losem: cesta, která odpoví jedním ze dvou objektů, je horší než žádná, proto kontrola strom odmítá, dokud nějaká existuje.
Oba směry pocházejí z jedné deklarace. Objekt deklaruje, na co odkazuje. Zpětný odkaz je tatáž hrana čtená z druhého konce. Nic nedeklaruje vztah dvakrát, a proto nelze deklarovat jen jeho polovinu.
Každý druh říká, kde je publikován. site/data/publication.toml nese jednu položku na druh indexu: publikováno jako stránky entit na routě, publikováno už redakční sekcí, nebo nepublikováno s důvodem. Důvod není formalita — je to rozdíl mezi rozhodnutím a mlčením a mlčení je to, co nechá druh rok nepublikovaný.
Žádný konzument nenese soupis. Ani router Cockpitu, ani příkazová řádka, API, MCP, šablony webu ani jeho navigace. Pokud přidání pravidla, rozhodnutí nebo dovednosti vyžaduje úpravu čehokoli z toho, projekce není projekcí — je kopií, která se dnes shoduje. Akceptační test tohoto pravidla zapíše do vrstvy jedno pravidlo a nic jiného a ověří, že se dostane do indexu, výpisu, vlastní stránky, obou 404 a typovaného API, aniž by se dotklo kteréhokoli konzumenta.
Dokumentace je tatáž projekce. Rozcestník na začátku /docs/ a strojově čitelný /docs/index.json nepočítají ani nevypisují nic vlastního. Druhy a jejich počty pocházejí z deklarace publikace spojené s indexem a počty rozhraní ze souhrnu registru. Stránky pocházejí z buildu, který je publikoval. Ručně vedený index dokumentace je druhý inventář, který toto pravidlo zakazuje, a stejně tak číslo napsané na stránku.
Co nevyžaduje
Nevyžaduje, aby byl každý druh publikován veřejně. Prompt, deklarace rozsahu a identita mesh jsou fakta o checkoutu, ne o produktu, a jejich publikování by byl šum s adresou URL. Vyžaduje, aby bylo rozhodnutí zapsáno tam, kde ho kontrola umí přečíst.
Nevyžaduje, aby stránka entity tvrdila vynucování. To, co objekt jmenuje jako své spustitelné artefakty a zda je strom drží, je to, co stránka smí říkat; zda to kdy běželo, je jiná otázka s jinou odpovědí a stránka odkazuje na schopnost, která na ni odpovídá, místo aby zaokrouhlovala nahoru.