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.

Každé tvrzení pojmenovává test, který je má rozhodnout, a každý test pojmenovává tvrzení, která má rozhodnout, z jednoho odvození

Vztah, který lze projít jen jedním směrem, je poloviční vztah. majordomus evidence claim

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: zastaralé 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 claim` odpovídá, co dokazuje tvrzení, a `evidence proves` odpovídá, co dokazuje test, včetně ostatních tvrzení, která ho sdílejí. Oba čtou stejný join, takže si ty dva směry nemohou odporovat; relace, kterou lze procházet jen jedním směrem, je jen půl relace.

Co to znamená

Vztah, který lze procházet jen jedním směrem, je půl vztahu. majordomus evidence claim <id> odpovídá na co toto tvrzení dokazuje: stav důkazu a větu vysvětlující, jak byl odvozen, za ním stojící provedení s výsledkem, dobou trvání, commitem, stavem stromu, digestem, časem a původem, cesty, které se od té doby změnily, příkaz, který jej reprodukuje, a další tvrzení, která dokazuje týž test. majordomus evidence proves <test> odpovídá na opak: poslední provedení testu, zda jeho vlastní zdroj stále dává hash, který toto provedení zaznamenalo, příkaz, který jej spustí znovu, a každé tvrzení, které jej jmenuje, se stavem, v němž se nachází.

Oba čtou stejné spojení, počítané na téže čtecí cestě, takže se oba směry nemohou rozejít. Žádný z nich není uložený index, od kterého by se ten druhý mohl odchýlit.

Princip

Jedna deklarace v apps/majordomus-cli/src/capability/builtin/evidence.rs nese čtyři schopnosti a každý povrch se z ní odvozuje. evidence.claim a evidence.test obě volají tentýž report nad indexem a ledgerem; první vybere jedno tvrzení a pak vypíše ostatní tvrzení, jejichž identita testu mu odpovídá, druhé vybere jeden test a vypíše každé tvrzení, které jej jmenuje. Test sdílený dvanácti tvrzeními je test, jehož selhání je dvanáct zjištění, a čtenář jednoho z nich vidí ostatních jedenáct bez hledání.

Test lze pojmenovat oběma způsoby. suite:84_distribution_model, crate:why i cesta, kterou píše tvrzení — test/cases/84_distribution_model.sh — se všechny převedou na stejnou identitu, protože klient, který zná jeden zápis, by nemusel znát druhý. Argument, který není ani jedno, je odmítnut s uvedením tří tvarů, jaké mohl mít, a id tvrzení, které matice nedeklaruje, je nenalezeno, nikoli prázdná odpověď: překlep, který se čte jako „toto tvrzení nemá žádné důkazy“, je jediná odpověď, kterou tyto schopnosti nesmějí nikdy dát.

Příkazová řádka píše druhý směr majordomus evidence proves; schopnost za ním je evidence.test, dosažitelná přes HTTP na GET /api/v1/evidence/test a přes MCP jako nástroj majordomus_evidence_test. Žádná z čtecích schopností necachuje, protože evidenční kniha je soubor, který se mění mimo proces, a cachovaná odpověď by byla přesně ten zastaralý důkaz, který má podsystém pojmenovávat. evidence.record, jediná, která zapisuje, deklaruje příkazovou řádku a nic jiného — povrchy MCP a HTTP tohoto spustitelného souboru jsou jen pro čtení, takže zapisovač je nabídnut tomu, kdo spustitelný soubor spouští, a nikomu přes socket.

Jak to vidět

majordomus evidence claim distribution-canonical-model
majordomus evidence proves suite:84_distribution_model
majordomus evidence proves test/cases/84_distribution_model.sh   # the same test
majordomus evidence proves crate:why --format json | jq '[.proves[].id]'

test/cases/124_evidence.sh v fixture ověřuje zpáteční cestu v obou směrech: test uvádí přesně tvrzení, která jej jmenují, každé tvrzení, které uvádí, jmenuje tento test zpět, a tvrzení hlásí ostatní tvrzení, která dokazuje jeho vlastní test.

Co nepokrývá

Vztah se týká jen toho, co matice deklaruje, a ničeho jiného. Test, který nejmenuje žádné tvrzení, tu nedokazuje nic — odpovídá se na něj prázdným seznamem, nedovozuje se, že něco pokrývá — a tvrzení, které nejmenuje žádný test, nemá směr, kterým by šlo.

Je to vztah mezi tvrzením a celým testem, ne mezi tvrzením a aserty uvnitř něj. Dvě tvrzení sdílející případ sdílejí jeho verdikt úplně: když případ selže, obě jsou failing, i když selhávající assert patří jen jednomu z nich. Rozdělit to by vyžadovalo testovací formát, který deklaruje, který assert dokazuje které tvrzení, což je větší věc než tato a není to, co matice říká.

Zda test tvrzení vůbec dokazuje, se zde neřeší. Spojení říká, který test tvrzení jmenovalo a co ten test udělal; zda test provádí chování, které věta popisuje, je otázka pro přezkum.

Proč existuje

Matici bylo vždy možné číst od tvrzení ven, otevřením souboru a sledováním cesty. Co se nedalo zeptat, byla otázka, kterou člověk skutečně má, když případ zčervená: co toto selhání znamená pro to, co publikujeme? Odvození obou směrů z jednoho spojení z toho činí příkaz místo hledání a znemožňuje, aby odpověď závisela na tom, z kterého konce čtenář začal.

Detail vykreslený z docs/claims/evidence-navigates-both-ways.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Každé tvrzení pojmenovává test, který je má rozhodnout, a každý test pojmenovává tvrzení, která má rozhodnout, z jednoho odvození

    Vzniklo na Důkazy.

  2. 2 · kanonické tvrzení

    evidence-navigates-both-waysdeklarovaný 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/capability/builtin/evidence.rs

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

    Test: test/cases/124_evidence.sh

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: zastaralé 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 124_evidence

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