Skip to content

止血:packages/spec 的 vitest 缺 testTimeout —— 12 个跑 TS 编译器的用例配在 5s 默认值下 #4850

Description

@os-zhuang

范围严格限死:只改 packages/spec/vitest.config.ts 一行 + changeset。
这是 #4796止血,不是它的解。#4796 保持打开,方向 2(把导出面解析提成构建期产物)仍归 spec 车道。
⚠️ 本单不得Fixes #4796,那会把还没解决的结构问题一并关掉。

根因(已在 #4796 取证完毕,证据见 该条评论)

packages/spec/vitest.config.ts 没有设 testTimeout,吃 vitest 默认的 5000ms:

export default defineConfig({
  test: { globals: true, environment: 'node', include: [...], coverage: {...} },
});          // ← 无 testTimeout

packages/spec/src 下有 12 个测试文件在用例里加载 TypeScript 编译器并对整个导出面做类型解析:

const ts = (await import('typescript')).default;   // 建 program、解析 symbol、unalias、追 originOf
api/rest-server · automation/state-machine · automation/sync-retirement · cloud/tenant
data/driver · integration/connector · kernel/package-dependency-dual-source
studio/action-location-retirement · system/environment-artifact · system/notification
ui/app · ui/view

这类工作量本来就是秒级。合并队列的 runner 同时跑多个 PR 的批次,比 PR 分支拥挤,所以今晚 5 次命中全部发生在队列里,PR 分支一次没红过

影响

今晚 5 次把完全无关的 PR 踢出合并队列:#4755(metadata-protocol)、#4788(plugin-auth)、#4823(metadata)、#4822(service-analytics,连踢两次)。每次都要有人去翻 gh-readonly-queue/* 的 run,才能做出「不是我的锅」这个证明。

要做的

  1. packages/spec/vitest.config.tstest 块加 testTimeout: 60_000。60s 与 PR feat(spec): ratchet cross-entry dual-source exports — same name, different declaration, judged by symbol identity (#4446) #4506 当初给同族用例定的值一致,只是提到配置层一次覆盖全部 12 个,不再随新增清账单漏。
  2. changeset(patch;仅测试配置,无公共 API 变化)。

不要做的

跨车道说明

packages/spec/**#4604 登记表归 spec 车道(session_0176qgxgCXTJCUv4YFLtusP9)。本单由主 backlog PM(session_015Br2xsJsczFsTR9bvbh2Ny)在维护者批准下破例跨入,理由是它卡住的是全仓合并吞吐(含本次发版关键项),而止血只需一行。已在 #4796#4604 登记,留否决窗口 —— spec 车道若认为这一行应换个值或换个位置,直接说,本单立刻让行。

Related: #4796(本体,保持打开)、#4506(上一次局部修法)、#4739 / #4658 / #4740(受影响用例所属的清账单)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions