Co to znamená
Před uspořádáním .ai byl adresář stavu ve výchozím stavu sledovaný, takže aktivní záznam úlohy cestoval s větví. Druhý worktree, který tuto větev checkoutnul, četl záznam, který nikdy nenapsal — a až do této opravy byl držen rozsahem, který si nikdy nenárokoval. Jeho hook pre-push spustil finish --check proti cizí úloze a odmítl každý soubor mimo cesty té úlohy.
Záznam nyní říká, ke kterému checkoutu patří, a čtenář, který tímto checkoutem není, to ohlásí a nevynucuje nic. Stav žije pod .ai/local/, které je ignorováno, takže záznam už přes git nepřichází vůbec; pole zůstává obranou pro každý jiný způsob, jak může dorazit — zkopírovaný pracovní adresář, synchronizovaná složka.
Princip
start vypočte worktree z git rev-parse --show-toplevel a zapíše to vedle repository_id, branch a head. Je to identitní pole: počítané, nikdy ne psané.
mj_task_is_foreign ho porovná s aktuálním kořenem repozitáře. Když se liší:
checkvypíše jeden řádek INFO s názvem úlohy a checkoutu, který ji vlastní, a skončí s0finish --checkdělá totéž, takže kontrolapre-pushprojdewatchto hlásí, místo aby to počítal jako drift tohoto checkoutufinishodmítne rovnou: nezapíše výsledek do záznamu jiného checkoutustartpokračuje — jedna aktivní úloha na checkout znamená, že cizí záznam tento neblokuje — a říká, že náhrada je lokální pro tuto pracovní kopii a nemění nic tam, kde je úloha aktivní
Záznam bez pole worktree, napsaný před jeho vznikem, se považuje za lokální. Upgrade, který by přebarvil každou existující instalaci na červeno, by byl horší chyba než ta, která se opravuje.
Jak to vidět
git worktree add ../second
majordomus --repo ../second check
# INFO task t-20260903193012-a4f1 — belongs to /abs/path, not this checkout; nothing enforced here
majordomus --repo ../second finish --check; echo $? # 0
majordomus --repo ../second finish --outcome completed; echo $? # 15, "finish it there"Co nepokrývá
Jeden checkout stále drží jeden záznam. Dva lidé pracující v témže pracovním adresáři jej sdílejí a druhý start nahradí první; nic na tomto poli neodliší dva pracovníky v jednom checkoutu, protože pro git jsou jedním.
Nepřipisuje commity. Úloha zaznamenává commit, z něhož začala, a každý soubor změněný od té doby se počítá jako její práce bez ohledu na to, kdo jej změnil — viz omezení v CONTINUITY.md.
Proč existuje
Bylo to zjištěno tak, jak se takové věci zjišťují: druhý worktree nemohl pushnout otestovanou opravu a každé selhání, které hlásil, se týkalo úlohy jiné relace. „Jedna aktivní úloha na checkout“ se vynucovala v start od první verze a pak nikdy nebyla zapsána do záznamu, takže ji nemohl uplatnit žádný jiný čtenář. Pravidlo zkontrolované jednou a nereprezentované je pravidlo, které platí jen tam, kde bylo zkontrolováno.