Repository navigation
ci(test-core): wire the shard timing-drift check: red past 1.5x measured/predicted, warning past 1.3x - #21998
Merged
objectstack-fleet[bot] merged 3 commits intoOct 6, 2026
Conversation
…check Claude-Session: https://claude.ai/code/session_01VF48aw8RPG6wzDnMgp6rtw Co-authored-by: Claude <noreply@anthropic.com>
….5x red WARN_MEASURED_OVER_PREDICTED sits beside MAX_MEASURED_OVER_PREDICTED: the same ratio over the same executed windows, an annotation-only tier under the red. renderDriftVerdict() returns the four verdicts without printing them, so the self-test reads the ::warning line a runner receives. Claude-Session: https://claude.ai/code/session_01VF48aw8RPG6wzDnMgp6rtw Co-authored-by: Claude <noreply@anthropic.com>
…n pair Runs partition-test-shards.mjs --check-drift over .turbo/runs/*.json on every shard, with no if: and no continue-on-error, so a red past 1.5x measured/ predicted withholds the attestation; past 1.3x it annotates. Restates the comments the wiring made stale: the drift block's CLI figures, WHY SIX (the CLI is the heaviest indivisible suite on the refreshed dataset), the 45-minute timeout's revert condition against measured shard wall time, and the idle slice-leg prose. Claude-Session: https://claude.ai/code/session_01VF48aw8RPG6wzDnMgp6rtw Co-authored-by: Claude <noreply@anthropic.com>
objectstack-fleet
Bot
deleted the
claude/issue-16465-wire-shard-drift-check
branch
October 6, 2026 15:37
This was referenced Oct 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #16465
Clause-②: no
Wires the Test Core shard timing-drift check the tree has carried unwired since #16173, adds the card's 1.3x as a warning tier under its red, and restates the
ci.ymlcomments that the wiring and the #21487 / #21826 changes left stale. Rootscripts/and one workflow, nothing published:skip-changeset.The ruling this follows
Triage
5925054826, as the unlock6013064225restates it, verbatim:partition-test-shards.mjs --check-driftatMAX_MEASURED_OVER_PREDICTED = 1.5;"::warning::only;"timeout-minutesred."The maintainer's authority on the card: 「同意你的建议,你负责执行派发所有可行的优化」.
What changed
.github/workflows/ci.yml, the Test Core shard job onlyCheck this shard's timing drift:--check-driftover.turbo/runs/*.jsonwith--label "Test Core (N/6)"(the matrix shard), with noif:and nocontinue-on-error. It sits between the run-summary upload and the completeness guard, above the attestation pair, so a drift red also withholds that shard's attestation. A shard with no packages writes no summary; the step reports that as NOT MEASURED and exits 0, because the script itself treats zero inputs as a usage error.@objectstack/cli(1702.69s) as the heaviest indivisible suite, ahead of@objectstack/spec(1134.86s). The 6/7/8/10-shard table is re-derived on the current dataset with the partitioner's ownpartition()/balanceOf(): 1.04x / 1.22x / 1.39x / 1.74x, with the max at 1703s at every count. The old claim that the self-test "pins this arithmetic" is corrected: what it pins is pin 3, the heaviest package within 1.3x of the mean atSHARD_COUNT.timeout-minuteswall".FILE_SHARDED_PACKAGEShas been empty since ci(test-core): retire the CLI's file-level slicing by the partitioner's own slice-count derivation #21487, so no shard runs a slice today.scripts/partition-test-shards.mjsWARN_MEASURED_OVER_PREDICTED = 1.3sits besideMAX_MEASURED_OVER_PREDICTED = 1.5, which is unchanged. It is the same ratio over the same executed windows; it is notMAX_SHARD_OVER_MEAN, and its docblock says why the two are kept separate.driftReport()gainswarned, the band strictly between the two bounds and exclusive of the red, so one shard gets one verdict.renderDriftVerdict()returns the four verdicts (OK, WARN, DRIFT, NOT MEASURED) without printing them. WARN emits exactly one::warning title=Test Core shard timing drift::…line on stdout and exits 0; DRIFT exits 1, with the same remedy text as before.escapeWorkflowCommandMessage()keeps the message on one line.New self-test battery
drift warning tier under the red (#16465), with 12 cases, registered inSELF_TEST_BATTERIES(floor 12). The roster floor goes from 10 to 11. The cases cover:WARNbelow the red) and not below the balance tolerance;Nothing in the self-test prints a workflow command (
check:self-test-workflow-commandsgreen).Not touched: the attestation schema,
scripts/test-shard-timings.json,measure-test-shard-timings.mjs, and the required-check names.Test CoreandTest Core (N/6)are unchanged, andcheck:required-contextsis green.The second sample (carried item 2): executed windows only
The
test-core-run-summary-*artifacts could not be read from this container: the egress policy deniesproductionresultssa17.blob.core.windows.net. Job logs reach only their last 5000 lines throughget_job_logs. So the sample comes from each run'sTest Coretiming table, which the aggregator echoes into its log. The table carries turbo's own execution windows throughsamplesFromSummary(), which is the same reader and the same exclusions as the gate. Replayed packages are listed there and excluded here.On shards 2 to 6, the measured heavy members and the turbo
--concurrency=4capacity bound (the sum of a shard's task windows is at most 4x its test step) give these results:@objectstack/spec, 1.45x / 1.39x / 1.43x on the three runs that executed it (37433381795, 37453598388, 37467882762).Stop condition: not met. No executed-window reading put any shard at or over 1.5x, so the red is wired as ruled. The per-shard numbers, the bounds and this PR's own run are on #16465 in the
os-dev-report.Verification (at
430859c2f)node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran …printed "59 derived famil(ies) accounted for — 59 run, 0 NOT-MEASURED (a DERIVED zero — all 59 recorded an exit code and none of them is 3)". Every gate exited 0.check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content) first answered exit 3 (PREREQUISITE NOT MET). They exited 0 once a workspace build had run through the verify lock: 73 tasks,VERDICT command-exit 0.node scripts/partition-test-shards.mjs --self-test→self-test OK (72 measured packages -> 72 shard items, 6 shards, max/mean 1.04x …).--check-drifton synthetic summaries: 1.06x gives OK, exit 0; 1.34x gives WARN plus one::warningline, exit 0; 1.54x gives DRIFT, exit 1. A replay sits beside each, and they are excluded.check-governed-merges --teston the final two paths: "0 of 2 path(s) hit the register … NOT governed", with 494 changed lines.Acceptance notes
turbo ls --affectedand the cross-package union at the merge base, is@objectstack/spec,@objectstack/clientand@objectstack/driver-sql.testleg is expected to replay, which makes it NOT MEASURED. client and driver-sql run alone.driftReport()has no floor on predicted seconds. A PR whose shard executes only a few-second package gets a ratio of that package alone. Every lone-package reading found here was under 1.0x, so this is noted, not filed.Generated by Claude Code