Skip to content

flaky: spec/src/cloud/tenant.test.ts 的 #4739 导出面用例贴着 5s 超时 —— 今晚已两次把不相干的 PR 踢出合并队列 #4796

Description

@os-zhuang

现象

packages/spec/src/cloud/tenant.test.ts 这条用例非确定性超时:

FAIL src/cloud/tenant.test.ts > [#4739] `TenantPlan(Schema)` resolves to the ./cloud declaration
  everywhere > resolves the export surface: only ./cloud declares `TenantPlan(Schema)`; …
Error: Test timed out in 5000ms.

Test Files  1 failed | 292 passed (293)
     Tests  1 failed | 7350 passed (7351)

7350 条过,唯一一条红,而且是超时不是断言失败

它是 flaky 的硬证据(不是回归)

同一份 spec 代码,14 分钟内一过一红:

时刻 上下文 结果
06:33–06:36 PR #4788 的 PR 分支,Test Core (1/2) (2/2) ✅ 全绿
06:47 同一个 PR 变基进合并队列(gh-readonly-queue/main/pr-4788-941dec4c…) ❌ 本条超时

PR #4788 只改 packages/plugins/plugin-authdocs/adr/0069,碰不到 packages/spec 的任何文件。中间也没有任何 spec 侧改动进入 —— 后来排队的 #4783(base 更新)CI 是绿的,main 没坏。

为什么这不是「重跑一次就行」

今晚这是第二次了,两次都打在不相干的 PR 上:

  1. 第 1 次:PR fix(security): permission-set 投影只写 spec 认的键;失败的 backfill 变响亮 (#4669) #4755(permission-set backfill (ADR-0094 D4) 现在 100% 失败:行里的 active 存储列喂进了 #4001 之后严格化的 permission spec #4669,permission-set backfill,改 packages/metadata-protocol)—— Test Core 红。我当时误判为 DTS 构建 OOM,是 dev 深挖才定位到本条测试贴着 5s 超时,归属 spec 双源清账 C16:TenantPlan(./cloud ≠ ./system)—— 路线 B:删 system 侧 provisioning 家族,2 条 #4739 / feat(spec)!: 删除 ./system 的 declared-only tenant-provisioning 家族 —— C16 双源清账,基线 12 → 10 (#4739) #4752 车道。
  2. 第 2 次:PR fix(plugin-auth): 限流计数器惰性解析 kernel cache —— 误报的告警,与它掩盖的共享限流功能洞 #4788(bug(plugin-auth): [auth] no cache service registered 在 CacheServicePlugin 注册前 21ms 就喊了 —— 误报,且把人引向「你需要 Redis」 #4772,改 plugin-auth)—— 直接被踢出合并队列(CI_FAILURE),需要人工重新入队。

代价不是「多等一轮」,而是:

建议方向

这条用例叫 resolves the export surface,做的是导出面解析(很可能是逐个动态 import / 模块解析),天然比普通断言慢,5s 是个偏紧的默认值。两条路:

  1. 给这条(或整个文件)一个符合其真实工作量的 timeout —— 最省事,但要先量一下它正常耗时多少,确认 5s 是"偏紧"而不是"刚好"。如果正常就要 4.5s,那放宽到 10s 只是把下次踩雷推后。
  2. 让它别在测试里做重解析 —— 把导出面解析的结果做成构建期产物(spec 已经有 authorable-surface.json 一类的生成物基线),测试只比对,不现场解析。这条更符合仓内既有做法,也顺带让这个检查变快、变确定。

倾向 2,但先测量再决定 —— 不要在不知道它正常耗时的情况下直接调大数字。

车道归属

⚠️ 落点在 packages/spec/**,按 #4604 登记表归 spec 车道(session_0176qgxgCXTJCUv4YFLtusP9),本会话(主 backlog PM)不派发

但它影响的是所有车道的合并队列,所以优先级建议高于普通 spec 清账单 —— 它每命中一次,成本就落在一个完全无关的 PR 作者头上。这条 issue 由主 backlog PM 代为立单,正是因为受害者在我这一侧。

关联

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions