Zdůvodnění
Derive promítá to, co git sleduje. majordomus generate vypisuje přes index (--discovery vcs, smlouva vrstvy) a generátor webu čte git ls-files. To je správně, protože commitnuté artefakty musí promítat commitnutý strom. Znamená to ale, že soubor, který přidá další commit, je neviditelný pro derive, který commitu předchází. Projekce soubor vynechají a kontrola derived-current commit odmítne poté, co derive stál své minuty.
Dne 2026-10-09 to stálo release 0.19.0 dva zbytečné derive na stroji se zátěží 40. Záznam epizody a dvě generované stránky byly při spuštění derive nesledované. majordomus generate opravil registr a posunul vstup dat webu, takže se musel za frontou spustit plný derive znovu. Poznámka v paměti, která už říkala „stage new files before derive“, tomu nezabránila. Poznámku lze přeskočit; odmítnutí ve správný okamžik ne.
Požadované chování
- Než počká na zámek nebo cokoli sestaví,
scripts/derivevypíšegit ls-files --others --exclude-standard. Pokud je cokoli uvedeno, jmenuje každý soubor, řekne, že ho mágit addnebo ignorovat či odstranit, a skončí kódem 10. - To, co git ignoruje, nikdy nic neodmítne:
.gitignore,.git/info/excludea globální excludes. Release job drží stažené artefakty vdist/, které.gitignorez tohoto důvodu jmenuje. MAJORDOMUS_DERIVE_ALLOW_UNTRACKED=1nechá derive proběhnout s varováním, které jmenuje, kolik souborů nevidí. Je pro workera, který ví, že soubory nikdy nebudou commitnuty.scripts/derive --preflightspouští tuto kontrolu samu.scripts/derive --locked -- <command>nic nepromítá a nedluží žádný preflight.- Argumenty se posuzují jako první, takže překlep v příznaku je chyba použití (exit 2) a nikdy odmítnutí stromu.
Chování při selhání
Odmítnutí přijde dříve, než se zámek vezme, takže odmítnutý derive nikdy nedrží frontu. Stojí čas, který git ls-files potřebuje.
Ověření
test/cases/1020_a_derive_sees_what_the_commit_will.sh spustí kopii scripts/derive v jednorázovém repozitáři a dokáže každé chování:
- nesledovaná stránka je jmenována a odmítnuta s exit 10, stejně
--preflighti plným derive; - odmítnutý derive nikdy nesestavuje a nikdy nebere zámek;
- tentýž soubor, po přidání, projde;
- soubory ignorované
.gitignorea.git/info/excludenikdy neodmítnou; - přepsání pokračuje s varováním;
--lockednevyžaduje žádnou předběžnou kontrolu.
Dvě mutace případ shodí: odebrání preflightu z cesty derive a vynechání --exclude-standard.