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.

Provozujte více workerů v jednom repozitáři, aniž by se srazili

Dejte každému workerovi deklarovaný rozsah a zjistěte okamžitě, když dva z nich nárokují stejné cesty.

zaručeno Paralelní workerypokročilýagentoperátorzapisuje stav

Situace

Dva agenti pracují na stejném repozitáři současně. Každý je sám o sobě rozumný; společně upravují tentýž soubor z různých předpokladů a konflikt se objeví jako merge, dlouho po rozhodnutí, které jej způsobilo.

Co spouštíte

  • start: přijímá cesty, kterých se tato úloha smí dotknout, a odmítne druhou aktivní úlohu v jednom checkoutu
  • check: --overlap hlásí další worktrees, jejichž nároky se protínají s vašimi
  • finish: odmítne přijmout práci mimo nárokované cesty

Scénář

setup: two-worktrees
given:
  - 'a second worktree of the same repository with an active task scoped to lib'
steps:
  - id: claim-a-scope
    run: ['start', 'narrow the parser', '--scope', 'lib']
    note: 'the task starts, and the overlap with the other worktree is reported'
    expect:
      exit: 0
      stdout_contains: ['^started t-', 'overlap']
  - id: see-the-overlap
    run: ['check', '--overlap']
    note: 'scope containment against every other worktree, never blocking'
    expect:
      exit: 0
      stdout_contains: ['overlap']
  - id: nothing-to-refuse
    run: ['finish', '--check']
    note: 'no file outside the claimed scope has been touched'
    expect:
      exit: 0
      stdout_contains: ['0 failing']
then:
  - 'two workers on one repository see each other by scope, and the second is told before it starts'

Výsledek

Překryv se hlásí při zahájení úlohy, ne až při merge větví, a záznam úlohy patřící jinému checkoutu se hlásí jako cizí, ne vynucuje proti tomu vašemu.

Scénář

Provedeno proti skutečnému nástroji v repozitáři připraveném pomocí two-worktrees, při každém generování tohoto webu. To, co následuje, není popis toho, co by se mělo stát; je to to, co se stalo.

dáno

  • druhý worktree téhož repozitáře s aktivní úlohou s rozsahem lib

kdy

  1. 1majordomus start narrow the parser --scope lib
  2. 2majordomus check --overlap
  3. 3majordomus finish --check

pak

  • dva workeři na jednom repozitáři se vidí podle rozsahu a druhý je upozorněn dřív, než začne

Co nástroj udělal

Důkaz běhu, z něhož byla tato stránka vygenerována: pass, 3 kroky. Výstup je normalizován: cesta k repozitáři, časová razítka, id a doby trvání jsou zástupné hodnoty; nic dalšího se neupravuje.

Testováno v test/cases/94_use_cases.sh, který spouští každý scénář a odmítne krok, jehož zaznamenaný výstup není tím, co vyprodukoval.

  1. úloha začne a překryv s druhým worktree je ohlášen

    started t-<id>  profile=implementation  scope=lib
    INFO overlap     repo-other — claims lib — contains your lib  [reproduce: majordomus check --overlap]
    next: majordomus context; checkpoint every 15m; majordomus check before claiming anything
    • exit 0
    • stdout_contains /^started t-/
    • stdout_contains /overlap/
  2. omezení rozsahu vůči každému jinému worktree, nikdy neblokující

    INFO overlap     repo-other — claims lib — contains your lib  [reproduce: majordomus check --overlap]
    INFO overlap     t-<id> — no other worktree claims an overlapping path
    • exit 0
    • stdout_contains /overlap/
  3. nebyl dotčen žádný soubor mimo nárokovaný rozsah

    OK   knowledge   records — 0 record(s) valid against knowledge/v1; every reference resolves  [reproduce: majordomus knowledge check]
    ·    checkpoint  t-<id> — <timed against the checkpoint interval>
    OK   records     ledger.jsonl — every line is a well-formed event
    OK   blockers    t-<id> — none open
    OK   records     decisions.md — every entry is attributable
    OK   scope       t-<id> — 0 touched file(s), all within scope
    OK   state       t-<id> — exact (head <head>)
    INFO mesh        t-<id> — the repository declares no enabled mesh
    INFO use-case    30 advisory gap(s) — not covered by an active use case, and the policy does not require it: command:init command:update command:doctor command:watch command:start command:context command:checkpoint command:handover command:check command:finish command:history command:decision command:question command:prompt command:evidence command:skills command:capture command:search command:doctrine command:plan command:version command:session command:knowledge command:adr command:usecase command:rules command:migrate command:recover command:bench command:archive  [reproduce: majordomus usecase coverage]
    OK   use-case    0 of 30 target(s) covered — every public command the policy requires is named and run by an active use case (policy use_cases.coverage)
    INFO obligation  t-<id> — the task declares no obligations
    INFO gate        t-<id> — this repository declares no CI model at .ai/repo/ci/gates.yaml; nothing can be planned
    finish --check: 0 failing
    • exit 0
    • stdout_contains /0 failing/

Proč to nástroj ví

Řetězec od této stránky ke kódu: případ užití jmenuje příkazy, pravidla a tvrzení; každé pravidlo se dispatchuje z registru a každé tvrzení jmenuje test, který ho dokazuje; scénář výše provedl příkazy. Nic v tomto řetězci není text o záměru.

Pravidla, díky nimž platí

Uplatněné záruky

Související případy užití

Vypočteno z toho, co sdílejí: tvrzení, pravidla, příkazy, kategorie, aplikace. Tento seznam nikdo neudržuje.

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

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