test(spec): 门测量 BFS 只留一份实现,并给仪器本身补上对照 (#5056) - #5833
Merged
Conversation
`chart.test.ts` 仍带着 `reachableFromMetadataRoots()` 的内联拷贝,而且是
**缺陷版**:共享测试工具 `door-reachability.testkit.ts` 早已换成整形状重合度
(≥ 0.5)的 derived-clone bridge,这份拷贝还停在「任意单属性命中即判可达」。
删掉拷贝,改为 import `measureDoors()`,全仓只剩一份实现。
同时补齐两处此前没人拥有的东西:
1. `chart.test.ts` 的门测量原本只有正对照,现在补上负对照与合成载体翻转对照。
2. 新增 `door-reachability.testkit.test.ts` —— 仪器自己的对照。三个消费者各自
为自己的形状带对照,却没人为走图器带,于是它的两条腿都可能在一片绿里烂掉:
- `.describe()` 共享 def 这条**前提**被钉住(zod 升级改了 clone 语义要响);
- derived-clone bridge 的**正对照**被钉住 —— 实测所有消费者断言可达的形状
都是 `direct`,这条腿在全仓没有任何测试走到,把它收紧到「永不触发」全绿。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01559M8FVm6W6vDLABL3jvdW
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 110 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
baozhoutao
marked this pull request as ready for review
August 6, 2026 07:34
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 #5056
前提核对(先说结论:issue 仍然成立,但清单跟 issue 写的不一样)
Issue 是 08-04 写的,#4001 战役跑得快。对着
origin/main(28f2e04)重新点了一遍拷贝清单:packages/spec/src/ui/door-reachability.testkit.tsextraRoots翻转支持和cloneOverlappackages/spec/src/ui/widget.test.tspackages/spec/src/ui/i18n.test.tspackages/spec/src/ui/chart.test.ts也就是说 issue 建议 1 做了一半:共享工具已经抽出来了,但 issue 点名的引入处
chart.test.ts自己没迁移,留下的那份恰好是有 bug 的那份。全仓再无第四份(visitedDefs/childrenOf全仓搜过,另一处命中是无关的packages/lint/src/validate-responsive-styles.ts)。所以本 PR 的实际工作是「迁移最后一份拷贝」,不是「新建共享工具」。
改动
chart.test.ts删掉 100 行内联 BFS,改 importmeasureDoors()。全仓只剩一份实现。chart.test.ts补齐缺的对照。它原本只有正对照,现在补上负对照和合成载体翻转对照(issue 建议 2 要求的三者)。door-reachability.testkit.test.ts—— 仪器自己的对照。三个消费者各自为自己的形状带对照,却没人为走图器带,于是它的两条腿都可能在一片绿里烂掉。两处必须说明的实测修正
A. issue body 里那行
.describe()复现是错的Issue 写:
本 build 实测为 false。 两次独立的
z.string()调用建两个独立的 def,压根没有东西可共享。真正成立的是:机制和结论都对,一行复现写反了。共享跟着接收者实例走,不跟着形状走 —— 而这恰恰是 bug 咬本仓的原因:spec 把几十个形状都灌进少数几个共享叶子实例,于是每个
SnakeCaseIdentifierSchema.describe(…)彼此 def-同一。按派发要求把这条事实钉成了测试,但钉的是修正后的说法 —— 照 issue 原文钉会钉住一个假命题。zod 升级改了
clone()语义,这组会响。B. bridge 那条腿,全仓此前没有任何测试走到
Issue 和派发都建议拿
ChartConfigSchema经ReportChartSchema.extend()当 derived-clone 正对照。实测:它本来就在图里,判定是
direct而不是derived-clone。三个消费者断言可达的形状全部是direct。也就是说:把 bridge 收紧到「永不触发」,三个文件依然全绿。所以正对照另找了真派生场景,并钉进测试:
阈值:保持 0.5,对照没有推翻它
ObjectListViewSchema.strip()(真派生)PageSchema.extend(…)(真派生)WidgetManifestSchema(批 16 假可达)z.object({ name: z.string(), label: z.string() })(issue 的负对照)两端离 0.5 都很远。
反向验证(方向是事先定的:标准红向)
把
DERIVED_CLONE_MIN_OVERLAP临时改回「任意单属性命中」,预测 → 实测:door-reachability.testkit.test.tsWidgetManifestSchema)expected 'derived-clone' to be 'unreachable'widget.test.tsWidgetManifestSchema)WidgetManifestSchema must have no doorchart.test.tsi18n.test.tschart.test.ts预测为绿并且实测为绿,这条值得单独讲:迁移它并不改变它自己的任何判定(它那几个形状重合度是 0.0000,老 bridge 在那儿根本不触发)。迁移的价值是「杀掉真相的第二份拷贝」,不是「改一个答案」—— 那份拷贝的危害在于它是批 17-22 复制粘贴时会拿到的那一份。一个残余边界:钉住了,没有顺手改仪器
重合度的分母是候选形状自己的键数,于是一个键很少、且每个键都是共享叶子的形状恒为 1.0:
实测重合度 1.0000 → 判
derived-clone→ 可达。任何阈值都排不掉:真.strip()也是 1.0000 且必须保持可达,两者在「重合度」这一个维度上不可分。今天代价为零(真实
no door形状都远低于阈值),而且修它需要另一个判据(例如要求共享属性里至少有一个是结构性节点),那是对仪器契约的改动 —— 不该塞进一个测试层 PR。所以:作为具名 pin 钉住(用例名以KNOWN BOUND开头),并作为观察类发现另开 #5828,让后续批次遇到小形状时知道去读那条 pin。验证
范围
严格测试层:仅
chart.test.ts、door-reachability.testkit.ts、新增door-reachability.testkit.test.ts。未碰任何*.zod.ts、任何 schema 语义、任何scripts/。逐文件核对过git status,authorable-surface.base.json不在 diff 中。Changeset
skip-changeset —— 纯测试层改动,不发布任何东西,对使用者无可见变化(
*.testkit.ts不从ui/index.ts导出,也不是 tsup entry,check:api-surface已验证导出面无变化)。🤖 Generated with Claude Code
https://claude.ai/code/session_01559M8FVm6W6vDLABL3jvdW
Generated by Claude Code