Skip to content

Commit 56ccd0c

Browse files
committed
ci(shard-timings): judge each refresh candidate at its own shard width
The 6 -> 8 resize made select-shard-timings-run reject every recent schedule run (all 6-shard, all whole and green) as missing Test Core 7/8, 8/8, so the refresh exited 1 on this PR (job 121075952437) and would have kept doing so until an 8-shard schedule run existed with its artifacts retained. The dataset is per package; the width a run was split at is not an input to any package's weight. runIsEligible now reads the run's width from its own `Test Core (N/M)` job names and admits it when all M shards concluded success with all M summaries retained. A run whose Test Core jobs disagree on M, or that has none, is refused by name. The download loop already iterates each candidate's own artifact_ids, so a resize has no transition window. New self-test battery (width change, 9 cases) and an accumulation leg mixing 8-wide and 6-wide runs, both confirmed to fail against the old fixed-width reading. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01M781cxsyRAqT49LvLkJKXb
1 parent ebc7c8f commit 56ccd0c

4 files changed

Lines changed: 217 additions & 38 deletions

File tree

‎.github/workflows/shard-timings-refresh.yml‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@
4747
# HOW IT GETS ITS INPUTS, AND WHY IT RUNS HERE RATHER THAN IN AN AGENT WORKTREE
4848
# ----------------------------------------------------------------------------
4949
# The documented refresh path downloads the `test-core-run-summary-N-of-M`
50-
# artifacts of a green run, one per Test Core shard (M = SHARD_COUNT).
50+
# artifacts of a green run, one per Test Core shard. M is the RUN's own width,
51+
# read from its `Test Core (N/M)` job names, so runs from before and after a
52+
# matrix resize both read (#25376).
5153
# `GET /actions/artifacts/{id}/zip` redirects to
5254
# `productionresultssa*.blob.core.windows.net`, and every agent container's
5355
# egress policy answers 403 to CONNECT for that host — reproduced four ways, on
@@ -484,9 +486,10 @@ jobs:
484486
485487
OK=1
486488
# One summary per shard the selector found: it admits a run only when
487-
# every one of SHARD_COUNT (select-shard-timings-run.mjs) shards
488-
# concluded success with its artifact retained, so these keys ARE the
489-
# roster. A count spelled here would be a third copy of it (#25376).
489+
# every shard OF THAT RUN concluded success with its artifact
490+
# retained, at the run's own width (select-shard-timings-run.mjs,
491+
# runShardWidth), so these keys ARE that run's roster. A count
492+
# spelled here would break the first refresh after a resize (#25376).
490493
SHARD_NS=$(node -e 'const r=JSON.parse(require("fs").readFileSync(process.env.RUNNER_TEMP+"/candidates.json","utf8"))[Number(process.argv[1])];console.log(Object.keys(r.artifact_ids).map(Number).sort((a,b)=>a-b).join(" "))' "$i")
491494
for N in $SHARD_NS; do
492495
ART=$(node -e 'const r=JSON.parse(require("fs").readFileSync(process.env.RUNNER_TEMP+"/candidates.json","utf8"))[Number(process.argv[1])];console.log(r.artifact_ids[process.argv[2]])' "$i" "$N")

0 commit comments

Comments
 (0)