Okamžik
Worker přidá ochranu pro případ, na který narazil po těžké cestě. O hodinu později ji druhý worker při úklidu téže funkce smaže: nemá test, nemá komentář a vypadá jako defenzivní šum. Obě změny jsou rozumné. Jedna z nich je regrese.
Proč k tomu dochází
Druhý pracovník neměl jak zjistit, že první změna byla záměrná. Úprava bez zaznamenaného důvodu je k nerozeznání od nehody a schopný pracovník, který uklízí soubor, odstraní to, co vypadá nahodile. Izolace tu nepomůže: změna už přistála, takže oba pracovníci viděli tentýž strom.
Proč to lepší model nevyřeší
Silnější druhý worker ochranu odstraní spíše, ne méně pravděpodobně — bude si jistější, že ta cesta kódem je nedosažitelná, a uvažuje ze stejných chybějících důkazů. Chyběla věta, která říká, proč ochrana existuje.
Co to stojí
Chyba se vrací, a vrací se potichu, protože změna, která ji znovu zavedla, vypadá jako úklid. Obnova stojí původní vyšetřování podruhé, navíc archeologii, jejímž cílem je zjistit, která ze dvou věrohodných změn byla ta špatná.
Co Majordomus dělá
Zde se setkávají dva mechanismy. Rozsah činí souběžné vlastnictví viditelným: majordomus start vyžaduje cesty, kterých se úloha smí dotknout, a jiný worktree držící překrývající se rozsah je hlášen v okamžiku, kdy práce začne. Rozhodnutí činí minulý záměr čitelným: decision add odmítne rozhodnutí bez --why, zaznamená odmítnutou alternativu a vypočítá úlohu a head z gitu. Další worker se sestavuje s nedávnými rozhodnutími ještě před startem.
Před a po
before A: + if (session == null) return; (reason: in A's head)
B: - if (session == null) return; (reason: looks unreachable)
after B: majordomus start ... --scope lib/session
OVERLAP ../checkout-a holds lib/session (task t-0091, active)
decisions: "the guard covers the legacy mobile callback" — t-0091Co nedělá
Nezamyká soubory a neblokuje změnu. Zda má pojistka zůstat, je úsudek; úkolem nástroje je zajistit, aby se úsudek činil s důvodem před očima.