Zdůvodnění
Dne 2026-09-09 scripts/derive vypsalo
ERROR majordomus://adr/adr-0028 is claimed by <two files>; every claimant is excluded
code=duplicate_identity
a skončilo s kódem 0. Dvě architektonická rozhodnutí vypadla z indexu, všechny projekce se pak zapsaly bez nich a návratový kód hlásil úspěch. Všimlo se to jen proto, že někdo z tušení prohledal log.
To je nejhorší tvar, jaký kontrola může mít. Selhání, které se samo ohlásí a pak ho přebije návratový kód, je nebezpečnější než žádná kontrola, protože všemu dále po proudu — hooku, workflow, člověku čtoucímu echo $? — se dává právo tomu věřit.
Index je záměrně tolerantní: soubor, který nedokáže zařadit, se stane diagnostikou a sestavení pokračuje, aby jeden rozbitý dokument neučinil repozitář nečitelným. Taková tolerance je správná pro čtení a špatná pro odvozování. Co se zapíše jako stav repozitáře, se nesmí zapsat ze stavu, o kterém nástroj už řekl, že je neúplný.
Požadované chování
Každé volání, které odvozuje commitnuté artefakty nebo je kontroluje, předává --strict, takže chybová diagnostika ve vrstvě ukončí běh nenulovým exit kódem a zprávou s počtem. Dnes to pokrývá scripts/derive a scripts/derive-check.
Příkaz, který čte vrstvu, aby odpověděl na otázku — context, search, servírované plochy — zůstává tolerantní a hlásí zhoršený stav místo odmítnutí. Rozdíl je v tom, zda se výstup stane commitnutým faktem o repozitáři.
Chování při selhání
Běh skončí nenulovým kódem s uvedením, kolik chybových diagnostik bylo nalezeno, a příkazu, který je vypíše. Nic se nezapisuje.
Ověření
Revize a test/cases/104_strict_derivation.sh: zavede se duplicitní identita, derivace odmítne a tentýž strom bez duplicity se odvodí čistě.