Repository navigation
[PR] fix(ci): give timing-flake shapes one bounded retry and widen the two strictest victim budgets (#4161) - #4379
Merged
Merged
Conversation
… strictest victim budgets (#4161)
Contributor
📦 Merged Build PublishedThis merge to master was published as npm install -g [email protected] # this exact build
npm install -g billion-context@master # always the newest merged build
|
This was referenced Oct 23, 2026
Closed
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.
(ai: anthropic-claude/claude-opus-4.5)
现象
windows-latest node-22 分片在 runner 负载高时随机变红,受害者轮换:issue760 的 waitFor「timeout waiting for initialize + tools/list responses」(~5 秒预算超时)、storage-full-flip 的 #3818 严格时序断言「the disabling tick must land a JSON write」「the safety valve lands a JSON envelope」(写落盘窗口断言)。master 自己也中过同样的红,排除任何单一 PR 回归——纯粹是共享 runner 负载把事件循环拖过了固定等待窗口。
修法(机制面 + 受害面,组合方案)
机制面:把这两种超时形状加进 run-ci-tests.mjs 已有的「可恢复分类」(继 #3029 静默死亡、#3665 drain、#4347 EBUSY 之后第四种):
timeout waiting for开头(15 个 e2e 套件共用的轮询到截止惯用式,issue760 即此类);匹配保持窄且字面,不放宽到所有 AssertionError。分类命中后走既有的整片有界重试一次,重试全绿才算过——确定性的真回归(比如回退写路径真死了)会在重试里复现、照样红,掩盖不了。分类器改动在 scripts/ci-failure-shapes.mjs(纯函数,可单测)+ run-ci-tests.mjs 接线。
受害面:两个最脆测试的等待窗口放宽,断言语义一字不改:
注意
本地验证(worktree 内)
node --import tsx --test tests/ci-runner-failure-shapes.test.ts→ 34/34 全过(新形状双向:该重试的重试、不该重试的同文件普通断言失败仍判 concrete 不重试;时序形状混入真断言失败/EBUSY 也判 concrete)node --import tsx --test tests/issue760-percall-conversation.test.ts tests/storage-full-flip.test.ts→ 18/18 全过(真跑,非 skip)npm run typecheck→ 干净Fixes #4161