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.

Dva agenti opravující tutéž chybu ve dvou branchích

Dva workeři stráví každý den jednou vadou, protože vlastnictví bylo implicitní a jeden neviděl druhého.

→ našli jste dva agenty opravující tutéž chybu ve dvou větvích

cena, když k tomu dojde
vysoká
jak často
běžné

Okamžik

Dvě relace, dvě větve, tentýž selhávající test. Obě najdou příčinu, obě ji opraví, obě otevřou změnu. Jedna je zbytečná a sloučení té druhé s ní teď koliduje.

Proč k tomu dochází

Každý worker znal svou úlohu a nic o úloze druhého. Dát každému workeru vlastní git worktree působí jako oprava a opravdu to brání přepisování souborů navzájem. Nebrání to dělání stejné práce. V prostředí, z něhož byl tento nástroj vydestilován, čtyřicet plně izolovaných worktree stále vyprodukovalo několik tisíc souběžně změněných souborů a desítky duplicitních patchů; z osmdesáti se jich sloučilo devět. Izolace proměnila okamžitá přepsání v odložené, větší konflikty.

Proč to lepší model nevyřeší

Žádný worker neudělal chybu. Každý vyřešil zadaný problém správně s informacemi, které měl — a informace, které by plýtvání zabránily, nebyly nikdy zapsány nikam, kde by je mohl některý z nich přečíst. Schopnější model na obou stranách vyrobí dvě lepší duplicitní opravy, rychleji.

Co to stojí

Zjevnou cenou je zahozený den. Větší je konflikt: dvě nezávislé opravy jednoho subsystému se smiřují hůř než jedna, takže se plýtvání platí dvakrát, jednou při psaní a jednou při merge. Pokud duplicitní práce dojde až do review, stojí navíc pozornost recenzenta u změny, která nikdy neměla vzniknout.

Co Majordomus dělá

majordomus start vyžaduje rozsah: cesty, kterých se úloha smí dotknout, normalizované v době deklarace a uložené v záznamu úlohy. Každý jiný worktree repozitáře se čte přímo z git worktree list; pokud má některý aktivní úlohu, jejíž rozsah obsahuje váš nebo je v něm obsažen, start to řekne a pojmenuje worktree a cestu. check a finish selžou při jakémkoli dotčeném souboru mimo rozsah. Na checkout je aktivní jedna úloha, takže druhý start se odmítne, dokud není první předán nebo dokončen.

Před a po

before   worker A: fix flaky auth test    (branch a, no declaration)
         worker B: fix flaky auth test    (branch b, no declaration)
         merge:    two fixes, one conflict

after    worker A: start --scope lib/auth,test/auth
         worker B: start --scope lib/auth
                   OVERLAP ../checkout-a holds lib/auth (task t-0091, active)

Jak to ověřit

Deklarujte rozsah v jednom worktree, pak v jiném spusťte úlohu s překryvem a přečtěte si, co říká. Překryv se hlásí s worktree a cestou a check odmítne soubor mimo deklarovaný rozsah.

Co nedělá

Překryv se hlásí, nikdy neblokuje: zda mají dva lidé pracovat na překrývajících se cestách, je rozhodnutí o koordinaci, ne pravidlo. Vidí worktree jednoho repozitáře na jednom stroji, ne jiné klony. Nic nesluče a nevydává žádné příkazy merge.

Jak to vypadá

Konkrétní situace, jedna pro každé publikum. Každá je deklarována v záhlaví okamžiku, takže stav před a po jsou data, ne próza, od které by se stránka mohla odchýlit.

  1. Dva kódovací agenti, jeden selhávající test ai-native-team

    před
    Oba najdou příčinu, oba napíšou opravu, oba otevřou změnu; jedna se zahodí a sloučení té druhé s ní teď koliduje.
    po
    Druhý start oznámí, že jiné worktree již drží úlohu, jejíž rozsah tu cestu obsahuje, a jmenuje to worktree.
  2. Dvě okna, jedno odpoledne solo-builder

    před
    Relace zahájená ráno je stále otevřená v jiném okně; odpolední relace znovu odvodí stejnou opravu ze stejného selhávajícího testu.
    po
    Na checkout je aktivní jedna úloha, takže druhý start je odmítnut, dokud první není předána nebo dokončena.
  3. Noční běh, který nikdo nečetl engineering-lead

    před
    Vývojář stráví dopoledne závadou, kterou noční worker už opravil na branchi, která nebyla nikdy mergnuta ani zmíněna.
    po
    Noční pracovník zanechal záznam předávky jmenující branch, head a změněné soubory a ranní relace jej před zahájením rozřeší.

Jak to poznáte

Pozorovatelné příznaky, které tento okamžik deklaruje. Jsou dotazníkem na indexu a vstupem pro majordomus why diagnose; nic jiného je nedefinuje.

  • Dva pracovníci tento týden změnili stejný subsystém, aniž by jeden věděl o druhém. same-subsystem-twice
  • Nikdo nedokázal jmenovat vlastníka práce, která už probíhala. no-named-owner
  • Pro jednu nevyřešenou vadu existovalo více než jedno worktree nebo větev. worktrees-same-defect

Kde to v nástroji najdete

Vše níže je načteno z vlastního záhlaví tohoto okamžiku a ověřeno proti repozitáři. Neexistující název by neprošel validací.

příkazy, které na to odpovídají

schopnosti spustitelného souboru, které na to odpovídají

co dohlíží — odvozeno z tvrzení níže

tvrzení, která tuto stránku podpírají, a důkazy za každým z nich

pravidla, která jej řídí

  • majordomus.scope-integrity
  • majordomus.one-worker-one-scope
  • majordomus.isolated-parallelism

případy užití, které ukazují cestu ven

Pokud vám tohle zní povědomě, další také

Co tento okamžik pojmenovává, co pojmenovává jeho a co sdílí jeho oblast, publikum nebo štítky. Druhé a třetí je odvozeno; zapsáno je jen první.

Všech 38 a jak souvisejí s nástrojem →

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