我们给「云端联网搜索的保护」和「云端工具连接的多来源配置、断线后恢复」写过三份自动检查,但它们从来没被放进每次改代码都会跑的那套检查里 —— 写完之后就再没人跑过。结果是:这几块功能以后被改坏,不会有任何提醒;等哪天真要靠它们时,它们可能早就跟代码对不上了。要做的事很小:量一下每份跑多久、稳不稳,快且稳的放进去,慢或不稳的明说不放。不做的话短期没有可见损失,只是这几块功能少一层防护。
事实
packages/opencode/test 下有 4 份 alpha 自有测试,它们当前不在任何 CI 里跑:
| 文件 |
本地实测 |
备注 |
test/tool/alpha-mcp-websearch-gate.test.ts |
7 pass / 0 fail,23.45 秒 |
跑动会打印 [Bun.serve]: request timed out after 10 seconds. Pass idleTimeout to configure. |
test/mcp/alpha-cloud-mcp-multisource.test.ts |
15 pass / 0 fail(与下一份合计) |
快 |
test/mcp/alpha-cloud-mcp-revival.test.ts |
同上 |
快 |
test/tool/alpha-websearch-failure.test.ts |
45 pass / 0 fail |
已在 #647/PR #648 里纳入 CI,本票不含它 |
alpha-ci.yml 的 test job 历史上只跑 packages/alpha-contracts-consumer、packages/ext、
packages/ui-mac。packages/opencode 全量测试不属 alpha(是上游的),所以整个目录被排除 ——
连带把 alpha 自己写的那几份也排除了。
alpha-websearch-failure.test.ts 的文件抬头早就把这条盲区写下来了:
…而 alpha CI 又不跑 opencode 测试,构成治理盲区。
为什么要单独评估,而不是顺手加进去
#647 那一轮只把 alpha-websearch-failure.test.ts 纳入了 CI(它承载该票的行为闸,不纳入
就是空闸门)。剩下三份刻意没有顺手纳入,因为它们各自有需要先决定的问题:
alpha-mcp-websearch-gate.test.ts 跑 23.45 秒,而目前整个 test job 的其余部分加起来
也就几十秒。加进去是否值得,取决于愿意为这组断言付多少 CI 时间。
- 同一份测试打印
Bun.serve 10 秒超时告警。需要先判断它是良性(测试刻意不设
idleTimeout)还是一个真实的资源泄漏 —— 在 CI 的共享 runner 上,10 秒级的阻塞比本地更容易
变成 flake。把一个会 flake 的用例加进 CI,比不加更坏(它会训练所有人无视红灯)。
- 两份
alpha-cloud-mcp-*.test.ts 快且绿,看起来可以直接加;但它们涉及云 MCP 的多源/复活
路径,需要确认在没有网络、没有凭据的 CI 环境里断言的仍是同一件事,而不是退化成一条恒真路径
(即「条件门」)。
验收标准
出处
#647 / PR #648 收尾时的建议,owner 同意另开票。
追加:docs-only PR 会跳过全部测试 job,而类级闸的扫描面包含 docs/**/*.ts
2026-09-16 删除:裁定取原候选 (a) —— 维持现状、不改失败信息。它是延迟捕获而非永久绕过(违规落主干后下一个代码 PR 即红),零租户、单开发者下「红在错误的人面前」代价很小,且与本票主题(三份测试进不进门)无关。原文见编辑历史。
Boundary
- 只处置
packages/opencode/test/tool/alpha-mcp-websearch-gate.test.ts、test/mcp/alpha-cloud-mcp-multisource.test.ts、test/mcp/alpha-cloud-mcp-revival.test.ts 三份;登记落点为 scripts/gate-files.tsv(bash scripts/assert-gate-files.sh --update 从实测写回)与 packages/ui-mac/src/main/gate-file-registry.test.ts 的 REFERENCED_BUT_UNREGISTERED,不另写 CI 步骤。
Out of scope
我们给「云端联网搜索的保护」和「云端工具连接的多来源配置、断线后恢复」写过三份自动检查,但它们从来没被放进每次改代码都会跑的那套检查里 —— 写完之后就再没人跑过。结果是:这几块功能以后被改坏,不会有任何提醒;等哪天真要靠它们时,它们可能早就跟代码对不上了。要做的事很小:量一下每份跑多久、稳不稳,快且稳的放进去,慢或不稳的明说不放。不做的话短期没有可见损失,只是这几块功能少一层防护。
事实
packages/opencode/test下有 4 份 alpha 自有测试,它们当前不在任何 CI 里跑:test/tool/alpha-mcp-websearch-gate.test.ts[Bun.serve]: request timed out after 10 seconds. Pass idleTimeout to configure.test/mcp/alpha-cloud-mcp-multisource.test.tstest/mcp/alpha-cloud-mcp-revival.test.tstest/tool/alpha-websearch-failure.test.tsalpha-ci.yml的testjob 历史上只跑packages/alpha-contracts-consumer、packages/ext、packages/ui-mac。packages/opencode全量测试不属 alpha(是上游的),所以整个目录被排除 ——连带把 alpha 自己写的那几份也排除了。
alpha-websearch-failure.test.ts的文件抬头早就把这条盲区写下来了:为什么要单独评估,而不是顺手加进去
#647 那一轮只把
alpha-websearch-failure.test.ts纳入了 CI(它承载该票的行为闸,不纳入就是空闸门)。剩下三份刻意没有顺手纳入,因为它们各自有需要先决定的问题:
alpha-mcp-websearch-gate.test.ts跑 23.45 秒,而目前整个testjob 的其余部分加起来也就几十秒。加进去是否值得,取决于愿意为这组断言付多少 CI 时间。
Bun.serve10 秒超时告警。需要先判断它是良性(测试刻意不设idleTimeout)还是一个真实的资源泄漏 —— 在 CI 的共享 runner 上,10 秒级的阻塞比本地更容易变成 flake。把一个会 flake 的用例加进 CI,比不加更坏(它会训练所有人无视红灯)。
alpha-cloud-mcp-*.test.ts快且绿,看起来可以直接加;但它们涉及云 MCP 的多源/复活路径,需要确认在没有网络、没有凭据的 CI 环境里断言的仍是同一件事,而不是退化成一条恒真路径
(即「条件门」)。
验收标准
bash scripts/assert-gate-files.sh --update从实测写回),并从 gate-file-registry.test.ts 的 REFERENCED_BUT_UNREGISTERED 移除;不另写 CI 步骤。 (2026-09-16 改写,原文见编辑历史)alpha-mcp-websearch-gate.test.ts:登记前在本机用bash scripts/bun-test-floor.sh单跑该文件 3 次,记录每次耗时与[Bun.serve]: request timed out次数;3 次均为 0 次告警则按 AC2 登记,否则不登记并把实测数字写进 REFERENCED_BUT_UNREGISTERED 的理由。 (2026-09-16 改写,原文见编辑历史)若判定「以后 alpha 在 opencode 下新增的测试都应自动进 CI」,则改成按模式匹配(如—— 2026-09-16 删除:条件式的预防性机制,今天没有第四份未登记的同类文件,删掉它不影响本票判定test/**/alpha-*.test.ts)而不是逐份罗列出处
#647 / PR #648 收尾时的建议,owner 同意另开票。
追加:docs-only PR 会跳过全部测试 job,而类级闸的扫描面包含docs/**/*.ts2026-09-16 删除:裁定取原候选 (a) —— 维持现状、不改失败信息。它是延迟捕获而非永久绕过(违规落主干后下一个代码 PR 即红),零租户、单开发者下「红在错误的人面前」代价很小,且与本票主题(三份测试进不进门)无关。原文见编辑历史。
Boundary
packages/opencode/test/tool/alpha-mcp-websearch-gate.test.ts、test/mcp/alpha-cloud-mcp-multisource.test.ts、test/mcp/alpha-cloud-mcp-revival.test.ts三份;登记落点为scripts/gate-files.tsv(bash scripts/assert-gate-files.sh --update从实测写回)与packages/ui-mac/src/main/gate-file-registry.test.ts的REFERENCED_BUT_UNREGISTERED,不另写 CI 步骤。Out of scope
alpha-websearch-failure.test.ts([E7][CODE] readBoundedBody 只读首个 chunk 导致响应静默截断 —— keyless web search 真调失败 #647/PR fix(e7): readBoundedBody 读全响应体 —— 修 runForEachWhile 只读首个 chunk 的静默截断 #648)。alpha-*.test.ts的机制(2026-09-16 已删除)。