Landed in #232 (merge 82c44352b). Measured baseline from 8 sampled runs on 2026-09-01 (per-job/per-step timings via the Actions API):
Before (median compute per job)
| Job |
Median |
Dominant step |
| Verify (Node 22.19.0) |
6.8 min |
pnpm test ~6.2 min |
| Verify (Node 24) |
6.6 min |
pnpm test ~5.9 min |
| Verify (Node 26) |
6.8 min |
pnpm test ~6.0 min |
| Examples check |
3.9 min |
pnpm examples:check ~3.5 min |
| Release gates |
3.0 min |
pnpm check:release:ci ~2.7 min |
| RSC runtime micro-eval |
38 s |
pnpm eval:spot ~18 s |
| Dependency review |
8 s |
— |
PR total: ~28 runner-minutes; wall 8.1–15.3 min (median 12.7). Main pushes: same jobs but 20–27 min runner-pool queue before the first job (28–47 min wall for ~7 min of work) — the queue is starved by total fleet runner-minutes, and PRs' 3-wide Verify matrix was ~75% of each PR's cost.
After (from #232's own hosted runs)
| Job |
Measured |
| Detect changed paths (new) |
5 s |
| Verify (Node 24) — only PR leg |
6.8–6.9 min |
| Examples check |
3.5–3.9 min |
| Release gates |
3.3 min |
| RSC runtime micro-eval |
42 s |
| Dependency review |
8 s |
PR total: ~15 runner-minutes (−47%). Pushes to main and workflow_dispatch still run the full 22.19/24/26 matrix — main coverage unchanged. Docs-only PRs (docs/, agent-patterns/, .changeset/*.md, top-level *.md; renames count both paths; fail-open on any API doubt or truncated listing) additionally skip Verify/examples/release-gates/micro-eval, dropping a docs-only PR to well under 1 runner-minute.
Deliberately not done (data said no)
- pnpm store / Playwright-Chrome / build-output caching: already solved (pnpm/setup cache ~3s installs, runner-image Chrome <5s,
pnpm build ~10s).
- Test sharding:
pnpm test is ~6 min but splitting adds job-count overhead to an already starved runner pool.
- Main-push concurrency cancellation: deliberately SHA-keyed no-cancel; every main commit stays verified.
Remaining ideas
Landed in #232 (merge
82c44352b). Measured baseline from 8 sampled runs on 2026-09-01 (per-job/per-step timings via the Actions API):Before (median compute per job)
pnpm test~6.2 minpnpm test~5.9 minpnpm test~6.0 minpnpm examples:check~3.5 minpnpm check:release:ci~2.7 minpnpm eval:spot~18 sPR total: ~28 runner-minutes; wall 8.1–15.3 min (median 12.7). Main pushes: same jobs but 20–27 min runner-pool queue before the first job (28–47 min wall for ~7 min of work) — the queue is starved by total fleet runner-minutes, and PRs' 3-wide Verify matrix was ~75% of each PR's cost.
After (from #232's own hosted runs)
PR total: ~15 runner-minutes (−47%). Pushes to main and
workflow_dispatchstill run the full 22.19/24/26 matrix — main coverage unchanged. Docs-only PRs (docs/, agent-patterns/,.changeset/*.md, top-level *.md; renames count both paths; fail-open on any API doubt or truncated listing) additionally skip Verify/examples/release-gates/micro-eval, dropping a docs-only PR to well under 1 runner-minute.Deliberately not done (data said no)
pnpm build~10s).pnpm testis ~6 min but splitting adds job-count overhead to an already starved runner pool.Remaining ideas
packages/workbench/tests/examples-real.e2e.test.tsstale-diagnostic flake keeps biting under hosted load (bit ci: trim PR Verify matrix to Node 24 and skip heavy jobs on docs-only PRs #232's first run); related to Flake: overview.e2e owned-reload generation budget exceeded under hosted-runner load #200/flake: track remaining dev-watcher and MCP App gate failures #122.