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.