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.

Pravidlo deklaruje, jak se vynucuje, a revize je jeden ze tří způsobů

Pravidlo deklaruje, jak se vynucuje, a revize je jeden ze tří způsobů

majordomus://adr/adr-0048navrženo rulesgovernanceověřeníevidence

odkazuje na

odkazuje na něj

48. Pravidlo deklaruje, jak je vynucováno, a revize je jedním ze tří způsobů

Kontext

Pravidlo tohoto repozitáře deklaruje class. blocking znamená, že kontrola odmítne práci, která je porušuje. To je tvrzení o světě a buď je pravdivé, nebo není.

Do 2026-09-11 nerozhodovalo nic, které. x-majordomus četla právě jedna otázka — existuje blok? — a každý povrch položil tuto otázku a z odpovědi vytiskl odznak. product.rs to řeklo na jednom řádku: enforced: o.metadata.get("x-majordomus") .is_some(). Pravidlo mohlo jmenovat test/cases/28_no_hardcoded_values.sh v sekci # Verification psané pro lidského čtenáře, ten případ se mohl přejmenovat a pravidlo se dál všude četlo jako vynucené. Vztah šel jedním směrem, s nevlastněným opakem — tvar, který tento repozitář stále znovu objevuje, naposledy v scripts/ci/reference-check a v matici tvrzení, o které ADR 0041 je.

scripts/ci/rule-proof-check uzavřelo polovinu pojmenování: pravidlo pojmenovává svůj důkaz ve front matteru a pojmenovaná cesta, která ve stromě není, rovnou selže. Přistálo se základem deseti blokujících pravidel, která nepojmenovávala nic.

Změřeno při zpracování oné baseline, odkud toto rozhodnutí pochází:

  • Šest z deseti už mělo spustitelný důkaz. apps/majordomus-cli/tests/quality.rs dokázal project.operation-transport-parity; test/cases/99_adr.sh dokázal majordomus.decision-threshold. Důkaz existoval a byl pojmenován v próze, kterou nic nečte. Migrace těchto šesti spočívala v přesunu cesty z angličtiny do YAML.
  • Dvě mohla mít důkaz a neměla. project.english-only i project.finding-carries-reproduce říkaly „Review.“ a nic víc.
  • Čtyři nemohly mít důkaz a nikdy nebudou moci. project.clean-room se týká původu toho, co bylo napsáno — žádný program v tomto stromě nepozná, odkud pochází odstavec zdroje. project.optional-complexity se ptá, zda si mechanismus zaslouží svou cenu, což je úsudek, a kontrola, která by předstírala, že ho činí, by byla horší než žádná.

Základ držel všech deset jako jeden druh věci: „blokující pravidla, která nejmenují žádný spustitelný důkaz: dnes vynucována revizí“. Slovo dnes je vada. Čte se jako práce, která zbývá, a u čtyř z deseti nikdy nebyla. Seznam, který nerozliší tohle nikdo neumí zautomatizovat od nikdo se k tomu nedostal, druhé skryje tím, že ho zahrabe do prvního, a první nechá vypadat jako nedbalost.

Rozhodnutí

Blok vynucování pravidla deklaruje jeden ze tří režimů a tvar bloku je deklarace. Žádné slovo režimu se nepíše, a proto je nelze chybně napsat:

režimnázvy blokůkdo to spouští
odeslánovalidator, s category, exit_code, enforced_by a testemmj_doctrine_dispatch, u příkazů, které enforced_by jmenuje
řízeno kontroloutests, a žádný validátorkontrola CI, nebo behaviorální sada
zrevidovánoreviewed_because a ani jedno z výše uvedenýchčlověk

reviewed_because nese důvod a nic jiného nenese deklaraci. Vedle něj záměrně není žádný boolean. Příznak lze nastavit; důvod nelze nastavit bez napsání jednoho, takže výjimka je vždy věta, kterou někdo musel obhájit a revizor ji může číst. Blok s jedním slovem a bez důvodu není deklarace — propadne na unproven, což je zjištění, které měl nahradit.

Spustitelný důkaz vždy vítězí. Režim se rozhoduje v pořadí: validátor jej činí dispečerským, test řízeným kontrolou a teprve potom se čte důvod. Pravidlo, které získá případ, přestane být vynucováno revizí, ať je důvod ještě v jeho front matter, nebo ne, takže deklarace nemůže přežít vlastní potřebu zapomnětlivostí kohokoli.

Revidované pravidlo se počítá zvlášť, na každé ploše, vždy. rule-proof-check vypíše každé jako NOTE — nikdy jako úspěch, nikdy jako selhání — a uvede počet vedle změřeného celku. Typovaná zpráva je počítá v review_only, nikdy v passing a nikdy v named_proof. Když toto číslo roste, governance slábne, a nic jej nezapočítá do celku, který by to skryl.

