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.

I2486 — Žádná obrazovka nečeká na zdroj: stránka ukazuje poslední čtení s jeho stářím, načtené znovu za zády čtenáře

Odstranit z cesty požadavku UI každý handler, volání gitu a čtení souboru: executor drží nejnovější čtení každého zdroje, o který stránka požádala, obrazovka se z těchto čtení vykreslí okamžitě a worker čte zdroj znovu na pozadí, kdykoli čtení neodpovídá repozitáři v jeho aktuálním stavu.

HOTOVO vlna 1 · p0 · profil implementation · běží samostatně

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

Cíl

Odstranit z cesty požadavku UI každý handler, volání gitu a čtení souboru: executor drží nejnovější čtení každého zdroje, o který stránka požádala, obrazovka se z těchto čtení vykreslí okamžitě a worker čte zdroj znovu na pozadí, kdykoli čtení neodpovídá repozitáři v jeho aktuálním stavu.

Proč

Vlastník dne 2026-10-12 řekl, že UI „is tragically slow“ a má se vyřešit „architecturally“. Změřeno na buildu dávky UI-performance (c66f49e406, debug, load 20): /ui 2,2–2,5 s při každém požadavku, protože health.report (2,4 s, sondy, necachovatelné) je v jeho prvním vykreslení; první požadavek po startu nebo změně 5,6–8,1 s pro roadmap, evidence a governance, protože cache klíčovaná stavem repozitáře je právě tehdy prázdná; /ui/panels/delivery 75,7 s. Stránka stojí tolik co její nejpomalejší zdroj a žádná cache to nezmění. ADR 0142 zaznamenává rozhodnutí.

Aktuální stav

Obrazovka se ptá svých zdrojů přes ctx.execute a čeká na všechny (ui/source.rs ask_all). Zdroj v cache odpoví hned, dokud repozitář stojí; zdroj bez cache a první čtení po jakékoli změně spustí handler na požadavku.

Cílový stav

capability::readings keeps, per source and input, what it last answered, when, how long it took and in which state of the repository. Context::read hands that over: at once when it is of the repository as it is now, with a worker reading it again behind the caller once it is older than a second; after at most 50 ms, marked stale and refreshing, when the repository has moved, and then every other source read lately is read again too; after waiting for the first reading when there is none, said as pending past a minute. One worker per source, four at once in all, above the executor's own cache and single flight. execute is unchanged and exact. ui::source asks for readings; an answer carries its standing (age, current/stale/pending, refreshing); a source line says a reading's age once it is older than five seconds and says when it predates the last change; a line whose reading is catching up carries data-catching-up and the page's script reads the screen again after 0.4 s, doubling to 6.4 s, until none is left. The first reader of the UI starts one background pass over SCREENS and PANELS. MAJORDOMUS_CAPABILITY_CACHE=off makes a reading run its handler; MAJORDOMUS_READING_PATIENCE_MS sets the patience, and wait makes every read exact.

Rozsah

  • apps/majordomus-cli/src/capability/readings.rs
  • apps/majordomus-cli/src/capability/executor.rs
  • apps/majordomus-cli/src/capability/handler.rs
  • apps/majordomus-cli/src/capability/mod.rs
  • apps/majordomus-cli/src/ui
  • apps/majordomus-cli/src/http/router.rs
  • apps/majordomus-cli/tests/executor.rs
  • share/ui/ui.js
  • docs/MAJORDOMUS_UI.md
  • docs/CLI.md
  • test/cases/1096_no_screen_waits_for_a_source.sh
  • .ai/repo/adrs/0142-no-screen-waits-for-a-source.md
  • .ai/repo/rules/project/no-screen-waits-for-a-source.v1.md
  • .ai/repo/project/issues/I2486.yaml

Závislosti

Co na tom čeká

Kritéria přijetí

  • Zdroj pomalejší než trpělivost volajícího a nikdy nepřečtený se předá jako čekající dříve, než jeho handler skončí, a volající, který pak počká, se připojí ke stejnému čtení: jeden běh handleru
  • Zdroj, který byl přečten, se předá bez spuštění svého handleru ve vlákně volajícího, jakkoli je handler pomalý, a čte se znovu za volajícím, jakmile je čtení starší než sekunda
  • Po přesunu repozitáře se pomalý zdroj předá tak, jak byl, označený jako zastaralý a obnovující se, v mezích trpělivosti; volající, který počká, dostane aktuální čtení; zdroj nedávno přečtený a nevyžádaný se přečte znovu
  • Zdroj, který selže nebo zpanikaří, je čtení, které to říká, se stářím, a čte se znovu
  • Obrazovka, jejíž zdroj dohání, označí řádek toho zdroje atributem data-catching-up a řekne, jak je údaj starý; obrazovka s aktuálními zdroji ne
  • Žádná obrazovka pod src/ui nevolá handler: mimo ui/source.rs a testy tam nic nevolá execute
  • S MAJORDOMUS_READING_PATIENCE_MS=0 obsluhovaná obrazovka po změně repozitáře odpoví, aniž by čekala na své zdroje, a po dohnání čtení ukáže změněnou hodnotu

Validace

  • bin/majordomus plan validate
  • cargo test --test executor
  • cargo test --lib ui::
  • MJ_TEST_JOBS=2 bash test/run.sh 1096_no_screen_waits_for_a_source

Požadované důkazy

  • readings_executor_tests
  • ui_standing_unit_tests
  • no_screen_waits_case_1096
  • ui_latency_before_after

Důkazy

pokrývátypcommandvýsledeku commitu
readings_executor_teststestcargo test --manifest-path apps/majordomus-cli/Cargo.toml --test executortest result: ok. 17 passed; 0 failed, na stromu shodném s masterem 3442ce68c5; šest z nich jsou testy čtení: čekající, okamžitě, zastaralé při posunu, selhání a panic, omezení workeři a priorita3442ce6
ui_standing_unit_teststestcargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib ui::source && cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib ui::viewui::source 8 prošlo, ui::view 17 prošlo, 0 selhalo, na stromu shodném s master 3442ce68c5: řádek zdroje říká stáří čtení a zda předchází změně3442ce6
no_screen_waits_case_1096testbash test/run.sh 1096_no_screen_waits_for_a_sourceok 1096_no_screen_waits_for_a_source, on a tree equal to master 3442ce68c5: no file under src/ui calls execute, and a served screen after a commit says it is catching up and then shows the new commit3442ce6
ui_latency_before_afterručníčasování curl proti sestavením release servírujícím jeden klon, základ c66f49e406 proti změně (pull request 1041)za tepla, každá obrazovka: 0,12-0,92 s předtím, 2-12 ms potom; první požadavek po commitu: plán rozvoje, důkazy a governance 1,2-4,2 s předtím, 55-140 ms potom na hostiteli s Linuxem; /ui 1,2-1,55 s předtím, 3-162 ms potom na Macu při zátěži 21, nejpomalejší jednotlivý vzorek 330 ms. Změřeno 2026-10-12, neopakováno na 3442ce68c5; Cockpit stále počítá při požadavku a není součástí tohoto3442ce6

Časová osa

zahájeno
2026-10-13T12:45:05Z
ověřeno
2026-10-13T12:45:29Z
dokončeno
2026-10-13T12:47: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/I2486.yaml. Zpětně ho přečtete pomocí majordomus plan show I2486.

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