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ý.