I3111 — Every dispatched blocking validator is run against a declared violation, and one that accepts it fails the case
Replace grep-only effect proof with execution. Each dispatched blocking rule (x-majordomus validator) declares a minimal violation fixture under test/fixtures/violations/<rule>. One case builds a disposable repository per fixture, runs the real entry point (check, finish or the pre-commit hook) and requires a non-zero exit that names the rule id.
BLOKOVÁNO vlna 1 · p1 · profil implementation · bezpečné paralelně
Blocked. This issue cannot start until I3110 is done. The status is derived from that, not declared.
Cíl
Replace grep-only effect proof with execution. Each dispatched blocking rule (x-majordomus validator) declares a minimal violation fixture under test/fixtures/violations/<rule>. One case builds a disposable repository per fixture, runs the real entry point (check, finish or the pre-commit hook) and requires a non-zero exit that names the rule id.
Proč
The 2026-10-08 audit (c193#0) found that doctor's wiring proof was grep: changing check.sh to \"|| exit 0\" still passed doctor. The owner asked repeatedly for governance regression tests that \"deliberately violate a rule and prove Majordomus stops the work\" (c135#1). Case 18 proves that the wiring verifier notices a broken link. It does not show that any validator refuses its violation. It extends milestone architecture-is-enforced. Proposed in ADR 0188 (A rule's proof of effect is a recorded refusal of its violation, not the presence of its wiring) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c109#7, chatgpt-majordomus:c130#13, chatgpt-majordomus:c135#1, chatgpt-majordomus:c139#5, chatgpt-majordomus:c144#7, chatgpt-majordomus:c193#1, chatgpt-majordomus:c217#5, chatgpt-majordomus:c241#4, chatgpt-majordomus:c269#5, chatgpt-majordomus:c031#20.
Aktuální stav
lib/doctor.sh mj_validate_wiring checks that hooks invoke the program. test/cases/18_doctrine_wiring.sh mutates links in a copy of the tool. No fixture of a violation exists per rule. Rule blocking-checks-cheap keeps doctor cheap, so this belongs in a case, not in doctor.
Cílový stav
A table of dispatched rules is derived from the rule corpus, not from a hand list. A rule with no fixture is listed and ratcheted. Every fixture present is refused by its real entry point, with the rule id in the output.
Rozsah
- lib/doctrine.sh
- .ai/repo/rules/project/rule-is-a-doctrine.v1.md
- docs/DOCTRINE.md
- .ai/repo/project/intents
- lib/doctor.sh
- test/cases/18_doctrine_wiring.sh
- test/lib.sh
- .ai/repo/adrs/0188-a-rule-s-proof-of-effect-is-a-recorded-refusal-of-its-violation.md
Mimo rozsah
- Gated rules (proved by their own cases)
- Making doctor run fixtures
Závislosti
Kritéria přijetí
- The case derives its list of dispatched blocking rules from rules report, and a rule added to the corpus appears without editing the case
- Every fixture is refused with the rule id printed; a validator changed to always pass turns the case red
- Rules without a fixture are listed and the list may only shrink
- A new case carrying evidence case_every_validator_refuses_its_violation (its number from scripts/case-numbers next, announced on the board when the issue starts) fails on master 707a04c, where no violation fixture exists, and passes with this issue
- The same commit rebinds intent criterion validator-refuses-violation to that case; case 18 stays the proof that the wiring verifier works
Validace
- MJ_TEST_JOBS=4 bash test/run.sh 18_doctrine_wiring
- majordomus plan validate
Požadované důkazy
- case_every_validator_refuses_its_violation
Důkazy
Nic nezaznamenáno. Za každým tokenem výše musí stát příkaz nebo artefakt, než lze tento úkol dokončit; vyprávění se odmítá.
Časová osa
- zahájeno
- —
- ověřeno
- —
- dokončeno
- —
Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.
Canonical record: .ai/repo/project/issues/I3111.yaml. Read it back with majordomus plan show I3111.