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.

Odvozené soubory se regenerují, nikdy neupravují

Odvozené soubory se regenerují, nikdy neupravují

majordomus://rule/project.derived-files-regenerated@1aktivní odvozeno

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.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/derived-files-regenerated.v1.md
identity
project.derived-files-regenerated@1
dostupné také jako
Zdroj MCP majordomus://rule/project.derived-files-regenerated@1 · majordomus entity show rule/project-derived-files-regenerated-1 · GET /api/v1/entity?uri=majordomus://rule/project.derived-files-regenerated@1
v Cockpitu
/cockpit/objects/rule/project-derived-files-regenerated-1

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.