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.

Worker, který skončí, nechá svou práci tam, kde ji někdo jiný najde

Worker, který skončí, nechá svou práci tam, kde ji někdo jiný najde

majordomus://rule/project.a-worker-that-stops-leaves-its-work-behind@2aktivní procesintegrace

Co se změnilo ve verzi 2 a proč

Verze 1 byla poradní a přesně řekla proč ve svém vlastním Failure behaviour: „nic nevidí necommitnutou polovinu kromě toho, kdo se dívá, a právě proto je odpovědnost zapsána, a ne vynucována kontrolou.“

Tento předpoklad byl pravdivý, když byl napsán, a už pravdivý není. Topologie worktree už počítá necommitnutou práci každého registrovaného worktree a jeden git rev-list --branches --not --remotes pojmenovává každý commit, který nikdy neopustil tento disk. Nikdy nechybělo měření — chybělo rozhodnutí: jedno slovo nad celým repozitářem, na místě, kde už něco odmítá.

Měření stálo za to hned v den, kdy se stalo možným. Dne 2026-09-16 tento repozitář držel devět hrotů branchí, jejichž commity nedosáhly na žádný remote, nejstarší čtyři dny starý, a šedesát čtyři pracovních stromů nesoucích necommitnuté soubory, zatímco všechny kontroly byly zelené. Nic z toho nešlo ohlásit žádným příkazem, takže nic z toho nebylo ničím nálezem.

Verze 2 je tedy blokující a rozhoduje o tom convergence.report: každé držení — pracovní strom s necommitnutými soubory, větev s commity, stash — nese dispozici (integrated, published, local_only, uncommitted) a poslední dvě znamenají, že práce existuje jen na jednom disku. Otázka no-stale-topology invariantu dokončení čte tento verdikt, místo aby jmenovala příkaz, který by člověk mohl spustit.

To, co verze 2 záměrně nedělá, je mazání čehokoli. Toto pravidlo se týká dohledatelnosti práce a nápravou každého jeho nálezu je commit nebo push, nikdy odstranění. Redukci vlastní project.accumulation-is-measured@2 a už říká, že worktree nebo branch, jejíž práce není pushnutá, se nikdy neodstraní.

Zdůvodnění

Dne 2026-09-10 běželo osm workerů najednou, když sdílený účet dosáhl limitu útraty. Všech osm se zastavilo ve stejné vteřině, uprostřed věty. Pět jich už pushlo větev a otevřelo pull request a nic neztratilo. Tři měli hodiny práce, která existovala jen jako změněné soubory ve worktree: dvacet sedm souborů opravených případů, dvacet dva souborů modelu workflow plus záznam rozhodnutí a dvě opravy enginu. Nic z toho nebylo commitnuto. Nic z toho nebylo vidět nikomu kromě workera, který to vytvořil, a ten už neexistoval.

Bylo to obnoveno proto, že to někdo záměrně hledal, po jednom worktree, a každý commitnul jako checkpoint. Ta obnova byla štěstí převlečené za pečlivost: nic v uspořádání ty stromy nedělalo dohledatelnými a nic by neupozornilo na jejich ztrátu. Pozdější pracovník uklízející disk by je smazal jako opuštěné.

Rozlišení, na kterém záleží: zastavení pracovníka není rollback. Transakce, která se přeruší, nechá svět, jak jej našla, a proto je přerušení bezpečné. Pracovník, který se zastaví, zanechá pracovní strom — skutečnou práci v neznámém stavu, kterou nikdo nevlastní. Rozpracovaný stav je normálním výsledkem přerušení, ne výjimečným, a přerušení je normální: limity, timeouty, pády, zavřený notebook.

Je to tentýž fakt, který repozitář už uvádí o větvích, jež nikdy nedorazí na remote — práce na jednom disku se nedá integrovat a je od ztráty jeden disk daleko. Chybělo jen to, že to platí i v rámci jednoho odpoledne, na pracovní strom, a že riziko nese ten, kdo práci rozdal.

Požadované chování

Práce se commituje v posledním okamžiku, kdy byla koherentní, ne v okamžiku, kdy byla dokončena. Checkpoint commit, který otevřeně říká, že je neprověřený, má větší cenu než čistý strom, který existuje jen na jednom disku.

Pracovník, který rozdělí práci dál, odpovídá za její checkpointování. Dlouho běžící práce se checkpointuje a pushuje průběžně, ne na konci, a když se pracovník nečekaně zastaví, jeho worktree se prozkoumá a zachová dříve, než se s ním udělá cokoli jiného — zejména dříve, než se uvolní jakýkoli disk.

Checkpoint je tak označen. Říká, že je nerevidovaný a neověřený, aby ten, kdo ho převezme, s ním zacházel jako s konceptem k posouzení, ne jako s prací, za kterou se někdo postavil. Kdo ho obnoví, přečte diff a každou část ponechá, opraví nebo zamítne a checkpoint nahradí skutečnými commity dřív, než se nabídne k revizi.

Strom přerušeného workera se klasifikuje, nikdy nepředpokládá. Worktree, jehož větev je plně mergnutá, může stále obsahovat psané soubory, které nebyly nikdy commitnuty; absence unikátních commitů není absence práce.

Chování při selhání

convergence.report zamítá tvrzení, ne práci: držba, jejíž dispozice je local_only nebo uncommitted, činí repozitář nesbližným (unconverged) a otázka no-stale-topology invariantu dokončení selže s pojmenovanými držbami a příkazem, který by každou z nich dostal z ohrožení. Nic se nemaže, nic se necommituje za pracovníka a žádná větev se nedotýká — nález je, že práce je někde, kde ji vidí jen jeden disk, a nápravou je push nebo commit, který udělá pracovník.

Repozitář, ve kterém nelze verdikt přečíst, hlásí unknown místo pass: měření, které nešlo provést, není čisté měření.

Ověření

  • convergence.report — verdikt na příkazovém řádku (majordomus convergence), přes HTTP, na MCP i v Cockpitu, z jednoho čtení topologie worktree, commitů, k nimž žádný remote nedosahuje, a seznamu stash.
  • test/cases/383_convergence_is_enforced.sh — behaviorální případ proti fixture repozitáři: větev, která nedosáhne na žádný remote, a nesledovaný soubor jsou každé ohlášeny jako ohrožené se svým nápravným krokem; push a commit tentýž repozitář zkonvergují; a invariance hotovo odpoví no-stale-topology z verdiktu, ne z věty o příkazu.
  • Nález clone z doctor stále hlásí větve, jejichž commity nedosáhnou na žádný remote; verdikt je tentýž fakt pro celý repozitář, včetně poloviny — necommitnutých souborů — kterou dosud nic nevidělo.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/a-worker-that-stops-leaves-its-work-behind.v2.md
identity
project.a-worker-that-stops-leaves-its-work-behind@2
dostupné také jako
Zdroj MCP majordomus://rule/project.a-worker-that-stops-leaves-its-work-behind@2 · majordomus entity show rule/project-a-worker-that-stops-leaves-its-work-behind-2 · GET /api/v1/entity?uri=majordomus://rule/project.a-worker-that-stops-leaves-its-work-behind@2
v Cockpitu
/cockpit/objects/rule/project-a-worker-that-stops-leaves-its-work-behind-2

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.