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.

I1992 — Selhaná přestavba nespotřebuje žádnou změnu: další požadavek ji zopakuje

Když selže přestavba obrazu repozitáře dlouho běžícího serveru, ponechat zaznamenanou změnu nespotřebovanou, aby další požadavek načtení zopakoval (omezeně, ne při každém požadavku), místo aby se obsluhovala předchozí generace, dokud se git náhodou znovu nepohne.

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

Součást development-runtime — The runtime has a development surface.

Cíl

Když selže přestavba obrazu repozitáře dlouho běžícího serveru, ponechat zaznamenanou změnu nespotřebovanou, aby další požadavek načtení zopakoval (omezeně, ne při každém požadavku), místo aby se obsluhovala předchozí generace, dokud se git náhodou znovu nepohne.

Proč

Nalezeno při uzavírání flaku případu 545 (fix/ci-flakes-545-and-multicast 79ecdbb944, dávka B3 #788): Live::reload (apps/majordomus-cli/src/live.rs, větev Err v `match built`) zapisuje `state.stamp = taken`, když App::load selže, takže razítko, pod kterým se selhané načtení pořídilo, se nyní čte jako aktuální. Přechodné selhání — proces gitu zachycený uprostřed zápisu, index.lock, napůl uložený manifest — proto způsobí, že server commit, který ho spustil, mine, a každá odpověď (HTTP, MCP, Cockpit) drží starý head s čerstvě vypadajícím observed_at až do nějakého nesouvisejícího posunu. Komentář tam uvádí důvod (neopakovat selhávající načtení při každém požadavku); cenou té volby je commit, který se tiše nevidí. Případ 545 nyní dotazuje nový head a při selhání vypíše řádek serveru „would not load“, takže výskyt jmenuje tuto cestu.

Aktuální stav

Selhání App::load nastaví razítko generace na razítko, pod nímž bylo převzato: změna je spotřebována a žádný požadavek nezkouší načtení znovu, dokud se řídicí soubory gitu znovu nepohnou.

Cílový stav

Selhané načtení nechá razítko generace, jak bylo, a zaznamená vedle něj selhání (razítko a okamžik); požadavek, jehož razítko se rovná selhanému, zkusí načtení znovu, jakmile od selhání uplynul omezený interval, a uvnitř něj je obsloužen předchozí generací (s uvedeným selháním). Razítko, které se znovu posune, zkouší ihned. Varování jmenuje opakování.

Rozsah

  • apps/majordomus-cli/src/live.rs
  • apps/majordomus-cli/tests
  • test/cases

Mimo rozsah

  • Soubory sledované razítkem (WORKTREE_FILES, COMMON_FILES)
  • Pravidlo uprostřed rebuildu: požadavek, který dorazí během rebuildu, je stále obsloužen stávající generací

Závislosti

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

Kritéria přijetí

  • Načtení, které selže a pak by uspělo, bez dalšího pohybu repozitáře, se po intervalu zopakuje a další odpověď nese novou hlavu
  • Načtení, které stále selhává, se zkouší nejvýše jednou za interval, ne jednou na požadavek
  • Případ 545 stále prochází; po odstranění opakování nový test selže

Validace

  • bin/majordomus plan validate
  • cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib live::
  • MJ_TEST_JOBS=4 bash test/run.sh 545_every_answer_says_when_it_was_observed

Požadované důkazy

  • failed_load_is_retried_test

Důkazy

pokrývátypcommandvýsledeku commitu
failed_load_is_retried_testtestcargo test --locked --manifest-path apps/majordomus-cli/Cargo.toml --lib live::test result: ok. 15 passed; 0 failed (běh 2026-10-14 mezi 07:40Z a 07:58Z na master ce5959db59)ce5959d

Časová osa

zahájeno
2026-10-14T07:59:03Z
ověřeno
—
dokončeno
2026-10-14T07:59:09Z

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/I1992.yaml. Načtěte ho zpět pomocí majordomus plan show I1992.

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