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.

Efektivní sada pravidel se řeší jako graf závislostí v deterministickém pořadí a sadu, která se nevyřeší, neaplikuje nic

Pravidlo je soubor Markdown s front matter v YAML: identita (id a verze, nikdy název souboru), třída, stav, depends_on jako přesné reference id@version a u pravidel, která nástroj vynucuje, blok x-majordomus jmenující validátor, příkazy a testy. Efektivní sada je každé aktivní vendorované pravidlo plus každé aktivní pravidlo projektu, seřazené tak, aby každá závislost předcházela pravidlu, které na ní závisí. Jakákoli vada v tomto grafu zastaví příkaz, který sadu potřeboval, s uvedením důvodu, a žádné pravidlo se neuplatní částečně.

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

Chybějící nebo zastaralá závislost, cyklus, jedna identita zabraná dvakrát, projektové pravidlo ve vendorovaném jmenném prostoru, nevalidní front matter, neznámý klíč a blok x-majordomus bez vazby jsou odmítnuty každé zvlášť jménem. Každá závislost je uvedena před pravidlem, které na ní závisí, a dva běhy se shodují.

Co to znamená

Pravidlo je soubor Markdown s YAML front matter: identita (id a version, nikdy název souboru), třída, stav, depends_on jako přesné odkazy id@version a u pravidel, která nástroj vynucuje, blok x-majordomus pojmenovávající validátor, příkazy a testy. Efektivní sada je každé aktivní vendorované pravidlo plus každé aktivní projektové pravidlo, seřazené tak, aby každá závislost předcházela pravidlu, které na ní závisí. Jakákoli vada v tomto grafu zastaví příkaz, který sadu potřeboval, s udáním důvodu, a žádné pravidlo se neaplikuje částečně.

Princip

mj_rules_load v lib/rules.sh čte vendorovaný balík v pořadí manifestu a projektová pravidla v pořadí jmen souborů, validuje každý soubor (povinná pole, kind: rule, celočíselnou verzi, známý stav a třídu, tečkované id, jen klíče, které share/allow/rule.txt povoluje, správně utvořené odkazy, úplný blok x-majordomus, je-li přítomen), pak vyhodnotí graf topologickým řazením, které tam, kde graf nechává volbu, prochází deklarované pořadí, takže dva běhy dají stejné pořadí. Závislost, kterou žádné pravidlo neposkytuje, závislost na zastaralém pravidlu, cyklus, jedno id@version nárokované dvěma soubory a projektové pravidlo, jehož id je v jmenném prostoru majordomus., jsou každé odmítnuty jménem; neexistuje přepsání. Každý příkaz, který čte pravidla — rules list, rules show i dispatcher za check, doctor, finish a watch — prochází tímto jedním loaderem a při selhání se zastaví s exit 10.

Jak to vidět

majordomus rules list                                  # one line per rule, dependencies first
cat > .ai/repo/rules/project/cyclic.md <<'EOF'
---
id: project.cyclic
version: 1
kind: rule
title: Cyclic
description: Depends on itself.
statement: Nothing.
status: active
class: advisory
depends_on: [project.cyclic@1]
---
EOF
majordomus rules list                                  # majordomus: rules do not resolve: dependency cycle among project.cyclic@1   exit 10

Co nepokrývá

Rozlišení dokazuje, že graf je v pořádku, ne že pravidla jsou dobrá. Pravidlo bez x-majordomus je normativní pro toho, kdo ho čte, a nikým nevynucované, a rules list to říká slovy, místo aby naznačovalo opak. Zda je každé vynucované pravidlo skutečně napojeno na svůj validátor, příkazy, test a CI, je samostatný řetězec, který prochází doctor.

Proč existuje

Sada pravidel s dírou — závislost, která se nikdy nenačetla, dva soubory nesouhlasící o jedné identitě, pořadí měnící se mezi stroji — něco vynucuje a nikdo neumí říct co. Selhat uzavřeně nad celou sadou je jediný způsob, jak může fráze „účinná pravidla“ znamenat jednu věc. test/cases/67_rule_dag.sh rozbíjí graf po jednom faktu a dokazuje, že každé rozbití je odmítnuto jménem a čistě vráceno.

Detail vykreslený z docs/claims/rule-resolution.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Efektivní sada pravidel se řeší jako graf závislostí v deterministickém pořadí a sadu, která se nevyřeší, neaplikuje nic

    Vytvořeno na Doktrína, Doctor.

  2. 2 · kanonické tvrzení

    rule-resolutiondeklarovaný stav: zaručeno v docs/CLAIMS.yaml

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

  3. 3 · implementace

    lib/rules.sh · majordomus rules

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

    Test: test/cases/67_rule_dag.sh

    Provedeno v Zjistit, která pravidla se zde uplatňují a co je vynucuje.

  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 67_rule_dag

Kde se toto tvrzení používá

Související tvrzení stejná implementace

Okamžiky, na které to odpovídá

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