在 #5286 为新的 PINS_CHECKED 不变式做全仓扫描时发现,记录备查,未认领。基线 origin/main @ 01c0baef9。
事实
packages/metadata-core/test/types.test.ts 含 @ts-expect-error 指令,而该文件不在该包 tsc program 里 :
packages/metadata-core/tsconfig.json
"include": ["src/**/*"]
"exclude": ["node_modules", "dist"]
package.json "typecheck": "tsc --noEmit"
用 tsc --showConfig 解析实际 program,test/ 树整体不在其中(program 里只有 src/**,例如 ./src/protocol-handshake.test.ts、./src/objects/sys-view-definition.object.test.ts)。
成因和 #5286 那一例不同 ,这一点是本单的要点:#5286 里 packages/spec 是被 exclude: ["**/*.test.ts"] 显式排除的;这里没有任何 exclude 指向它,它只是落在 include 根之外 。后果是 check:type-check-coverage 的 TESTS_COVERED 也看不见它——那条不变式只统计 include 根之下的测试文件,所以这个包的 testFiles 计数是 0,既不报警也不进 TEST_DEBT。两种「未检查」形态,一种检测手段抓不住另一种。
后果
和 #5286 的结论一样:指令从不被求值 。删掉那一行 @ts-expect-error,pnpm typecheck、pnpm test、check:type-check-coverage 全部照绿。它看起来像一条被钉住的契约,实际什么也没钉住。
现状(已被记账,非未知)
#5286 的 PR 新增了全仓不变式 PINS_CHECKED(scripts/check-type-check-coverage.mjs):带 @ts-expect-error 的测试文件不得落在任何 tsc program 之外。本文件作为 seed 之一登记在 PHANTOM_PIN_DEBT 里,该台账只减不增、对新条目关闭 ,条目一旦不再成立(文件进 program / 指令消失 / 文件移动)RECONCILED 方向会强制删除。也就是说这条已经是「可数」的了,本单是给它一个可认领的修复入口。
建议修复
任选其一,都能让 PHANTOM_PIN_DEBT 的这条自动变红并被删除:
把 include 扩到 ["src/**/*", "test/**/*"](最直接;需先看 test/ 下还有多少现存类型错误);或
按 @ts-expect-error 退役 pin 在 packages/spec 里是幽灵检查:tsconfig 把 **/*.test.ts 排除出唯一的 tsc --noEmit #5286 的路子加一份 sibling tsconfig.test.json 并在 typecheck 脚本里指名(@ts-expect-error 退役 pin 在 packages/spec 里是幽灵检查:tsconfig 把 **/*.test.ts 排除出唯一的 tsc --noEmit #5286 已让 TESTS_COVERED 识别被脚本链指名的 sibling 配置)。
修完记得在同一个 PR 里删掉 scripts/check-type-check-coverage.mjs 中 PHANTOM_PIN_DEBT 的对应条目——不删会红。
关联:#5286 (不变式与台账来源)、#4311 (typecheck 覆盖棘轮)、#5449 (packages/client 那一例,另一种成因:exclude 显式排除)。
在 #5286 为新的
PINS_CHECKED不变式做全仓扫描时发现,记录备查,未认领。基线origin/main@01c0baef9。事实
packages/metadata-core/test/types.test.ts含@ts-expect-error指令,而该文件不在该包 tsc program 里:用
tsc --showConfig解析实际 program,test/树整体不在其中(program 里只有src/**,例如./src/protocol-handshake.test.ts、./src/objects/sys-view-definition.object.test.ts)。成因和 #5286 那一例不同,这一点是本单的要点:#5286 里
packages/spec是被exclude: ["**/*.test.ts"]显式排除的;这里没有任何 exclude 指向它,它只是落在 include 根之外。后果是check:type-check-coverage的TESTS_COVERED也看不见它——那条不变式只统计 include 根之下的测试文件,所以这个包的testFiles计数是 0,既不报警也不进TEST_DEBT。两种「未检查」形态,一种检测手段抓不住另一种。后果
和 #5286 的结论一样:指令从不被求值。删掉那一行
@ts-expect-error,pnpm typecheck、pnpm test、check:type-check-coverage全部照绿。它看起来像一条被钉住的契约,实际什么也没钉住。现状(已被记账,非未知)
#5286 的 PR 新增了全仓不变式
PINS_CHECKED(scripts/check-type-check-coverage.mjs):带@ts-expect-error的测试文件不得落在任何 tsc program 之外。本文件作为 seed 之一登记在PHANTOM_PIN_DEBT里,该台账只减不增、对新条目关闭,条目一旦不再成立(文件进 program / 指令消失 / 文件移动)RECONCILED 方向会强制删除。也就是说这条已经是「可数」的了,本单是给它一个可认领的修复入口。建议修复
任选其一,都能让
PHANTOM_PIN_DEBT的这条自动变红并被删除:include扩到["src/**/*", "test/**/*"](最直接;需先看test/下还有多少现存类型错误);或@ts-expect-error退役 pin 在packages/spec里是幽灵检查:tsconfig 把**/*.test.ts排除出唯一的tsc --noEmit#5286 的路子加一份 siblingtsconfig.test.json并在typecheck脚本里指名(@ts-expect-error退役 pin 在packages/spec里是幽灵检查:tsconfig 把**/*.test.ts排除出唯一的tsc --noEmit#5286 已让TESTS_COVERED识别被脚本链指名的 sibling 配置)。修完记得在同一个 PR 里删掉
scripts/check-type-check-coverage.mjs中PHANTOM_PIN_DEBT的对应条目——不删会红。关联:#5286(不变式与台账来源)、#4311(typecheck 覆盖棘轮)、#5449(
packages/client那一例,另一种成因:exclude 显式排除)。