Skip to content

check-single-authz-resolver 的 walk 只收 .ts,packages/ 下 12 个 .mts 从不被扫描(observation) #6070

Description

@hotlong

#5916(PR #6056)补扫描语料下限断言时顺带量到的残余,与该 PR 的修法正交,不在其申报面内,故单独记录。

观察

scripts/check-single-authz-resolver.mjswalk() 收集条件是:

else if (e.endsWith('.ts') && !e.endsWith('.test.ts') && !e.endsWith('.d.ts')) out.push(p);

'x.mts'.endsWith('.ts')false(ts 前一个字符是 m 而非 .),.cts 同理。所以声明的扫描根 packages/ 下的 .mts / .cts 一个都不进语料 —— 检查 (1)「不存在重复的请求上下文解析器」这个结论,是在不包含它们的集合上得出的。

origin/main@efedd28 实测:

packages/ 下 .mts/.cts:   12
packages/ 下 .ts:       3053

12 个文件全部在 packages/spec/scripts/ 下(check-strictness-ledger.mtsliveness/*.mts 等构建/存活性脚本)。

今天是休眠的,不是漏判

逐个查过这 12 个文件,没有任何一个同时引用 sys_user_rolesys_user_permission_set,即没有一个会触发该门禁的启发式。所以今天没有真实漏判,用户也碰不到 —— 按 observation 归档,不带 pm:queue,请分诊裁定。

风险是形状上的:若日后有请求上下文解析逻辑落到 .mts/.cts(或仓库整体迁移扩展名),这道门会在看不见它的情况下继续印绿,正是 #4930 / #5916 这一族反复关的那种"门跑了但没读到"。

#5916 的关系(为什么不是同一件事)

可能的修法(供分诊参考,未实现)

  1. 把过滤器放宽到 /\.(m|c)?ts$/ 并保持 .d.ts / .test.ts 排除 —— 语料变大,需确认那 12 个脚本不会误触发启发式(实测不会);
  2. 或明确记录"只扫 .ts 是有意的",把理由写进模块头,让下一个读者不必重新推导。

按 1 更贴近"声明即执行":门禁声称读遍 packages/,那就该真的读遍。

相关:#5916(按根下限,已由 PR #6056 落地)、#4930 / #4916(死根按名报错)、#4932(同族先例)、#4690(「提取失败必须红」出处)。

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