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.

Tvrzení se čte jako prokázané, jen když byl jeho úspěšný běh zaznamenán na commitu, který předložená revize obsahuje, mezi oběma se nezměnilo nic než kniha důkazů a ani zaznamenaný, ani předložený strom nebyl špinavý; běh na commitu, který předložená revize neobsahuje, se čte jako zastaralý; pojmenovaná revize se posuzuje podle knihy odevzdané v ní a čistý neúspěšný běh téhož testu, který checkout drží neodevzdaný a zaznamenaný mezi nimi, ji omezí na zastaralou

Každý verdikt je verdikt k něčemu. majordomus evidence show posuzuje pracovní

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

`evidence::freshness` je jediná pravdivostní tabulka, kterou čtou všechny povrchy, a jen její řádek proven se smí zobrazit jako ověřený. `evidence show --presented HEAD` posuzuje načtený commit tak, jak je commitnut, z knihy, kterou ten commit drží, proti jeho stromu změřenému bez pracovní kopie knihy; `--presented-tree` toto měření jen oslabuje. Běh, který drží pracovní kniha a commitnutá ne, je uveden v `presented.uncommitted` a čte se jen monotónním pravidlem, které proven zadržuje a verdikt nikdy nerozhoduje.

Co to znamená

Každý verdikt je verdiktem v něčem. majordomus evidence show posuzuje pracovní strom před vámi; majordomus evidence show --presented HEAD posuzuje checkoutovaný commit tak, jak je commitnutý, což je čtení, které potřebuje web sestavený z toho commitu. V obou případech se tvrzení čte jako proven jen tehdy, když platí vše z toho: jeho poslední běh prošel; commit, na kterém byl běh zaznamenán, je obsažen v předložené revizi; mezi tím commitem a předloženou revizí se nezměnilo nic než ledger důkazů; běh měřil strom, který byl jeho commitem; a předložený strom je také jeho commit.

Průchod zaznamenaný na commitu, který předložená revize neobsahuje — nemergnutá branch, přepsaná historie — se čte jako stale a detail jmenuje commit. Pojmenovaná revize se posuzuje podle ledgeru commitnutého v ní, ne podle ledgeru v pracovním stromu, a čistý selhávající běh téhož testu, který checkout drží necommitnutý, zaznamenaný mezi důkazem a předloženým commitem, omezí verdikt na stale.

Princip

Jedna funkce, evidence::freshness v apps/majordomus-cli/src/evidence/freshness.rs, rozhoduje každý stav ze zaznamenaného běhu a srovnání s předloženou revizí a vyhrává první vyhovující řádek její pravdivostní tabulky (docs/EVIDENCE.md, „Sedm stavů“). Srovnání je freshness::compare: zda předložená revize obsahuje commit důkazu (git::contains, které pro commit, který tento klon nemá, odpoví „neznámé“, ne „ne“), a které cesty se mezi nimi změnily — pro pracovní strom každá sledovaná, staged a nesledovaná změna, pro předložený commit commitnutý rozdíl.

freshness::presented_commit odmítne každou revizi, která není checkoutnutým commitem, protože tvrzení a zdroje testů se čtou z checkoutu. Měří strom bez pracovní kopie ledgeru a stav stromu, který zadá volající, může toto měření jen oslabit. freshness::ledger_at čte ledger tak, jak ho drží commit.

Provedení, která pracovní ledger drží a commitnutý ledger ne, jsou freshness::uncommitted, uvedená ve presented.uncommitted zprávy a čtená jen přes freshness::weakened_by: záznam smí proven odepřít a nikdy neudělit. Selhávající běh, běh s vypršením času nebo s chybou na čistém stromě, na commitu, který obsahuje důkazy a který předložený commit obsahuje, posune proven nebo inputs_unchanged na stale s detailem, který jej jmenuje. Strop je stale, ne failing: takový záznam nikdy nerozhoduje o verdiktu.

Jak to vidět

majordomus evidence show --presented HEAD                        # HEAD, as committed
majordomus evidence show --presented HEAD --presented-tree dirty # declared dirty: only weakens
majordomus evidence show --presented HEAD --format json | jq .presented
bash test/run.sh 502_evidence_is_judged_at_the_presented_revision

Případ sestaví fixture repozitář a projde každou polovinu: průchod na boční větvi čtený z trunku, průchod commitnutý se svou účetní knihou a čtený při dalším commitu, selhávající běh držený necommitnutý, necommitnutý průchod, který nesmí nic posílit, špinavý strom změřený a deklarovaný a odmítnutí.

Co nepokrývá

Posuzuje jen commit, který je právě checkoutnutý. Verdikt u libovolného commitu by vyžadoval tvrzení a zdroje testů toho commitu, které se čtou z checkoutu; --presented proto jakoukoli jinou revizi odmítne, místo aby mísil dva stromy.

Žádný povrch toto čtení zatím nežádá. Web nepředává --presented ani --presented-tree: publikace důkazů (úkol I1955) a build webu, který ji váže k build.json (úkol I1959), jsou pozdější slice, které to udělají. Build webu měří build.json.dirty bez nesledovaných souborů a předložený strom je počítá; užší měření nemůže učinit verdikt dokázaným, protože předložený strom se tu měří, ať volající deklaruje cokoli.

Jediné doplňkové záznamy, které se zde čtou, jsou necommitnutá provedení pracovní knihy. Záznamy běhů uchovávané jinde, například vlastní artefakt běhu CI, jsou pozdější zdroje téhož pravidla a tento přehled je nečte. Vstupní preflight si ponechává vlastní filtr na běh, dokud nebude přesunut na tuto funkci.

inputs_unchanged zůstává absencí známé invalidace. Změna souboru, který tvrzení nejmenuje, se nezachytí; odpovědí je zaznamenat běh proti předloženému commitu.

Proč existuje

Do té doby se každý verdikt bral proti pracovnímu stromu čtenáře, takže nic nemohlo říct, zda bylo tvrzení prokázáno na commitu, který web ukazoval, a úspěch zaznamenaný na větvi, která se nikdy nesloučila, se mohl číst jako proven na trunku, který ji nikdy neobsahoval. Report posuzovaný jen z commitnutého ledgeru by měl opačnou vadu: četl by se jako proven nad neúspěšným během, který drží tentýž checkout. Předložená revize, obsažení a monotónní pravidlo uzavírají všechna tři a jsou jednou funkcí, takže žádný povrch nemůže rozhodnout jinak než jiný.

Detail vykreslený z docs/claims/evidence-judged-at-the-presented-revision.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Tvrzení se čte jako prokázané, jen když byl jeho úspěšný běh zaznamenán na commitu, který předložená revize obsahuje, mezi oběma se nezměnilo nic než kniha důkazů a ani zaznamenaný, ani předložený strom nebyl špinavý; běh na commitu, který předložená revize neobsahuje, se čte jako zastaralý; pojmenovaná revize se posuzuje podle knihy odevzdané v ní a čistý neúspěšný běh téhož testu, který checkout drží neodevzdaný a zaznamenaný mezi nimi, ji omezí na zastaralou

    Vzniklo na Důkazy.

  2. 2 · kanonické tvrzení

    evidence-judged-at-the-presented-revisiondeklarovaný stav: zaručeno v docs/CLAIMS.yaml

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

  3. 3 · implementace

    apps/majordomus-cli/src/evidence/freshness.rs

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

    Test: test/cases/502_evidence_is_judged_at_the_presented_revision.sh

  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 502_evidence_is_judged_at_the_presented_revision

Související tvrzení stejná implementace

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