模式
与 #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.mjs 的 EmptyRootError —— 下限取「每个声明的根至少 1 个文件」,由本次 walk 现算,不引入需要维护的高水位棘轮;并在 self-test 里钉红/绿两个方向(单根为空 → 红且只点名该根;全空 → 红且报总数 0;恢复 → 绿)。
相关
模式
与 #4932 完全同族,第三个门禁。实现 #4932 时顺手核到的,不在那一单的文件面内,单独记账。
scripts/check-single-authz-resolver.mjs已经补过 #4916 那一半 —— 每个SCAN_ROOTS先解析,死根按名报错:缺的是另一半:根解析成功、但走完一个文件都没收到,
out为空 → 检查 (1) 遍历空集合 → 零 error → 绿。目录还在、可读,assertRootsResolvable满意;语料搬走了(子树迁出packages/、扩展名换了、walk 的过滤条件收窄)这件事没有任何断言看得见。它自己的模块头已经把问题写出来了
scripts/check-single-authz-resolver.mjs:23-36那段:那一段接着说,
packages/整体改名今天之所以会被下游抓到,是因为两个 DELEGATOR 恰好也在同一个根下,并明说这是「luck, not coverage」。补一条扫描数下限就把这份运气换成机制。为什么是 observation,不是当前缺陷
SCAN_ROOTS = ['packages'],今天有数千个.ts,实测扫描数远大于零 —— 记录的是可蒸发性,不是已蒸发,和 #4932 正文的定性一致。修法(与 #4932 落地的形状一致)
collectScanFiles里按根统计:任一声明的根产出 0 个文件即抛错、按名报红。参 PR(#4932)给scripts/check-doc-authoring.mjs的EmptyRootError—— 下限取「每个声明的根至少 1 个文件」,由本次 walk 现算,不引入需要维护的高水位棘轮;并在 self-test 里钉红/绿两个方向(单根为空 → 红且只点名该根;全空 → 红且报总数 0;恢复 → 绿)。相关
catch {}吞掉不存在的 ROOT —— 目录一改名,门禁静默变瞎并继续报绿 #4916 / 三个 check:* 脚本的扫描根消失时返回空数组而不是报错 —— 目录一改名,门禁在零个文件上报绿 #4930 —— 死根按名报错的两次落地,是本条缺的那一半的另一半。