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.

Záznam úlohy jmenuje checkout, kterému patří, a jiný checkout se nikdy nepodřizuje jeho rozsahu

Před rozvržením .ai byl adresář stavu ve výchozím stavu sledován, takže záznam aktivní úlohy putoval s větví. Druhé worktree, které tu větev vyzvedlo, čtelo záznam, který nikdy nezapsalo — a před tímto bylo drženo rozsahu, který si nikdy nenárokovalo. Jeho pre-push hook spustil finish --check proti cizí úloze a odmítl každý soubor mimo cesty té úlohy.

deklarovaný stavdeklarovaný stav: zaručeno Deklarováno jako deterministické a blokující, implementováno a s uvedeným behaviorálním testem, který to má dokázat. Zda to zaznamenaný běh podporuje, říká verdikt důkazů zobrazený vedle.

zaznamenané důkazyzaznamenané důkazy: nespuštěno Deklarováno jako zaručené, ale nepodložené zaznamenaným během: test je pojmenován, ale žádný úspěšný běh nad současnými vstupy zaznamenán není. jak se zaznamenávají důkazy

Záznam je lokální pro checkout a nikdy se nesleduje, takže necestuje přes git; ten, který dorazí jinou cestou, se pozná podle worktree, které jmenuje. check, finish --check a watch cizí záznam hlásí a nic z něj nevynucují; finish jej odmítne zapsat. Záznam z doby před zavedením pole se bere jako lokální, takže upgrade neobarví instalaci načerveno.

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ší:

  • check vypíše jeden řádek INFO s názvem úlohy a checkoutu, který ji vlastní, a skončí s 0
  • finish --check dělá totéž, takže kontrola pre-push projde
  • watch to hlásí, místo aby to počítal jako drift tohoto checkoutu
  • finish odmítne rovnou: nezapíše výsledek do záznamu jiného checkoutu
  • start pokrač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.

Detail vykreslen z docs/claims/worktree-ownership.md.

Od tvrzení k důkazu

  1. 1 · veřejné tvrzení

    Záznam úlohy jmenuje checkout, kterému patří, a jiný checkout se nikdy nepodřizuje jeho rozsahu

    Vzniklo v Koordinace, Worktrees, Rozsah.

  2. 2 · kanonické tvrzení

    worktree-ownershipdeklarovaný stav: zaručeno v docs/CLAIMS.yaml

    Definováno v přečtěte si to na tomto webu · docs/SCHEMAS.md

  3. 3 · implementace

    lib/check.sh · majordomus check

  4. 4 · test a scénáře

    Test: test/cases/27_foreign_task.sh

    Provedeno v Práce na větvi v jediném worktree, kam patří, Pokračování ve správném worktree, nikdy proti cizí úloze.

  5. 5 · zaznamenané běhy

    zaznamenané důkazy: nespuštěno jak se zaznamenávají důkazy

Ověřte si to sami

Test běží v jednorázovém dočasném repozitáři a ověřuje chování, ne řetězec ve zdrojovém kódu.

z klonu repozitáře
bash test/run.sh 27_foreign_task

Kde se toto tvrzení používá

Související tvrzení stejná implementace

Okamžiky, na které to odpovídá

Prohledává názvy a popisy všech stránek, které tento web publikuje.