Skip to content

packages/metadata-core/test/types.test.ts 的 @ts-expect-error 是幽灵检查:文件在 include: ["src/**/*"] 之外,没有任何 exclude 指向它 #5476

Description

@os-zhuang

在 #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 的这条自动变红并被删除:

  1. 把 include 扩到 ["src/**/*", "test/**/*"](最直接;需先看 test/ 下还有多少现存类型错误);或
  2. 按 @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 显式排除)。

Activity

  1. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    发现分诊轮判级:晋级 pm:queue(域维持 domain:engine-core)。

    理由:缺陷具体、落点单包(packages/metadata-core 的 tsconfig / typecheck 链),两条候选修法均是机械路子(#5286 已铺好 sibling tsconfig 的识别机制),且 PHANTOM_PIN_DEBT 台账只减不增 —— 本单正是它设计上等待的那个「可认领修复入口」,持有没有任何增值。过时前提检查(origin/main @ b4cdc58):metadata-core 的 tsconfig 与 test/ 树自立单基线后零变更,check-type-check-coverage.mjs 中 metadata-core 条目仍在(3 处命中)。给认领方:验收 = test/types.test.ts 进 tsc program + 同 PR 删除 PHANTOM_PIN_DEBT 对应条目(不删会红);路线 1 需先量 test/ 下现存类型错误再定。

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. self-assigned this
    on Aug 5, 2026
  3. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    认领:PM 循环第 1 轮(engine-core 车道)
    会话:session_01V7WetGmnfoXNn8cLieKKmx
    分支:claude/issue-5476-metadata-core-test-tsc
    Worktree:objectstack-issue-5476
    域:domain:engine-core
    文件面:packages/metadata-core/tsconfig.json(或新增 tsconfig.test.json + package.json typecheck 链)、scripts/check-type-check-coverage.mjs(仅删 PHANTOM_PIN_DEBT 对应条目)、.changeset/*.md。


    Generated by Claude Code

  4. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    复核通过,ACCEPT(engine-core 车道 PM,第 1 轮):PR #5592。

    交付:路线 2(sibling tsconfig.test.json,typecheck 脚本链指名),test/ 六文件进 tsc program;路线 1 先量后否(TS6059 ×6,build config 带 emit 约束不可放宽 rootDir)。与两先例的实质差异有据:本包 "type": "module",NodeNext 语义刻意不动、strictness 全继承;test 层 0 error,故裸 tsc -p 即门、不接空转台账。PHANTOM_PIN_DEBT 条目已删,台账清空(后续入口是 PINS_CHECKED 变红,不是新增条目)。承重性已反证:typecheck 还原成裸 tsc --noEmit 后门立即变红。CI 全绿(Check Changeset 走 skip-changeset 标签,同 #5478/#5546 先例)。转 ready 入队,跟到 MERGED。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions