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.

Závazek, jehož fakt nástroj dokáže zjistit, se ustavuje živě, ne zaznamenáním — čistý strom, vzdáleně sledovaná ref dosahující HEAD, trunk, který jej dosahuje, publikovaný web, který jej servíruje — a ručně zaznamenaný řádek jej ani nesplní, ani nezachrání

Šest z jedenácti tokenů povinností jmenuje fakt, který žije mimo pracovní strom:

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

share/obligations.yaml dává každému tokenu established_by a jedno z hodnoty `none` ho zavazuje říct v `unestablished`, proč to zde nic nemůže určit. commit, push a target se určují z gitu bez fetche, takže zastaralý tracking ref může říct jen "ještě ne" a nikdy "ano"; pages se určuje pomocí scripts/pages verify s --timeout 0, tedy jediným sondováním kontroly publikace, kterou workflow Pages už spouští a která nyní končí kódem 12 místo 10, když web nikdy neodpověděl - nedosažitelný a nepublikovaný jsou různé nálezy. Takto určený fakt se bere na HEAD, což je `exact` z mj_git_label; ostatní tři štítky si na záložní cestě zachovávají svůj význam a deploy a verify zůstávají zaznamenávány ručně, protože nasazení je fakt o stroji, s nímž tento repozitář nikdy nekomunikuje.

Co to znamená

Šest z jedenácti tokenů povinností jmenuje fakt, který žije mimo pracovní strom: commit, push, target, pages, deploy, verify. Dokud toto nepřistálo, všech šest se splnilo stejně — člověk něco spustil, nebo řekl, že spustil, a napsal majordomus evidence --covers push --command 'git push'. Kniha držela větu. Git držel odpověď a nikdo se ho neptal.

Čtyři z šesti se nyní zjišťují místo zaznamenávání:

tokenfaktjak se urovnává
commitzměny úlohy jsou v historii větve, ne v pracovním stromužádná cesta v rozsahu úlohy není špinavá a HEAD se posunul za commit, z něhož úloha začala
pushhead větve existuje na remotu, který sledujevzdálený sledovaný ref dosáhne HEAD
targetvýchozí větev repozitáře dosáhne commiturefs/remotes/<remote>/HEAD dosáhne HEAD
pagespublikovaný web servíruje tento commitscripts/pages verify --timeout 0 — jedna sonda dokumentu identity, který web publikuje

deploy a verify zůstávají zaznamenávány ručně a slovník říká proč jedním řádkem, místo aby to čtenář musel odvozovat.

Stanovený závazek se splní tím, že je pravdivý, a odmítne tím, že je nepravdivý. Zaznamenání důkazů pro něj nemá v žádném směru účinek: řádek task.evidence tvrdící push o větvi, kterou remote nikdy neviděl, nepřežije střet s git.

Princip

share/obligations.yaml dává každému tokenu established_by — git, příkaz nebo none. Token, jehož hodnota je none, musí nést také unestablished, jednu řádku říkající, proč to tady nic nemůže rozhodnout; behaviorální případ selže, pokud token deklaruje jedno bez druhého, v obou směrech, protože token deklarovaný jako prokazatelný, k němuž není nic, co by ho prokázalo, by jinak prošel tiše.

mj_validate_obligations v lib/evidence.sh se nejprve zeptá mj_obligation_establish. To dispatchuje na mj_obl_est_<token>, které skončí 0 prokázáno, 1 vyvráceno nebo 2 nerozhodnutelné — nic v tomto checkoutu to nedokázalo rozhodnout. Pouze třetí případ čte ledger a chová se pak přesně tak, jako před existencí této kontroly.

Nic se nestahuje. Tokeny gitu čtou remote-tracking refy tak, jak jsou, protože validátor, který by při každém check sahal na síť, by učinil diagnostiku závislou na konektivitě. Čtení je bezpečné ve směru, na kterém záleží: tracking ref nemůže obsahovat commit, který remote nikdy nedostal, takže zastaralý ref může říct jen „ještě ne“, když je odpověď „ano“ — nikdy naopak.

pages volá sondu, která už existovala. scripts/pages verify od doby, kdy vznikla rychlá cesta pro Pages, dotazuje identifikační dokument publikovaného webu na commit, který pojmenovává, a Pages workflow byl až dosud jejím jediným volajícím. Dvě věci ji udělaly volatelnou z validátoru: --timeout 0 je jediná sonda, protože smyčka čte web dřív, než se podívá na hodiny; a každá sonda je nyní omezena --max-time, takže nedostupný hostitel stojí známý počet sekund. Také nyní rozlišuje své dvě selhání. Web, který odpoví a pojmenuje jiný commit, je zamítnutí, exit 10 — tato práce není publikována. Web, který neodpověděl nikdy, nebyl změřen, exit 12 — kontrolu nebylo možné provést a notebook bez sítě nesmí být schopen shodit úlohu, kterou nevidí.

