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.

I2827 — Nástroj napsaný před okamžikem se spustí, až ho jeho zapisovatel pustí

Dát crate jednoho pomocníka, který spustí program a, dokud je soubor programu ještě někde otevřen pro zápis (ETXTBSY), krátce počká a zkusí to znovu v rámci meze; použít ho na místech spouštění, jejichž testy zapíšou náhradní nástroj a hned ho spustí.

HOTOVO vlna 0 · p1 · profil implementation · bezpečné souběžně

Součást failure-is-visible — Každé selhání, které může runtime potkat, je omezené, testované nebo uvedené a mění zdraví, které hlásí.

Cíl

Dát crate jednoho pomocníka, který spustí program a, dokud je soubor programu ještě někde otevřen pro zápis (ETXTBSY), krátce počká a zkusí to znovu v rámci meze; použít ho na místech spouštění, jejichž testy zapíšou náhradní nástroj a hned ho spustí.

Proč

CI běh 39049547899, job rust (2), selhal deploy::observed::tests::the_forge_is_asked_through_its_own_tool_and_every_refusal_is_said v apps/majordomus-cli/src/deploy/observed.rs:514 s hláškou 'the GitHub CLI (.../fake-gh) could not run: Text file busy (os error 26)'. Test zapíše spustitelnou náhradu a spustí ji; jiné vlákno testu vytvořilo potomka (fork), zatímco byl deskriptor pro zápis otevřený, potomek jej drží až do exec a Linux odmítá spustit soubor otevřený pro zápis. Zapsat kopii a přejmenovat ji nepomůže (zděděný deskriptor drží inode); pomůže čekání. Stejné čekání existovalo jen na straně testu nebo přímo v kódu (capability/builtin/health.rs, worktree/direnv.rs).

Aktuální stav

Produktové spuštění čerstvě zapsané náhrady okamžitě selže na ETXTBSY a selhání se hlásí jako selhání nástroje, čímž zčervená nesouvisející job CI. Tento úkol pokrývá volání GitHub CLI v deploy::observed a monitor::github; dalších pět míst spouštění, jejichž testy zapisují náhradu a spouštějí ji, se odkládá až po v1.0.0-alpha.1 (uvedeno pod non_scope).

Cílový stav

apps/majordomus-cli/src/process.rs obsahuje retrying_busy, který se zeptá znovu 50krát s odstupem 100 ms, dokud start selhává s ExecutableFileBusy, a vrátí poslední odpověď; deploy::observed::run (volání GitHub CLI, kterého dosahuje i obnova forge ve schopnosti served) a monitor::github::run startují gh přes něj.

Rozsah

  • apps/majordomus-cli/src/process.rs
  • apps/majordomus-cli/src/lib.rs
  • apps/majordomus-cli/src/deploy/observed.rs
  • apps/majordomus-cli/src/monitor/github.rs

Mimo rozsah

  • Odloženo až po v1.0.0-alpha.1: spawny v apps/majordomus-cli/src/delivery/public.rs:279 (run_pages), apps/majordomus-cli/src/offload/remote.rs:139, :160 a :175 (Remote::run, run_to_file, spawn), apps/majordomus-cli/src/economics/runner.rs:644 (harness_version) a :370 (spawn_group) a apps/majordomus-cli/src/episodes.rs:358 (nástroj hooku), z nichž každý test dosahuje zástupcem, který právě napsal
  • Místa spouštění procesů dosažená jen integračními testy přes samostatný proces majordomus
  • Hooky, které spouští git (náhrady pre-receive z kontinuity) a které žádný spawn Majordoma nestartuje

Závislosti

Žádné. Tento úkol je kořenem grafu.

Kritéria přijetí

  • Na Linuxu je program držený tímto procesem otevřený pro zápis odmítnut s ExecutableFileBusy a retrying_busy ho spustí, jakmile zapisovatel uvolní
  • Program, který nelze spustit z jiného důvodu, dostane odpověď hned, s tímto důvodem
  • deploy::observed::run a monitor::github::run spouštějí CLI GitHubu přes retrying_busy

Validace

  • bin/majordomus plan validate
  • cargo test --lib -- process:: deploy::observed:: monitor::github:: capability::builtin::served::

Požadované důkazy

  • etxtbsy_retry_test

Důkazy

pokrývátypcommandvýsledeku commitu
etxtbsy_retry_testcivalidate run 39438896504 at master 9a5a9b77520: rust (1-3) jobs 118683336143 118683336062 118683336401 run cargo test, incl. process::tests::a_busy_start_is_asked_again_until_it_answers_or_the_bound_is_spent (8a82388e0af)success (the run's only red job is pages, which runs no test)573df96

Časová osa

zahájeno
2026-10-20T22:03:47Z
ověřeno
2026-10-20T22:04:26Z
dokončeno
2026-10-20T22:05:30Z

Tato tři pole, důkazy výše a stav závislostí jsou vše, z čeho se stav skládá. Neexistuje žádné pole stavu, které by s nimi mohlo být v rozporu.

Kanonický záznam: .ai/repo/project/issues/I2827.yaml. Přečtěte ho zpět pomocí majordomus plan show I2827.

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