Co to znamená
Objekty pravidel pod sekcí pravidel repozitáře — vendorovaný základ (.ai/repo/rules/vendor/majordomus/, kopie balíčku, který nástroj dodává v share/standard/majordomus/) plus vlastní pravidla repozitáře — jsou jediné místo, kde se pravidlo deklaruje. Každý příkaz, který pravidla vynucuje, z nich vychází, místo aby kontroly jmenoval ručně, a majordomus doctor prochází řetěz od deklarace po úlohu CI pro každé z nich, přičemž čte zdroj, ne popis registru sama o sobě.
Princip
lib/doctrine.sh načte registr a pro běžící příkaz provede každou doktrínu, kterou jmenuje její enforced_by. Validátor se hledá podle jména — doktrína deklarující validator: scope spouští mj_validate_scope — takže doktrína, která jmenuje validátor, který nikdo nenapsal, je hlášené selhání, ne tiché přeskočení. mj_validate_doctrine_wiring v lib/doctor.sh pak kontroluje šest věcí na doktrínu a tři o pipeline:
- validační funkce je definována někde v
lib/; - každý příkaz v
enforced_byexistuje a volámj_doctrine_dispatch; - příkazy blokující doktríny mohou z neúspěšného nálezu udělat nenulový exit kód;
- test, který jmenuje, existuje;
- každé tvrzení, které jmenuje, je v
docs/CLAIMS.yaml; - v opačném směru je každá funkce
mj_validate_*vlib/deklarována nějakou doktrínou; - CI spouští
test/run.sh, nepolyká jeho návratový kód a runner používá globtest/cases/, místo aby vypisoval případy jmenovitě.
Jak to vidět
majordomus doctrine status
majordomus doctrine show majordomus.scope-integrity
majordomus doctor # OK doctrine <n> doctrines — validator, dispatch, propagation, test and CI resolve for every oneCo nepokrývá
Kontrola dispatche je textová: dokazuje, že zdroj příkazu volá dispatcher, ne že ho konkrétní cesta kódu dosáhne za všech podmínek. Pokrytí logiky samotného pravidla je úkolem testu, který doktrína jmenuje, ne kontroly zapojení.
Proč existuje
Selhání, kterému to brání, není vidět z žádného jednotlivého souboru. Pravidlo je zapsáno, skript ho implementuje, test skript dokazuje a nic skript nevyvolává. Každý artefakt je přítomen a vynucování je fikce. test/cases/18_doctrine_wiring.sh přeruší každý článek v zahozené kopii a selže, pokud doctor nezčervená — ověřovač, který přežije rozbité zapojení, nic neprokazuje.