I3090 — The UI audit warms every surface and gives an unreachable page a second load
Before the first visit, the UI audit loads the first planned page of every top-level surface, not only the root. It records page.unreachable only after a second load fails, and never retries a refused connection, which still stops the run.
READY wave 0 · p1 · implementation profile · runs alone
Ready. Every dependency is done, so majordomus plan start I3090 will be accepted.
Objective
Before the first visit, the UI audit loads the first planned page of every top-level surface, not only the root. It records page.unreachable only after a second load fails, and never retries a refused connection, which still stops the run.
Why
On 2026-10-19 and 20 the ui job on master (runs 39205883728 and 39233374923) and on the alpha.1 top (39357242274) failed on one finding: page.unreachable on /docs/ @320. The documentation surface is served from a tree of its own, and its first load, the first visit of the plan, exceeded the 20 s goto while every later visit of /docs/ loaded. A red that says something about a cold machine and nothing about the site.
Current state
The audit warms only the root, and a single timed-out goto is a finding.
Desired state
Every surface is warm before the first visit, and a page is unreachable only when it fails twice.
Scope
- scripts/lib/ui-audit.mjs
- scripts/lib/ui.test.mjs
- .ai/repo/project/issues/I3090.yaml
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- The audit warms the first planned route of every top-level path segment before the workers start, deriving the segments from the plan and naming no mount
- A visit whose goto times out is loaded once more before page.unreachable is recorded, and the finding names the number of attempts
- A refused connection is never retried: the run still stops and says the server stopped answering
- A full ui audit run on CI reports no page.unreachable on /docs/
Validation
- majordomus plan validate
- node scripts/lib/ui.test.mjs
- scripts/ui audit --report
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3090.yaml. Read it back with majordomus plan show I3090.