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.

Verdikt kontroly je důkaz a pravidlo, které si repozitář vynucuje sám, je jím doloženo

Verdikt kontroly je důkaz a pravidlo, které si repozitář vynucuje sám, je jím doloženo

majordomus://adr/adr-0061navrženo governanceevidence

odkazuje na

Nic. Tento objekt nedeklaruje žádný odkaz.

odkazuje na něj

61. Verdikt kontroly je důkaz a pravidlo, které repozitář vynucuje sám, jím je doloženo

Kontext

Dne 2026-09-14 přidal řízený repozitář, catharsis-as-a-service, vlastní blokující pravidlo: project.no-scroll-containers — nic na publikovaném webu nenese vlastní posuvník. Je vynuceno, a to strojem přesně toho druhu, jaký tento nástroj žádá. scripts/validate-layout.py čte stylesheety a šablony a skončí s 1 na posuvnou deklaraci, posuvnou utilitní třídu nebo minimální šířku uvnitř selektoru obrázku či tabulky. Je to krok scripts/validate.sh, což je kontrola toho repozitáře a běží v jeho CI. Pět unit testů dokazuje, že validátor selže na každou vadu, kterou má zachytit. Prohlížečový test prochází každý prvek sedmi stránek ve třech šířkách ve dvou jazycích.

majordomus doctor v tom stromu řeklo:

blokující bez validátoru — 7 z 48 blokujících pravidel nemá blok x-majordomus, takže se pro ně žádný validátor nespouští a níže uvedený verdikt doktríny o nich nic nevypovídá

Verdikt je správný a vadou je slovník. ADR 0048 dalo pravidlu dva deklarovatelné tvary a třetí stav pro zbytek: dispatched jmenuje validator, které volá lib/doctrine.sh, gated jmenuje tests a vše ostatní je reviewed. Join za nimi je už dobrý: rules/ znovu neimplementuje důkazy, váže testy, které pravidlo jmenuje, na provedení zaznamenaná proti nim a čte ProofState z ADR 0041; pokrytí kontrolami se odvozuje z .ai/repo/ci/gates.yaml „aby se pokrytí kontrolami pravidla odvozovalo ze samotného vstupu plánovače, a ne zde znovu uvádělo“; a případ dosáhne kontroly „aniž by jeden jmenoval druhé“.

Dosahuje jich přes konstanty. CASES_DIR = "test/cases/", SUITE_RUNNER = "test/run.sh", CRATE_TESTS_DIR, CRATE_RUNNER — odvození zná rozvržení tohoto repozitáře, protože dosud záležela jen pravidla tohoto repozitáře. Testy dozorovaného repozitáře jsou na tests/python/test_validators.py, jeho vynucování je python3 scripts/validate-layout.py, jeho kontrola je scripts/validate.sh a nic z toho nelze pojmenovat: validator znamená funkci tohoto nástroje, enforced_by znamená příkaz tohoto nástroje, tests se rozřeší jen pod cestami, které tento nástroj dodává. Pravidlo, které brání scrollbaru dostat se do produkce, je strojově vynucené a jediné, co o něm Majordomus může říct, je, že ho někdo čte.

ADR 0048 tvar tohoto problému viděl a jednu jeho polovinu záměrně odložil: „Zaznamenat verdikt pro kontroly, aby gated mohlo dosáhnout na proven. Lákavé a prozatím zamítnuté … naučit ho zaznamenávat návratový kód libovolné kontroly je větší změna, než toto rozhodnutí potřebuje.“ Od té doby větší změna přišla po částech — záznam provedení z ADR 0041, model CI, který plánovač čte, a gates/, které už posuzuje, co každá kontrola řekla a zda tento verdikt stále popisuje strom. Nic je nespojuje s pravidlem.

Rozhodnutí

Pravidlo může jmenovat vynucování, které napsal jeho vlastní repozitář. Blok vynucování získává command: spustitelný soubor, který pravidlo odmítá, tak jak ho repozitář spouští (python3 scripts/validate-layout.py), s návratovým kódem, který znamená odmítnutí. Není to žádný z existujících režimů přejmenovaný — validator dispatchuje tento nástroj, command dispatchuje kontrola repozitáře — a pořadí odvození z ADR 0048 se nemění: nejdřív stále vyhrává validátor, pak testy, pak příkaz, pak důvod.

