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 10Co 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.