Graf důkazů je jiná otázka než dispatcher a nesloučí se. majordomus doctrine se ptá, zda repozitář pravidlo právě teď splňuje — otázka o stromu. majordomus rules se ptá, zda je pravidlo ve stavu, ve kterém by vůbec mohlo být splněno — otázka o pravidle. crate::rules odpovídá na druhou spojením každého pravidla se stromem a s knihou důkazů z ADR 0041, přičemž znovu používá tento slovník, místo aby vymýšlel druhý, a hlásí deset stavů, z nichž tři se nikdy nesmějí splynout: proven (úspěšný běh, od té doby se nic nezměnilo), gated (mechanismus, který odmítá porušení, bez zaznamenaného verdiktu) a reviewed.

Stav pravidla je nejslabší z jeho částí. Jeden visící případ činí pravidlo visícím, kolik jeho dalších případů prochází, protože polovina, která se neřeší, je ta, které by čtenář věřil.

Důsledky

Základní linie rule-proof je prázdná. Každé blokující pravidlo v tomto repozitáři jmenuje spustitelný důkaz, nebo deklaruje s důvodem, proč je důkazem čtenář. Rohatka zůstává, takže další blokující pravidlo, které nejmenuje nic, je nový dluh a shodí kontrolu.

Dvě pravidla získala skutečné kontroly, obě přistály s prázdnými základními hodnotami, ne jako ratchety nad vlastními prvními zjištěními. scripts/ci/english-only-check je test abecedy a tak se tváří — anglická próza obsahující větu v jiném jazyce zapsanou v ASCII jím projde a vždy projde, takže pravidlo zůstává širší než kontrola, což je poctivý vztah mezi nimi. scripts/ci/finding-reproduce-check našlo devět skutečných porušení v lib/doctor.sh a lib/watch.sh; byla opravena, ne zaznamenána, takže drží hranici na nule.

Vztah je nyní čitelný v obou směrech. rules proves <test> jmenuje pravidla, která test dokazuje, a pravidla, která by zůstala bez jakéhokoli důkazu, kdyby byl smazán — otázku, kterou je třeba položit před přejmenováním případu a na kterou jednosměrný vztah nemohl odpovědět.

Čtyři pravidla jsou nyní trvale a viditelně vynucována revizí. To je smysl, ne regrese: číslo je malé, uvádí se při každém běhu a může klesnout jen tehdy, napíše-li někdo případ. Co už nemůže, je skrývat se uvnitř seznamu nazvaného dluh.

Cenou je změna schématu. reviewed_because je nové pole proto pravidla, takže share/allow/rule.txt a vedle něj schéma JSON se znovu generují a pravidlo používající klíč proti staršímu spustitelnému souboru je odmítnuto jako neznámý klíč front matter. Toto odmítnutí je správné a je to, k čemu guard generování existuje; je to i důvod, proč nelze tuto změnu aplikovat na strom bez předchozí regenerace.

Zamítnuté alternativy

Nechat čtyři v základní hodnotě. Současný stav. Zamítnuto, protože hlavička základní hodnoty sama říká „dnes vynucováno revizí“ a pro těchto čtyřech neexistuje den, kdy by to přestalo platit — seznam tak trvale špatně popisuje třetinu vlastního obsahu a položky, které dočasné jsou, jsou maskovány těmi, které nejsou.

Booleovský review_enforced: true. Zamítnuto právě proto, že je levný. Celá hodnota mechanismu spočívá v tom, že nárokovat výjimku stojí větu, kterou recenzent přečte; příznak činí výjimku zdarma a ze čtyř by se do čtvrtletí stalo čtyřicet.

Udělat z třídy místo toho advisory. Zamítnuto, protože to mění, co pravidlo znamená, aby se opravilo, jak je sledováno. project.clean-room skutečně blokuje — porušení se nezmerguje — a degradovat ho na advisory kvůli vyčištění seznamu by byla falešná zelená, kterou doktrína tohoto repozitáře přímo jmenuje.

Napsat pro ty čtyři slabé kontroly. Grep na „provenance“ by kontrolu splnil a nic by nerozhodl. Zamítnuto: kontrola, která nemůže selhat, je horší než žádná, protože poctivou absenci mění v nepoctivý průchod.

Zapracovat graf důkazů do majordomus doctrine. Zamítnuto, protože odpovídají na různé otázky a sloučený příkaz by odpověděl na obě jedním exit kódem. „Repozitář je v pořádku“ a „pravidlo je v pořádku“ nejsou stejná věta a jejich splynutí je způsob, jak zelený odznak přestane cokoli znamenat — stejná úvaha, kterou ADR 0041 odmítá splynutí proven a inputs unchanged.

Zaznamenat verdikt pro kontroly, aby gated mohlo dosáhnout proven. Lákavé a prozatím zamítnuté: ledger tohoto repozitáře zaznamenává případy sady a testy crate a naučit ho zaznamenávat exit kód libovolné kontroly je větší změna, než toto rozhodnutí potřebuje. gated říká přesně to, co je pravda — porušení se odmítají a žádný verdikt se zde nezaznamenává — a stav, který uvádí vlastní hranici, není mezera.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0048-a-rule-declares-how-it-is-enforced-and-review-is-one-of-the-three.md
identity
adr-0048
dostupné také jako
Zdroj MCP majordomus://adr/adr-0048 · majordomus entity show adr/adr-0048 · GET /api/v1/entity?uri=majordomus://adr/adr-0048
v Cockpitu
/cockpit/objects/adr/adr-0048

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.