Skip to content

[finding][devx] check:type-check-debt 的 ledger 余量会让新写的 pin 变哑:mongodb 曾有 33 条余量吞掉一次真实回退,另有 5 条目前带 4–19 余量 #6376

Description

@os-zhuang

#6212 批 C(PR #6356)实施期间实测发现,记录备查。观察类,不挂 pm:queue,请分诊轮定级。

现象

scripts/check-type-check-coverage.mjsDEBT / TEST_DEBT 是只减不增的棘轮,但记录值低于实测值时它不报错,只打一条 ℹ 提示:

ℹ @objectstack/rest: TEST_DEBT records 163, tsc now reports 144 (-19) -- the entry can be lowered. Not an error: an improvement must not have to pay a bookkeeping toll to land.

这条设计本身是对的(改进不该为记账付过路费)。但那段差额是实打实的许可额度:在被抹平之前,任何新增的、数量不超过余量的错误都不会让门禁变红。

为什么单独记一笔:它能让一条新写的 pin 完全失效

不是理论推演,是 PR #6356 实测撞上的:

也就是说:ledger 的余量不只是"记账不准",它会让这个包唯一能钉住该签名的门禁变成哑的。PR #6356 因此在同 PR 内把该条目降到实测的 10,降完之后同一反转实测报 records 10 … now reports 12 (+2),门禁才真的红。

当前还带余量的条目(在 d8e8d9cbc 实测)

条目 ledger 实测 余量
@objectstack/service-storage(DEBT) 52 42 -10
@objectstack/objectql(TEST_DEBT) 355 350 -5
@objectstack/runtime(TEST_DEBT) 227 223 -4
@objectstack/rest(TEST_DEBT) 163 144 -19
@objectstack/mcp(TEST_DEBT) 63 53 -10

driver-mongodb 已由 PR #6356 抹平,不在表内。数字会随 main 漂,以 re-measure 为准。)

其中 objectql / runtime / rest 三个包同样排除测试层,和 mongodb 是同一形态 —— 它们的测试层同样只由这条 ledger 看着。

不是缺陷,别当缺陷派

今天没有人踩:门禁在"高于记录值"时照常变红,余量只是削弱灵敏度而非关闭它,而且 ℹ 提示每次 re-measure 都会打出来、不会静默。所以这是被削弱的检查,不是活体缺陷,判级请按观察类走。

如果要做

几个方向,各有取舍,未预断:

  1. 逐条抹平(PR refactor(drivers)!: memory / mongodb 的 aggregate / distinct 收进 DriverQuery (#6212 批 C) #6356 对 mongodb 做的那样)—— 最直接,但每条都要重写 note 的组成描述,且 objectql / rest 这类活跃包很容易在评审期间再次漂移([finding] DEBT ledger counts in check-type-check-coverage.mjs drift silently — @objectstack/metadata-protocol records 28, actually reports 63 #5278 记过这个 race,option D 输了五次)。
  2. 给"余量超过阈值"加一条会红的判据 —— 比如余量超过记录值的某个比例、或某个绝对值就失败,逼作者当场抹平。风险是把 [finding] DEBT ledger counts in check-type-check-coverage.mjs drift silently — @objectstack/metadata-protocol records 28, actually reports 63 #5278 明确不想要的"记账过路费"又加回来。
  3. 只对排除测试层的包收紧 —— 那些包的 ledger 是唯一的看门人,余量的代价最高;不排除测试层的包有 pnpm typecheck 兜底,余量无害。这一条的信噪比看起来最好,但需要先确认 TESTS_COVERED 那批的实际分布。

会话:session_01WyvqvKMG6asi9aXjKE6xtx#6212 批 C 实施期间发现,未认领)

Activity

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