71. Funkce existuje jen tehdy, když je její dodávka spočítána a každá dimenze projde
Kontext
ADR 23 učinilo funkci produktu objektem vrstvy a každý fakt, který o ní povrch říká, odvozeninou — až na jeden. Zda funkce existuje, se nikdy neodvozovalo. Soubor funkce deklaruje status: stable, web to vykreslí a nic nerozlišuje funkci, která je sloučená, publikovaná, otestovaná a prolinkovaná, od té, která je sloučená na větvi, kterou nikdo nenasadil.
Slova užívaná pro ten rozdíl se rozcházejí, jak se rozchází próza. „Hotovo“ znamenalo jednomu workeru mergnuto, jinému zelené na CI, třetímu viditelné na webu. ADR 41 odmítlo stejný kolaps u tvrzení: testovací soubor, který existuje, a test, který běžel, nejsou jeden stav. Produkt nic podobného neměl a zřejmé řešení — delivered: true nebo tested: true vedle funkce — je ručně psané tvrzení, které nic nevytvořilo a nic neruší.
Rozhodnutí
Funkce existuje, jen když projde každá ze šesti dimenzí a každá dimenze je verdikt počítaný při každém čtení:
EXISTS = ON_MASTER ∧ DEPLOYED ∧ PUBLICLY_VERIFIED ∧ REQUIRED_TESTS_CURRENT ∧ TEST_EVIDENCE_PUBLISHED ∧ UI_LINKED
- Verdikt má tři hodnoty a neznámé není nikdy úspěch.
pass,failaunknown, každá s větou, která o ní rozhodla, a nápravou. Web, který nebylo možné dosáhnout, není nasazen; klon bez trunku není na masteru. Konjunkce nad ničím neměřeným není plané ano. - Delivery a vývoj jsou různé typy.
DeliveryStatejedeliverednebonot_delivered { stage, blocking }; fáze —not_implemented,implemented_on_branch,on_master,tested,deployed— existuje jen uvnitř druhé varianty. Fázi nelze číst jako delivery, protože ji nelze dát tam, kam patří delivery. Fáze je žebřík: příčky se dosáhne, jen když projdou všechny příčky pod ní. - Nic se neukládá. Žádný soubor funkce, žádný řádek záznamu ani generovaný artefakt nenese verdikt. Schéma funkce se nemění.
ON_MASTERse čte z gitu. Cesty, které funkci implementují, se odvozují z toho, co už jmenuje její soubor: zdrojový soubor každého modulu schopnosti (source_pathregistru),lib/<command>.shkaždého shell příkazu (soubor, kterýbin/majordomussourcuje, aby jej odeslal) aimplementationkaždého tvrzení. Poslední commit, který se jich dotýká naHEAD, musí být předkemorigin/<trunk>, nebo musí být cesty na obou stejné — squash merge nese obsah bez commitu. Změna pouze na aktuální větvi jeimplemented_on_branch.DEPLOYEDje kontrola původu proti veřejné identitě. Web obsluhuje dokumentdeploy.identity, který jmenuje.ai/repo/ci/pages.yaml; commit v něm musí obsahovat revizi trunku dané funkce. Identita se stahuje jednou na zprávu, protože inkluze není otázka, na kterouscripts/pages verifyodpovídá — odpovídá na rovnost.PUBLICLY_VERIFIEDznovu používáscripts/pagesa neodvozuje je znovu. Nasazeno, čistá identita (dirty: false),scripts/pages verify --timeout 0potvrzující web zvenčí ascripts/pages builtčtoucí vlastní sestavení publikované větve u GitHubu. Jejich návratové kódy jsou slovník: 0 pass, 10 fail, 12 unknown.- Síť je vstřikovatelná.
MAJORDOMUS_DELIVERY_SITE_URLnahrazuje adresu webu; adresářfile://s dokumentem identity je web, který čtou tento modul iscripts/pages verifypřes tentýžcurl, takže případy chování nikdy nedosáhnou sítě. - Dvě schopnosti, jedna deklarace.
delivery.report(každá funkce, řazená podle id) adelivery.feature(jedna), promítnuté do příkazové řádky (delivery report,delivery show), HTTP, OpenAPI a MCP. Obě jsou čtení; obě jsou z měření výkonu vyňaty jako externí závislost a necachují se.
Fáze 1
Tento záznam přistává s modelem a třemi dimenzemi, které nepotřebují zaznamenané důkazy. REQUIRED_TESTS_CURRENT, TEST_EVIDENCE_PUBLISHED a UI_LINKED se počítají jako unknown s důvodem evidence model lands with PR #577. Jsou nyní dimenzemi typu, aby je fáze 2 vyplnila, místo aby ho rozšiřovala — a aby do té doby nemohla být žádná funkce hlášena jako existující. EXISTS je v den přistání nepravda pro každou funkci, a to je pravdivá odpověď.
Veřejný web zatím nezobrazuje doručení. PUBLIC_FEATURE_FIELDS v src/product.rs je allow-list toho, co smí veřejná stránka nést; stavový řez webu je pozdější změna, která do něj záměrně přidává.
Důsledky
- „Je to hotové?“ má jednu odpověď s odvozením za sebou:
majordomus delivery show <id>. - Sloučená funkce, kterou web nedohnal, se čte
on_mastersdeployed: faila jmenovaným obsluhovaným commitem — tiché zpoždění, pro které byl napsánscripts/pages built, se stává viditelným pro každou funkci. - Report sahá do sítě a na GitHub. Na stroji bez jednoho z nich jsou dimenze publikace
unknown, což je správně a čte se to pomaleji než odpověď z cache; cache by tu odpovídala o publikaci, která se mohla pohnout. - Odvození cest je mělké, stejně jako v ADR 41: změna pomocné funkce, kterou nejmenuje žádný modul, příkaz ani tvrzení, nepohne revizí funkce. Funkce, která nejmenuje nic implementovatelného, selže na
on_masters nápravou ji jmenovat.
Zamítnuté alternativy
status: deliverednebotested: truev souboru funkce. Vada v jednom poli: tvrzení člověka, které nic nevyprodukovalo a nic nemůže zneplatnit.- Booleovské
existsvedle fáze. Dovolujeexists: truesstage: on_branch. Dvě varianty jednoho typu činí tuto kombinaci nereprezentovatelnou. - Rozhodovat
DEPLOYEDpomocíscripts/pages verify --commit <revision>. Ptá se, zda web obsluhuje přesně ten commit, takže funkce sloučená před poslední publikací by se četla jako nenasazená. Otázkou je obsažení a jediné čtení, které potřebuje, je identita. - Brát nedosažitelný web jako poslední známý stav. Je to kolaps unknown do pass, který tento záznam existuje, aby odmítl.