Co dělá z testu test, jsou data, ne konstanta. Adresáře a runnery, které případu umožňují dosáhnout kontroly, se přesouvají z Rustu do vrstvy repozitáře, kde se CASES_DIR a SUITE_RUNNER stávají hodnotami tohoto repozitáře deklarace, kterou píše každý repozitář. Nic se tu nemění; všude jinde se to stává vyjádřitelným.

Verdikt kontroly je provedení a ledger je ten jediný, který existuje. Běh kontroly zaznamenává to, co ADR 0041 vyžaduje od jakéhokoli běhu — výsledek, trvání, commit, stav stromu, digest zdroje, původ a příkaz, který jej reprodukuje — pod identitou odvozenou z id kontroly, tak jako je identita testu odvozena z jeho cesty. gates/ už verdikty čte; tohle je to, co znamená jeden uchovat.

Pravidlo dokazuje verdikt na commitu, který pravidlo nese. Stavy z ADR 0041 platí beze změny: verdikt z dřívějšího commitu je zastaralý, verdikt proti nečistému stromu nedokazuje žádný commit, kontrola, která nikdy neběžela, je not_run. proven má u tvrzení, testů i pravidel jediný význam, což je důvod, proč se model znovu použil, místo aby se přidával čtvrtý.

Deklarace, která se nevyřeší, je vada pravidla. command, jehož program není ve stromě, nebo cesta testu mimo všechny deklarované kořeny testů selže v loaderu tak, jako už selže kategorie bez validátoru. Absence jakékoli deklarace je stále reviewed, stále se počítá zvlášť a nikdy se nepočítá jako prošlá.

Zamítnuté alternativy

Napsat validátor Majordomus pro pravidlo každého dozorovaného repozitáře. Neškáluje to a je to špatná hranice: pravidlo jednoho repozitáře je o stylesheetech, další o SQL migracích. Repozitář validátor už napsal; chybělo spojení.

Nechat autora napsat reviewed_because. Tak to strom dělá dnes a pět unit testů, krok CI a test v prohlížeči zařazuje pod „názor člověka“. Režim, který pojme všechno, nehlásí nic.

Nechat kontrolu deklarovat, která pravidla dokládá. Vynucování by pak žilo ve dvou souborech, které se musí shodovat, a pravidlo — dokument, který čtenář otevře — by přestalo říkat, čím je podepřeno. Princip ADR 0048 platí: blok na pravidle je deklarace.

Zaznamenávat verdikt každé kontroly. Potřebuje ho jen kontrola, na které závisí důkaz nějakého pravidla, a jen na commitu. Zaznamenání všech by z ledgeru udělalo build log, který ADR 0041 odmítlo.

Důsledky

Model pravidel přestává být o tomto repozitáři. Dozorovaný repozitář, který deklaruje své testovací kořeny a pojmenuje své vlastní vynucování, dostane stejný graf důkazů, stejné stavy a stejný ratchet jako tento — což je rozdíl mezi dozorovou vrstvou a samodozorovaným programem.

CI potřebuje cestu dovnitř: kontrola musí být schopna zaznamenat provádění pomocí origin: ci zevnitř workflow. To je otázka schopnosti a přístupových údajů, kterou toto rozhodnutí otevírá a nezodpovídá.

Rohatky rule-proof-check: pravidla opouštějící review_only mění základní linii a repozitář, který jmenuje kontrolu, kterou nikdy nespouští, se to dozví, místo aby byl mlčky počítán stranou.

Dvě konstanty se stanou schématem, což je migrace pro tento repozitář a umožnění pro každý jiný.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0061-a-gate-s-verdict-is-evidence-and-a-rule-the-repository-enfor.md
identity
adr-0061
dostupné také jako
Zdroj MCP majordomus://adr/adr-0061 · majordomus entity show adr/adr-0061 · GET /api/v1/entity?uri=majordomus://adr/adr-0061
v Cockpitu
/cockpit/objects/adr/adr-0061

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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