Files
gplan-2/game/tests/unit
DKChan b8b69c683d 合并 master(迭代39 拆件批+文档批) 进 iter40+主角账模型迁移适配——冲突两件按「保留本分支拆件结构+承接 master 语义」解:①battle_orchestrator 承 RunLedger 整类退役=新增 _journal()/_attune_loadout() 两读面(enc 派生、无成员接收)、_reseed_attune_charges 循环体换 AttuneLoadout.reset_cycle(写时种行/补行单源化)、冒险桶挂接改 enc["adv_bucket"](经 _fx_host.mount_buckets 下传)、战末 bonus 汇入换 GainJournal.gain_bonus(axis,value,"battle_export",axis);同时接回 master 的 B4 战斗指标面=_mines_hits 三读数账+开战清零+轮末转存、_roll_round_actions facts 组包四键(round_index/last_round_end/mines_hit_last/mines_hit_total)并传 check_trigger_unlocks/rollable_skills/special_skills 三参、enemy_hp_threshold 读数改 trigger.value。②RewardGrant 的 battle_ledger 引用改 battle_hooks 回调束三键(attune_consume/vision_add/negative_blast,bind_battle 缺键 assert)——授予件对账本零强引用、宿主侧单点留编排器,类变量封闭面 15 不减不增;use_treasure 充能消耗与真视计数改经回调,负向 blast 踩雷计数在 _flat_blast 判极点后回调宿主记账(等价承 master 的 _book_negative_blast 语义)。③treasure_effects_test 计数链断言取 master 口径(lg13.vision_used()==1)+本分支真实入口(reward_grant().use_treasure)。④trigger_cond_test V6 的两处 flat 行调用改指 reward_grant()._apply_flat_row(att 束形)——它原调编排器已迁函数触发 Invalid call,_init 在 quit 之前中断=进程挂死 124 超时(本轮排查实证:同件在 master rc=0 秒退,合并后挂死;修后 rc=0 全绿)。验收:run_all 65 套件 64 绿 1 红=已登记存量红(02 EV 锚 goblin 0.9148∉[1.00,1.20],迭代39 特批带红在册,重锚归后续数值批),零 SCRIPT ERROR;负向套件 run_time_fatal_test exit=1 三点绿;variant_placement 49 checks 绿(wr10 三条在位);gdstyle 待合并后复测〔结构小件批 V16〕
2026-10-27 22:25:53 +08:00
..
合并 master(迭代39 拆件批+文档批) 进 iter40+主角账模型迁移适配——冲突两件按「保留本分支拆件结构+承接 master 语义」解:①battle_orchestrator 承 RunLedger 整类退役=新增 _journal()/_attune_loadout() 两读面(enc 派生、无成员接收)、_reseed_attune_charges 循环体换 AttuneLoadout.reset_cycle(写时种行/补行单源化)、冒险桶挂接改 enc["adv_bucket"](经 _fx_host.mount_buckets 下传)、战末 bonus 汇入换 GainJournal.gain_bonus(axis,value,"battle_export",axis);同时接回 master 的 B4 战斗指标面=_mines_hits 三读数账+开战清零+轮末转存、_roll_round_actions facts 组包四键(round_index/last_round_end/mines_hit_last/mines_hit_total)并传 check_trigger_unlocks/rollable_skills/special_skills 三参、enemy_hp_threshold 读数改 trigger.value。②RewardGrant 的 battle_ledger 引用改 battle_hooks 回调束三键(attune_consume/vision_add/negative_blast,bind_battle 缺键 assert)——授予件对账本零强引用、宿主侧单点留编排器,类变量封闭面 15 不减不增;use_treasure 充能消耗与真视计数改经回调,负向 blast 踩雷计数在 _flat_blast 判极点后回调宿主记账(等价承 master 的 _book_negative_blast 语义)。③treasure_effects_test 计数链断言取 master 口径(lg13.vision_used()==1)+本分支真实入口(reward_grant().use_treasure)。④trigger_cond_test V6 的两处 flat 行调用改指 reward_grant()._apply_flat_row(att 束形)——它原调编排器已迁函数触发 Invalid call,_init 在 quit 之前中断=进程挂死 124 超时(本轮排查实证:同件在 master rc=0 秒退,合并后挂死;修后 rc=0 全绿)。验收:run_all 65 套件 64 绿 1 红=已登记存量红(02 EV 锚 goblin 0.9148∉[1.00,1.20],迭代39 特批带红在册,重锚归后续数值批),零 SCRIPT ERROR;负向套件 run_time_fatal_test exit=1 三点绿;variant_placement 49 checks 绿(wr10 三条在位);gdstyle 待合并后复测〔结构小件批 V16〕
2026-10-27 22:25:53 +08:00
卡①T5(拆件批wr6/V13): damage_controller 拆分+参数束——open_ticket 12参→(kind,source_class,display,spec)四参 spec 束(必载 channel/base_value/target_rule/ri 缺载 assert;可选 origin_cell/attack_type/rider/highlight/context 缺省同原签名;返回单据字典九栏目+requires/source_unit 逐字不变=契约8);类变量 19→15(dig_streak/charge_layers/rider_tier_bonus/rider_tier_crit→inject 束;fx_reveal_request/fx_ac_request→fx_calls 束 {reveal,ac});函数级拆分=_hero_attack_ctx→_ctx_rewrites(按序改写族四拍+armor_roll 发射+clamp_check 唯一发射点)+_ctx_clamp_delta(克制点数+订阅改写,消费同批命中禁重复发射);_hero_attack_redeem→_kill_overflow(kill 发射+贯穿弹射);_resolve_enemy_skill→_enemy_roll(掷点/折扣/克制/池乘/下限)+_enemy_shield_apply(damage_taken 施加面 {total,shield} 穿线,发射位留主函数保减伤落快照先后序)。调用点 30 处全改 spec 形(core 14=reward_grant 3+grant_segment 7+combat_segment 3+控制器内部 overflow 1;damage_controller_test 15;system_contracts_test 1)+inject/fx_calls 注入点改键(combat_segment :34/:37/:62、begin_battle :341-347)。验收:gdstyle 基线外 0 NEW(damage_controller 9 条存量键全清:branches/length/locals×3/class-vars 19→15/params 12→4)+ unit/integration 62 套件 1698 PASS 零 SCRIPT ERROR(〔dc1〕damage_controller 44 检查全绿含 A/B 模式/死亡作废/requires 门/flush_submit/AC 合流/池乘区;〔dc2〕system_contracts 九栏目契约绿;〔dc3〕round_flow/seal_polarity/level_shop 全绿)+ system_test 70 项 0 失败三闸过〔拆件批 V13〕
2026-10-27 07:52:02 +08:00
合并 master(迭代39 拆件批+文档批) 进 iter40+主角账模型迁移适配——冲突两件按「保留本分支拆件结构+承接 master 语义」解:①battle_orchestrator 承 RunLedger 整类退役=新增 _journal()/_attune_loadout() 两读面(enc 派生、无成员接收)、_reseed_attune_charges 循环体换 AttuneLoadout.reset_cycle(写时种行/补行单源化)、冒险桶挂接改 enc["adv_bucket"](经 _fx_host.mount_buckets 下传)、战末 bonus 汇入换 GainJournal.gain_bonus(axis,value,"battle_export",axis);同时接回 master 的 B4 战斗指标面=_mines_hits 三读数账+开战清零+轮末转存、_roll_round_actions facts 组包四键(round_index/last_round_end/mines_hit_last/mines_hit_total)并传 check_trigger_unlocks/rollable_skills/special_skills 三参、enemy_hp_threshold 读数改 trigger.value。②RewardGrant 的 battle_ledger 引用改 battle_hooks 回调束三键(attune_consume/vision_add/negative_blast,bind_battle 缺键 assert)——授予件对账本零强引用、宿主侧单点留编排器,类变量封闭面 15 不减不增;use_treasure 充能消耗与真视计数改经回调,负向 blast 踩雷计数在 _flat_blast 判极点后回调宿主记账(等价承 master 的 _book_negative_blast 语义)。③treasure_effects_test 计数链断言取 master 口径(lg13.vision_used()==1)+本分支真实入口(reward_grant().use_treasure)。④trigger_cond_test V6 的两处 flat 行调用改指 reward_grant()._apply_flat_row(att 束形)——它原调编排器已迁函数触发 Invalid call,_init 在 quit 之前中断=进程挂死 124 超时(本轮排查实证:同件在 master rc=0 秒退,合并后挂死;修后 rc=0 全绿)。验收:run_all 65 套件 64 绿 1 红=已登记存量红(02 EV 锚 goblin 0.9148∉[1.00,1.20],迭代39 特批带红在册,重锚归后续数值批),零 SCRIPT ERROR;负向套件 run_time_fatal_test exit=1 三点绿;variant_placement 49 checks 绿(wr10 三条在位);gdstyle 待合并后复测〔结构小件批 V16〕
2026-10-27 22:25:53 +08:00
卡②(结构小件批p1-p7+V15): 七点定点修落地+运行期违约通道负面套件+wr10 偏运缝拆验收——①p1 状态角标判据去重(main_overlay_flow._sync_status_entry 一组重复赋值语句删除,battle_live 局部量随之退役=wr1 载体);②p2 确认窗开合归模态栈单口(main 两处 _on_confirm_* 改 _close_modal;存档删除入口改 root._open_modal(root.confirm_dialog) 后再 open,遮挡记账/挂起兜底/开侧同步同口);③p3 棋盘动作与 stop 两入口显式 settlement 空防护(锁谓词异常时不崩于空引用);④p4 会话更替即清队:_begin_session 首行 _row_pacer.flush()(待播行不住局态=机制保证非时序约定);⑤p5 缝拆:RewardEconomy 删跨域直持(_fx/_ctx/set_fx)改注入 luck_bias_query: Callable,reward_roll 发射与 bias_rewards 求和收回 BattleFxHost.luck_bias_for(cell_count)(三参形 dispatch,不带 facts——禁复用 fx_emit 的第四实参会打开 when 事实条件面),组装点 set_fx 一行换赋值一行 1 换 1;类变量 15−2+2 净 15,gdstyle 无第 16 枚;⑥p6/p7 RngService 未知用途标签与未播种取数两分支加 violation_handler 记录位+release 下 return null 空引用即刻崩(fail-fast 传导,合法路径不可达)——debug 下 assert 先中断函数本体两态不可判别,故记录位是唯一可观测面;⑦board_generator/reward_economy 各加 fatal_handler 注入位并由组装点接 orchestrator._fatal(release 剥 assert 后仍经 battle_result 封印真中止)。新件 tests/unit/core/run_time_fatal_test.gd(manifest 登记 expect=1 negative=true):wr5 协作件 _fatal 经组装点传导 p5 封印+缺省形态不外溢/wr6 未知标签通道/wr7 未播种通道(各用新建 RngService 实例,播种断言 _counter==0)。wr10 三条入 variant_placement_test=判定面夹具白盒装载(现网数据无 bias_rewards 行,沿 tree_rules_v11_test 先例)+接线同源+权重生效 77+4*2。验收:variant_placement 49 checks 全绿(wr10 ①②③ PASS:空订阅 0/命中 1 行/装载后 2;查询口有效且与宿主同源;偏运池实测 85);run_time_fatal_test 退出码 1 三点绿;pacing_queue 绿(wr4 前置夹具真入队 2 行→更替后清零);ui_click_probe 问题 0(wr2 遮挡账开/关两侧断言);round_flow_skill_pool 130 checks 绿;wr11 dump_battle 六组(L{1,2}×S{42,779401,779501})与改前 before_* 逐字节 cmp 全等;gdstyle 基线外新违规 0、恶化 1(level_map_screen 类变量 22>21=iter38 存量非本批触碰面)、基线文件零改动〔结构小件批 V15〕
2026-10-27 18:39:53 +08:00

tests/unit/ — 隔离单元测试

每系统一个子目录(现行:data_config/、core/、battle_settlement/、contracts/、presentation/)。协议与命名见 tests/README.md。

活样板:example_test.gd(本目录)——第一个真实测试请以它为模板。 参考实现:game/smoke/smoke_all.gd(752+ 条断言的组织方式)。