Co to znamená
Pokaždé, když majordomus finish odmítne, ledger získá řádek task.refused: jaký výsledek byl tvrzen, kolik řádků kontraktu zůstalo nesplněno, které doktríny odmítly a verdikt každé doktríny. Úloha přijatá po čtyřech odmítnutích zanechá čtyři řádky task.refused a pak jeden task.finished, v tomto pořadí. finish --check se ptá, zda by kontrakt prošel, a nic nezaznamenává, protože kontrola je otázka a finish je tvrzení.
Princip
lib/finish.sh vyhodnotí kontrakt jako dříve. Když je kterýkoli řádek nesplněn, připojí task.refused přes mj_ledger_append, který odmítne událost, jíž registr nedeklaruje, nebo takovou, které chybí povinné pole (task_id, outcome, unmet, refused), a pak skončí kódem 10. Událost je deklarována v share/events.yaml, zdokumentována v docs/SCHEMAS.md a vykreslena majordomus history. --check se vrací před připojením.
Jak to vidět
majordomus finish --outcome completed # refused: verification not run
majordomus finish --outcome completed --verify-command "make test" # accepted
majordomus history --event task.refused --all
# 2026-09-16T… task.refused t-… 9b1e2d4 outcome=completed unmet=2Co nepokrývá
Zaznamenává odmítnutí finish, ne odmítnutí hooků gitu nebo kontrol CI, a sám nic nepočítá: počet je to, co vypisuje history --event task.refused. Odmítnutí je lokální stav pod .ai/local/, který se nikdy necommituje ani nepublikuje, takže záznam patří checkoutu, který jej vytvořil.
Proč existuje
Kontrakt dokončení činí hotovo vyvratitelným a dokud tato událost neexistovala, vyvrácení nezanechávala stopu: úloha odmítnutá čtyřikrát, než prošla, vypadala v knize stejně jako ta, která prošla napoprvé. Tím bylo nemožné ukázat hlavní přínos nástroje — každé falešné hotovo, které zachytil, zmizelo s výstupem terminálu. Repozitář tu mezeru zaznamenal sám, jako finish-refusal-leaves-no-trace s prioritou 1 v docs/HARDCODING_LEDGER.yaml. Odmítnutí později splněné je zachycené falešné hotovo a nyní jej lze spočítat.