From cef10e52913dbbe67b3c381678a7f391c97daa9e Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Sun, 25 Oct 2026 16:54:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=AD=BB=E6=96=AD=E8=A8=80=E6=94=B6?= =?UTF-8?q?=E5=8F=A3=E6=89=A7=E8=A1=8C):=20=E2=91=A0V2-s4=20=E6=97=A7?= =?UTF-8?q?=E5=8D=95=E6=A1=A3=E8=BF=81=E7=A7=BB=E4=B8=8D=E5=8F=98=E5=BC=8F?= =?UTF-8?q?=E5=88=A0=E9=99=A4=EF=BC=88=E7=94=A8=E6=88=B7=E8=A3=81=EF=BC=9A?= =?UTF-8?q?=E4=B8=96=E7=95=8C=E6=80=81=E6=96=AD=E8=A8=80=E8=AF=BB=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E7=A3=81=E7=9B=98=E3=80=81=E7=BA=A2=E5=89=8D=E6=8F=90?= =?UTF-8?q?=E6=9C=AC=E6=9C=BA=E6=B0=B8=E4=B9=85=E4=B8=8D=E5=8F=AF=E8=BE=BE?= =?UTF-8?q?=E4=B8=94=E4=B8=8D=E5=8F=AF=E4=BF=AE=E5=A4=8D=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E6=97=B6=E6=9C=BA=E2=80=94=E2=80=94=E8=BF=81=E7=A7=BB=E6=9C=AC?= =?UTF-8?q?=E4=BD=93=E7=94=B1=20save=5Fmanager=5Fdomain=20v0=20=E8=BF=81?= =?UTF-8?q?=E7=A7=BB=E9=93=BE=E6=96=AD=E8=A8=80=E8=A6=86=E7=9B=96=EF=BC=9B?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E9=9B=86=E6=B8=85=E5=8D=95=20:69=20=E5=A4=84?= =?UTF-8?q?=E7=BD=AE=E5=88=97=E5=90=8C=E6=AD=A5=E8=AE=B0=E5=88=A0=EF=BC=89?= =?UTF-8?q?=EF=BC=8B=E2=91=A1V3g=20=E8=90=A5=E5=9C=B0=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E6=8A=A4=E6=A0=8F=E6=92=A4=E9=94=80=E8=AF=81=E6=98=8E=E5=AE=8C?= =?UTF-8?q?=E6=88=90=EF=BC=88=E4=B8=B4=E6=97=B6=E5=8F=98=E5=BC=82=EF=BC=9A?= =?UTF-8?q?=E9=80=89=E6=A1=A3=E5=B1=82=E6=96=B0=E6=A1=A3=E9=92=AE=E5=BB=BA?= =?UTF-8?q?=E9=92=AE=E4=B8=8D=E5=85=A5=E5=86=8C=20=5Fnew=5Fbtns=EF=BC=8Csl?= =?UTF-8?q?ot1=20=E5=8F=96=E4=B8=8D=E5=88=B0=E2=80=94=E2=80=94system=5Ftes?= =?UTF-8?q?t=20=E5=AE=9E=E8=B7=91=20[FAIL]=20V3g=20=E8=90=A5=E5=9C=B0?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=E7=BC=BA=E5=A4=B1=EF=BC=9D=E6=8A=A4=E6=A0=8F?= =?UTF-8?q?=E6=98=BE=E5=BC=8F=E7=BA=A2=EF=BC=8C=E5=8F=98=E5=BC=82=E6=9C=AA?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=B7=B2=E8=BF=98=E5=8E=9F=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=8C=BA=E6=B8=85=E6=B4=81=EF=BC=89=EF=BC=8B=E6=AD=BB=E6=96=AD?= =?UTF-8?q?=E8=A8=80=E5=80=99=E9=80=89=E5=BE=85=E5=8A=9E=E6=9D=A1=E7=9B=AE?= =?UTF-8?q?=E6=95=B4=E6=9D=A1=E5=88=A0=E9=99=A4=EF=BC=88=E2=91=A0=E5=B7=B2?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E2=91=A1=E5=B7=B2=E8=AF=81=E2=91=A2=E5=B7=B2?= =?UTF-8?q?=E4=BF=AE=EF=BC=8CC-2=EF=BD=9EC-6=20=E5=A4=87=E6=9F=A5=E9=9A=8F?= =?UTF-8?q?=E6=9D=A1=E7=9B=AE=E7=BB=88=E7=BB=93=EF=BC=8C=E8=B4=A6=E6=9C=AC?= =?UTF-8?q?=20git=20=E5=8E=86=E5=8F=B2=E5=8F=AF=E8=80=83=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- game/tests/system_test.gd | 4 +--- game/tests/验证集清单.md | 2 +- 待办清单.md | 8 -------- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/game/tests/system_test.gd b/game/tests/system_test.gd index bfd2ea01..673c8dfb 100644 --- a/game/tests/system_test.gd +++ b/game/tests/system_test.gd @@ -174,15 +174,13 @@ func _smoke_boot_chain() -> void: #(原「按钮态==真实档断点态」关系判据随启动态换代改写:test-conventions §9.5 申报在案,卡② mn8 再承接) check(not sm.has_breakpoint(), "V2d boot 无断点在档(启动态不隐式激活——卡① sv2 钉死)〔装配生命批 V2·卡② mn8 改写〕") - # ④-1b 启动态三断言+旧单档迁移不变式(卡① sv2/sv12——真实 autoload boot 链) + # ④-1b 启动态三断言(卡① sv2——真实 autoload boot 链) check(sm.active_slot() == 0 and not sm.has_write_target(), "V2-s1 boot 后无激活态(active_slot=0、写盘目标空)〔卡① sv2〕") check(sm.keystone_balance() == 0 and not sm.has_breakpoint() and sm.adventure_total() == 0, "V2-s2 boot 内存=默认合法空态(钥石/断点/总局数全零值)〔卡① sv2〕") check(not sm.write_to_disk(), "V2-s3 boot 无激活写盘拒绝(write_to_disk=false 生产入口)〔卡① sv3〕") - check(not (FileAccess.file_exists("user://save.json") and not FileAccess.file_exists(sm.slot_path(1))), - "V2-s4 旧单档迁移不变式(旧档在则槽 1 必在——Q1 甲一次性迁移已发生;旧档在盘面罕见,迁移逻辑本体由 save_manager_domain v0 迁移链断言覆盖)〔卡① sv12·核代码增补注〕") # ④-2 三钮承接(卡② mn8——V2d 续玩钮族随钮退役废止:钮可见性联动面由卡① V2-s 启动态断言与 # sv11 attach 语义段承接;attach 原地重置语义保持——绝不碰真实档 user://save.json) for p in ["user://smoke_boot_chain.json", "user://smoke_boot_chain.json.tmp"]: diff --git a/game/tests/验证集清单.md b/game/tests/验证集清单.md index fbcde21b..8cd3ef66 100644 --- a/game/tests/验证集清单.md +++ b/game/tests/验证集清单.md @@ -131,7 +131,7 @@ | 66 | 178 | "V2-s1 boot 后无激活态(active_slot=0、写盘目标空)〔卡① sv2〕" | sm.active_slot() == 0 and not sm.has_write_target() | boot 后无激活态:激活槽 0、无写盘目标。 | 迁系统测试(tests/system_test.gd) | | | 67 | 180 | "V2-s2 boot 内存=默认合法空态(钥石/断点/总局数全零值)〔卡① sv2〕" | sm.keystone_balance() == 0 and not sm.has_breakpoint() and sm.adventure_total() == 0 | boot 内存为合法空态:钥石 0、无断点、总局数 0。 | 迁系统测试(tests/system_test.gd) | | | 68 | 182 | "V2-s3 boot 无激活写盘拒绝(write_to_disk=false 生产入口)〔卡① sv3〕" | not sm.write_to_disk() | 无激活态调写盘被拒(生产入口返回 false)。 | 迁系统测试(tests/system_test.gd) | | -| 69 | 184 | "V2-s4 旧单档迁移不变式(旧档在则槽 1 必在——Q1 甲一次性迁移已发生;旧档在盘面罕见,迁移逻辑本体由 save_manager_domain v0 迁移链断言覆盖)〔卡① sv12·核代码增补注〕" | not (FileAccess.file_exists("user://save.json") and not FileAccess.file_exists(sm.slot_path(1))) | (待填) | | | +| 69 | 184 | "V2-s4 旧单档迁移不变式(旧档在则槽 1 必在——Q1 甲一次性迁移已发生;旧档在盘面罕见,迁移逻辑本体由 save_manager_domain v0 迁移链断言覆盖)〔卡① sv12·核代码增补注〕" | not (FileAccess.file_exists("user://save.json") and not FileAccess.file_exists(sm.slot_path(1))) | 旧档在盘则迁移后槽 1 必在(一次性迁移不变式)。 | 已删除(2026-10-25 用户裁——世界态断言读真实磁盘 user://,红前提「旧档在而槽 1 缺」本机永久不可达;迁移本体由 save_manager_domain v0 迁移链断言覆盖) | | | 70 | 192 | "V2d 三钮在位·进入存档/设置/退出游戏(续玩钮族退役后主菜单操作组承接)〔卡② mn1/mn8〕" | main._menu_screen.entersavebtn != null and main._menu_screen.settingsbtn != null and main._menu_screen.quitbtn != null | 隔离档无断点时续玩钮隐藏(刷新单口与 boot 路径同源)。 | 迁系统测试(tests/system_test.gd) | | | 71 | 196 | "V2d 四旧钮句柄零命中·%s(彻底撤出——禁隐藏态禁置灰态残留)〔卡② mn2〕" ↩ % old_btn | not (old_btn in main._menu_screen) | 设断点后续玩钮可见。 | 迁系统测试(tests/system_test.gd) | | | 72 | 198 | "V2d 渲染面可见按钮计数==3(旧钮接回即红——渲染面锚,句柄缝盲区闭合)〔卡② mn1/mn2〕" | _count_visible_buttons(main._start_overlay) == 3 | 清断点后续玩钮回隐藏。 | 迁系统测试(tests/system_test.gd) | | diff --git a/待办清单.md b/待办清单.md index 57ae9221..7fbee2cf 100644 --- a/待办清单.md +++ b/待办清单.md @@ -64,14 +64,6 @@ **状态**:待文档设计 -#### 死断言候选复核收口——账本三条经代码复核只余 V2-s4 一条待裁(2026-10-25 登记,来源=批次移交) - -**实况**:批 B 迁移账本曾报三条死断言候选(账本 :238/:241/:273),2026-10-25 按现行宿主逐条代码复核(判断时机、取数来源、被守生产码三方对照)收口为一件:① **V2-s4 旧单档迁移不变式 `game/tests/system_test.gd:184`(唯一真死,处置待裁)**——世界态断言:读真实磁盘 `user://`,红前提「`save.json` 在盘且槽 1 文件缺」本机永久不可达,死因是断言性质而非判断时机或取数错误;迁移逻辑本体由 save_manager_domain v0 迁移链断言覆盖(补审 A-2 结构例外标签已在案)。处置二选一=登记结构例外,或造隔离存储夹具预置旧档后重写——待写卡段呈报用户裁决。② **V3g 营地入口护栏 `game/tests/system_test.gd:481`(判活,出账)**——账本死因引用的变异点 menu campbtn 已随迭代 34 卡② 退役,现行守面=选档层新档钮 `_new_btns.get(1)` 取不到即 `check(false)` 显式红,按逻辑可直接验红;遗留一件事=用现行变异点重证红一跑,待用户发令后补记账。③ **区间行上下阶实际流动(已修,出账)**——核代码修复批第 8 条(提交 957391e1)已新增 `draws` 独立计数改写判据(总抽≥2 且不同值<2 即红),自比较死逻辑已除,非候选。证据=批B迁移账本 :238/:241/:273(账本已退役,考古=git 历史——删除批 53075baa,删除前全稿见历史版本 5644d30c)+冻结基点 `game/tests/验证集清单.md` 头注(commit 1aea9397)。另:核代码补审 C-2~C-6 五件测试增强候选原登记备查于账本 §十五,随账本退役并入本条备查——C-2 计数闸残缝(visible 标志位≠渲染面,隐藏匿名旧钮接回双闸漏过)、C-3 _stage_faces extra 静默吞键(match 无默认臂)、C-4 顺序耦合无守卫(boot_chain 须先于驱动执行;lifecycle_matrix 永久改写槽模板不还原)、C-5 camp 残留档使 V3g 红的原因标注误导(不静默)、C-6 V1a 候选表与 LAYER_CONTRACT 双维护(新增层忘登则漏检盖顶回归)。 - -**改动面**:游戏代码 - -**状态**:待写卡 - #### 营地五界面窗口化批——营地功能页点开后的呈现形态(2026-10-22 登记,来源=会话提及) **实况**:营地场景图(卡④)把旧四柜台换成「一张可点击的场景图」,从场景图点进去的**五个功能界面**——锻造工坊/秘宝匣/天赋树(树淬炼)/奖励格图鉴/生涯记录——其**呈现形态尚未定稿**:是各开独立全屏页(生涯先例),还是作为**窗口**打开(场景根留底)。**作者 2026-10-22 明示意图=窗口打开,不是全屏页**。该形态原属卡④ §9 代拍板白名单第 2 条(非用户裁、且「缩放虚化」第三形态禁批内自选),故单独立批,不在美术设计段定值。