Skip to content

电脑代理 stdin 停机用例不再用 5 秒墙钟,改成和重连赛跑 (#79) - #88

Merged
joesmart merged 1 commit into
mainfrom
joesmart/fix-ci-flaky
Oct 23, 2026
Merged

joesmart merged 1 commit into
mainfrom
joesmart/fix-ci-flaky

Conversation

@joesmart

@joesmart joesmart commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

改了什么

只改了一条测试:packages/computer-agent/test/process.test.ts「stdin 关闭后代理自己停机」。原来写的是 waitForExit(5_000),现在改成「进程退出」和「第二条重连日志」赛跑,断言退出先到,和旁边那条「控制面连不上时进程不退出」写法一样。产品代码没动。

为什么

5 秒是从 spawn 算起的,不只算停机。在 CI 上加了临时探针,在 ubuntu-latest、Node 24 上跑了 39 轮,其中 36 轮压了 4 个 busy loop:

  • 子进程起来到 imports done(tsx 编译、加载 computer-agent → bot-runner → shared 整棵模块树):2.6–4.1s
  • spawn 到退出,最长 4.46s
  • 读到启动 JSON → stop → exit:100–200ms

时间几乎全花在冷启动上,停机本身只占零头。pnpm -r test 是各包并行跑的,CPU 争抢比探针压得更重,启动就会超过 5s。失败的那次 run 里也能看到:同样要加载这棵模块树的 AGENT_TOKEN 用例要 2s 左右,这条超过 5014ms。

赛跑能量的就是停机本身:代理要是没认 stdin 关闭,会一直去连 ws://127.0.0.1:1,第二条重连日志会先到。机器慢只会让两边一起变慢,不改变谁先到。

本地压测复现了同一个红:每轮换一个新的 TMPDIR 逼 tsx 冷编译,18 核上压 36 个 busy loop,旧写法 10 轮红 4 轮,报错就是 等了 5000ms 进程还没退出,绿的几轮也要 4.5–4.9s;新写法 10 轮全绿,最慢一轮 6.3s。

本地验证过它真能抓住坏掉的停机:把 main.ts 里的 process.stdin.once("end", stop) 去掉,这条用例 1.5s 就红了(expected '输出' to be '退出 0')。还原后是绿的。

另一条:bot-runner「截图进模型是图片……」没修

同一个 issue 里的 Chrome 截图用例,在 run 39767590315 和 PR run 39564987085 里失败过,都是 Page.captureScreenshot 30 秒不回。

探针在 CI 上照搬 ci.yml 的 chromium、AppArmor、Xvfb 配置,跑了 48 轮(空闲 24 轮、加负载 24 轮),一次都没卡住:

  • 标签页一直是 visible true 780x493
  • captureScreenshot 要 43–94ms
  • 整条用例空闲约 350ms,加负载 7.5–10s,慢在截图以外的地方

最可能的根因是 headless Chromium 在 CI 满载时截图偶尔卡住,但没有复现,也没有证据,所以没有硬改代码或超时。这条拆到 #89 单独跟。

怎么验证的

export E2E_API_PORT=3411 E2E_WEB_PORT=5411
pnpm format:check                                        → All matched files use Prettier code style!
pnpm typecheck                                           → 全部 Done
pnpm lint                                                → 0 error(只有原有的 warning)
pnpm --filter @baize/computer-agent test                 → 15 files,194 passed | 1 skipped
.lane/pg-serial.sh pnpm --filter @baize/e2e test         → 26 files,53 passed
.lane/pg-serial.sh pnpm check                            → exit 0
  shared 277 passed;web vitest 351 passed,Playwright 453 passed
  bot-runner 1701 passed | 15 skipped;control-plane 1530 passed | 1 skipped
  computer-agent 194 passed | 1 skipped;desktop 121 passed;e2e 53 passed

另外两条 CI 不稳,根因不同,没在这里修

临时探针提交(workflow 和三处 PROBE 代码)已从分支历史里拿掉,这里的 diff 只有这一条测试。

Refs #79(只修了「stdin 关闭后代理自己停机」,截图、team-offer、run-end 三条留在 #79 跟进)

🤖 Generated with Claude Code

https://claude.ai/code/session_01Be3SZps2JjqvyrJ1vbLmni

@joesmart
joesmart force-pushed the joesmart/fix-ci-flaky branch from 3b53b30 to 408349b Compare October 23, 2026 14:35
@joesmart
joesmart merged commit b893aca into main Oct 23, 2026
1 check passed
@joesmart
joesmart deleted the joesmart/fix-ci-flaky branch October 23, 2026 14:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant