Skip to content

三份云端联网搜索与云端工具连接的自有测试从来没人跑 —— 逐份放进检查或写明不放的理由 #649

Description

@jinjunnn

我们给「云端联网搜索的保护」和「云端工具连接的多来源配置、断线后恢复」写过三份自动检查,但它们从来没被放进每次改代码都会跑的那套检查里 —— 写完之后就再没人跑过。结果是:这几块功能以后被改坏,不会有任何提醒;等哪天真要靠它们时,它们可能早就跟代码对不上了。要做的事很小:量一下每份跑多久、稳不稳,快且稳的放进去,慢或不稳的明说不放。不做的话短期没有可见损失,只是这几块功能少一层防护。

事实

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(它承载该票的行为闸,不纳入
就是空闸门)。剩下三份刻意没有顺手纳入,因为它们各自有需要先决定的问题:

  1. alpha-mcp-websearch-gate.test.ts 跑 23.45 秒,而目前整个 test job 的其余部分加起来
    也就几十秒。加进去是否值得,取决于愿意为这组断言付多少 CI 时间。
  2. 同一份测试打印 Bun.serve 10 秒超时告警。需要先判断它是良性(测试刻意不设
    idleTimeout)还是一个真实的资源泄漏 —— 在 CI 的共享 runner 上,10 秒级的阻塞比本地更容易
    变成 flake。把一个会 flake 的用例加进 CI,比不加更坏(它会训练所有人无视红灯)。
  3. 两份 alpha-cloud-mcp-*.test.ts 快且绿,看起来可以直接加;但它们涉及云 MCP 的多源/复活
    路径,需要确认在没有网络、没有凭据的 CI 环境里断言的仍是同一件事,而不是退化成一条恒真路径
    (即「条件门」)。

验收标准

  • 逐份判定:纳入 CI / 不纳入 + 理由。不纳入的必须写清替代保障(否则就是承认这组断言无人执行)。
  • 决定纳入的文件登记进 scripts/gate-files.tsv(精确条数,用 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」,则改成按模式匹配(如 test/**/alpha-*.test.ts)而不是逐份罗列 —— 2026-09-16 删除:条件式的预防性机制,今天没有第四份未登记的同类文件,删掉它不影响本票判定

出处

#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

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:governanceStandards or lifecycle governancetype:choreMaintenance or operational work

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions