# UX and Performance Budgets These budgets apply to the release-candidate map-first flow for Belgium and the Belgian North Sea. They are regression limits, not claims about external provider availability. ## Interactive budgets | Interaction | Budget | Enforcement | | --- | ---: | --- | | persisted coverage resolution | 4 seconds | hook timing, visible warning and RC browser evidence | | cached/persisted map selection analysis | 15 seconds | map timing and visible warning | | initial map workspace readiness | 10 seconds on the release LAN | RC viewport evidence | | local Ollama answer with persisted context | 90 seconds | RC-8 live journey timeout/evidence | | bounded configured-YOLO fixture run | 120 seconds | RC-8 live journey timeout/evidence | An on-demand official-source acquisition is intentionally excluded from the 15-second cached-selection budget. Its source-specific timeout, transfer and feature limits remain authoritative. The UI must keep showing a running state and a source-specific failure instead of presenting an acquisition as missing or complete. ## Required states The frontend distinguishes: - `loading`: project, Area and Dataset state is still being resolved; - `empty`: loading completed and no matching persisted data exists; - `partial`: the persisted coverage matrix contains incomplete regional data; - `error`: the API or provider contract failed; - `ready`: persisted data and metrics are available. Definitive `Ontbreekt`/`Niet beschikbaar` wording is forbidden while the workspace is loading. A completed coverage or selection request that exceeds its budget must display the measured duration and budget warning. ## Reproduction ```bash npm --prefix frontend run test:unit bash scripts/run_rc9_ux_audit.sh \ http://192.168.10.150:1202 \ artifacts/rc9-ux-audit ``` The browser audit runs at 390x844, 1366x768 and 2560x1080. It checks body overflow, map width, keyboard tab behavior, skip-link focus, visible control names, delayed bootstrap truthfulness and coverage-budget feedback. Its screenshots and `manifest.json` are runtime evidence and remain outside Git.