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í
- Obrazovka žádá o čtení. Každý zdroj obrazovky se čte přes
ui::source::ask,ask_allneboask_input, které se ptajíContext::read. Mimoui/source.rsa testy nic podapps/majordomus-cli/src/uinevoláexecute. - 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. - 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é.
- 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. - Č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áří. - Odpověď zůstává přesná.
executespustí 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. - Lze to vypnout.
MAJORDOMUS_CAPABILITY_CACHE=offzpů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.