I2489 — Obrazovka nad svým rozpočtem shodí sestavení: rozpočty latence UI jsou politika měření výkonu a bench --check je hlídá
Udělat z rozpočtu latence UI, který stanovil vlastník, něco, co vynucuje CI: politika měření výkonu deklaruje absolutní meze, bench --check je drží s baseline i bez ní a na každém hostiteli a úloha ui spouští tuto kontrolu při každé změně, která může zpomalit obrazovku.
HOTOVO vlna 2 · p1 · profil implementation · bezpečné paralelně
Součást development-runtime — The runtime has a development surface.
Cíl
Udělat z rozpočtu latence UI, který stanovil vlastník, něco, co vynucuje CI: politika měření výkonu deklaruje absolutní meze, bench --check je drží s baseline i bez ní a na každém hostiteli a úloha ui spouští tuto kontrolu při každé změně, která může zpomalit obrazovku.
Proč
ADR 0142, část 4. Balíček vlastníka stanovil rozpočty (cachovaná schopnost pod 50 ms na p95, teplá stránka renderovaná serverem pod 100 ms, živá aktualizace pod 250 ms) a řekl, že jsou „measured, never invented“. Dnes je nedrží nic: benchmark od dávky výkonu UI měří obrazovky UI a hlásí; nic neodmítá. UI bylo na masteru osm sekund pomalé celý den, než to někdo řekl.
Aktuální stav
majordomus bench měří čas každé obrazovky UI (system.http.ui.* nad připnutým kontextem, system.http.live.ui.* nad živým pohledem) a bench --check porovnává běh s baseline téhož hostitele. Cíl, který byl vždy příliš pomalý, nikdy nezregreduje a platforma bez baseline neporovnává nic, takže žádná obrazovka nebyla držena k mezi. Změřeno před touto změnou, debug build při zátěži 57: každá teplá obrazovka na 1–21 ms p95 kromě /ui/command na 400–660 ms.
Cílový stav
.ai/repo/benchmarks/rust/policy.yaml gains budgets: each a prefix of target keys, a cache mode, a metric, a bound in milliseconds and a minimum number of samples, every key but the last required and a malformed one a policy error that names it. Check::compare judges every measurement a budget bounds, whether or not a baseline exists and whatever host recorded it, as PASS, OVER or SHORT; bench --check prints the budget lines with the target, its value and its bound, says within or over budget, and exits 10 when anything is over. The policy declares a warm screen of the UI within 100 ms at p95 for both views. The ui job of validate runs bench system.http. --check before the browser audit, as a step of the ui-audit gate. /ui/command no longer walks the registry once per command: it indexes command lines once per screen. Not done here: measuring the first request after the repository moved, which is I2485.
Rozsah
- apps/majordomus-cli/src/bench/baseline.rs
- apps/majordomus-cli/src/ui/command.rs
- apps/majordomus-cli/tests/bench_units.rs
- .ai/repo/benchmarks/rust/policy.yaml
- .ai/repo/ci/gates.yaml
- .github/workflows/validate.yml
- .ai/repo/benchmarks/rust/README.md
- docs/MAJORDOMUS_UI.md
- test/cases/1099_a_screen_over_its_budget_fails.sh
- .ai/repo/project/issues/I2489.yaml
Závislosti
Co na tom čeká
- I2485PŘIPRAVENO Měření výkonu měří první požadavek po přesunu repozitáře a rozpočet jej ohraničuje
- I2663PŘIPRAVENO Publikované UI se při každém nasazení nečte z ničeho
Kritéria přijetí
- Teplá obrazovka změřená nad rozpočtem selže na bench --check s kódem 10 a bez základní hodnoty k porovnání a report jmenuje obrazovku, její hodnotu a mez
- Rozpočet omezuje jen prefix a režim cache, které jmenuje, a měření s méně vzorky než jeho minimum je SHORT a nezpůsobí selhání
- Rozpočet s chybějícím povinným klíčem nebo režim cache, který žádným režimem není, je chyba politiky, která klíč pojmenuje
- Politika repozitáře deklaruje rozpočet UI pro připnuté a živé zobrazení a každá obrazovka je v něm
- Job ui spouští kontrolu před auditem prohlížeče, pod limitem menším než limit jobu
Validace
- bin/majordomus plan validate
- cargo test --test bench_units
- MJ_TEST_JOBS=2 bash test/run.sh 1099_a_screen_over_its_budget_fails
- majordomus bench system.http. --transport system --profile ci --no-write --check
Požadované důkazy
- bench_budget_unit_tests
- ui_budget_gate_case_1099
- ui_budget_bench_results
Důkazy
| pokrývá | typ | command | výsledek | u commitu |
|---|---|---|---|---|
| bench_budget_unit_tests | test | cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test bench_units | test result: ok. 7 passed; 0 failed, na stromě shodném s masterem 3442ce68c5: výsledek nad rozpočtem kontrolu shodí a je jmenován, výsledek v rozpočtu projde, výsledek s příliš málo vzorky je hlášen a nesoudí se | 3442ce6 |
| ui_budget_gate_case_1099 | test | bash test/run.sh 1099_a_screen_over_its_budget_fails | ok 1099_a_screen_over_its_budget_fails, na stromě rovném masteru 3442ce68c5: obrazovka nad svým rozpočtem selže v kontrole a je jmenována, obrazovka v rozpočtu projde, politika deklaruje oba pohledy | 3442ce6 |
| ui_budget_bench_results | ci | majordomus bench system.http. --transport system --profile ci --no-write --check | bench --check: v rámci rozpočtu, v jobu ui běhu validate 38379385624 na masteru e506c041a4 (job 115235815811), na Linux runneru hostovaném GitHubem; každý výsledek system.http.ui. a system.http.live.ui. za tepla, p95, nejvýše 100 ms při 20 vzorcích. Neopakováno na 3442ce68c5: lokální běh na Macu při zátěži 125 neudržel vlastní server (exit 13) | 3442ce6 |
Časová osa
- zahájeno
- 2026-10-13T12:50:07Z
- ověřeno
- 2026-10-13T12:50:24Z
- dokončeno
- 2026-10-13T12:50:44Z
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/I2489.yaml. Přečtěte jej zpět pomocí majordomus plan show I2489.