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.

Úloha dluží povinnosti a důkazy, které je splácejí, zastarávají

Úloha dluží povinnosti a důkazy, které je splácejí, zastarávají

majordomus://adr/adr-0030navrženo completionevidenceúlohy

odkazuje na

Nic. Tento objekt nedeklaruje žádný odkaz.

odkazuje na něj

30. Úloha dluží povinnosti a důkazy, které je splní, zastarávají

Kontext

finish už odmítá. Rozesílá registr doktríny a repozitář vybírá, které řádky platí, přes verification.finish_requires, takže kontrakt jsou data, ne seznam v shellu. Vybrané řádky pokrývají pracovní strom: dotčené soubory leží v rozsahu úlohy, ověřovací příkaz běžel a skončil nulou, větev a head stále odpovídají záznamu, žádná otázka není otevřená, existuje poznámka se sekcemi, které její výsledek vyžaduje.

Každý závazek za pracovním stromem chybí. Nic v kontraktu neví, zda byla práce commitnuta, zda commit dosáhl remote, zda ho trunk obsahuje, zda byly generované projekce aktuální ve chvíli, kdy byla úloha prohlášena za hotovou, zda byl web publikován, zda bylo cokoli nasazeno, nebo zda se na nasazené věci někdy někdo podíval. share/events.yaml nemá událost pro publikaci ani nasazení. Worker může splnit každý řádek kontraktu a nechat práci na notebooku.

Části, které by na tyto otázky odpověděly, už existují a nejsou spojeny.

plan je model povinností, o úroveň výš: úkol deklaruje evidence_required, důkazy se zaznamenávají s příkazem nebo artefaktem, protože vyprávění není důkaz, a plan done odmítne, dokud je token nedokázán. usecase run je engine důkazů o provedení, jehož výstup je normalizován tak, aby dva běhy jednoho scénáře byly bajtově identické. usecase impact už počítá, které scénáře a případy změna ukládá workerovi znovu spustit, a project.use-case-evidence už písemně uvádí, že se to musí stát před finish — věta, která nedeklaruje žádný validátor, a proto nikoho nezavazuje. scripts/pages verify dotazuje publikovaný web, dokud neobsluhuje očekávaný commit; nikdo ho nevolá a nezapisuje žádný záznam.

Hlubší mezerou je zastarávání. Důkazy usecase nenesou žádný head ani hash vstupu. Důkazy plan razítkují commit, který nic nepřepočítává. Důkaz tedy, jakmile je zaznamenán, platí navždy, což je totéž jako nekontrolovaný: výsledek testu, který nemůže zastarat, je tvrzení o minulosti vydávané za tvrzení o přítomnosti.

Repozitář přesně tento problém už jednou vyřešil, pro web. Generátor webu hashuje explicitní seznam souborů, které čte, zapisuje hodnotu do odvozených dat jako source_hash a pages current ji přepočítá a porovná, přičemž selže s oběma hashi a příkazem opravy. Tento mechanismus je zapojen do git hooku a doctor dokazuje, že hook nespolkne svůj exit kód. Je to tvar, který zbytku důkazů v tomto repozitáři chybí.

Rozhodnutí

