I3240 — A pull request's browser audit visits the pages its change can reach, and a shared-layout change sweeps them all
Map each route to the templates, styles and scripts it renders from, and audit on a pull request only the routes whose inputs changed plus one representative per route class. Any change to the shared layout, CSS or JS escalates to the full sweep, which also runs on the combined top.
BLOCKED wave 6 · p2 · implementation profile · parallel safe
Blocked. This issue cannot start until I2350, I3242 are done. The status is derived from that, not declared.
Objective
Map each route to the templates, styles and scripts it renders from, and audit on a pull request only the routes whose inputs changed plus one representative per route class. Any change to the shared layout, CSS or JS escalates to the full sweep, which also runs on the combined top.
Why
c228#3: ui-audit was about 39 min on 2026-10-11; its bound is 3600 s in validate.yml. It extends milestone ci-critical-path. Proposed in ADR 0186 (A pull request's required verdict is the feedback lane, a gate whose inputs did not change is reused as inputs_unchanged, and the proof lane judges the combined top before it lands); ADR 0187 (Tests are selected by the impact of a change, derived from what each case declares it reads, and a change of unknown impact runs every case) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c228#3, chatgpt-majordomus:c019#4.
Current state
On master 707a04c, 2026-10-18 the ui job runs `scripts/ci/timed --bound 3600 ui-audit ... scripts/ui audit --report` over every page and width.
Desired state
The route-class map is derived from templates, not a hand list, and the selection is printed.
Scope
- scripts/ui
- scripts/lib/ui-routes.mjs
- .github/workflows/validate.yml
- test/cases/334_ui_audit_hears_uncaught_errors.sh
- test/cases/349_a_step_reports_its_own_time.sh
Out of scope
- Lowering what a full sweep checks
Dependencies
- I2350READY One gate model names what a local check, a pull request, an integration and a release must run, and no second inventory exists
- I3242BLOCKED The pull-request critical path has a committed GitHub baseline and a budget per required job, and a run's summary names its critical path and every cache state
Acceptance criteria
- A leaf-page change audits that page and its class representatives
- A shared CSS change audits every page
- An empty selection is a failure, never a pass
- Validation runs 349_a_step_reports_its_own_time, 334_ui_audit_hears_uncaught_errors and the ui_audit_selection case this issue adds, in place of 3220_the_idd_loop_is_walked_in_a_browser
Validation
- bash test/run.sh 349_a_step_reports_its_own_time 334_ui_audit_hears_uncaught_errors
Evidence required
- ui_audit_selection_case
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/I3240.yaml. Read it back with majordomus plan show I3240.