Proč je živé, a ne zaznamenané

Obojí je obhajitelné a alternativu stojí za to uvést. Řádek účetní knihy zaznamenává, kdy fakt platil, což chce vědět ten, kdo o měsíc později audituje historii, a drží jeden mechanismus místo dvou.

Živé vítězí v argumentu, na němž celý tento subsystém stojí. Kniha závazků existuje, protože záznam přežije to, co popisoval, a lék, který všude jinde používá, je přepočet, nikdy časové razítko: mj_obligation_inputs_hash přepočítává, source_hash webu přepočítává. Git fakt se přepočítá v milisekundách a je vždy tvrzením o současnosti. Jeho zaznamenání by vyrobilo přesně to zastarání, které měl tento subsystém odstranit, a pak by potřebovalo mechanismus zastarání, aby je zase odstranil — okliku, jejímž jediným produktem je okno, v němž se záznam a repozitář rozcházejí.

A hlavní kniha už drží to, co worker udělal: každé start, checkpoint, evidence a finish v ní je, s headem, větví a relací v obálce. Není to místo, kde si nástroj zapisuje to, co si může dohledat. Ručně zaznamenaný fakt o remote je také jediný druh důkazu, v němž se worker může mýlit ve směru, který mu lichotí.

Disciplína zastaralosti je zachována, ne zahozena. Fakt zjištěný zde je z konstrukce brán na HEAD, což je mj_git_label exact, a exact je slovo, které nález říká. advanced, diverged a different_context si na záložní cestě zachovávají svůj význam. Nebyl vymyšlen žádný pátý slovník.

Jak to vidět

majordomus check
# OK   obligation  commit — exact: the tree is clean and 1bcd0b3790c5 carries the task's changes
# OK   obligation  push   — exact: origin/master contains 1bcd0b3790c5
# OK   obligation  target — exact: origin/master reaches 1bcd0b3790c5

git commit -qm 'one more'
majordomus finish --outcome completed --note done
# FAIL obligation  push   — no remote-tracking ref reaches 9c8a74105c8c; the commit has not
#                           reached the remote
# FAIL obligation  target — origin/master does not reach 9c8a74105c8c; the work is not on
#                           the trunk

majordomus evidence --covers push --command 'git push'   # recorded, and it changes nothing
majordomus finish --outcome completed --note done
# FAIL obligation  push   — no remote-tracking ref reaches 9c8a74105c8c; ...

Co nepokrývá

deploy a verify stále splňuje záměrně člověk. majordomus deployment čte deklarovaný objekt nasazení a nekontaktuje nic — žádná schopnost v apps/majordomus-cli/src/capability/builtin/deploy.rs nesahá k poskytovateli, což je pravidlo onoho modulu, ne přehlédnutí — a objekt, který čte, je deklarovaný, ne běžící, takže není na koho se ptát. Kontrola, která by vždy prošla, by byla horší než mezera, která je zapsána.

Ani lokální tokeny nejsou zjištěny. tests by šlo rozhodnout jen spuštěním suite, což by způsobilo, že check stojí tolik co test/run.sh. generated by šlo rozhodnout pomocí majordomus generate --check asi za dvanáct sekund a docs pomocí scripts/ci/reference-check; ani jedno není napojeno, protože nebylo rozhodnuto, co smí diagnostika utratit při každém vyvolání. Obojí to říká v unestablished, kam tento repozitář umisťuje mezeru, kterou neuzavřel.

Zavedený commit také neposuzuje, zda commitnutá změna je ta, kterou úloha slíbila. To je implementation a je to úsudek, ne fakt.

Detail vykreslen z docs/claims/obligation-establishment.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Závazek, jehož fakt nástroj dokáže zjistit, se ustavuje živě, ne zaznamenáním — čistý strom, vzdáleně sledovaná ref dosahující HEAD, trunk, který jej dosahuje, publikovaný web, který jej servíruje — a ručně zaznamenaný řádek jej ani nesplní, ani nezachrání

    Provedeno na Finish.

  2. 2 · kanonické tvrzení

    obligation-establishmentdeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/CLI.md

  3. 3 · implementace

    lib/evidence.sh · majordomus evidence

  4. 4 · test a scénáře

    Test: test/cases/103_obligations.sh

    Provedeno v Řekněte, co dorazilo na remote a co ne.

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 103_obligations

Kde se toto tvrzení používá

pokryté odpovědnosti

Související tvrzení stejná implementace

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