feat(perf): compare nightly iOS runs and run the suite every night
Summary
Un-parks perf-nightly (#1781 A3): iOS runs nightly at 02:40 UTC; dispatch takes rounds, warmup, scenarios, baseline size and branch. Each run uploads perf-ios-summary (90 days) and perf-ios-raw (30 days), compares with earlier runs, and writes the verdict to the job summary with warnings for regressions and new failures.
pnpm perf:compare [--to <ref>] [--from <ref>|<a>..<b>] does the same locally (run id, date, latest, or a local output). A step is flagged only when its median moves more than 20%, 3× the night-to-night scaled MAD, 2× its own cv/√n, and 50 ms against the median of up to 7 earlier full-suite nights; fewer than 3 nights give no verdict. 15 files. Android stays report-only behind a dispatch input.
Validation
- Dispatches on this branch: 39664219771 and 39671171208 found an iOS 26.2 "Open in" prompt after
trigger-app-eventand a late route change after answering it (both fixed in layer 2); 39679264668 at the stack head: success, 101/105 clean, comparison against the two earlier runs in the job summary (100fixed, 3failing, 2insufficient-baseline). pnpm perf:compare --to 39679264668 --branch perf/nightly-comparisondownloads and reproduces that verdict locally.vitest scripts/perfand repo guards: pass. Gate receipt:pnpm check:affected --run --head 60cf336129(stack head, includes this layer): passed,exactCommit: true; FAIL-OPEN full set, every local check passed; native, device, and coverage lanes are GitHub-authoritative..
Risk: the first nights have no verdicts until 3 nights exist.
🤖 Generated with Claude Code