Repository navigation
ci(test-shards): refresh the Test Core dataset and cut the CLI into 4 slices on plain-sum placement, and pin the whole-package leg - #26186
Merged
Conversation
… slices, keep plain-sum placement, and pin the whole-package leg Retry of #25968 without its wall-model placement (reverted by #26077): the 2026-10-26 dataset refresh, `@objectstack/cli` at 4 slices with PREVIOUS_FILE_SHARDED_PACKAGES {cli: 3}, and pin 3d -- no shard's whole-package sum past 1868s, and objectql and plugin-security never whole on one shard. Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CLvWYcHLpbpu8X8PvozD7F
Contributor
Author
席位核对Verdict: ACCEPT at head Against the dispatch order (
Seat's own reading at the head (detached worktree)
Gates at head
After landing (owed on #25870)
Generated by Claude Code |
This was referenced Oct 27, 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.
Requested by Elon · project thread
Part of #25870. The card stays open until its after-landing reading: the first 10 full merge-queue Test Core builds with no load-shaped red.
Clause-②: no
Metadata-protocol: none
What
This is the second attempt at #25870, after #25968 was reverted by #26077. It keeps only the parts of #25968 that did not cause the merge-queue reds. Two files change.
scripts/test-shard-timings.json: the 2026-10-26 refresh (14 runs, newest 40272142430). The file is byte-identical to the one ci(test-shards): place Test Core bins by predicted wall, and cut the CLI into 4 slices on the refreshed dataset #25968 carried (git diff f36f6190 HEAD -- scripts/test-shard-timings.jsonis empty).scripts/partition-test-shards.mjs:FILE_SHARDED_PACKAGEScli 3 → 4, andPREVIOUS_FILE_SHARDED_PACKAGES={cli: 3}, so the refresh lane can still decode the 3-slice summaries it retains. The derivation table for 4 sits next to the map.partition()stays the plain-sum LPT. There is no wall model and noloadOf/wallOf.--self-test(WHOLE_LEG_CAP_SECONDS,LOAD_SENSITIVE_APART,wholeLegProblems()), described below.No
.github/**edit, so this is not Tier H, and no governed path is touched.Why
mainbefore the 2026-11-02 05:30Z weekly refresh. With the 10-26 weights, pin 3c refuses cli ×3: one slice is 899.15 s, which is past 1.3 ×@objectstack/metadata-protocol's 670.12 s = 871.16 s ("Raise it to 4"). If this does not land first, the refresh bot's PR goes red.Shard table:
planRun()on the full listThese numbers come from
turbo ls --output=jsonat 365fe5e with--exclude @objectstack/dogfood, run throughplanRun()exactly as ci.yml calls it. "whole" is the shard's whole-package seconds with the package count in brackets. "slice" is the CLI slice's seconds. "step" is the #25376 wall model (whole / 2.9 + slice), included for reference only.The dispatch set three conditions, and all three hold:
Bin totals are 1499–1501 s (max/mean 1.00×), inside the 2697.45 s density cap. #25968's layout for comparison: 186/185/185/185 + 674 s slices, and 2141/2139/2141/2142 s whole.
Pin 3d: the whole-package leg cap and the load-sensitive pair
Pins 2–3c grade bin sums and slice counts, and #25968's 2141 s layout passed all of them. Pin 3d grades what actually broke, on the committed dataset's full list as CI splits it:
WHOLE_LEG_CAP_SECONDS = 1868: no shard's whole-package sum (slices excluded) may exceed 1868 s. That figure is the heaviest whole leg the queue has run green: shard 7/8 of the plain-sum layout on the 2026-10-23 dataset, red 0 times in 19 full builds before ci(test-shards): place Test Core bins by predicted wall, and cut the CLI into 4 slices on the refreshed dataset #25968 and 0 in 10 after ci(test-shards): revert Test Core to the plain-sum layout and the 2026-10-23 dataset (undo #25968) #26077. 2141 s is the figure that went red. The pin's comment says that raising the cap needs a merge-queue red-rate reading, not a balance figure, and that the remedy for a refresh that outgrows the cap is a wider matrix or a finer slice.LOAD_SENSITIVE_APART = [objectql, plugin-security]: these two may never be whole on the same shard. They are the two packages whose tests went red under load in Merge queue: full Test Core builds go red 5 of 27 since #25968's shard layout, and each ejection rebuilds every entry behind it #26074. The third red was a CLI slice, and a slice runs alone after its shard's whole leg. If either package disappears from the split, the pin goes red instead of passing on a pair it no longer grades.The battery has 5 cases: the committed-dataset grade, which first proves the split's whole-leg sums add up to the dataset's whole seconds, and 4 fixtures (pass, pair together, over cap, member missing). The battery roster floor goes from 15 to 16.
Tests
node scripts/partition-test-shards.mjs --self-testat HEAD:self-test OK (75 measured packages -> 78 shard items, 8 shards, max/mean 1.00x <= 1.3x, floor 1169s, bins 1499.31/1501.21/1499.98/1500.86/1499.98/1500.12/1501.22/1500.45s within the 2697.45s density cap, whole legs 1499/1501/826/827/826/826/1501/1500s within 1868s, file-level slices: @objectstack/cli x4).partition()(slice × 2.9) back in temporarily and turned off pin 2, which on main already reds it at 1.43×. Pin 3d then reds withshard 5/8 carries 2141s … 6/8 2139s … 7/8 2141s … 8/8 2142s of whole packages, past the 1868s capand@objectstack/objectql and @objectstack/plugin-security share shard 7/8. That is ci(test-shards): place Test Core bins by predicted wall, and cut the CLI into 4 slices on the refreshed dataset #25968's layout reproduced. After the ablation the file was restored andcmpconfirms it matches.sliced 3 ways at 2697.45s, one slice is 899s … Raise it to 4.Restored afterwards,cmpclean.measure-test-shard-timings(decodes through both maps),check-test-completeness,ci/select-shard-timings-run,ci/select-shard-packages.selftest.sh(32 cases).Gates
node scripts/pm/dispatch-gates.mjs --commands(merge base 365fe5e): all 35 derived families exit 0.dispatch-gates.mjs --ranreconciles: 35 derived, 35 run, 0 NOT-MEASURED.scripts/partition-test-shards.mjsorscripts/test-shard-timings.json. I checked each withgit diff --name-only origin/main...pull/N/head.Acceptance notes
merge_groupbuilds the way Merge queue: full Test Core builds go red 5 of 27 since #25968's shard layout, and each ejection rebuilds every entry behind it #26074's 13:35Z reading did. Any load-shaped red means stop and report, and a revert is on the table. Also: the slowest spec-touchingpull_requestshard on 3 readings, for information. The original goal was ≤ ~20 min. The predicted slice-shard step falls from 1276 s to 959 s, but the cold DTS closure (~5.8 min) still comes on top of that.pull_requestor partialmerge_grouprun splits its own smaller list, which can put the two packages together on lighter shards. That was already true on the green layout, so this PR does not change it.🤖 Generated with Claude Code
https://claude.ai/code/session_01CLvWYcHLpbpu8X8PvozD7F