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.

Obrazovka ukazuje najednou poslední stav svých zdrojů a nikdy nečeká na handler

Obrazovka ukazuje najednou poslední stav svých zdrojů a nikdy nečeká na handler

majordomus://rule/project.no-screen-waits-for-a-source@1aktivní uivýkoncacheodvozovánívynucování

odkazuje na něj

Zdůvodnění

Dne 2026-10-12 vlastník označil UI za „tragicky pomalé“ den poté, co se stalo primárním povrchem. Měření byla jasná. /ui trvalo 2,2 až 2,5 s při každém požadavku, protože health.report spouští sondy a bylo součástí prvního vykreslení. První požadavek po jakékoli změně repozitáře trval na třech obrazovkách 5,6 až 8,1 s, protože cache klíčovaná stavem repozitáře je právě tehdy prázdná. Jeden panel trval 75,7 s. Cache byla přidána týž den a fungovala všude, kde se uplatnila.

Vada nebyla cache. Stránka se počítala, zatímco člověk čekal, a stránka stojí tolik, co její nejpomalejší zdroj. project.cache-is-invisible právem zakazuje, aby cache odpovídala hodnotou z jiného stavu repozitáře, takže žádná cache nemohla mezeru zacelit. ADR 0142 místo toho sundává výpočet z požadavku.

Požadované chování

  1. Obrazovka žádá o čtení. Každý zdroj obrazovky se čte přes ui::source::ask, ask_all nebo ask_input, které se ptají Context::read. Mimo ui/source.rs a testy nic pod apps/majordomus-cli/src/ui nevolá execute.
  2. Známý zdroj stojí vyhledání. Zdroj čtený v repozitáři tak, jak je teď, se předá z paměti. Jeho handler běží na workeru capability::readings, za volajícím.
  3. Na přesunutý repozitář se nečeká. Když se repozitář přesunul, volající čeká na nové načtení nejdéle po dobu své trpělivosti (50 ms u stránky) a pak dostane načtení, které má, označené jako zastaralé.
  4. Na znovunačtení se nečeká. Obrazovka se kreslí z generace, kterou server má (Live::view_without_waiting). Když repozitář tu generaci přerostl, obrazovka to řekne a další generace se načte za čtenářem.
  5. Čtení říká, jak je na tom. Zastaralé nebo čekající čtení se zobrazí jako takové, zastaralé i se stářím. Jeho řádek zdroje nese data-catching-up, dokud ho nenahradí aktuální čtení. Aktuální čtení starší než pět sekund uvádí své stáří.
  6. Odpověď zůstává přesná. execute spustí handler nebo vrátí, co by handler vrátil. Nic, co čtení udělá, nemění, co odpovídá API, MCP nebo příkazová řádka.
  7. Lze to vypnout. MAJORDOMUS_CAPABILITY_CACHE=off způsobí, že čtení spustí svůj handler a počká na něj.

Chování při selhání

test/cases/1096_no_screen_waits_for_a_source.sh selže, když soubor pod apps/majordomus-cli/src/ui jiný než source.rs volá execute mimo testovací modul, když servírovaná obrazovka čeká na své zdroje poté, co se repozitář změnil, nebo když obrazovka, která dohání stav, to neřekne. Testy čtení v apps/majordomus-cli/tests/executor.rs selžou, když se čeká na známý zdroj, když se čeká na přesunutý repozitář déle než je trpělivost, když dva volající jednoho zdroje spustí dva handlery, nebo když selhávající či panikující zdroj nezanechá žádné čtení.

Ověření

MJ_TEST_JOBS=2 bash test/run.sh 1096_no_screen_waits_for_a_source
cd apps/majordomus-cli && cargo test --test executor

Limity latence, kterým je obrazovka podrobena, a kontrola, která je měří, jsou I2489.

Odkud to pochází

kanonický soubor
.ai/repo/rules/project/no-screen-waits-for-a-source.v1.md
identity
project.no-screen-waits-for-a-source@1
dostupné také jako
Zdroj MCP majordomus://rule/project.no-screen-waits-for-a-source@1 · majordomus entity show rule/project-no-screen-waits-for-a-source-1 · GET /api/v1/entity?uri=majordomus://rule/project.no-screen-waits-for-a-source@1
v Cockpitu
/cockpit/objects/rule/project-no-screen-waits-for-a-source-1

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

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