Repository navigation
ci(test-core): the Test Core shard wall is 50, so both stall-guard verdicts land before it - #22512
Merged
objectstack-fleet[bot] merged 3 commits intoOct 10, 2026
Conversation
…sured 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>
This was referenced Oct 9, 2026
…st-core-timeout-resize
…rdicts land before it Ruling C on the timeout value: 40 -> 50. The worst observed p + s on "Run this shard's tests" is 26m38s (run 37923333449, Test Core 3/6), so the guard's window verdict lands at 36m38s and its cap-deferred verdict at 46m38s, inside 50 by 3m22s; the slowest job wall, 27m05s, is within 80% of 50. The revert condition now admits a lower value only when a re-measured window keeps both guard paths covered and the slowest job wall at or under 80% of it. Claude-Session: https://claude.ai/code/session_01LYXc6ckoWuZyVZpWYizdMh Co-authored-by: Claude <noreply@anthropic.com>
objectstack-fleet
Bot
deleted the
claude/issue-22075-test-core-timeout-resize
branch
October 10, 2026 04:02
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 #22075
Clause-②: no
What this does
This PR re-sizes the
Test Coreshard job'stimeout-minutesin.github/workflows/ci.ymlfrom 45 to 50, per ruling C on #22516 (record6091472780, the maintainer's 「C 升到 50 (Recommended)」). It also rewrites the rationale comment above the value, so the value is derived and the revert condition is stated against measurement. This is Done-when clause 3 of the card. One file changes: a comment plus one value. No step, matrix, job name, required context, stall-guard setting or other job's timeout changes.Rulings.
6082946866with 「A 停在 3 片收口 (Recommended)」 (record6083012192).FILE_SHARDED_PACKAGESstays{ '@objectstack/cli': 3 }.5919483472.6085497720measured that at 40 the stall guard's cap-deferred verdict misses 60 of 396 observations. Decision [Decision] Test Core shard timeout: land 40 as ruled, keep 45, or raise to 50 so the stall guard's cap verdict lands before the job dies #22516 put three choices to the maintainer, who picked C, 50. This PR is clause 3, so it closes the card.The window
The window covers every CI run whose tested tree carries
5919483472. Read from the jobs API at 2026-10-09T16:20Z.push,scheduleandmerge_group, the run's head commit must answeraheadoridenticaltoGET compare/5919483472...HEAD_SHA. That is 29aheadand 1identical(the round-3 queue group itself). The control3ca71b6e05, its parent, answersbehind.pull_request, the run must be created at or after 11:03:23Z, whenmainfirst carried the commit. A PR run tests the PR merged ontomainas of that moment.completed_at − started_atof eachTest Core (N/6)job, on attempt 1. No run in the window was re-run.(3/6)(3/6)failure)(3/6)failure)(3/6)(3/6), 27m05s(4/6), cancelled 1095 s into its test step. That is below the maximum above.Test Core (1/6), the shard that ran the whole CLI alone.Did the CLI run as slices? I read the aggregate
Test Corejob's timing table on 10 runs. On each,@objectstack/clireadsall 3 slices.Every included run (66), with its six job walls
Test Core (1/6)–(6/6)job walls (min)Why 50
Three measured readings set the value, and the largest answer wins. All are taken over the window above, on the slowest observation: run 37923333449
Test Core (3/6). Its "Run this shard's tests" step ends 26m38s after the job starts (p 6m59s plus s 19m39s).Readings 1 and 2 come from
node scripts/measure-stall-guard-headroom.mjs --fromover the window's saved jobs payloads. The 50 row was taken on this branch's tree at215ab47a7. The other rows are round 1's readings over the same window.timeout-minutes50 is the smallest whole-five value at which both guard verdicts land before the job timeout on every observation. The deferred path needs a wall of at least 47 min.
check-stall-guard-budget --listat215ab47a7reads, on all three guardedteststeps: window 10m, cap 20m, budget 50m, slack 30m. The seat re-ran it at this head (exit 0).The comment
5919483472).measure-stall-guard-headroomover every completed pull_request, merge_group, push and schedule run in it. On that window, both guard verdicts (p + s + 10m and p + s + 20m) must land before the new value on every observation. The slowestTest Core (N/6)job wall must also be at or under 80% of the new value.Gates
Derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackagainst the merge base99801d831, afterorigin/mainwas merged in (merge commitf9f2661e5, clean). It names 1 path and 47 commands. Each command ran at head215ab47a7, with its exit code written before any pipe.--ranreconciles: 47 accounted for, 43 run, 4 NOT-MEASURED.pnpm check:stall-guard-budget;pnpm check:stall-guard-headroom(35 assertion(s) passed);pnpm check:required-contexts(7 required context name(s) pinned across 3 workflow(s));pnpm check:workflow-step-name-quoting(752 step name(s)).check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closureandcheck:sourcemap-no-sources-content. Each loads every package's builtdist/, and this diff touches no package. They are NOT MEASURED.pnpm check:pm-dispatch-gatesran detached and exited 0, its fast tier only: 1825 cases pass, 6 slow sections deferred. Off CI that is now the script's default. CI runs both tiers.node scripts/check-stall-guard-budget.mjsexits 0: "every effective cap clears its job budget by at least one stall window".--verify-required-set,check-shard-attestation --emit/--verify,check-test-completeness) are NOT MEASURED locally by construction. CI runs them.No package and no published file is touched, so this PR carries
skip-changeset.Acceptance notes
Test Core, per the same instrument:dogfood"Boot example apps and exercise real user flows" (needs 33m, has 30m);temporal-conformance"Run the non-SQL temporal backends under the skewed process zone" (needs 31m, has 30m).Test Coreonly. These two are recorded so the trade is visible.Generated by Claude Code