Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Funkce existuje, jen když je spočítáno její dodání a projde každý rozměr

Funkce existuje, jen když je spočítáno její dodání a projde každý rozměr

majordomus://adr/adr-0071navrženo deliveryfunkceověřenípublikace

odkazuje na

  • put_in_force .ai/repo/ci/pages.yaml (soubor)
  • put_in_force apps/majordomus-cli/src/capability/builtin/delivery.rs (soubor)
  • put_in_force apps/majordomus-cli/src/delivery/mod.rs (soubor)
  • put_in_force apps/majordomus-cli/src/delivery/public.rs (soubor)
  • put_in_force apps/majordomus-cli/src/delivery/revision.rs (soubor)
  • put_in_force scripts/pages (soubor)
  • put_in_force adr-0023
  • put_in_force adr-0041
  • put_in_force docs/DELIVERY.md (dokument)
  • put_in_force test/cases/373_delivery_is_computed.sh (test)
  • put_in_force test/cases/374_delivery_unknown_is_not_delivered.sh (test)

odkazuje na něj

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, fail a unknown, 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. DeliveryState je delivered nebo not_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_MASTER se čte z gitu. Cesty, které funkci implementují, se odvozují z toho, co už jmenuje její soubor: zdrojový soubor každého modulu schopnosti (source_path registru), lib/<command>.sh každého shell příkazu (soubor, který bin/majordomus sourcuje, aby jej odeslal) a implementation každého tvrzení. Poslední commit, který se jich dotýká na HEAD, musí být předkem origin/<trunk>, nebo musí být cesty na obou stejné — squash merge nese obsah bez commitu. Změna pouze na aktuální větvi je implemented_on_branch.
  • DEPLOYED je kontrola původu proti veřejné identitě. Web obsluhuje dokument deploy.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 kterou scripts/pages verify odpovídá — odpovídá na rovnost.
  • PUBLICLY_VERIFIED znovu používá scripts/pages a neodvozuje je znovu. Nasazeno, čistá identita (dirty: false), scripts/pages verify --timeout 0 potvrzující web zvenčí a scripts/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_URL nahrazuje adresu webu; adresář file:// s dokumentem identity je web, který čtou tento modul i scripts/pages verify př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) a delivery.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_master s deployed: fail a jmenovaným obsluhovaným commitem — tiché zpoždění, pro které byl napsán scripts/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_master s nápravou ji jmenovat.

Zamítnuté alternativy

  • status: delivered nebo tested: true v souboru funkce. Vada v jednom poli: tvrzení člověka, které nic nevyprodukovalo a nic nemůže zneplatnit.
  • Booleovské exists vedle fáze. Dovoluje exists: true s stage: on_branch. Dvě varianty jednoho typu činí tuto kombinaci nereprezentovatelnou.
  • Rozhodovat DEPLOYED pomocí 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.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0071-a-feature-exists-only-when-delivery-is-computed-and-every-dimension-passes.md
identity
adr-0071
dostupné také jako
Zdroj MCP majordomus://adr/adr-0071 · majordomus entity show adr/adr-0071 · GET /api/v1/entity?uri=majordomus://adr/adr-0071
v Cockpitu
/cockpit/objects/adr/adr-0071

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.