Povinnost je pole na úloze a důkazem je událost v knize nesoucí hash toho, nad čím byl pořízen.

  • requires: [...] stojí vedle scope: [...] v záznamu úlohy. Rozsah je slib omezení — kam smí pracovník zapisovat. requires je slib doručení — co pracovník dluží, než je výsledek completed dostupný. Názvy tokenů jsou data v share/obligations.yaml, vedle share/events.yaml, nikoli řetězce v shellu.
  • Důkazy jsou task.evidence v knize, ne nové úložiště. Kniha už je jen přidávací, uspořádaná, kontrolovaná na integritu a její obálka už nese head, větev a relaci. Událost přidává, co musí: který závazek pokrývá, jak byla pořízena a hash vstupů, nad nimiž byla pořízena.
  • Zastaralost je přepočet, ne časové razítko. Validátor znovu zahashuje deklarované vstupy závazku a porovná je a rozdíl hlásí toutéž zprávou se dvěma hashi, kterou vypisuje pages current. Zaznamenaný head se označí proti aktuálnímu pomocí mj_git_label, jehož čtyři hodnoty — exact, advanced, diverged, different_context — jsou jediným slovníkem zastaralosti repozitáře. Pátý slovník se nevymýšlí.
  • Cesty splnění jsou příkazy, které už existují. Git odpovídá na commit, push a obsažení v trunku. generate --check a pages current odpovídají na generovanou aktuálnost. pages verify --commit odpovídá na publikaci a jeho použití zde je první volající, jakého ten mechanismus kdy měl. usecase impact a případy, které jmenuje, odpovídají na testy, čímž splňují větu, kterou project.use-case-evidence nebyl schopen vynutit.
  • Jedno pravidlo, rozeslané tam, kde ostatní. majordomus.obligation-closure, blokující, validátor obligations, vynucované check a finish, vybírané klíčem politiky jako každá jiná řádka kontraktu. Přeskakuje se pro jiné výsledky než completed, přesně jako řádky ověření a profilu: blokovaná úloha není nepoctivá.
  • Důkaz propojení získává směr. doctor již dokazuje, že každá deklarovaná doktrína se rozlišuje na validátor a že žádný validátor neběží bez pravidla. Stejný důkaz získávají závazky: každý token jmenuje dosažitelnou kontrolu a každá kontrola je dosažitelná z tokenu.

Zamítnuté alternativy

Manifest relace. Mandát, který k tomu vedl, o něj žádal. Relace v tomto repozitáři nic nebrání z návrhu — nenárokuje si cesty, nedrží akceptaci a je volitelná — a její uzavřený záznam je odvozen z účetní knihy právě proto, aby neexistoval druhý měnitelný účet týchž událostí. Manifest by byl tímto druhým účtem a nechat relaci odmítat akceptaci by obrátilo důvod, proč byl tento pojem oddělen od task. Povinnost patří věci, která už slibuje, už má typovaný výsledek a už odmítá.

Soubor s checklistem na relaci. session_checklist.yml s update_cli: true je inventář, který nikdo neaktualizuje; tento repozitář strávil několik rozhodnutí odstraňováním přesně tohoto tvaru a audit, který toto ADR vyvolal, našel sousední codebase, kde se takové inventáře rozešly o faktor tři, přestože tvrdily, že jsou generované.

Rozšíření session close na výsledky úloh. Přijímá closed a interrupted. Naučit je completed a blocked by dalo repozitáři dva slovníky výsledků pro jednu myšlenku a validátor záznamu relace už odmítá relaci, která tvrdí víc, než může vědět.

Nové úložiště důkazů pod .ai/local/. Jedno existuje pro případy užití a není sekcí manifestu. Přidání druhého neregistrovaného úložiště pro důkazy uzavření by tuto chybu zopakovalo, nikoli opravilo.

Důsledky

Úloha, která nedeklaruje žádné requires, se chová přesně jako dnes, takže je to opt-in na úlohu a na repozitář přes klíč politiky. Úloha, která deklaruje povinnosti, nemůže dosáhnout completed pouhým tvrzením. Důkazy pořízené před změnou po ní už nepočítají, což bude nepohodlné právě v případech, kde by mělo.

Vnější závazky — publikace, nasazení, ověření — jsou ty, které notebook sám nedokáže dokázat. Jejich důkazy jmenují vzdálený fakt a čas a poctivým hlášením pro úlohu, která nedosáhla trunku, je blocked by, ne pass.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0030-a-task-owes-obligations-and-evidence-goes-stale.md
identity
adr-0030
dostupné také jako
Zdroj MCP majordomus://adr/adr-0030 · majordomus entity show adr/adr-0030 · GET /api/v1/entity?uri=majordomus://adr/adr-0030
v Cockpitu
/cockpit/objects/adr/adr-0030

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.