Co to znamená
Pravidlo, které pojmenovává několik testů, bere jeden stav ze všech. Když kterýkoli z těch testů selhává, pravidlo je failing a u blokujícího pravidla je to zjištění — i když jiný jeho test nikdy neběžel nebo odmítl běžet. Jinak je stav pravidla nejslabší z testů, které mohou nést důkaz.
Princip
evidence::freshness::aggregate je jediná agregace. Vezme stav každé části a to, zda část může nést důkaz, a vrátí failing, je-li kterákoli část failing; jinak nejslabší část, která může nést důkaz, podle deklarovaného pořadí stavů; jinak nejslabší část ze všech; a nic pro žádné části. Zpráva o pravidlech ji volá se stavem pravidla každého testu a s tím, zda test řídí runner nebo kontrola, poté, co chybějící cesta již učinila pravidlo dangling, a před úpravou odeslaného pravidla bez případu.
První krok existuje, protože deklarované pořadí řadí failing nad not run. Prosté nejslabší-z přes selhávající a přeskočený test — což se nyní čte not run — by se četlo not run, což není zjištění, a selhání by se skrylo za absencí.
Jak to vidět
majordomus-cli rules show <rule-id> --format json | jq '.proof.state, [.proof.tests[].state]'
majordomus-cli rules report --findings
bash test/run.sh 502_evidence_is_judged_at_the_presented_revision
Případ přidá blokující pravidlo jmenující dva případy, zaznamená jedno selhání a jedno přeskočení a ověří, že pravidlo je failing a že zpráva jej uvádí jako nález.
Co nepokrývá
Rozhoduje, jak se stavy kombinují, ne jaký je stav každého testu; to je tabulka čerstvosti. Cesta, kterou nic nehýbe, se stále počítá jen tehdy, je-li to vše, co pravidlo jmenuje, jako dříve.
Vstupní preflight přepočítává korpus pravidel po svém, dokud nebude převeden na tuto funkci a na verdikt nad korpusem.
Proč existuje
Když přeskočení četlo not run místo failing, opravilo to falešné zjištění, ale otevřelo to díru: blokující pravidlo, jehož testy byly jedno selhání a jedno přeskočení, by se četlo jako not run a ztratilo by své zjištění. Protizávažný důkaz nesmí být přebit absencí důkazu, proto je přednost zapsána jednou, tam, kde ji čte každá agregace stavů.