From b2159022bc861227d3b4eb47e60a3496df237c10 Mon Sep 17 00:00:00 2001 From: xcs Date: Sat, 29 Aug 2026 17:47:36 +0800 Subject: [PATCH] =?UTF-8?q?test(w05):=20=E8=A1=A5=E4=B8=80=E6=9D=A1?= =?UTF-8?q?=E8=AF=BB=E7=9C=9F=E6=96=87=E4=BB=B6=E7=9A=84=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E7=9B=B8=E7=AD=89=E6=96=AD=E8=A8=80=20=E2=80=94=E2=80=94=20?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E6=B5=8B=E8=AF=95=E8=AF=81=E6=98=8E=E6=9C=BA?= =?UTF-8?q?=E5=88=B6,=E8=BF=99=E6=9D=A1=E9=92=89=E4=BD=8F=E7=9C=9F?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=AD=A4=E5=88=BB=E6=98=AF=E5=AF=B9=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 复审 Important:w05-s3-review-recompute.test.ts 手写镜像、不 import case-model.ts(架构上也 不能),证明的是"少了 let 会怎样"这个机制,却没有任何东西钉住真文件此刻还带着 let: SHARED_LET ——AutoRecipe.let 是可选字段,typecheck 不报;明天有人把 S3_review.auto.let 删掉,原样重犯 这次的 Critical,镜像测试的红绿完全脱钩、不会发现。 在 steps.test.ts 里"S2 与 S3 用的是同一份投影"那条 toBe 断言旁边加同风格的一行: expect(stepOf('S3_review')?.auto?.let).toBe(stepOf('S2_assess')?.auto?.let) —— 零新增 import,读的是真 case-model.ts。变异验证:把 S3_review.auto 的 let: SHARED_LET, 那一行 删掉(diff 核过只改了那一行),这条断言变红(undefined vs 期望的绑定对象);加回来 (diff 核过与原文件逐字节相同),变绿。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet --- .../__tests__/steps.test.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/activities/part-substitution-assessment/__tests__/steps.test.ts b/activities/part-substitution-assessment/__tests__/steps.test.ts index 4a1a3a4..5c6e711 100644 --- a/activities/part-substitution-assessment/__tests__/steps.test.ts +++ b/activities/part-substitution-assessment/__tests__/steps.test.ts @@ -314,6 +314,18 @@ describe('S3 / S4 配方', () => { expect(s3[1]).toBe(s2[3]); }); + /* + * **这一条读的是真 `case-model.ts`,不是任何镜像**(2026-08-29 复审 Important fix round 2)—— + * `w05-s3-review-recompute.test.ts` 证明的是机制(S3 少了 `let`,复用的投影主键就算不出来, + * 写会被静默丢掉、或拼出一行垃圾);但那份测试手写镜像、不 import 这份真文件(架构上也不能), + * 红绿与 `case-model.ts` 此刻写的是什么**完全脱钩**——明天有人把 `S3_review.auto.let` 删掉, + * 原样重犯这次的 bug,`AutoRecipe.let` 是可选字段(typecheck 不报),镜像测试也不会变红。 + * 这一条补上「读真文件」那一半:S3 与 S2 的 `auto.let` 必须是**同一个引用**,少了就在这里当场炸。 + */ + it('S3 与 S2 共用同一个 `let` 引用 —— 少了它,复用的投影主键在 S3 那一拍就是未绑定的空串', () => { + expect(stepOf('S3_review')?.auto?.let).toBe(stepOf('S2_assess')?.auto?.let); + }); + it('S3 的卡:审核面孔、单一选项、挂本步的件', () => { const card = s3[2]; expect(card?.kind === 'card' && card.as).toBe('decide');