diff --git a/game/smoke/smoke_all.gd.uid b/game/smoke/smoke_all.gd.uid new file mode 100644 index 00000000..35e1a7fe --- /dev/null +++ b/game/smoke/smoke_all.gd.uid @@ -0,0 +1 @@ +uid://c4a3130vctg4d diff --git a/game/tests/integration/cross_system_flow_test.gd.uid b/game/tests/integration/cross_system_flow_test.gd.uid new file mode 100644 index 00000000..8aa67c34 --- /dev/null +++ b/game/tests/integration/cross_system_flow_test.gd.uid @@ -0,0 +1 @@ +uid://d0j4m26d1d5yo diff --git a/game/tests/integration/node_map_templates_test.gd.uid b/game/tests/integration/node_map_templates_test.gd.uid new file mode 100644 index 00000000..0018f8da --- /dev/null +++ b/game/tests/integration/node_map_templates_test.gd.uid @@ -0,0 +1 @@ +uid://dhhxar186w1sq diff --git a/game/tests/system_test.gd b/game/tests/system_test.gd index ee9c9971..01ef32c6 100644 --- a/game/tests/system_test.gd +++ b/game/tests/system_test.gd @@ -173,7 +173,7 @@ func _smoke_boot_chain() -> void: # ④-1 boot 路径:启动态钉死(卡① sv2)——boot 无激活态、断点在档恒否,续玩钮恒隐 #(原「按钮态==真实档断点态」关系判据随启动态换代改写:test-conventions §9.5 申报在案,卡② mn8 再承接) check(not sm.has_breakpoint(), - "V2d 续玩钮族退役·boot 无断点在档(启动态不隐式激活——卡① sv2 钉死;恒隐判据随钮退役由本断言+V2d 三钮在位承接)〔装配生命批 V2·卡② mn8 改写〕") + "V2d boot 无断点在档(启动态不隐式激活——卡① sv2 钉死)〔装配生命批 V2·卡② mn8 改写〕") # ④-1b 启动态三断言+旧单档迁移不变式(卡① sv2/sv12——真实 autoload boot 链) check(sm.active_slot() == 0 and not sm.has_write_target(), "V2-s1 boot 后无激活态(active_slot=0、写盘目标空)〔卡① sv2〕") @@ -182,7 +182,7 @@ func _smoke_boot_chain() -> void: 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 甲一次性迁移已发生)〔卡① sv12〕") + "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"]: @@ -213,10 +213,6 @@ func _smoke_boot_chain() -> void: DirAccess.remove_absolute(p) -# ---- 生命周期存活性矩阵(九阶段×五引用面;驱动复用 V3 debug seed 开局路径+ -# _auto_play_round 活战斗模式+ui_struct resume 夹具模式,不另起点击链)---- -# 阶段映射说明:计划书十阶段中「开局停点」与「地图选路」在本现行流程同为关卡画面停点态 -#(level_started→choices_presented 同步到达,无可观测中间态)——合并为 V3b 一处断言。 func _smoke_run_lifecycle() -> void: print("--- 迭代27 T1 会话物化(V3:两连局复位+脏状态不残留)---") var main: Node = load("res://presentation/main.tscn").instantiate() @@ -259,7 +255,7 @@ func _smoke_run_lifecycle() -> void: "V3 局态封印/账本全复位(queue_free 物化——注入脏状态零残留)") check(main._start_overlay.visible, "V3 回开始菜单(终局出口路径)") # ---- 第二局:放弃终局无断点残留→直进开局→全新会话 ---- - check(not sm.has_breakpoint(), "V3 放弃终局清断点(无残留断点——续玩按钮态联动)") + check(not sm.has_breakpoint(), "V3 放弃终局清断点(无残留断点)") main.debug_overlay.seed_edit.text = "43" main._start_adventure_from_menu() await process_frame @@ -362,6 +358,8 @@ func _stage_faces(main: Node, tag: String, adv: String, run: String, set: String func _face_liveness(name: String, v, want: String) -> String: if want == "null": return "" if v == null else " %s 应缺位(实测非空)" % name + if want == "alive" and v == null: + return " %s 应在座(实测 null)" % name if v != null and not is_instance_valid(v): return " %s 悬挂(失效对象)" % name return "" @@ -519,7 +517,7 @@ func _smoke_lifecycle_matrix() -> void: for i in range(6): await process_frame check(main.run_scope.adventure != null and main.run_scope.adventure != first_adv, - "V3h 两连局第二会话全新对象(与第一局不复用)〔装配生命批 V3〕") + "V3h 两连局第二会话在座(开局停点——新冒险会话非空)〔装配生命批 V3〕") await _stage_faces(main, "V3h 两连局·开局停点", "alive", "alive", "null", {"mf_start": false, "level_vis": true}) check(main.run_scope.adventure.abandon(), "V3h 放弃受理(第二局)〔装配生命批 V3〕") for i in range(12): @@ -558,7 +556,4 @@ func _smoke_lifecycle_matrix() -> void: for p in ["user://smoke_lifecycle.json", "user://smoke_lifecycle.json.tmp", "user://smoke_lifecycle_resume.json", "user://smoke_lifecycle_resume.json.tmp"]: if FileAccess.file_exists(p): - DirAccess.remove_absolute(p) - - -# 引用面快照(五承载物的会话相关面+恒活面——逐个调用现值回调,与 run_scope 成员并采) \ No newline at end of file + DirAccess.remove_absolute(p) \ No newline at end of file diff --git a/game/tests/unit/battle_settlement/roll_multiplier_test.gd.uid b/game/tests/unit/battle_settlement/roll_multiplier_test.gd.uid new file mode 100644 index 00000000..0e392d1f --- /dev/null +++ b/game/tests/unit/battle_settlement/roll_multiplier_test.gd.uid @@ -0,0 +1 @@ +uid://bol5e0tx2p8ie diff --git a/game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd.uid b/game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd.uid new file mode 100644 index 00000000..52970442 --- /dev/null +++ b/game/tests/unit/battle_settlement/round_flow_skill_pool_test.gd.uid @@ -0,0 +1 @@ +uid://dc8bwwuqtm7mh diff --git a/game/tests/unit/battle_settlement/seal_polarity_test.gd.uid b/game/tests/unit/battle_settlement/seal_polarity_test.gd.uid new file mode 100644 index 00000000..5e4bdace --- /dev/null +++ b/game/tests/unit/battle_settlement/seal_polarity_test.gd.uid @@ -0,0 +1 @@ +uid://vvodbyea6fkv diff --git a/game/tests/unit/battle_settlement/variant_placement_test.gd.uid b/game/tests/unit/battle_settlement/variant_placement_test.gd.uid new file mode 100644 index 00000000..e1fabbb1 --- /dev/null +++ b/game/tests/unit/battle_settlement/variant_placement_test.gd.uid @@ -0,0 +1 @@ +uid://b0qpkkpeqbt0l diff --git a/game/tests/unit/contracts/source_guard_test.gd.uid b/game/tests/unit/contracts/source_guard_test.gd.uid new file mode 100644 index 00000000..1e9c3963 --- /dev/null +++ b/game/tests/unit/contracts/source_guard_test.gd.uid @@ -0,0 +1 @@ +uid://0h8pw8le1vok diff --git a/game/tests/unit/core/adventure_feats_test.gd.uid b/game/tests/unit/core/adventure_feats_test.gd.uid new file mode 100644 index 00000000..53a129c9 --- /dev/null +++ b/game/tests/unit/core/adventure_feats_test.gd.uid @@ -0,0 +1 @@ +uid://dmwjb53bvebbh diff --git a/game/tests/unit/core/board_gen_reward_test.gd.uid b/game/tests/unit/core/board_gen_reward_test.gd.uid new file mode 100644 index 00000000..b4291b18 --- /dev/null +++ b/game/tests/unit/core/board_gen_reward_test.gd.uid @@ -0,0 +1 @@ +uid://6ctee5n6qyvm diff --git a/game/tests/unit/core/level_shop_economy_test.gd.uid b/game/tests/unit/core/level_shop_economy_test.gd.uid new file mode 100644 index 00000000..65b63b64 --- /dev/null +++ b/game/tests/unit/core/level_shop_economy_test.gd.uid @@ -0,0 +1 @@ +uid://bl8x36rkw3joa diff --git a/game/tests/unit/core/meta_progression_forge_test.gd.uid b/game/tests/unit/core/meta_progression_forge_test.gd.uid new file mode 100644 index 00000000..8f47981d --- /dev/null +++ b/game/tests/unit/core/meta_progression_forge_test.gd.uid @@ -0,0 +1 @@ +uid://x67hg5qwuf6t diff --git a/game/tests/unit/core/save_manager_domain_test.gd.uid b/game/tests/unit/core/save_manager_domain_test.gd.uid new file mode 100644 index 00000000..6e513c75 --- /dev/null +++ b/game/tests/unit/core/save_manager_domain_test.gd.uid @@ -0,0 +1 @@ +uid://b3ccx0sbe1f42 diff --git a/game/tests/unit/data_config/rng_stream_boot_test.gd.uid b/game/tests/unit/data_config/rng_stream_boot_test.gd.uid new file mode 100644 index 00000000..c766ff63 --- /dev/null +++ b/game/tests/unit/data_config/rng_stream_boot_test.gd.uid @@ -0,0 +1 @@ +uid://brkl7td1ruuf7 diff --git a/game/tests/unit/presentation/theme_projection_test.gd.uid b/game/tests/unit/presentation/theme_projection_test.gd.uid new file mode 100644 index 00000000..3d426760 --- /dev/null +++ b/game/tests/unit/presentation/theme_projection_test.gd.uid @@ -0,0 +1 @@ +uid://clk6d0agf3dbx diff --git a/reports/批B-断言迁移账本-2026-10-22.md b/reports/批B-断言迁移账本-2026-10-22.md index 18d979c1..8c0d779b 100644 --- a/reports/批B-断言迁移账本-2026-10-22.md +++ b/reports/批B-断言迁移账本-2026-10-22.md @@ -429,3 +429,15 @@ 10. roll_multiplier:443 "attach"→"rider" 键名修复 **闭案措辞(按测试规约 §6)**:system_test :279/:421 与幂等等值类=「结构复核通过、变异拦截能力未证(执行前提/预算收刀)」。**变异形态留档(只登记不执行——测试已被用户叫停)**:1=adventure_runner.gd:1025 键改名|2=derive_at 内推计数器|3b=计数循环恒 0|4=disabled 改挂 pressed 同内容|5 钉=effect_pool_map 加 hero_defense 映射|6=seal 兑付行符号翻转|7=回血基数改表值上限|8=双掷点恒取下界(R1 已实证形态)|9=货架全不可负担|10=Boss 池加入 rider_mult 技能。**错账撤销**:G3「生产疑似 bug 登记待办」作废——区间行死逻辑在测试源码自身,本批已修。 + +## 十五、核代码补审修复批施工记录(2026-10-23 主会话执行) + +冷启动补审(iter33 卡② 移植断言面)69 条:55 有效 / 14 存疑——13 条共用一个根因(_face_liveness 的 alive 分支不拒 null,docstring 与实现不符;系老底稿 smoke_all 原有缺陷逐字搬运带入,非移植引入)+1 条近恒真(V2-s4)。用户裁决:A 类修、B 类标签收口、C 类登记。执行如下: + +- **A-1** `_face_liveness` 补 alive-null 臂(want=="alive" 且 v==null → 「应在座(实测 null)」)——**只对 alive 生效,both 的 null 合法态不受影响(griller 原文 want!="null" 写法会误伤 both,已修正)**。激活 V3b/V3c/V3d/V3d2/V3e/V3h/V3i 等 13 条的「对象缺位」拦截。修复后跑 --code 域验证(结果见回执)。 +- **A-2** V2-s4 标签补注「旧档在盘面罕见,迁移逻辑本体由 save_manager_domain v0 迁移链断言覆盖」——结构例外登记(构造旧档场景的实跑验证成本高、迁移逻辑本体已有专门覆盖)。 +- **B-1/B-2/B-3** 三处标签收口(V2d 删按钮承接叙事/V3h 删「不复用」冗余主张/V3 删「续玩按钮态联动」残留)——cond 全部未动。 +- **C-1** 重复注释删除:错位的生活周期矩阵头注(run_lifecycle 前)+文件尾孤行「引用面快照」(原底稿注释逐字搬运副产物)。 +- **C-2~C-6 登记备查(测试增强批候选,本批不执行)**:C-2 计数闸残缝(visible 标志位≠渲染面,隐藏匿名旧钮接回双闸漏过——改 is_visible_in_tree 需实跑验证)|C-3 _stage_faces extra 静默吞键(match 无默认臂——加「未知键即红」需全调用点键名核对+全量回归)|C-4 顺序耦合无守卫(boot_chain 须先于驱动执行;lifecycle_matrix 永久改写槽模板不还原,后加函数继承污染)|C-5 camp 残留档使 V3g 红的原因标注误导(不静默)|C-6 V1a 候选表与 LAYER_CONTRACT 双维护(新增层忘登则漏检盖顶回归)。 + +**闭案措辞(按测试规约 §6)**:本批全部为标签收口/判据补洞/注释清理,cond 冻结面改动仅 A-1(激活既有判据的 null 臂——系补全 docstring 已承诺的语义,非新增拦截面);激活效果待 --code 域实跑留证。