Skip to content

Commit d911e6b

Browse files
committed
ci(devx): hold the drift step's CI wiring until the dataset refresh lands with it
The --check-drift mode, its self-tests and its ablation stay on the branch; only this one invocation waits. With scripts/test-shard-timings.json still stale for @objectstack/cli, wiring it today reds the shard carrying a CLI slice on every PR -- a true reading that blocks everything until the refresh. The file-level split already removes the urgent hazard on its own: the worst shard goes from ~1445s (80% of the 30-minute wall) to ~1059s (59%) with the dataset untouched, because the CLI is halved across two runners instead of falling on one. The refresh and this step land together in the follow-up, and the comment left in place says so rather than leaving the mode looking forgotten. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Vbw3RPgdtqesx4azk9SbW8
1 parent 1cbb7ba commit d911e6b

1 file changed

Lines changed: 22 additions & 30 deletions

File tree

.github/workflows/ci.yml

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -693,38 +693,30 @@ jobs:
693693
if-no-files-found: ignore
694694
retention-days: 1
695695

696-
# The durable half of #16173. The summary uploaded above is not only the
697-
# input to the NEXT refresh of scripts/test-shard-timings.json — it is
698-
# this shard measuring itself, right now, against the prediction the
699-
# partition step printed minutes ago. Nothing compared those two numbers,
700-
# and that is the whole defect: the dataset is generated, it rots in one
701-
# direction only (suites get slower, the file stays put), and a shard that
702-
# has drifted heavy reads as perfectly balanced until the job timeout
703-
# kills it. Measured: @objectstack/cli was predicted 458.15s and ran
704-
# 1231.52s — 2.69× — while this job's own max/mean banner read 1.00×.
696+
# ⛔ THE DRIFT STEP IS DELIBERATELY NOT WIRED HERE YET (#16173).
705697
#
706-
# ⛔ The failure mode being closed is NOT a slow shard. It is that a
707-
# killed shard produces no reading at all while the rollup reads green
708-
# (#16157 remains open on that half), so the cost of letting this rot is a
709-
# PR that lands with a whole shard unmeasured. A comparison that only
710-
# warned would inherit exactly that: something true, printed, and unread.
698+
# partition-test-shards.mjs carries a fully-tested `--check-drift` mode —
699+
# it reads the summary uploaded above back and reds when a shard's MEASURED
700+
# test total outruns its PREDICTED one past MAX_MEASURED_OVER_PREDICTED. The
701+
# code, its self-tests and its ablation are all on this branch; only this
702+
# invocation waits, and the wait is a SEQUENCING decision, not an oversight.
711703
#
712-
# No `if:` — a suite that already failed must not also be charged with
713-
# drift, and the step is skipped for free when the job is already red. No
714-
# `continue-on-error` either: the point is the red. It sits ABOVE the
715-
# attestation pair for the #6082 reason documented on the upload above —
716-
# anything below that pair can fail a job whose credential already counts
717-
# as a pass — so a drift red also withholds the attestation, which is the
718-
# fail-closed direction.
719-
- name: Check this shard's predicted-vs-measured timing drift
720-
run: |
721-
if ! ls .turbo/runs/*.json > /dev/null 2>&1; then
722-
echo "No turbo run summary — nothing was measured, so there is nothing to compare."
723-
exit 0
724-
fi
725-
node scripts/partition-test-shards.mjs --check-drift .turbo/runs/*.json \
726-
--label "Test Core (${{ matrix.shard }}/6)"
727-
704+
# Why: scripts/test-shard-timings.json is still stale for @objectstack/cli
705+
# (458.15s recorded, 1231.52s measured), so wiring the step today would red
706+
# the shard carrying a CLI slice on every single PR — a true reading, but one
707+
# that blocks everything until the dataset is refreshed. The file-level split
708+
# above already removes the urgent hazard on its own, taking the worst shard
709+
# from ~1445s (80% of this job's 30-minute wall) to ~1059s (59%) with the
710+
# dataset untouched, because the CLI is halved across two runners instead of
711+
# falling on one.
712+
#
713+
# ⇒ The refresh and this step land TOGETHER in the follow-up, in that order.
714+
# The refresh recipe is in PR #16220's body. When it lands, restore a step
715+
# here that runs `--check-drift` over `.turbo/runs/*.json` with
716+
# `--label "Test Core (${{ matrix.shard }}/6)"`, with NO `if:` and NO
717+
# `continue-on-error` (the point is the red), placed ABOVE the attestation
718+
# pair for the #6082 reason documented on the upload above — so a drift red
719+
# also withholds the attestation, which is the fail-closed direction.
728720
# Runs even when the suite failed — that is when it earns its keep. It
729721
# answers TWO questions about a red suite, and needs both to be able to
730722
# say anything at all about a green one.

0 commit comments

Comments
 (0)