Zdůvodnění
Ruční úprava generovaného souboru je selhání dvou příruček v miniatuře; docs/GITHUB_PAGES_ARCHITECTURE.md uvádí, co se generuje, a CI odmítne strom, jehož odvozené soubory jsou zastaralé.
Odmítnout to v CI se ukázalo jako nedostatečné. Publikační cesta odmítne strom, jehož commitnutá data webu nehashují na své kanonické vstupy, takže merge, který přeskočil regeneraci, nerozbije toho, kdo ho udělal — rozbije toho, kdo přistane další, a ten musí spustit generování, které nezpůsobil a nemůže zkrátit. To se stalo třikrát za hodinu 2026-09-06 a každou opravu předběhlo další přistání. Kontrola, která promluví až po merge, je kontrola, která účtuje špatnému člověku.
Samotná kontrola nikdy nebyla problém: scripts/pages current porovná zaznamenaný vstupní hash s hashem tohoto stromu za pětinu sekundy, protože generátor zapisuje tento hash do site/data/generated/source.json a stejný seznam lze znovu zahashovat bez znovugenerování čehokoli. Chyběl správný okamžik: nyní běží tam, kde se commit vytváří.
Požadované chování
Generovaný soubor se mění změnou svého kanonického zdroje a opětovným spuštěním generátoru a obojí se commituje společně.
Chování při selhání
scripts/pages current končí s 10 a commit se neprovede; jmenuje oba hashe a příkaz, který to napraví. Kontrola je deklarována v seznamu enforcement politiky jako derived-current, zapojena přes git-hook:pre-commit, takže doctor to hlásí jako zjištění zapojení a končí s 10, když ji hook přestane volat nebo spolkne její exit kód — pravidlo je tak vynucováno dvojnásob: kontrola odmítne zastaralý commit a doktrína odmítne repozitář, který kontrolu odpojí.
Validátor se drží stranou lib/: které soubory jsou kanonické vstupy a kde je zaznamenán jejich hash, jsou fakta o tomto repozitáři, ne o každé instalaci nástroje. Deklarace kontroly jako položky vynucování umožní doctor ji držet, aniž by se dodaný spustitelný soubor učil uspořádání tohoto repozitáře.
scripts/derive-check zůstává vyčerpávající formou — majordomus generate --check a scripts/generate-site-data --check společně, jmenující každý zastaralý artefakt kteréhokoli generátoru — a CI i workflow Pages ji stále spouštějí. Kontrola otisku je ta levná, která si může dovolit běžet při každém commitu.
Ověření
test/cases/56_derived_current_gate.sh to dokládá mutací: kanonický vstup posunutý bez regenerace způsobí, že scripts/pages current skončí 10 a pojmenuje oba hashe, tentýž strom regenerovaný projde a hook, který přestane kontrolu volat, způsobí, že doctor skončí 10 s nálezem zapojení. scripts/derive-check — majordomus generate --check a scripts/generate-site-data --check společně — běží v CI a před každým nasazením na Pages a scripts/derive regeneruje každý odvozený soubor v pořadí závislostí; test/cases/51_derived_artifacts_committed.sh dokládá, že commitnuté odvozené soubory odpovídají svým zdrojům a žádný nevkládá commit, do kterého přistává; test/cases/95_executable_reference.sh dokládá, že schopnost, která vstoupí do manifestu registru nebo jej opustí, získá nebo ztratí svou trasu na webu jen z generátoru; pravidlo majordomus.projection-integrity pokrývá generované instrukční soubory.