Co to znamená
Nikdo nepíše stránku pro schopnost, modul, nástroj MCP nebo cíl měření výkonu. Executable generuje manifest svého registru (docs/generated/registry.json) a dataset pro web (site/data/registry/registry.json); generátor webu mění id z manifestu na trasy a odkazy a šablony rozvrhnou dataset. Přidejte schopnost do registru a spusťte just derive: má stránku pod /registry/capabilities/, řádek na stránce svého modulu a v indexu schopností, kotvu v referenci API, řádek na stránce MCP a na stránce měření výkonu a odkaz na soubor, v němž byla složena. Odeberte ji: zmizí všechno z toho a žádná stránka nezůstane pozadu.
Princip
scripts/generate-site-data čte docs/generated/registry.json — projekci závislou jen na kódu, takže odvození webu nikdy nečte nic, co zapisuje fáze závislá na indexu — a přes scripts/lib/executable-site.jq zapisuje site/data/generated/executable.json: jednu routu na modul a na schopnost (slug je id s . jako -, pravidlo, které API reference používá pro své kotvy), modul každé schopnosti, kotvu její operace, má-li HTTP vystavení, její název nástroje, soubor, ve kterém byla složena, jako odkaz do repozitáře, a tvrzení, která se jí týkají, připojená podle cesty implementace každého tvrzení: tvrzení implementované v souboru, kde žijí deskriptory modulu, patří tomuto modulu a jeho schopnostem; implementované pod kódem MCP, HTTP, měření výkonu nebo příkazové řádky tomuto povrchu; jakékoli jiné tvrzení implementované v cratu spustitelnému souboru jako celku. Poté zapisuje stub obsahu pod site/content/registry/ (při každém běhu smazaný a přepsaný, nikdy necommitovaný) a vlastní vyprávění spustitelného souboru, apps/majordomus-cli/README.md, promítané jako dokumenty.
Šablony (site/templates/registry*.html a sdílené částečné šablony) čtou každý fakt — popis, druh, stabilitu, původ, štítky, politiku měření výkonu a cache, každou expozici, vstupní a výstupní schémata, příkazový řádek, nástroje a zdroje, cesty, cíle, pokrytí, politiku, základní hodnoty — z site/data/registry/registry.json, které majordomus generate site zapisuje a generate --check odmítá, je-li zastaralé. Manifest je mezi vstupy generátoru webu, takže jeho hash se mění s kódem spustitelného souboru a znovu vygenerovaný manifest bez znovu vygenerovaného webu je pro generate-site-data --check zastaralý.
Manifest, který jmenuje modul, jejž registr nedrží, zdrojový soubor, který strom nemá, nebo jiné schéma, je odmítnut s uvedením důvodu a nic se nepublikuje.
Jak to vidět
just derive # every derived file, in order
ls site/content/registry/capabilities/ # one stub per capability of the manifest
jq '.capabilities[] | {id, route, module_route, api_anchor, claims: (.claims | map(.id))}' site/data/generated/executable.json
scripts/site-build && scripts/site-check | grep registry # every entry a page, no page an orphan, nothing typed by hand
bash test/run.sh 95_executable_reference # a capability joins, leaves, breaksCo nepokrývá
Rustová strana řetězce — že deskriptor změněný v kódu pohne manifestem i datovou sadou — je site-registry-dataset a apps/majordomus-cli/tests/projections.rs. Vyprávěcí stránky (docs/MCP.md, docs/CAPABILITIES.md, README crate) jsou kanonická próza; generátory je promítají, jejich věty neodvozují. Tvrzení se k povrchu připojují cestou své implementace, což je pravidlo generátoru webu, ne pole registru.
Proč existuje
Web měl jednu stránku o registru a na ní plochou tabulku; každý další fakt o spustitelném souboru — co příkaz bere, co nástroj vrací, co měří měření výkonu — žil v próze, která opakovala kód a hnila spolu s ním. Pravidlo project.interfaces-are-projections říká, že schopnost se definuje jednou a každé rozhraní se odvozuje; web je rozhraní. test/cases/95_executable_reference.sh upraví manifest ve fixture a sleduje jednu přidanou a jednu odebranou schopnost přes trasy, odkazy a hash vstupu, a vidí odmítnutí tří rozbitých manifestů.