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.

Sestavení nikdy mlčky nečeká za zámkem jiného sestavení

Sestavení nikdy mlčky nečeká za zámkem jiného sestavení

majordomus://rule/project.a-build-never-waits-in-silence-on-anothers-lock@1aktivní processhellbuildworktrees

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

Zdůvodnění

Worktrees tohoto repozitáře sdílejí jeden adresář sestavení pro to, co cargo kompiluje po cestě (ADR 0139), a cargo si bere jeden výhradní zámek na adresář sestavení. Rozhodnutí tuto cenu uvedlo jednou větou — dva worktrees, které sestavují současně, na sebe čekají — a odložilo ji, protože derive už běží po jednom. Sestavení, která nejsou derive, se nepočítala: launcher commit hooku, lint, testy i sestavení dokumentace každé spouští cargo také, v každém worktree, kdykoli po nich pracovník sáhne.

Dne 2026-10-13, s devatenácti procesy cargo na stroji, spustil commit hook cargo build --quiet a čtrnáct minut stál za tímto zámkem: žádné CPU, žádný podřízený proces, žádný řádek výstupu. Cargo říká, že je blokováno, jako stavový řádek, a --quiet stavové řádky odstraňuje; každý volající v repozitáři předával --quiet. Worker četl ticho jako pomalý build, což je čtení, které project.every-wait-is-bounded existuje, aby odmítlo, a pravidlo ho nezachytilo, protože jeho sken hledal síťová volání a procesy na pozadí, a ne build.

Čekání za zámkem je nejprostší čekání, jaké existuje — nic se nepočítá a čekající to ví od první sekundy. Nemělo mez, zprávu ani cestu ven.

Požadované chování

Každý build, běh testů, lint nebo build dokumentace spustitelného souboru, který spouští sledovaný skript tohoto repozitáře, se spouští přes mj_cargo_bounded v lib/rust_bin.sh nebo v souboru, který způsobí, že slovo cargo znamená totéž.

Tento launcher uchovává, co cargo říká, aby řádek o zámku existoval a dal se přečíst, ať volající chtěl vidět cokoli. Dokud poslední věc, kterou cargo řekl, je, že čeká na adresář buildu, launcher počítá; při MAJORDOMUS_BUILD_LOCK_WAIT sekundách (šedesát, pokud není nastaveno; nula nečeká nikdy) řekne, jak dlouho čekal a jaké další procesy cargo existují, zastaví toto cargo a spustí tentýž build ve vlastním adresáři buildu stromu, poté co se zeptá na disk. Build, který už je ve vlastním adresáři a na mezi stále čeká, se zastaví s kódem 75 a řekne, co jej drží.

Build, který získal zámek před mezí, se nepřesouvá; build, kterému nikdo nepřekáží, běží přesně jako dřív, ve sdíleném adresáři, a neříká nic, na co se volající neptal.

Chování při selhání

scripts/liveness-check hlásí přímé cargo build, test, clippy, doc, check, run nebo rustc na pozici příkazu ve sledovaném skriptu jako nález unbounded-build a job structure selže na tom, co .ai/repo/liveness-baseline.txt nezaznamenává. Volání přes mj_cargo_bounded nález není, stejně jako soubor, jehož cargo je funkce, která jej volá. Workflow se na tento tvar nečte: runner má jeden checkout a žádný jiný build, za který by se postavil. Základní hodnota jmenuje testovací případy, které stále volají cargo přímo; každý je dluh a odstranění řádku se provede směrováním toho případu přes launcher.

Co sken nevidí, zůstává pracovníkovi: cargo zadané ručně nebo spuštěné nástrojem, který není sledovaným skriptem tohoto repozitáře, bere tentýž zámek bez čehokoli, co by jej omezilo. Několik worktree, kterým bylo ručně přiděleno jedno CARGO_TARGET_DIR nebo jeden build adresář, je jedna fronta; pracovník, který to udělá, dá každému vlastní nebo je pouští jeden po druhém a build, který dvě minuty nic neřekl, prozkoumá — jeho CPU, jeho potomky a soubor zámku, který drží otevřený — místo aby na něj čekal.

Ověření

test/cases/3002_a_build_never_waits_in_silence.sh pohání launcher náhradním cargo: volný build proběhne jednou ve sdíleném adresáři a nic nevypíše; build za zámkem je omezen, oznámí to a spustí se znovu ve vlastním adresáři stromu; zámek, který se včas uvolnil, nic nepřesune; blokovaný build, který nemá kam jinam, skončí kódem 75; před soukromým buildem se zjišťuje spodní hranice disku; selhávající build ukáže svou chybu, ač volající žádal o ticho; kontrola ohlásí přímé volání, přijme omezené a nečte větu jako volání; a launcher, který spouští commit hook, staví přes tuto funkci. test/cases/122_liveness_gate.sh drží kontrolu zelenou na checkoutu, na kterém se dodává.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/a-build-never-waits-in-silence-on-anothers-lock.v1.md
identity
project.a-build-never-waits-in-silence-on-anothers-lock@1
dostupné také jako
Zdroj MCP majordomus://rule/project.a-build-never-waits-in-silence-on-anothers-lock@1 · majordomus entity show rule/project-a-build-never-waits-in-silence-on-anothers-lock-1 · GET /api/v1/entity?uri=majordomus://rule/project.a-build-never-waits-in-silence-on-anothers-lock@1
v Cockpitu
/cockpit/objects/rule/project-a-build-never-waits-in-silence-on-anothers-lock-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.