Skip to content

check-single-authz-resolver 的扫描语料没有下限断言:根解析成功但一个文件都没扫到仍然绿(observation) #5916

Description

@os-zhuang

模式

#4932 完全同族,第三个门禁。实现 #4932 时顺手核到的,不在那一单的文件面内,单独记账。

scripts/check-single-authz-resolver.mjs 已经补过 #4916 那一半 —— 每个 SCAN_ROOTS 先解析,死根按名报错:

function collectScanFiles(root = ROOT, roots = SCAN_ROOTS) {
  assertRootsResolvable(root, roots);
  const out = [];
  for (const rel of roots) walk(join(root, rel), out);
  return out;   // <- 长度从不断言
}

缺的是另一半:根解析成功、但走完一个文件都没收到,out 为空 → 检查 (1) 遍历空集合 → 零 error → 绿。目录还在、可读,assertRootsResolvable 满意;语料搬走了(子树迁出 packages/、扩展名换了、walk 的过滤条件收窄)这件事没有任何断言看得见。

它自己的模块头已经把问题写出来了

scripts/check-single-authz-resolver.mjs:23-36 那段:

walk() used to open with … the scan cannot tell you it never ran; only its (unprinted) file count could, and nobody reads a count that is not printed.

那一段接着说,packages/ 整体改名今天之所以会被下游抓到,是因为两个 DELEGATOR 恰好也在同一个根下,并明说这是「luck, not coverage」。补一条扫描数下限就把这份运气换成机制。

为什么是 observation,不是当前缺陷

SCAN_ROOTS = ['packages'],今天有数千个 .ts,实测扫描数远大于零 —— 记录的是可蒸发性,不是已蒸发,和 #4932 正文的定性一致。

修法(与 #4932 落地的形状一致)

collectScanFiles 里按根统计:任一声明的根产出 0 个文件即抛错、按名报红。参 PR(#4932)给 scripts/check-doc-authoring.mjsEmptyRootError —— 下限取「每个声明的根至少 1 个文件」,由本次 walk 现算,不引入需要维护的高水位棘轮;并在 self-test 里钉红/绿两个方向(单根为空 → 红且只点名该根;全空 → 红且报总数 0;恢复 → 绿)。

相关

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions