Skip to content

Commit a549ca3

Browse files
committed
ci(test-core): re-size the Test Core shard wall 45 -> 40 from the measured post-slicing job walls
The 3-slice CLI split (5919483) took the slowest Test Core job from 31-40 min to at most 27m05s across 66 completed runs (396 shard jobs) whose tested tree carries it. Two measured rules set the wall: the slowest job within 80% of it (35 and 40 both pass), and the stall guard's window verdict landing before it: the worst observed "Run this shard's tests" ends 26m38s into its job, so the verdict lands at 36m38s, after a 35 wall and inside 40. The comment carries the window, the per-event maxima and the revert-to-30 condition. Claude-Session: https://claude.ai/code/session_01LYXc6ckoWuZyVZpWYizdMh Co-authored-by: Claude <noreply@anthropic.com>
1 parent 446c8b2 commit a549ca3

1 file changed

Lines changed: 30 additions & 21 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -478,31 +478,40 @@ jobs:
478478
# margin for a cold Turbo cache; the old 45 left a hung job "running" for
479479
# half an hour past any plausible healthy finish.
480480
#
481-
# ⚠ RAISED 30 -> 45 (#16173), and the raise is still load-bearing. It was
482-
# made because shard 5/6 was being killed at the 30-minute wall (12+
483-
# observations at 30:16-30:21 with every other job green; the green band
484-
# topped out at 28:56, a ~1 minute margin), and so the tail could be
485-
# measured uncensored before anyone re-derived
486-
# `scripts/test-shard-timings.json`. Both are done: the dataset was
487-
# refreshed (#20388, then #21826) and the split ran the whole CLI alone on
488-
# shard 1/6 (#21487) until #22075 cut it into 3 slices. HELD at 45 by that
489-
# change: the re-size is owed after it lands, from the measured post-change
490-
# Test Core job walls, never from a prediction (#22075 carries it).
481+
# History: RAISED 30 -> 45 (#16173) while one shard ran the whole CLI and
482+
# was killed at the 30-minute wall; held at 45 until #22075 cut the CLI
483+
# into 3 slices (5919483472).
484+
#
485+
# ⚠ RE-SIZED 45 -> 40 (#22075), from the measured post-change job walls.
486+
# Window: every completed, non-cancelled CI run whose tested tree carries
487+
# 5919483472, runs 37917885267 to 37956350887 (2026-10-09 10:29Z-16:03Z):
488+
# 5 schedule, 6 push, 30 merge_group and 25 pull_request runs, 396
489+
# `Test Core (N/6)` jobs; 24 cancelled runs excluded. Slowest job wall per
490+
# event, in minutes: schedule 21.0, push 20.9, merge_group 24.1,
491+
# pull_request 27.1; p90 of all 396 is 22.0. The slowest is 27m05s, run
492+
# 37923333449 `Test Core (3/6)` (70 packages executed, the CLI as all 3
493+
# slices). Two measured rules set the value, and the larger answer wins:
494+
# * wall margin, the 80% of the revert condition below: 27.1 is within
495+
# 80% of 35 (28.0) and of 40 (32.0);
496+
# * the stall guard speaks first: on that same job "Run this shard's
497+
# tests" ended 26m38s after the job started, so the guard's window
498+
# verdict (+10m) lands at 36m38s -- after a 35 wall, 3m22s inside 40
499+
# (`node scripts/measure-stall-guard-headroom.mjs`). Its cap-deferred
500+
# verdict (+20m) already missed 45 on that job by 1m38s; no value this
501+
# re-size could pick restores it.
502+
# So 40, not 35.
491503
#
492504
# ⛔ REVERT CONDITION, restated against measured wall time, not a card:
493505
# back to `30` only when the slowest shard's JOB wall time stays at or
494506
# under 24 minutes (80% of 30, so the margin the old wall lacked is
495-
# there) on every scheduled run for a week. It does not today. On the 16
496-
# main runs after the #21826 refresh (37413386379 to 37467882762), shard
497-
# 1/6 — the CLI alone — read 6m14s-35m43s of job wall time, over 30
498-
# minutes on 9 of them (34m39s run 37415122516, 35m43s run 37453598388,
499-
# 34m08s run 37460325624), so the condition as first written ("once
500-
# #16173 lands") would now kill that shard; and its slowest reading is
501-
# already 79% of this 45. Read the `Test Core (1/6)` job's started and
502-
# completed times before touching this value. It carries no other expiry
503-
# — a raise with no revert condition beside it becomes permanent by
504-
# forgetting — and the stall guard stays the primary hang detector.
505-
timeout-minutes: 45
507+
# there) on every scheduled run for a week. It does not today: 17 of the
508+
# 396 jobs above read over 24 minutes (15 pull_request, 2 merge_group).
509+
# Read every `Test Core (N/6)` job's started and completed times, and
510+
# re-take the stall guard's headroom, before touching this value. It
511+
# carries no other expiry — a raise with no revert condition beside it
512+
# becomes permanent by forgetting — and the stall guard stays the primary
513+
# hang detector.
514+
timeout-minutes: 40
506515
permissions:
507516
contents: read
508517
strategy:

0 commit comments

Comments
 (0)