⏱️ Give the runtime suites deadlines that clear them by a margin (#538) - #539
Merged
Conversation
On `main` at 5542c92 the composability battery killed the complete Deno suite at its thirty-minute ceiling, and the suite's own last line was `ok | 677 passed (4667 steps) | 0 failed (29m30s)`. That is #482 again one ceiling higher: a deadline firing on a healthy command, costing the signal it exists to give and supplying a false one. The thirty minutes #485 gave the suite tracked the duration observed then. The suite has grown since — on a runner of its own it went 1102s → 1150s → 1314s → 1327s over the last four pushes to `main`, and the battery stretches it by about a third (1427s → 1534s → 1697s → killed at 1800s). A ceiling that tracks a growing suite closely fires as soon as the suite grows into it, so the Deno suite now carries forty-five minutes: wide of the observed duration rather than just past it. The Node and Bun suites run under the same load, and Bun's is stretched to more than twice its standalone time: in the same run it finished healthy at 1,031s against the shared 1,200s ceiling, with Node's at 856s. Both now carry thirty minutes, so the next growth does not open the next `ci-main-red` issue for the same reason. Everything else keeps the twenty-minute default. `commandTimeout()` is still the one place a deadline is answered, the opening line still names every command whose deadline differs, and an explicit coordinator timeout still overrides them all.
PR #539: ⏱️ Give the runtime suites deadlines that clear them by a margin (#538)2 files, +57 / -24 Scope✅ PR scope looks good. StructuralOxlint structural signals:
Slop✅ Slop indicators look low. Static AnalysisOxlint: 4 diagnostics across 1 file (1 rule) no-unnecessary-type-assertion (4): scripts/lib/verify.ts CorrectnessNo extraneous code patterns detected. |
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.
Why
mainis red (#538). On 5542c92 thecomposabilitybattery killed the complete Deno suite at its thirty-minute ceiling; the suite's own last line wasok | 677 passed (4667 steps) | 0 failed (29m30s). That is #482 one ceiling higher — a deadline firing on a healthy command, which costs the signal it exists to give and supplies a false one.The thirty minutes #485 gave the suite tracked the duration observed then, and the suite has grown into it. Standalone (
test-denojob) over the last four pushes tomain: 1102s → 1150s → 1314s → 1327s. Under the battery, which stretches it by about a third: 1427s → 1534s → 1697s → killed at 1800s. Bun's suite in the same run finished healthy at 1,031s against the shared 1,200s ceiling (Node's at 856s), so it is the next one to fire for the same reason.Run: https://github.com/taras/executable.md/actions/runs/32584003585
What changes
Before:
testcarried 30m; every other command, the Node and Bun suites included, carried the 20m default. The battery announced20m deadline each except test 30m.After:
testcarries 45m;test:nodeandtest:buncarry 30m; everything else keeps 20m. The battery announces20m deadline each except test 45m, test:node 30m, test:bun 30m, and a settled command is still reported with the deadline that settled it.What must stay true
commandTimeout()inscripts/lib/verify.ts, read by the race and both report lines; checked bycommandTimeoutanddeadline reportinginscripts/tests/verify-coordinator.test.ts.How to verify it
deno task test scripts/tests/verify-coordinator.test.ts— 5 passed (32 steps). ThecommandTimeoutcases fail if any suite's deadline is not the one stated here or another command picked one up; thedeadline reportingcases fail if the announcement names a deadline no command runs under.deno task lintandpnpm exec tsc --project tsconfig.node.json --noEmitpass.composabilityrunning here under theci-main-red-fixlabel: the same battery that killed the suite onmain, with the suite now clearing its ceiling.Scope
Included
BATTERY, their rationale, and the tests that pin them.Intentionally unchanged
checkat 83s).composabilityruns.packages/workflow/tests/git-*.test.tsandpull-request*.test.ts(each roughly 1.5–2× slower); that is worth its own look, but it is a speed question, not the defect that reddenedmain.Risks and limitations
test-deno,test-node,test-bun) are where a hang would be seen first.Scope confirmation