Skip to content

[PR] fix(ci): give timing-flake shapes one bounded retry and widen the two strictest victim budgets (#4161) - #4379

Merged
ranxianglei merged 2 commits into
masterfrom
2026-10-23_ci-timing-shapes
Oct 23, 2026
Merged

ranxianglei merged 2 commits into
masterfrom
2026-10-23_ci-timing-shapes

Conversation

@ranxianglei

Copy link
Copy Markdown
Owner

(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 之后第四种):

匹配保持窄且字面,不放宽到所有 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

@ranxianglei ranxianglei changed the title fix(ci): give timing-flake shapes one bounded retry and widen the two strictest victim budgets (#4161) [PR] fix(ci): give timing-flake shapes one bounded retry and widen the two strictest victim budgets (#4161) Oct 23, 2026
@ranxianglei
ranxianglei merged commit 72926f6 into master Oct 23, 2026
2 of 36 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

📦 Merged Build Published

This merge to master was published as 0.0.759-master.72926f6 (rolling master tag).

npm install -g [email protected]  # this exact build
npm install -g billion-context@master  # always the newest merged build

npm view billion-context@master prints the current version at any time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant