You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Phase 0.5 of happyvertical/iac#1349 for this repository — the epic's own stated
precondition before any routing work.
Context
merge_groupfull mode (Build, Coverage Gate, test-core ×3, test-packages
×3, Typecheck, publish-dry-run prepare) has never run on GitHub-hosted
runners. Everything we know about hosted comes from run 30969467329,
which was pull_request_target / affected mode.
A fresh 12-run measurement of both lanes shows the fleet is the whole wall
clock: merge_group median 47 min (33–71), merge-queue transit per PR median 53 min (mean 83, max 217), and queue wait is 40–80% of fleet job-time on
the slow runs. Observed running concurrency on arc-happyvertical-nodocker
plateaus at 4–6 against 8 nominal slots; in run 31983234153 the fan-out sat
0-running/16-queued for ~10 min after Build finished. Worst single wait: Build
queued 3899 s (65 min) in run 31672411209. Meanwhile hosted is free and
unmetered on this public repo, is a larger box (4 vCPU / 16 GiB vs the pod's
3 CPU / 14 GiB), and did a full clean build in 6.0 min vs a 1005 s median on
the pod.
Scope / Deliverable
Flip repo variable CI_HOSTED_FALLBACK_ENABLED=true for a bounded window
covering ≥10 merge_group transits and ≥10 PR runs, then flip it back.
Record per-job queue (started−created) and duration (completed−started)
plus run wall clock for both lanes, hosted vs the fleet baseline above, into
the .github/CI.md Phase-0 table and as a comment here.
Measure the four matrices with and withoutmax-parallel: 2 — that cap
exists to be polite to an 8-slot fleet and is pure throttle on hosted (Team
plan allows 60 concurrent jobs).
Decide steady state: make hosted the workflow default (delete the CI_HOSTED_FALLBACK_ENABLEDruns-on expressions outright) or revert.
Expected during the window, not a regression: on pull_request_target the Turbo
shim and the pnpm-store actions/cache are refused (main-scoped write path), so
PR builds are cold — that was 8.1 min in the rehearsal. merge_group and main get both the shim and the turbo-cache-seed.yml seed.
Acceptance criteria
Comparison table posted here and in .github/CI.md with run ids, per-job
queue/duration medians and p90, and run wall clock for ≥10 merge groups and
≥10 PR runs on hosted.
A max-parallel on/off comparison for the four matrix jobs.
An explicit go/no-go on hosted-as-default. If go, a follow-up issue to make it
steady state (remove the lever expressions, retune job timeouts per CI.md's Job timeouts rule).
Out of scope
The capacity oracle and the route dispatcher (iac#1349 phases 1–2).
postgres-tests.yml — its services: container needs the dind lane.
Raising merge-queue concurrency. chore(policy): reconcile merge-queue authority for SDK migration gate #2262 tracks the max_entries_to_build: 1 / check_response_timeout_minutes: 180 drift from the have-config default of
5/60; do not raise it until this issue shows capacity is elastic — more
parallel merge groups against a 4–6 concurrency plateau makes transit worse,
not better.
Phase 0.5 of happyvertical/iac#1349 for this repository — the epic's own stated
precondition before any routing work.
Context
merge_groupfullmode (Build, Coverage Gate,test-core×3,test-packages×3, Typecheck, publish-dry-run prepare) has never run on GitHub-hosted
runners. Everything we know about hosted comes from run
30969467329,
which was
pull_request_target/ affected mode.A fresh 12-run measurement of both lanes shows the fleet is the whole wall
clock: merge_group median 47 min (33–71), merge-queue transit per PR median
53 min (mean 83, max 217), and queue wait is 40–80% of fleet job-time on
the slow runs. Observed running concurrency on
arc-happyvertical-nodockerplateaus at 4–6 against 8 nominal slots; in run 31983234153 the fan-out sat
0-running/16-queued for ~10 min after Build finished. Worst single wait: Build
queued 3899 s (65 min) in run 31672411209. Meanwhile hosted is free and
unmetered on this public repo, is a larger box (4 vCPU / 16 GiB vs the pod's
3 CPU / 14 GiB), and did a full clean build in 6.0 min vs a 1005 s median on
the pod.
Scope / Deliverable
CI_HOSTED_FALLBACK_ENABLED=truefor a bounded windowcovering ≥10 merge_group transits and ≥10 PR runs, then flip it back.
queue(started−created) andduration(completed−started)plus run wall clock for both lanes, hosted vs the fleet baseline above, into
the
.github/CI.mdPhase-0 table and as a comment here.max-parallel: 2— that capexists to be polite to an 8-slot fleet and is pure throttle on hosted (Team
plan allows 60 concurrent jobs).
CI_HOSTED_FALLBACK_ENABLEDruns-onexpressions outright) or revert.Expected during the window, not a regression: on
pull_request_targetthe Turboshim and the pnpm-store
actions/cacheare refused (main-scoped write path), soPR builds are cold — that was 8.1 min in the rehearsal.
merge_groupandmainget both the shim and theturbo-cache-seed.ymlseed.Acceptance criteria
.github/CI.mdwith run ids, per-jobqueue/duration medians and p90, and run wall clock for ≥10 merge groups and
≥10 PR runs on hosted.
max-parallelon/off comparison for the four matrix jobs.steady state (remove the lever expressions, retune job timeouts per CI.md's
Job timeouts rule).
Out of scope
routedispatcher (iac#1349 phases 1–2).postgres-tests.yml— itsservices:container needs the dind lane.max_entries_to_build: 1/check_response_timeout_minutes: 180drift from the have-config default of5/60; do not raise it until this issue shows capacity is elastic — more
parallel merge groups against a 4–6 concurrency plateau makes transit worse,
not better.
Links
re-measurement