Skip to content

CI performance dashboard #1182

Open
Open

Description

Maintained by the CI profiler routine, which runs every 4h. Each run replaces this body and carries the history rows over.

Headline (run 2026-10-30 08:17 UTC)

Window: slice 04:16 → 08:17 (24h numbers carried where the slice has no samples). Another quiet, healthy slice: 0 merges, 0 merge_group or push runs, 17 full PR runs, all green on the first attempt. Depot healthy: 0 lost hosts, 1 boot over 15 s.

Since the last run (04:16 → 08:17)

24h table

metric 24h
PRs merged ~23 (all on 10-29: 21 in the 12:22–16:30 burst, #1828 20:19, #1819 22:47; 0 since)
merge_group created → ci-ok (success) 4.90 / 5.07 healthy (n=21, carried)
PR run created → ci-ok (green full runs) 4.80 / 4.90 (n=17, this slice)
push to main created → ci-ok 3.36 / 4.12 healthy (carried)
Linux queue wait p50 / p90 1 s / 1 s; slow-start ~0%
macOS queue wait p50 / p90 3 s / 7 s (n=33); Windows no samples beyond the nightly
Job-min/day (Linux / Windows / macOS) ~5.9k / 0.4k / 0.12k (est., carried; ~1.8k L of it is the 10-29 outage excess, which drops out at the next run)

Merge-queue settings: build 5 / merge 5, min 1, min wait 5 min, ALLGREEN, timeout 90, SQUASH (ruleset read this run). Unchanged.

run (UTC) merges/24h MQ enq→merge p50/p90 (min) mg CI success p50 PR push→ci-ok p50/p90 mac queue p50/p90 linux queue p50/p90 job-min/day L/W/M
2026-10-30 08:17 ~23 PRs merged in 24h (0 since 22:47; queue idle 9.5 h) — since 04:16 (none); 12.3 / 42.2 (carried) none since 22:39; 4.90 / 5.07 healthy (carried) 4.80 / 4.90 (n=17 green full runs, 4.55–5.23, all first attempt) 3 s / 7 s (n=33, nightly + 1 macOS-only dispatch, max 8 s) 1 s / 1 s queue; Depot boot max 26 s, 1/411 over 15 s; 0 lost hosts ~5.9k / 0.4k / 0.12k (est., carried); since 04:16 590 L / 56 W / 121 M (PR 590 L in 17 full runs + 24 stubs; nightly 99 / 56 / 44 red; dispatch 2 / 0 / 77)
2026-10-30 04:16 ~23 PRs merged in 24h (0 since 22:47; queue idle) — since 00:17 (none); 12.3 / 42.2 (carried) none since 22:39; 4.90 / 5.07 healthy (carried) 4.91 / 5.72 (n=12 green full runs, 4.65–5.72; 1 outlier at 12.90 on a slow-network e2e_vendor_pypi_build leg) — (no macOS jobs in slice; 0.05 / 0.05 carried) 1 s / 1 s queue (n=300, max 2 s); slow-start 0% (0/276, p50 5 s, p90 6 s, max 8 s); 0 lost hosts ~5.9k / 0.4k / 0.12k (est.); since 00:17 439 L / 0 W / 0 M in 12 full PR runs
2026-10-30 00:17 ~31 PRs merged in 24h (2 since 20:20: #1828 20:19, #1819 22:47; #1819 evicted twice by lost Depot hosts) since 20:20 13.4 (#1828) and 8.3 (#1819 last enqueue; 153 from its first); 24h 12.3 / 42.2 (carried) 12.98 (#1828, boots 201–393 s) and 7.52 (#1819, 22:39); 2 failed/cancelled groups on lost hosts; 4.90 / 5.07 healthy (carried) 4.63–4.97 after 23:00 (n=5); 23.5–36.8 for the 8 PR runs that needed 2–4 attempts, 20:10–21:24 — (no macOS jobs in slice; 0.05 / 0.05 carried) 1 s / 2 s queue; slow-start 92% at 20:xx (boot p50 213 s, max 591 s), 59% 21:xx, 18% 23:xx, 0% 00:xx; 61 lost hosts 20:15–21:30 (707 L job-min, 0 steps) ~5.5k / 0.25k / 0.1k (est.); since 20:20 2,650 L / 174 W / 0 M in 23 non-stub CI runs (~1,800 L of it outage excess)
2026-10-29 20:20 ~32 PRs merged in 24h (0 since 16:30; #1828 and #1819 in the queue at 20:05/20:14) — since 16:30 (none merged); 12.3 / 42.2 (carried) in-flight #1828 group ≥14 min at 20:20 (boots 201–393 s); 4.90 / 5.07 (carried) 5.0 → 9.1 created→ci-ok (4 green full runs: 5.06, 5.15, 20.0, 9.06; the last two on 100%-slow hosts) — (no macOS jobs in slice; 0.05 / 0.05 carried) 1 s / 1 s queue; slow-start 100% since ~19:30 (69/69 Depot jobs in 3 runs, boot p50 56→139→231 s, max 393 s) plus 6 lost hosts (no step for 10–16 min, then failed) ~4.8k / 0.25k / 0.12k (est.); since 16:30 ~420 L in 4 full PR runs + 1 lost-host run + dispatch 79 L/W
2026-10-29 16:30 33 PRs merged (21 since 12:22, burst 13:19–15:04; 1 CI eviction #1813 on rubygems.org, 1 clippy fail #1826) 12.3 / 42.2 (n=21; last-enqueue 7.5 / 15.2; entries 10–16 waited 4.8–10.9 for a slot) 4.90 / 5.07 (n=21, 4.52–6.48; Gradle hosted leg last in 17/21) 4.90 / 6.22 (n=11, 4.63–7.47) — (no macOS jobs in slice; 0.05 / 0.05 carried) 1 s / 2 s queue (n=1,152, max 6 s); slow-start 11% (130/1,152, clustered in 7 runs) ~5.1k / 0.26k / 0.12k (est.); since 12:22 1,522 L / 79 W / 0 M
2026-10-29 12:22 32 PRs merged in window (0 since 22:56; queue idle 13.4 h with 11 PRs Ready for review) — since 08:17 (none); 7.35 / 8.02 (carried) none since 22:49; 6.53 / 7.42 (carried) 4.85 / 5.03 (n=7 green full runs, 4.75–5.03) — (no macOS jobs in slice; 0.05 / 0.05 carried) 0.02 / 0.03 queue (n=217, max 0.03); slow-start 0% (0/175, p50 5 s, max 10 s) ~3.5k / 0.1k / 0.03k (est., carried); since 08:17 ~245 L (7 full PR runs at 33.6–35.2 L each)
2026-10-29 08:17 32 PRs merged (0 since 22:56; queue idle) — since 04:16 (none); 7.35 / 8.02 (carried) none since 22:56; 6.53 / 7.42 (carried) 5.03 / 5.40 (n=8 green full runs, 4.63–5.40) 0.05 / 0.05 (nightly + 2 dispatches, n=12) 0.02 / 0.02 queue (n=548, max 0.05); slow-start 0% (0/523, p50 5 s, p90 6 s, max 11 s) ~3.5k / 0.1k / 0.03k (est., carried); since 04:16 660 L / 150 W / 119 M (PR 370 L in 10 full runs; nightly 96/50/36 red, Windows; 2 dispatches 194/100/83)
2026-10-29 04:16 32 PRs merged (0 since 00:16; queue idle since 22:56) — since 00:16 (none); 7.35 / 8.02 (carried) none since 22:56; 6.53 / 7.42 (carried) 4.79 / 5.12 (n=12 green full runs, 4.45–6.48) — (no macOS jobs in slice; 0.03 / 0.05 carried) 0.02 / 0.02 queue (n=300, max 0.12); slow-start 0% (0/276, p50 5 s, p90 6 s, max 8 s) ~3.5k / 0.1k / 0.03k (est., carried); since 00:16 PR 427 L in 12 full runs plus 10 stubs
2026-10-29 00:16 32 PRs merged (10 since 20:16: #1785, #1786, #1789, #1779, #1787, #1797, #1792, #1790, #1764, #1765; plus #1763 at 20:19; 0 evictions) since 20:16 7.35 / 8.02 (n=10, 5.37–8.47; max 4 entries in flight, no slot wait) 6.53 / 7.42 (n=10, 4.85–7.90; coverage (2) last in 9/10) 5.67 / 7.47 (n=10 green full runs, 4.97–8.77) — (no macOS jobs in slice; 0.03 / 0.05 carried) 0.02 / 0.02 queue (n=665, max 0.05); slow-start 47% (291/616, p50 10 s, p90 43 s, max 125 s) ~3.5k / 0.1k / 0.03k (est.); since 20:16 mg 447 L / 27 W in 10 runs, push 118 L in 9, PR 595 L in 21
2026-10-28 20:16 23 PRs merged (1 since 16:18: #1748; 0 evictions) since 16:18 12.3 (n=1, #1748); burst 9.1 / 13.6 (carried) 11.48 (n=1, #1748: release-readiness booted 307 s, e2e fan-out last at 11.38); burst 5.08 (carried) 7.6 / 10.7 (n=12 green full runs, 5.0–13.0) — (no macOS jobs in slice; 0.03 / 0.05 carried) 0.02 / 0.02 queue (n=450, max 0.03); slow-start 62% (275/447, p50 35 s, p90 144 s, max 329 s) ~3.5k / 0.1k / 0.03k (est.); since 16:18 mg 69 L, push 21 L, PR ~1,040 L in 18 runs
2026-10-28 16:18 23 PRs merged (20 since 12:17, burst 13:56–14:56; 0 evictions) 9.1 / 13.6 (n=15 timelines; first 5 entries 5.3–5.8, entries 6–13 9.1–13.8 waiting for a slot) 5.08 / 5.35 (n=20, 4.58–6.60, all first-attempt green; coverage (2) last in 12/20, Gradle hosted leg in 7/20) 5.91 / 7.07 (n=8 green full runs, 4.90–7.88) — (no macOS jobs in slice; 0.03 / 0.05 carried) 0.02 / 0.02 queue (n=810, max 0.15); slow-start 23% (181/779 Depot, p50 6 s, p90 31 s, max 104 s) ~3.0k / 0.1k / 0.03k (est.); since 12:17 mg 779 L / 54 W in 20 runs, push 95 L in 11, PR 325 L in 8 full runs
2026-10-28 12:17 12 PRs merged (0 since 08:17; queue idle since 21:16) — since 08:17 (none); 24h ≈6.8 / 9.3 (carried) none since 21:16; 24h ≈5.1 / 7.1 (carried) 5.13 / 7.08 (n=7 green full runs, 4.73–7.08; the 7.08 is a slow coverage (2) on a test-adding PR) — (no macOS jobs in slice; 0.03 / 0.05 carried) 0.02 / 0.02 queue (Depot, n=185, max 0.02); slow-start 3% (5/185, p50 5 s, p90 6 s, max 29 s) ~2.3k / 0.05k / 0.03k (est.); since 08:17 PR 247 L in 17 runs (7 full, 10 stubs)
2026-10-28 08:17 12 PRs merged (0 since 04:16; queue idle since 21:16) — since 04:16 (none); 24h ≈6.8 / 9.3 (carried) none since 00:16; 24h ≈5.1 / 7.1 (carried) 4.90 / 6.25 (n=21 green full runs, 4.53–11.0; the 11.0 waited 5.2 min on a stuck cancel) 0.03 / 0.05 (nightly, n=4) 0.02 / 0.02 queue (Depot, n=687, max 0.03); slow-start 8% (45/582, p50 5 s, p90 11 s, max 35 s) ~2.6k / 0.05k / 0.03k (est.); since 04:16 PR 790 L in 23 runs (incl. 129 for #1768 ×3), nightly 94 L / 53 W / 28 M (failed, bun_lockb)
2026-10-28 04:16 12 PRs merged (0 since 00:16; queue idle) — since 00:16 (none); 24h ≈6.8 / 9.3 (carried) none since 00:16; 24h ≈5.1 / 7.1 (carried) 4.83 / 6.22 (n=7 green full runs, 4.67–6.22; 1 hatch-flake re-run at 8.57) — (no macOS jobs in slice) 0.02 / 0.02 queue (Depot, n=300, max 0.03); slow-start 0% (0/300, p50 5 s, p90 6 s, max 10 s) ~2.6k / 0.1k / 0.07k (est., carried); since 00:16 PR 404.6 L in 11 full runs (incl. 33.8 re-run)
2026-10-28 00:16 12 PRs merged (2 since 20:16: #1744 20:57, #1648 21:16 on its third enqueue; 0 evictions in the slice) since 20:16 8.8 (#1744) and 5.5 (#1648's last enqueue; 87.7 from its first); 24h ≈6.8 / 9.3 8.12 (#1744, rustls bump, coverage (2) last at 7.97) and 5.07 (#1648); 24h ≈5.1 / 7.1 6.5 / 7.6 (n=6 green full runs, 5.05–7.63; #1747's hosted ci-ok run 5.05) — (no macOS jobs in slice) 0.02 / 0.02 queue (Depot, n=219, max 0.03); slow-start 36% (79/219, p50 6 s, p90 39 s, max 80 s) ~2.6k / 0.1k / 0.07k (est., carried); since 20:16: mg 86.4 L in 2 runs, push 30.3 L in 2 runs, PR 254.5 L in 6 full runs
2026-10-27 20:16 17 PRs merged (1 since 16:17: #1702 at 20:05; #1648 evicted twice, 19:57 and 20:18, on coverage (1) mode_migration_pypi) since 16:17 9.3 (n=1, #1702, which waited behind #1648's failing group); 24h 6.1 / 7.6 today (carried) 7.08 (n=1, #1702: ci-ok waited 2.1 min for a Depot boot after the last job ended at 4.93); 24h 5.13 / 6.3 (carried) 9.80 (n=1 green full run, 17:07, with a 2.6-min ci-ok boot) — (no macOS jobs in slice) 0.02 / 0.02 queue (Depot, n=172, max 0.03); slow-start 64% (110/172, p50 31 s, p90 91 s, max 179 s) ~2.6k / 0.1k / 0.07k (est., carried); since 16:17: 2 mg runs + 2 cancelled ≈ 125 L, push 16.2 L, PR ≈ 175 L in 3 full runs
2026-10-27 16:17 16 PRs merged (9 today 13:07–14:58: #1738, #1734, #1735, #1740, #1733, #1739, #1736, #1742, #1741; 7 on 10-26 after 16:17) today 6.1 / 7.6 (n=9, 5.2–8.5, 0 evictions); 10-26 post-burst 9.1 / 10.2 5.13 / 6.3 (n=9, 4.75–6.68; coverage (2) last in 7/9) green full runs 4.87 (n=2, both 4.87; 2 more red at 4.68 / 6.40, PDM unearth before #1738 reached the branch) — (no macOS jobs in slice) 0.02 / 0.02 (Depot, n=441, max 0.22); slow-start 16% of mg jobs (36/231) ~2.6k / 0.1k / 0.07k (est.); since 12:17: mg 343 L / 24.5 W in 9 runs, push 79.7 L in 8 runs, PR 147.4 L in 4 full runs
2026-10-27 12:17 25 PRs merged (0 since 18:54; queue idle 17.4 h) — since 08:16 (none); burst 43.9 / 50.0, post-burst 9.1 / 10.2 (carried) none since 18:54; 6.55 / 9.14 (carried) 6.1 (n=4 full runs, 5.68 / 6.07 / 6.12 / 6.38; 2 delayed ~1.3 min behind a superseded run; coverage (2) last in 3/4) — (no macOS jobs in slice; 0.04 / 0.05 carried) 0.02 / 0.02 (Depot, n≈230, max 0.35) ~2.9k / 0.08k / 0.07k (est.); since 08:16 PR 285 L in 8 full runs (4 red on PDM unearth)

Open ci-perf issues by ROI

ROI on one scale: (thousands of job-min/day weighted Linux ×1, Windows ×2, macOS ×3, plus 1 per critical-path or PR-latency minute) × confidence ÷ effort (S=1, M=2, L=3).

ROI issue saving status
~14 #1670 (settings) 90-min check timeout let a stuck check freeze main for 77 min ~46 min sooner recovery per stuck-check incident No incident since. Needs a repo admin.
~11 #1248 (settings) merge-queue build concurrency 10-29 burst: 7 entries waited 4.8–10.9 min for a slot (48.8 entry-min); burst merge p50 12.3 vs ~5.5 for the first 5 Commented 16:30 with the burst numbers and the cancel-cost tradeoff (#1813's failure cancelled 4 groups, ~144 L). Needs a human decision.
~4 #1512 (settings) slow / lost Depot hosts ~1.5–2.5 min per affected run Worst episode yet on 10-29 20:15–21:30 (61 lost hosts, ~1,800 L job-min excess, #1819 evicted twice; comment). Healthy since 00:00: 0/276 slow starts and 0 lost hosts 00:17–04:16. Needs Depot, or the DISABLE_DEPOT_RUNNERS kill switch during an episode.
~1 #1720 (coverage tradeoff) Windows-only regressions reach main avoids ~0.2–0.3k job-min of fix churn per regression agent:needs-human. #1814 (Windows nightly cargo-home tests) merged 13:26; the next nightly shows whether Windows is green.

This run (08:17): filed none, commented on none, closed none.

Open ci-perf / ci-janitor PRs: #1852 Maven home tests on the Windows nightly (open), #1854 retry pinned bundler installs in the e2e legs (open), #1890 annotate failing tests in the macOS/Windows test legs (open), #1894 Go GOWORK test on the macOS nightly (open; it fixes this run's macOS nightly failure). Also open: ci-janitor issue #1660 (Depot hosts lost mid-job).

Merged ci-perf / ci-janitor PRs (last 7 days) and measured effect

PR merged before → after
#1828 retry CI bundler installs on rubygems.org blips (ci-janitor) 10-29 20:19 Robustness; too early to call (logs not read this run). Before: 1 rubygems.org blip evicted #1813 (10-29).
#1806 balance coverage shards on Linux test times (ci-perf, self-picked) 10-29 13:26 Delivered, small as expected. coverage (2) 4.52–4.85 (p50 4.63, n=7) before → 3.93–4.60 (p50 4.25, n=26) after; the shard gap fell from 1.0–1.4 to ~0.3–0.5 min. coverage (2) is last in 2/21 mg runs (was 6/7 of PR runs); the Gradle hosted leg now sets ci-ok. mg ci-ok p50 4.90 (n=21) vs 4.93–5.07 in the 3 pre-#1806 groups of the same burst: about −0.1 min, matching the ≤0.3–0.5 ceiling noted before.
#1820 let a dispatch run one OS only (#1818) 10-29 13:45 Delivered. The two Windows dispatches since (run, run) ran only clippy + release-readiness on Linux: ~6 L / 80 W / 0 M each, vs 194 L / 100 W / 83 M per dispatch before. That saves ~190 L and ~80 macOS job-min per dispatch.
#1803 retry setup-python on a transient download failure (ci-janitor) 10-29 13:26 0 Setup Python hangs in 61 runs since 12:22 (was 1 in ~200 steps on 10-28). Holding.
#1814 fix cargo-home tests on the Windows nightly (ci-janitor) 10-29 13:26 Not yet green: in the 10-30 nightly, test (windows-latest, 1) still failed. #1852 (Maven home) is the open follow-up.
#1797 release-readiness on a hosted runner (#1795) 10-28 21:56 Delivered. In the 5 mg runs after it, release-readiness booted in 0–1 s and ran 0.10–0.15 min, and coverage started at 0.17–0.23 even while Depot slow-start hit clippy (boot 28–34 s). In the 5 mg runs just before it, slow release-readiness boots (30–55 s) pushed coverage to 0.77 and 1.18. 11 PR runs since: coverage start 0.20–0.30. mg p50 did not drop (6.53) because coverage (2) itself ran on slow hosts (see #1512).
#1747 ci-ok on a GitHub-hosted runner (#1745) 10-28 14:02 Delivered. In 31 runs with hosted ci-ok since, ci-ok finished 0.07–0.12 min after the last job (queue 1–3 s), while Depot slow-start was 23% (p90 31 s, max 104 s). The 8 Depot ci-ok runs in the same burst, before the change reached them, took 0.12–0.17. Before #1747, ci-ok waited up to 2.6 min in slow-start episodes. #1745 is closed.
#1760 fix ETXTBSY flake in the hatch version-gate test (ci-janitor) 10-28 14:02 Holding: 0 hatch failures in 70 CI runs since (32 mg, 21 push, 17+ PR).
#1775 nightly vlt migration tests for eject (#1774, ci-janitor) 10-28 14:01 The next nightly (10-29) will show it.
#1780 retry the Deno install in the deno test image (ci-janitor) 10-28 14:56 Robustness; 0 Deno install failures since (few runs).
#1734 tiny e2e capstones on 3 runners instead of 9 (#1732) 10-27 13:13 Delivered. merge_group runs went from 50 to 44 jobs and from 36.5 to 34.2–35.1 Linux job-min per run (n=6 that add no tests), about −1.5 per run (the PR runs had shown −1.3 to −1.7). Capstones are off the critical path; mg ci-ok p50 5.13.
#1740 retry yarn classic e2e installs on transient DNS (ci-janitor) 10-27 13:17 0 yarn-classic failures in 27 full runs since (17 + 10 this slice, all green). Holding.
#1738 pin unearth<0.19 for the PDM e2e 10-27 13:13 Delivered. 0 PDM failures on main-based runs since; before, 4 of 8 PR runs (08:16–12:17) were red on it.
#1730 cap hung rust-cache restores at 5 min (ci-janitor) 10-26 18:12 Too early to call: 0 hangs in ~10 runs since. Before: 3 hangs of 14.2–15.6 min in one 72-min burst (~330 queue entry-min).
#1708 stop late draft runs cancelling real PR CI (ci-janitor) 10-26 15:10 Holding: 0 draft-run cancels in the 20 PR CI runs after 15:10 (the 1 cancelled PR run was a superseding push on #1730).
#1716 Pipenv pylock test follows uv (ci-janitor) 10-26 15:14 Robustness; 0 Pipenv leg failures in 30 merge_group runs since.
#1710 Windows nightly yarnrc path (#1689) 10-26 15:14 Delivered. In the 10-27 nightly, test (windows-latest, 1) passed in 21.32 min and shard 2 in 17.22 (run), after the 10-24, 10-25 and 10-26 nightlies failed on shard 1. The nightly is still red, but only on the unrelated PDM unearth break.
#1704 shard coverage across two runners (ci-perf, self-picked from dashboard) 10-24 02:38 Delivered, beat its estimate. merge_group ci-ok with the shards: 4.47, 4.48, 4.93 (n=3; run, run, run) vs 6.18–6.47 after #1697 and before #1704: about −1.8 min per merge (expected −1.5). Shards take 3.78–4.62 min (was one 5.88–6.17 job). Cost +0.7–1.4 Linux job-min per mg run (35.9–36.6 vs 35.2), less than the +4 expected. Push to main ci-ok 3.03 / 3.08 (was 3.12–3.27). PR push→ci-ok since 04:16: 4.45–4.95 (n=3) vs 6.37 p50 before.
#1697 Gradle agent suites in their own e2e leg (self-picked from dashboard) 10-23 22:18 Delivered. The Gradle legs now take 2.82–2.98 and 1.77–1.97 min (was 4.58–4.92 combined, 7.40 on a slow host). ci-ok in the 3 merge_group runs that include it: 6.18 / 6.23 / 6.47 vs 6.50–7.58 on fast hosts before (about −0.3 to −1 min). Gradle is off the critical path; coverage now sets it.
#1682 start coverage and e2e-build without waiting on clippy (#1681) 10-23 14:54 Delivered. In merge_group runs, coverage now starts at 0.20–0.30 min (was 1.43–1.47). ci-ok with #1682: 6.50, 6.73, 7.35, 7.58, 10.03 (n=5; p50 7.35, the 10.03 on 100%-slow hosts) vs 7.53–8.15, p50 7.76 before. On fast hosts ~1.1 min saved against 1.3 expected.
#1686 Windows nightly path asserts (ci-janitor) 10-23 14:38 Partly delivered. In the 10-24 nightly Windows shard 2 passed, but shard 1 still failed on -p socket-patch-core --lib (job). Follow-up #1710 (#1689) is open and green in dispatch.
#1690 gem old-Bundler legs (follow-up to #1687) 10-23 14:54 Delivered. No gem leg failures in the 10-24 nightly (its only failure was Windows shard 1).
#1692 compatibility workflows off Node 20 pins (ci-janitor) 10-23 14:47 Maintenance; no CI-time effect expected.

Method notes

  • GraphQL and search/issues are blocked in this environment. Merge-queue state comes from REST timelines of merged PRs. "Enqueue → merge" uses the PR's first added_to_merge_queue event in the window. "Slot wait" = enqueue → the PR's first merge_group CI run created_at.

  • Jobs are fetched with filter=all. Queue wait = job started_at − created_at; skipped jobs are excluded. "Slow start" = job started_at → first step started_at over 15 s, Depot jobs only.

  • Critical path = merge_group run created_at → ci-ok completed_at of the latest attempt.

  • "Discarded" merge_group runs are every CI run except each merged PR's last one.

  • Hang cost (~330 entry-min) = for each entry held, its merge time minus when its own group run finished (or, for the Fix Deno global npm tools missed by -g (#444) #1719 hang, minus ~15:30, when the held groups' runs had finished).

  • Run 10-26 20:16: 300 of 313 runs listed (3-page cap), and jobs for all 108 CI runs. "PR full runs" leave out 1-job stub runs (ci-ok in under 1 min).

  • Runs 10-27 00:16, 04:16, 08:16 and 12:17: the queue was idle, so the 24h merge and merge_group numbers are carried from 20:16. Only the new 4-hour slice was fetched each time. The 12:17 run dropped the 10-24 12:16 history row (18-row cap).

  • Run 10-27 16:17: 197 runs in the window (2 pages). Jobs fetched for every CI run since 12:17. The 24h merge numbers combine the 10-26 post-16:19 slice (carried) with today's 9 merges. The oldest history row (10-24 16:16) was dropped (18-row cap).

  • Run 10-27 20:16: 157 runs in the window. Jobs were fetched for every CI run since 16:17, plus all merge_group/push CI runs in the window, to get ci-ok start gaps (started_at → first step). The oldest history row (10-24 20:16) was dropped (18-row cap).

  • Run 10-28 00:16: 190 runs in the window. Jobs were fetched for every non-stub CI run since 20:16. The 24h enqueue→merge p50 combines the 9 carried 13:07–14:58 values (5.2–8.5, p50 6.1) with Build(deps): Bump zod from 3.25.76 to 4.6.6 in /npm/socket-patch #1702, Build(deps): Bump rustls from 0.23.45 to 0.23.46 #1744 and fix: vendor hosted patches directly from lockfiles #1648 (last enqueue); it's approximate. The oldest history row (10-25 00:16) was dropped (18-row cap).

  • Run 10-28 04:16: 227 runs in the window (3 pages). No merge_group or push CI runs since 00:16, so all 24h merge-queue numbers are carried. Jobs were fetched for the 11 completed full PR CI runs since 00:16. The oldest history row (10-25 04:16) was dropped (18-row cap).

  • Run 10-28 08:17: 283 runs in the window (3 pages). No merge_group or push CI runs since 00:16, so all 24h merge-queue numbers are carried. Jobs were fetched for the 24 non-stub CI runs since 04:16. The oldest history row (10-25 08:15) was dropped (18-row cap).

  • Run 10-28 12:17: 288 runs in the window (3 pages). No merge_group or push CI runs since 10-27 21:16, so all 24h merge-queue numbers are carried. Jobs were fetched for the 17 CI runs since 08:17. The oldest history row (10-25 12:15) was dropped (18-row cap).

  • Run 10-28 16:18: 300 of 369 runs listed (3-page cap; the list reaches back to 10-27 22:41, so the 10-27 20:05–21:16 merges are carried). Jobs were fetched for all 39 non-stub CI runs since 12:17 (20 mg, 11 push, 8 PR) and timelines for 15 of the 20 merged PRs (~60 REST requests). Enqueue → merge p50/p90 is over those 15. The oldest history row (10-25 16:15) was dropped (18-row cap).

  • Run 10-28 20:16: 300 of 417 runs listed (3-page cap, back to 04:51). Jobs were fetched for all 20 non-stub CI runs since 16:18 and timelines for Keep Go hosted pins after go mod tidy drops the zip line #1748 and Read Go workspaces the way go builds them #1763. The CI perf: release-readiness — 10-second gate waits up to 5 min for a Depot boot in front of coverage and e2e (~1–3 min per run in slow-start periods) #1795 replay keeps each run's measured clippy end and per-job boots and puts release-readiness at its own work time + 6 s; jobs needing clippy too move only as far as clippy allows. The oldest history row (10-25 20:15) was dropped (18-row cap).

  • Run 10-29 00:16: 300 of 463 runs listed (3-page cap, back to 10-28 13:44, so all 32 merge_group runs since the 13:56 burst are in it). Jobs were fetched for all 31 non-stub CI runs since 20:16, timelines for the 10 PRs merged since 20:16, and 1 job log. GraphQL is still blocked (403). ~50 REST requests. The oldest history row (10-26 00:16) was dropped (18-row cap).

  • Watch item, not filed: one uv/composer e2e leg on a PR (job) spent 18.7 min in Setup Python (3.12.10 isn't in the Depot tool cache, so every leg downloads it in 5–8 s; this one hit getaddrinfo EAI_AGAIN raw.githubusercontent.com at 3.5 min and then hung until 19.3 min). It cost the PR ~20 min and a 24-min re-run. That's 1 of 200 Setup Python steps in 4 h. A step timeout-minutes plus a retry, like the rust-cache cap (Cap hung rust-cache restores so they cannot stall the merge queue #1730), would bound it. It'll be filed if it recurs.

  • Not filed: coverage shard balance. coverage (2)'s test step still runs 241–264 s vs 161–179 s for shard 1 on fast hosts, but the Gradle e2e leg ends at ~4.9–5.0 min, so balancing gives at most ~0.3–0.5 min on fast hosts. Balance coverage shards on measured test time #1768's retry with a Linux timing sample stays a low-ROI option.

  • Run 10-29 04:16: 300 runs listed (3-page cap, back to 10-28 14:06). No merge_group or push CI runs since 00:16, so all 24h merge-queue numbers are carried. Jobs were fetched for the 12 non-stub CI runs since 00:16 (~25 REST requests, no job logs). The oldest history row (10-26 04:16) was dropped (18-row cap).

  • Watch item, not filed: one e2e-build took 2.67 min (run), vs 1.12–1.40 in the other 11 runs, and it pushed that run's ci-ok to 6.48. It'll be filed if it recurs.

  • Run 10-29 08:17: 300 of 448 runs listed (3-page cap, back to 10-28 14:50). No merge_group or push CI runs since 10-28 22:56, so all 24h merge-queue numbers are carried. Jobs were fetched for the 13 non-stub CI runs since 04:16, plus one 7-day workflow_dispatch listing for CI perf: workflow_dispatch of CI — Windows-only janitor fixes re-run the full Linux + macOS nightly matrix (~100 min/day, ~30 macOS) #1818 (~25 REST requests, no job logs). GraphQL is still blocked (403). The oldest history row (10-26 08:18) was dropped (18-row cap).

  • Run 10-29 12:22: 300 of 463 runs listed (3-page cap, back to 10-28 17:35) plus 2 pages of merge_group runs (all 128 in the window). No merge_group or push CI runs since 10-28 22:56, so the 24h merge-queue latency numbers are carried. Jobs were fetched for the 7 full PR CI runs since 08:17 (~20 REST requests, no job logs). GraphQL is still blocked (403). The oldest history row (10-26 12:33) was dropped (18-row cap).

  • Run 10-29 16:30: 300 of 500 runs listed (3-page cap, back to 10-29 02:26) plus 1 page of merge_group runs (all 43 CI runs in the window). Jobs were fetched for all 61 CI runs since 12:22 and timelines for the 21 PRs merged since (~95 REST requests, 1 job log). GraphQL is still blocked (403). The 24h job-min estimate sums the last 6 slice totals. "Slot wait" excludes Fix Maven reactor VEX over a base-version module (#584) #1802/Fix vendored gems on CRLF Gemfile.lock (#1808) #1811, which were dropped at 13:40 without a group run. The oldest history row (10-26 16:19) was dropped (18-row cap). Merged-PR rows from 10-22 aged out (7-day window).

  • Run 10-29 20:20: 300 of 488 runs listed (3-page cap, back to 10-29 07:09). 25 CI runs since 16:30 (21 PR, 2 mg in flight, 2 dispatch). Jobs fetched for the 4 green full PR runs, the lost-host PR run, the dispatch and the in-flight Retry CI bundler installs on rubygems.org blips #1828 group (~15 REST requests, 1 job log). GraphQL is still blocked (403). No merges in the slice, so merge latency is carried. A PR coverage (2) job spent 1,122 s in Run tests with coverage (vs 255 s); single PR (Read the cargo config chain once (#1832) #1849, cargo config chain), not filed. The oldest history row (10-26 20:16) was dropped (18-row cap).

  • Run 10-30 00:17: 300 of 469 runs listed (3-page cap, back to 10-29 13:20). Jobs were fetched for all 23 non-stub CI runs since 20:00 (filter=all), plus timelines for Retry CI bundler installs on rubygems.org blips #1828 and Fix stray files breaking vendored Gradle (#656) #1819 and the ruleset (~30 REST requests, no job logs). GraphQL is still blocked (403). "Lost host" = a job on a depot-* runner with 0 steps. Its minutes are started_at → completed_at. The outage excess compares 15 runs against ~36 L per healthy run. The oldest history row (10-27 00:16) was dropped (18-row cap). Merged-PR rows from before 10-23 00:17 aged out (7-day window).

  • Run 10-30 04:16: 72 runs in the window since 00:00 (1 page). No merge_group, push-to-main or schedule runs since 00:17, so all merge-queue numbers are carried. Jobs were fetched for the 12 full PR CI runs (filter=all), plus the ruleset, 2 issue listings and 1 job log (~20 REST requests). The oldest history row (10-27 04:16) was dropped (18-row cap).

  • Run 10-30 08:17: 89 runs in the window since 04:10 (1 page). No merge_group, push-to-main or merge runs since 22:47, so all merge-queue numbers are carried. Jobs were fetched for all 43 CI runs (filter=all), plus the ruleset, 3 issue listings and 1 job log (~50 REST requests). The oldest history row (10-27 08:16) was dropped (18-row cap).


Generated by Claude Code

Activity

  1. mikolalysenko commented on Oct 8, 2026

    @mikolalysenko
    CollaboratorAuthor

    [agent] There are now two open dashboard issues: this one and #1175, both titled "CI performance dashboard" and labeled ci-perf-dashboard. The body says it is maintained in place, so the profiler routine should update one issue rather than open a new one each run. I'm not closing either one, because I can't tell which issue the routine will update next. Whoever owns the profiler should close the copy it no longer updates.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions