From 15c64c35524902f186aacf8639ce7eecadd31e90 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Fri, 16 Oct 2026 03:43:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=86=92=E7=83=9F):=20=E5=B1=8F=E8=94=BD?= =?UTF-8?q?=E6=89=B9=E4=B8=A4=E5=A4=84=E6=96=AD=E8=A8=80=E8=AF=AD=E4=B9=89?= =?UTF-8?q?=E8=AE=A2=E6=AD=A3=20+=20=E5=9F=BA=E7=BA=BF=2009=20=E5=88=B7?= =?UTF-8?q?=E6=96=B0=EF=BC=88=E5=B9=B6=E8=A1=8C=E4=BC=9A=E8=AF=9D=E5=A4=B4?= =?UTF-8?q?=E6=B3=A8=E6=BC=82=E7=A7=BB=EF=BC=8C=E9=9D=9E=E6=9C=AC=E6=89=B9?= =?UTF-8?q?=E5=BC=95=E5=85=A5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 变异断言语义订正:board_variant_ids 只装板级/全局型(region 变异在格子级 variants)—— 板级空断言 + 格子级恰一行且在 {magma,ash} 断言 + 确定性比对加 variants 字典逐位 - V1a boot 顶层断言容错调试浮窗(2026-10-16 写死后 boot 即开,浮窗悬浮于菜单之上= 合法顶层;原守卫「菜单被冒险屏盖住」语义不变) - baseline.json 09 项 fp 刷新:主区与分支 audit_file_headers 输出逐行一致(128 行), 漂移源于 20f4a7dc 之后主区 .gd 头注变动(并行会话),本批零引入;红项仍为存量 127 处,仅对齐指纹 --- game/smoke/smoke_all.gd | 21 ++++++++++++++------- game/tests/.gates/baseline.json | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index d7f96d87..14be52f4 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -185,8 +185,8 @@ func _smoke_scene_split() -> void: # V1a 启动态顶层断言:boot 后自树顶向下第一个可见内容层=start_overlay(headless 可判) #(内容层遍历——屏壳是容器不当候选:camp 壳 boot 态 vis=true 但成员恒隐,裸树遍历会误命中) var top: Node = _topmost_visible_layer(main) - check(top == main._start_overlay, - "V1a 启动态顶层可见层=start_overlay(实测顶层=%s——菜单被冒险屏盖住即红)〔装配生命批 V1〕" + check(top == main._start_overlay or top == main.debug_overlay, + "V1a 启动态顶层可见层=start_overlay(调试浮窗悬浮于菜单之上=合法顶层——2026-10-16 写死后 boot 即开;实测顶层=%s——菜单被冒险屏盖住即红)〔装配生命批 V1〕" % (top.name if top != null else "null")) # V1b 语义关系:start_overlay 在冒险屏内容之上(菜单屏壳在冒险屏壳之上——装配序修复判据) check(main._menu_screen.get_index() > main._adventure_screen.get_index(), @@ -2352,16 +2352,23 @@ func _smoke_global_variant() -> void: var boss_ok: bool = boss_settlement.begin_battle({"level_index": 2, "node_depth": 4, "hero_hp": int(_db.hero.max_hp), "node_type": "boss"}) check(boss_ok, "L2 Boss 战斗启动(node_depth=4 boss 节点——兜底回落断言载体)") var boss1_ids: Array = [] + var boss1_variants: Dictionary = {} var boss1_calls := 0 if boss_ok: var bb = boss_settlement.minesweeper.current_board() - check(bb.board_variant_ids().size() == 1 and (String(bb.board_variant_ids()[0]) in ["magma", "ash"]), - "屏蔽后回落:Boss 图改走 region 候选池(恰一行 region 变异,无全局型——全局池空回落路径)") + check(bb.board_variant_ids().is_empty(), "屏蔽后回落:Boss 图无板级全局型(board_variants 空——全局池空合法态)") + var boss_vids := {} + for vc in bb.variants: + for vid in bb.variants[vc]: + boss_vids[String(vid)] = true + check(boss_vids.size() == 1 and (boss_vids.has("magma") or boss_vids.has("ash")), + "屏蔽后回落:Boss 图 region 变异恰一行且在候选池内(实测 %s)" % str(boss_vids.keys())) check(not bb.variants.is_empty(), "屏蔽后回落:Boss 图恢复 region 变异格布置(原替换制跳过 region 的逻辑随全局池空失效)") check(crng.variant_calls > 0, "屏蔽后回落:variant_place 恢复取号(原全局取用零取号态消失)") var snap: Dictionary = boss_settlement.presentation_snapshot() - check(_arr_str_eq(snap.get("board_variants", []), bb.board_variant_ids()), "快照投影:board_variants 与板载 region 行一致(横幅/角标唯一读取面)") + check(_arr_str_eq(snap.get("board_variants", []), bb.board_variant_ids()), "快照投影:board_variants 空态一致(横幅/角标唯一读取面——无全局型即零预告)") boss1_ids = bb.board_variant_ids() + boss1_variants = bb.variants.duplicate() boss1_calls = crng.variant_calls # Boss 图确定性:同种子两遍逐位相同 var crng2 = _CountVariantRng.new() @@ -2369,8 +2376,8 @@ func _smoke_global_variant() -> void: var boss2 = load("res://core/battle_orchestrator.gd").new(_db, crng2) if boss2.begin_battle({"level_index": 2, "node_depth": 4, "hero_hp": int(_db.hero.max_hp), "node_type": "boss"}): var bb2 = boss2.minesweeper.current_board() - check(_arr_str_eq(bb2.board_variant_ids(), boss1_ids) and crng2.variant_calls == boss1_calls, - "确定性:同种子 Boss 图两遍 board_variants/取号逐位相同(region 布置路径)") + check(_arr_str_eq(bb2.board_variant_ids(), boss1_ids) and bb2.variants == boss1_variants and crng2.variant_calls == boss1_calls, + "确定性:同种子 Boss 图两遍 board_variants/变异格/取号逐位相同(region 布置路径)") # ④ 资源面偏斜投影(RewardEconomy 纯函数面——守恒/白名单/构造例/合成序) var eco = load("res://core/reward_economy.gd").new(_db, load("res://core/rng_service.gd").new()) var base_rows: Array = eco._rollable_rows() diff --git a/game/tests/.gates/baseline.json b/game/tests/.gates/baseline.json index d5acaec5..a45f635d 100644 --- a/game/tests/.gates/baseline.json +++ b/game/tests/.gates/baseline.json @@ -39,7 +39,7 @@ }, "09 静态扫描": { "exit": "1", - "fp": "3220614b09c4" + "fp": "4354b2aa72a7" }, "10 熵增闸": { "exit": "0",