ci(dx): TEST_DEBT 的隐藏测试文件数改由闸门实时导出,删掉手写 tests 字段 (#5826) - #6196
Merged
Conversation
TEST_DEBT 每条有两个手写数字。#5278 / PR #5827 给 `errors` 装上了真棘轮 (每次 --re-measure 重跑 tsc,实测 > 记录即红),`tests` 没有——而 `tests`(被 tsconfig 排除、因而对 tsc 隐形的测试文件数)恰恰是这个脚本 每次运行都已经算出来的量:`testCoverage()` 返回的 `pkg.testFiles`, 亚秒级、无需编译器,`evaluate()` 里就在用它判 TESTS_COVERED。 两个数字需要相反的修法,所以是两单:`errors` 不跑编译器就不可知,冻结 + 重测是唯一形状;文件数是免费的,所以删掉副本、直接读活数。 - 19 条 TEST_DEBT 条目的 `tests` 字段全部删除;`errors` 值与 note 一律未动 (含 #5827 的五条 Option A 记档余量)。 - 摘要行的「隐藏了多少文件」改读新函数 `hiddenTestFiles(packages, TEST_DEBT)`, 按包求和 `pkg.testFiles`,本次运行实算。 - RECONCILED 增一条:TEST_DEBT 条目再带 `tests` 字段即红——**结构性拒绝**, 哪怕今天数值恰好对。改成「不一致才红」会把「新增一个干净的测试文件」变成 记账费,正是 #5278 裁决里排除的方向。 - note 里复述文件总数的散文同样去重(plugin-security / service-sms / mcp / objectql):闸门实时导出的数字不再在散文里留第二份副本,事件(哪个 PR 加了 哪个文件)保留。 - --self-test 新增 1 条语义用例 + 5 条 observation 用例,共 23 + 16 + 11。 漂移实测(本 PR 分支,origin/main @ 80f7dc6):#5827 昨夜刚把 12 个 `tests` 刷成实测值,今天已有 3 条重新漂移——objectql 130→135、runtime 102→105、 formula 16→17,合计 534 vs 实算 543。机制未变时,刷新只在下一个测试文件落地 前有效。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014wsZeReNTqiceBfLb5Pyf5
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
os-zhuang
marked this pull request as ready for review
August 7, 2026 10:39
This was referenced Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #5826
做了什么
TEST_DEBT 每条条目有两个手写数字。#5278 / PR #5827 给
errors装上了真棘轮(每次--re-measure重跑tsc --noEmit,实测 > 记录即红),tests没有——而tests(被 tsconfig 排除、因而对 tsc 隐形的测试文件数)恰恰是这个脚本每次运行都已经算出来的量:testCoverage()返回的pkg.testFiles,亚秒级、不需要编译器,evaluate()里就在用它判 TESTS_COVERED。两个数字需要相反的修法,这也是它们是两单的原因:
errors不跑编译器就不可知,所以「冻结 + 重测」是它唯一可用的形状;文件数是免费的,所以正确的修法是删掉副本、直接读活数(issue 的选项 1,也是本文件自己在 #5286 毕业packages/spec时就写下过的结论)。tests字段全部删除。errors值与 note 一律未动,包括 ci(dx): DEBT/TEST_DEBT 台账数字改为每次重测的真棘轮 —— 实测 > 记录即红 (#5278) #5827 新增的五条 Option A 记档余量(objectql 355 / rest 163 / lint 42 / service-storage 52 / mcp 63)及其 note。hiddenTestFiles(packages, TEST_DEBT),按包求和本次扫描得到的pkg.testFiles。输出从「N files」变为「N files hidden as counted by this run」。tests字段即红。这是结构性拒绝,哪怕今天的数值恰好正确——见下。errors记、文件数不记,以及这两者需要相反的修法。为什么不是「加一条对账」
新增的检查在数值一致时也拒绝(self-test 里那条 fixture 写的就是
tests: 7对testFiles: 7)。理由是:一致只是「写下那一刻」的属性,不是这个字段的属性;改成「不一致才红」会把「新增一个干净的测试文件」变成一次记账费,而 #5278 的裁决明确排除了这个方向(改善不得制造记账 churn)。删字段 + 结构性拒绝,是唯一按构造消除漂移、且代码比现状更少的选项。漂移实测(issue 正文的表已过期,这里是本分支上重量的)
#5827 昨夜(约 03:5xZ)刚把 12 个漂移的
tests刷成实测值。今天在origin/main @ 80f7dc6a3上重量,19 条里已有 3 条重新漂移:@objectstack/objectql@objectstack/runtime@objectstack/formula(三个数字都用
find packages/formula/src packages/runtime/src packages/objectql/src -name '*.test.ts' -o -name '*.spec.ts' | wc -l(逐包)独立复核过:17 / 105 / 135,与闸门实算一致。objectql 的 +5 来自 #6158 / #6165 / #6171 等本窗口新增的测试文件。)也就是说:一次「刷新副本」的有效期,就是到下一个测试文件落地为止——这正是本单的论点,与今天差值是不是 0 无关。
反向验证(方向为先声明后运行:应当变红)
把删掉的字段原样放回一条条目(objectql
tests: 130),闸门必须红;这是新检查不是幽灵检查的证明。移除后立刻恢复绿。摘要总数在两种状态下都是 543——即恢复的副本不再参与任何计算,这是「删掉副本」而非「换个地方读副本」的证据。
验证
五条
ℹ ... can be lowered是 #5827 记档余量的既有输出(本 PR 未动那些errors与 note),不是本 PR 引入的。新增/更新的 self-test 用例
语义层 1 条:
a TEST_DEBT entry that writes the derived file count down fails, even when it is right today—— 副本与实算相等(7 对 7)仍拒绝,钉死「结构性拒绝,不是对账」。observation 层 5 条(
hiddenTestFiles):总数取自活扫描;台账外的包不计入;同一份台账、多一个测试文件、总数自动跟随(本单要消除的漂移,钉成正向断言);条目指向不存在的包时计 0 而不抛;未扫描到的包读作 0 而不是 NaN。另有 3 条既有 fixture 去掉了
tests键。发布面
scripts/只在仓库根,根 package 是private: true,不在任何包的files白名单里——本 PR 不发布任何东西,故走skip-changeset标签而非 changeset(#6059 已禁止空 frontmatter changeset,所以只能二选一)。范围
只改
scripts/check-type-check-coverage.mjs。未碰任何包的源码 / tsconfig / typecheck 脚本(不做毕业),未碰packages/spec/scripts/**,未碰content/docs/releases/,未改动任何errors数值或其 note。🤖 Generated with Claude Code
https://claude.ai/code/session_014wsZeReNTqiceBfLb5Pyf5
Generated by Claude Code