diff --git a/game/tests/golden/README.md b/game/tests/golden/README.md index 9bb64977..05913c31 100644 --- a/game/tests/golden/README.md +++ b/game/tests/golden/README.md @@ -5,6 +5,8 @@ 比对判据与工具见 `tools/golden_compare.py` (逐像素灰度差 >16 的像素占比 ≤2%)。 +**未建锚面备案(2026-10-29 迭代 41 收尾登记)**:营地/设置/战斗三屏与战末结算/三选一/图例/调试浮窗四浮层无改前 golden 锚——迭代 41 测试特许移交(2026-10-28 用户裁,码先行动)致改前帧无法补建;这些呈现面的等价证据承载=现役探针/单元测试断言面+实机目检(体验验证清单 ㊵ 节)。 + ## 时效判定纪律(迭代 29 T7 立) 基线冻结于 2026-09-30(v3.5 视觉落码后)。**判定先于动作**:每代换代面(视觉/素材/布局改动) diff --git a/reports/iter41-反哺点-2026-10-28.md b/reports/iter41-反哺点-2026-10-28.md deleted file mode 100644 index 85f8c3b9..00000000 --- a/reports/iter41-反哺点-2026-10-28.md +++ /dev/null @@ -1,33 +0,0 @@ -# 迭代 41 反哺点清单——两卡(核心数据面结构收敛批+呈现层结构收敛批) - -> 每条=哪个文件哪一节、改成什么、依据。落文归文档批(doc-design),本清单只是申请单。 - -## A. architecture.md(v1.22)——定稿注记的现状改写(卡① §6 ③) - -依据:卡① 全清裁决四项已实现,v1.19 定稿注记的「实现批后」表述全部过期;现行行号按 v1.22 实查(2026-10-28)。 - -1. **:88 ConfigDB 行**——「分组建档于实现卡,消费方改址随该批」改现状:三容器已建(`config_domain_combat/run/crossrun.gd`,类型化成员 7/7/5),公开面收敛至 8(push_diag/is_fatal/reset_diagnostics/diagnostics/diagnostics_count/load_tables/set_reload_gate/reload),类变量 9;resolver 经 load_tables 装配段注入三表(board_gen.resolve_row/enemy.resolve_rowset/difficulty.resolve_modifiers),resolver 文件与键零搬移。红线句「唯一加载与持有单点……经其持有的表对象」原样保留。 -2. **:89 SlotStore 行**——「实现批建件」改现状:已建件,槽位族 10 公开/类变量 4;save_manager 组装持有,消费方经 `save.slots.` 直连;_rename_overwrite 留 save_manager(IO 原语单点)。 -3. **:90 MetaStateStore 行**——「实现批建件」改现状:已建件,写口原语 13+只读投影 6(tree_state/forge_state/attune_state/career_state 四投影+keystone_balance/item_unlocked)=19 公开,add_keystone 私有 _add_keystone;零 _data 副本零缓存;消费方经 `save.meta_state.` 直连。 -4. **:126 meta_progression 行**——「随件退役」改现状:公开面 20 定稿(buy_treasure_unlock/refresh_treasure_unlocks/treasure_shop_status/forge_buy_level/forge_buy_unlock/forge_select/hero_type_axes/forge_shop_status/settle_adventure/hero_override/tree_can_buy/tree_buy/tree_toggle_fork/tree_buy_fork/tree_rule_keys/tree_camp_status/toggle_attunement/attune_camp_status/attune_refresh_charges/buy_attune_refresh);纯转发读已退役(消费方直连 meta_state);hero_override 内联锻造加值与树淬炼 flat;并组三组(forge_select(kind,route_id)/hero_type_axes()→{attack,armor}/tree_camp_status()→{rows,fork_groups});补 meta_state 成员装配。 -5. **:104 minesweeper_rules 行**——消费依赖列「A3 try_spend / last_round_end / 相位」补形态注记:last_round_end 已由属性改方法(迭代 41 K5,消费方 minesweeper_rules :495 一处改方法调用)。 -6. **其余在册行零改动注记**(卡① §6 原列 :90/:92/:93/:103/:104 为 v1.19 行号,v1.22 现行=:92 action_economy/:93 variation/:94 status_container/:103 board_generator/:105 unit_container/:106 reward_economy):公开 API 语义零变化,仅内部拆分/束化/私有化——注记「迭代 41 零改动」即可,不逐行改写。 - -## B. GDD 行号随动(卡① §6 ①②,陈述本体零变化) - -7. **design/gdd/systems/战斗循环/地图战斗资源.md :83**——代码引用行行号换代:`_rollable_rows()` 「第 207-213 行」→「第 325 行起」(reward_economy 拆分后漂移);「循环第 65-67 行」→「第 59-61 行」(roll_board 身份批循环现行位置;规范化段已提 `_normalize_eligible`)。同池同权重一视同仁的陈述本体不变。 -8. **design/gdd/systems/冒险循环/冒险结构.md 调参表**——落点列改指段路径(K4′ 拆段后标量槽随段件嵌套,单 .tres 保持): - - :268「adventure_table curio_value_*」→「adventure_table value_segment.curio_value_*」; - - :270「adventure_table token_* 配额列族」→「adventure_table quota_segment.curio_quota_*」; - - :271 clear_heal_pct 不动(knob 留置宿主,:267 同理不动)。 -9. **同表 :267 疑似先行漂移发现(非本批造成,归文档批核实裁决)**:落点列「adventure_table bonus_attack_flat / bonus_max_hp_flat / bonus_armor_flat」——全库 grep 零命中(.gd 与 .tres 均无),疑指已退役槽名;现行承载疑为 value_segment.curio_value_{attack,max_hp,armor}_{common,excellent} 六槽。本批未改该行(不属两卡清单),提请文档批核现行值源后换代。 - -## C. 卡② 同步面核对记录(architecture 预期零修订) - -10. **architecture.md 零改动核对**:两豁免段在位(:183 组合根句柄面豁免、:311 测量面豁免);模块归属表零行变化(零新件、ui_kit 无独立行、flow context/状态件均为宿主内形态);组合根句柄面条款不受影响。**落文动作=无,仅登记核对结论。** -11. **待办清单状态核对注记(卡① §6 ④)**:来源条目「gdstyle 存量债全量清偿——216 键按病根分波整改」两卡对应键账已清(卡① 85/85+卡② 67 清 2 豁免 2 改善,见实现报告 §2);条目状态推进与残余键(三宿主 12 键归迭代 39 主卡)的去向,归主会话/batch-closure 统一回写,本批未触碰该清单。 - -## D. game/ 内文档(批内机械同步,非反哺) - -12. game/tests/验证集清单.md——已机器重生成对账(68 源文件 1587 调用点;断言数与 master 侧一致,地址形态随改址换代),随批入库,无落文义务。 -13. game/tests/golden/README.md——未动(乙组建锚与甲组判读属测试动作,随特许移交;让步声明见实现报告 §八.2)。 diff --git a/reports/iter41-实现报告-2026-10-28.md b/reports/iter41-实现报告-2026-10-28.md deleted file mode 100644 index 6c5eb276..00000000 --- a/reports/iter41-实现报告-2026-10-28.md +++ /dev/null @@ -1,91 +0,0 @@ -# 迭代 41 实现报告——gdstyle 存量债清偿两卡(核心数据面 85 键+呈现层 71 键) - -- 批次:迭代 41(卡① 需求卡片-核心数据面结构收敛批-2026-10-27 v1.2;卡② 需求卡片-呈现层结构收敛批-2026-10-27 v1.2) -- 工作区:worktree `D:\code\g-plan2-iter41`(分支 iter41,基 7f49a8c2);卡① 提交 c56b816f→070a5340 九笔,卡② 提交 98ac923f→9bef58f9 十笔(含 T2a 修与 u14 补做),并 master 38c9a0eb -- **测试执行声明(2026-10-28 用户特许)**:「不用做任何测试……测试相关动作全部交给我来运行」——本批全部套件停跑、闸停跑(gdstyle 结构闸除外,为开发期读数反馈在跑);验收断言、golden 对拍、撤销证明复现、独立验收审计全部移交用户执行,清单见 §7。因此本报告的「验收」栏记的是**移交状态**,不是已验证状态。 - -## 一、各卡状态 - -| 卡 | 状态 | 读数 | -|---|---|---| -| 卡① 核心数据面结构收敛批 | T0–T9 完成(T10=本报告+反哺点清单) | 在册 85/85 键全消失;8 新件键账逐件在阈(§3);契约 1 行为零变化六款按拆分逐字执行(提交信息逐笔留痕) | -| 卡② 呈现层结构收敛批 | T0–T5 完成(u1–u25 全落地;u14 补做) | 71 键=67 清+2 豁免在册+2 在案改善未消(§2);u23/u25 豁免申报见 §4 | - -偏差两笔(都在 §6 立案):①卡② u14 在 T2b(525529ad)提交信息有记、实际漏改——已补做(9bef58f9);②卡①完成定义写「下降 86 键」,波 0 刷新基线中卡①范围在册实为 85 键(config_db_cross_validator `validate_skill_pool_links 局部` 键在刷新时已不在册)——按在册口径 85/85 清零。 - -## 二、S13 键账终局对拍 - -**开工(波 0 刷新基线 d219dd3d)168 键 → 终局 16 键在册(全部基线内,NEW=0、WORSENED=0)→ 消失 152 键。** - -基线 168 键构成与终局去向(逐键归类实测,脚本对拍 2026-10-28): - -| 范围 | 基线在册 | 终局去向 | -|---|---|---| -| 卡① 26 文件 | 85 | **85 全消失** | -| 卡② 25 文件 | 71 | 67 消失;main 类变量 49、tune_sim await 2 键豁免在册;board_cell_unit 类变量 31→30、standee_body 类变量 29→19 两键**改善未消**(成因见 §6-B) | -| 两卡之外(board_view 6/level_runner 3/battle_orchestrator 2/adventure_runner 1) | 12 | 12 全在册(禁触面——board_view/level_runner/adventure_runner 结构拆件归迭代 39 主卡,battle_orchestrator 类变量为 v1.22 豁免第三条;battle_orchestrator 文件长度 1037→1035 随卡① spawn 调用点改址顺带改善) | - -卡② 71 键逐单元对账(卡面 §8.4 账目 vs 实绩):69 清承诺中 66 键消失;u3 类变量键、u4 类变量键两键未消(展平计数,§6-B);u14 一键补做后消失。卡① 85 键逐 T 对账:T1 17+T2 23+T3 17+T4 8=65 拆分清偿;T5 存档拆件(save 52→7+_peek_summary_at 7→6+load_from_disk 8→6)+T6 meta 31→20 与 status/treasure+T7 config_db 44→8、25→9+T8 adventure 44→12+T9 action_economy 18→15、spawn 参数 10→1 等结构收敛清偿。 - -## 三、新件键账表(卡① 8 新件,实测 vs 卡面预演值) - -| 新件 | 公开方法 | 类变量 | 卡面预演 | 判定 | -|---|---|---|---|---| -| `core/slot_store.gd` | 10 | 4 | 10/4 | 在阈 | -| `core/meta_state_store.gd` | 19(写口 13+读投影 6,_add_keystone 私有) | 1 | 19/1 | 在阈 | -| `core/config_domain_combat.gd` | 0 | 7 | 7 | 在阈 | -| `core/config_domain_run.gd` | 0 | 7 | 7 | 在阈 | -| `core/config_domain_crossrun.gd` | 0 | 5 | 5 | 在阈 | -| `schemas/adventure_quota_segment.gd` | 0 | 13 | 13 | 在阈 | -| `schemas/adventure_value_segment.gd` | 0 | 13 | 13 | 在阈 | -| `schemas/adventure_cap_segment.gd` | 0 | 9 | 9 | 在阈 | - -## 四、豁免申报(卡② u23/u25,零重构零键清偿动作) - -1. **u25 组合根类变量**:`game/presentation/main.gd|max-class-variables = 49`(登记 49,持平)——依据 architecture「呈现层装配与会话生命周期·三屏壳与组合根句柄面」节 S13 豁免登记在册(v1.22 :183:组合根类变量面=探针契约面,约 46 句柄被探针挂载假设钉死,键永久基线内、禁再恶化)。u25 零改动;本批 main.gd 的其他改动均为卡① 改址与 u6/u19 消费点随动,S10 句柄面零增删。 -2. **u23 测速循环 await**:`game/presentation/tune_sim_controller.gd|await-in-loop`(裸键,在册持平)——依据 architecture「测试与质量域·S13 测量面豁免登记」段在册(v1.22 :311:逐帧让出=调参测量 wall-clock 步进承载语义,禁重构)。同件 print 与 run 局部两键已清;playtest_logger print×2 已删。 - -## 五、并 master 与合并期处置(2026-10-28,合并提交 38c9a0eb) - -迭代期间 master 前进(断言归位专项批 94 处、断言精简 A+B 档 19 处、单元闸挂死守护、undo_proof 退役)。合并冲突 6 文件,处置原则=**master 的断言改钉/删并+本批的容器/拆件改址,两者语义正交逐处并案**(adventure_feats×2/config_db_resolver/level_shop_economy/save_boot_no_activate/roll_multiplier);另发现两批改址的系统性盲区互补——master 新写行带旧表地址 5 处、**本批 T7 扫荡漏「无点形态」(空值守卫/赋值/传参位的裸表引用)17 处+访问器迁移漏网 3 处**,合并期全数修复(action_economy._cost、effect_engine feats 守卫、hud_presenter 两守卫、测试 14 处;终扫 PCRE 负向前瞻零残留,冻结标签字面量未动)。验证集清单机器重生成对账(68 源文件 1587 调用点,与 master 侧计数一致——本批改址零断言数变化)。 - -## 六、实现决定记录 - -**A. 事故与补做** -1. 卡① T7 首轮改址扫荡漏容器表名(`db.combat.rows` 形)→ 整树 `git checkout -- game/` 回滚、修正替换规则后重跑,净效果零(a9a163f9 提交信息在案)。撤销方式:无需(事故已消解于当卡)。 -2. 卡② u14 漏做(T2b 提交信息有记、diff 未含该文件)→ 合并前补做(9bef58f9),装配序逐行原序保持,S7 源锚句逐字在位。撤销方式:回退 9bef58f9 即回键在册态。 - -**B. 键以「在案改善」收口(卡面承诺键消失不可达)** -- u3 board_cell_unit 类变量(31→30)、u4 standee_body 类变量(29→19):gdstyle 0.4.0 对宿主内 inner class 状态件成员按宿主**展平计数**(开工探针实测),键值含状态件成员后必 >15;卡面契约 6 定死 inner class 单形态(零新文件),独立状态类形态被禁。处置=按闸口径收口(改善绿非恶化红),键留基线。代价:两键继续在册。撤销方式:后续批若改 gdstyle 计数口径(类级键排除 inner class)可自然消失;否则随键主文件的下一次结构批裁决。 -- 与卡面「71=69 清+2 豁免」的差额即此两键:实绩 67 清+2 豁免+2 改善。 - -**C. 白名单内等价微调(一行备案)** -1. legend_overlay 循环提函数时尾段成孤儿代码(不可达 NEW 键)→ 尾段归还原调用方。 -2. camp_shop_presenter 束读落地改构造期成员拷贝形态(ctx 键集不变)。 -3. main.gd 战末账行束提 `_end_victory_opts` 装配单点(u6 opts 形随动,键构成不变)。 -4. board_fx 循环按实际 `for i in 2` 形态提函数;battle_log `_fmt_damage` 宿主成员 `_db` 不进状态件。 -5. spawn 束化扫荡加引号奇偶守卫(@@SPAWN_SKIP@@),断言字符串字面量零触碰。 - -## 七、测试移交清单(用户运行——特许移交,全部未跑) - -**交付前验收唯一入口**:worktree 内跑 `python tools/run_all_gates.sh`(本批含 game/ 代码面+reports/ 文档面 → 不带参数全量档;worktree 冷检出注意素材齐盘预检——art 素材与 *.import 边车不入 git)。 - -按卡重点套件(闸绿之外的建议抽查面): -- 卡①:data_config 八套件+core 直引;board_generator/board_gen_reward+node_map 三件(同种子逐位一致);效果面六套件;save 断言面全套(save_manager_domain/save_slot_isolation/save_slot_summary/save_boot_no_activate/breakpoint_resume/save_rng_roundtrip+integration);tree_requires_level/meta_progression_forge;seal_polarity/roll_multiplier/damage_controller/system_contracts/treasure_items_test;minesweeper_rules_test/round_flow_skill_pool;level_shop_economy;adventure_feats/pool_case_d/feat_vouchers/table_structure_guard(**deck_total()=102 结构锚**)。 -- 卡②:probe_gate 全段+system_test;theme_projection/ui_struct/ui_contrast/ui_tune/ui_click/ui_probe;player_copy_sweep/standee_fx_sweep/reward_overlay/battle_narrator/level_map_info_fog/hud_presenter;render_gate(甲组在库五张 golden 改后对拍——**乙组三帧与丙组四态改前锚因码先行动未建,此义务让步**,见 §8)。 -- 撤销证明:两卡 §8.1 末列手法(读数型/迁移型/grep 型)——移交抽查执行。 -- 独立验收审计:两卡 §8.3 抽查重点(卡① ⑪ 项含契约 7 职责语句抽检;卡② ⑨ 项含 u1 子域分组与 board_view 随动改址抽 5 行)——未过不得合并。 -- 批后可裁事项:`tools/gdstyle_baseline.txt --refresh`(152 死键清账,只降不升纪律,人工专用)——用户裁决时机。 - -## 八、实机目检总清单(登记不阻塞,判读口径全部=「与改前一致」) - -1. 启动冒烟实机一屏(卡① 行为零变化批总入口)。 -2. 乙组三屏开合观感:营地/设置/战斗。 -3. 丙组四态开合观感:战末结算/三选一/图例/调试浮窗。 -4. 营地三柜台(树淬炼/锻造工坊/秘宝匣)与同调交互回归。 - -## 九、遗留读数义务 - -1. MC/对拍锚:本批零数值零 RNG 改动 → 零 MC 零对拍补跑(卡① §0 纪律),无遗留。 -2. golden 乙组三帧(camp/settings/battle)与丙组四态改前锚未建(特许时序:码先行动)——改后无法补建改前帧,唯一在库对拍面=甲组五张;呈现等价的其余证据承载=现役探针/单测断言面。 -3. gdstyle 基线 152 死键在册(闸绿不受影响)——refresh 时机归用户(§7 末条)。 diff --git a/reports/需求卡片-呈现层结构收敛批-2026-10-27.md b/reports/需求卡片-呈现层结构收敛批-2026-10-27.md deleted file mode 100644 index b76bf1e2..00000000 --- a/reports/需求卡片-呈现层结构收敛批-2026-10-27.md +++ /dev/null @@ -1,380 +0,0 @@ -# 需求卡片:呈现层结构收敛批(gdstyle 存量债清偿·波 6+波 8 呈现侧——视图内部拆私有函数+工厂/参数面收敛+类变量全清) - -- 版本:**v1.2**(v1.1 = 2026-10-27 用户裁决四条款折入——全清口径取代残留申报+print 删除落死+main/await 两键架构豁免;v1.2 = 2026-10-28 用户裁「拆分边界纪律(DDD/高内聚)」落卡——新增契约 9+u1 子域拆件改法+状态件职责语句义务+审计⑨+L3 增款+读数锚重锚〔基线 216→168、恶化 2→1,随波 0 刷新 d219dd3d 与迭代 40 归绿〕;自审与 grilling 记录见 §12) -- 来源:[待办清单](../待办清单.md)「gdstyle 存量债全量清偿——216 键按病根分波整改」条目(2026-10-26 登记,P0,状态=文档设计已闭合+待写卡)——**需求性工程条目,证据指认形态**(唯一事实源:[审计-gdstyle存量债清点与清偿方案-2026-10-26.md](审计-gdstyle存量债清点与清偿方案-2026-10-26.md) §六第 3 条〔波 6 视图内部拆私有函数、不拆构建步件〕+第 7 条〔归并裁定:本卡=波 6(54 键/17 文件)+波 8 呈现侧 8 文件(17 键)=71 键〕);设计段裁定=纯代码内部收敛、**零设计改动** -- 归属:`game/presentation/` 25 文件(波 6 十七件+波 8 呈现侧八件)+消费面随动改址(§7 结构图注记;v1.1 增 board_view 写入行随动,见 §0);treasure_interact_controller 已移卡 1(B1 战斗域拆件批),不在本卡 -- 排期:未编入(迭代批卡片;估时 ≈5.0–5.5 个工作日,估 ≈5.3d) -- 开工门:U0+复核门过(§12);**零待裁点**(2026-10-27 用户裁决记录:print 删除;await 按 v1.19 测量面豁免——§11) - -## 0. 前置依赖与并行性 - -- **第〇步核对(2026-10-27 写卡会话)**:来源条目=需求性工程条目(状态行含「文档设计已闭合+待写卡」;证据指认=清点报告 §六逐波裁定+本卡 §3 逐文件实查),放行。设计段闭合凭据(2026-10-26 用户裁)=①纯代码波写卡前确认零设计改动+按当时 master 重测读数(已做,见 §3);②波 6 形态=视图内部拆私有函数、不拆构建步件;③波 8 呈现侧散条随本卡收编(§六第 7 条归并裁定)。**v1.1 补核对(同日用户裁决四条款)**:全清口径取代残留申报(71=69 清+2 豁免)、print 删除落死、main/await 两键按 architecture v1.19 豁免登记、其余类变量大户收拢内部状态件——四条款为类变量键清偿的设计闭合凭据,已落 §1/§4/§7/§8.4/§11。 -- **与迭代 39 卡组的文件交叠(串行义务,呈编排段裁先后)**:iter 39 主卡(冒险域拆件批)触 `level_map_screen.gd`(:334-343 bonus 读面改指 hero)、`hud_presenter.gd`(:20/313 同面)、`curio_interact_controller.gd`(16 处调用改指 stop())、`main.gd`(装配面)——与本卡四文件重叠。两批无论先后,后开工批 T0 自吸收行号漂移;**禁编入同迭代同波并行**。姊妹副卡(同调配装)触 core 域零叠;技能池触发器卡触 core/data 零叠。**v1.1 交叠集扩展:board_view.gd 加入错波集**(u3 收拢随动其写入行约 40 行,见 u3 行)——交叠义务同四文件(后开工批 T0 吸收漂移;board_view 结构拆件仍归 iter 39 领地,本卡只做写入行机械改址,见 §5 不做清单)。 -- 与同事项卡 1(B1 战斗域拆件批:battle_orchestrator/settlement/damage_controller/treasure_interact_controller)、卡 2(核心数据面:core/data 侧)**零文件交叠**。 -- 本卡禁触 adventure_runner/level_runner(iter 39 规避清单);禁触 battle_orchestrator(其行数恶化债 c4c69701 归卡 1 还债)。~~board_view 禁触~~(v1.1 收窄:board_view 结构拆件仍禁触,写入行机械改址随动允许——u3 全清口径的必要执行面,2026-10-27 裁决第 5 条)。 - -## 1. 目标与完成定义 - -**目标**:呈现层 25 文件 71 键结构收敛——超长构建/绘制/格式化函数拆私有函数族(波 6 形态裁定)、工厂件公开面与参数族收敛(波 8)、类变量大户收拢内部状态件全清(v1.1:2026-10-27 裁决,残留申报废除)、测量面 print 残留删除(信息已由 toast/JSONL 承载)、main/await 两键按 v1.19 架构豁免申报。**游戏行为与玩家可见呈现零变化**(契约 1):本批零行为改动、零新文件、零新公开概念。 - -**改动单元清单**(需求点,逐单元验收行见 §8 对照表;键数=2026-10-27 实测,与清点报告 §五逐条吻合;v1.1 收拢清单=逐件成员构成实查产出,冻结成员与收拢面逐条见 §3 S17): - -| # | 单元(文件) | 现行键(值/阈值) | 改法 | -|---|---|---|---| -| u1 | camp_overlay_view.gd | 类变量 19/15;循环内 new×7;_init 149 行 28 局部(:42);_rebuild_tree 61 行 21 局部(:222);_rebuild_forge 72 行 20 局部(:301);refresh_camp 61 行 17 局部(:386) | _init 拆四柜台构建私有族;_rebuild_*/refresh_camp 拆行板构建私有族;循环体提行板构建私有函数;**类变量收拢(v1.2 改法=按柜台子域拆件,禁四柜台混装一袋)**:探针冻结 5 成员(S17)保持宿主,其余 14 个按子域分组各成状态件——树域(_tree_holder)/锻造域(_forge_lock_l/_forge_workbench/_forge_zone_weapon/_forge_zone_armor/_forge_rows/_ws_scroll/_ws_lock_l)/同调域(_attune_header_l/_attune_btns/_attune_nodes)/刷新与最近域(_refresh_l/_refresh_btn/_recent_list),每件一句职责语句(分组微调属代拍板白名单,契约 9)→ 宿主=冻结 5+子域件 4=9(键照清) | -| u2 | level_map_screen.gd | **类变量 22/15(基线登记 21——iter38 恶化债 c4c69701,本卡归绿义务)**;_init 135 行 21 局部(:58);_draw_graph 78 行 9 分支 27 局部(:423) | _init 拆构建私有族;_draw_graph 拆绘制私有族(节点/通道/底栏);**类变量收拢(v1.1)**:探针冻结 6 成员(S17:_cand_ids/_hover_id/_content_size/_layout_cache/abandon_btn/status_badge)保持宿主,其余 16 个收进内部状态件(_node_icons/_noise_rect/_tint_level 三件在状态件内持 `_layer_decor` 域字典,装饰域归并形态随迁)→ 宿主 7;恶化债归绿被 ≤15 吸收(键消失);状态件须有职责语句、装饰域与图状态跨子域不混装(契约 9) | -| u3 | board_cell_unit.gd | 类变量 31/15;_draw 147 行 29 分支 19 局部(:135) | _draw 拆绘制私有族(底面/接触带/数字徽标/封印/高亮/点迹各域);**类变量收拢(v1.1)**:探针直读 4 成员(glyph/fog_state/plate/glyph_color)保持宿主,board_view 直写 26 成员收进内部状态件、board_view 写入行随动改址(约 40 行 `u.X =` → `u.st.X =`,机械改址零语义——S17 实查:31 成员中 30 个被 board_view 直写 47 行,本件为被动绘制壳,全清唯一路径=写入行随动;状态件职责语句=「单格绘制输入集」——被动绘制壳的全部绘制入参,单一变化原因成立〔契约 9 预检〕)→ 宿主 6(4 冻结+_glow_layer+状态件) | -| u4 | standee_body.gd | 类变量 29/15;循环内 new×2(:268/:296);_draw 84 行 26 局部(:414) | _draw 拆绘制私有族(立绘/血条/意图/护甲徽标/顺位徽标);循环体提私有构建函数;**类变量收拢(v1.1)**:外部直访 4 成员(box/font/slot_row/has_world_hp_bar——battle_stage_view 直写 :122/:180/:214/:268、fx_probe/ui_probe 直读,S17)保持宿主,其余 25 个收进内部状态件(含 _death_shards/_hit_sparks/_flash_count 三探针出口计数——经 fx_probe() 方法出口,随迁方法读点)——演出计数与装配态可分则按子域分组,整件收拢须给「站桩演出状态」职责语句并核单一变化原因(契约 9)→ 宿主 5 | -| u5 | hero_info_panel_view.gd | 循环内 new×2(:55/:189);_init 74 行(:24);set_treasure_inventory 57 行 13 局部(:162) | _init 拆段构建私有族;槽位循环体提私有构建函数 | -| u6 | battle_end_overlay.gd | 类变量 20/15;循环内 new×4(:222/:251/:271/:303);_init 81 行(:31);open_victory 参数 8/5(:116) | _init 拆行板构建私有族;循环体提私有构建函数;open_victory 可选尾参收拢 opts 字典(4 参);**类变量收拢(v1.1)**:探针直读 4 成员(_btn/_gp_name/_gp_row/_gp_val,S17)保持宿主,其余 16 个收进内部状态件 → 宿主 5 | -| u7 | debug_overlay.gd | 类变量 17/15;_build 124 行 22 局部(:153) | _build 拆五区块构建私有族(探针直引公开面逐字保留);**类变量收拢(v1.1)**:探针直读 3 成员(seed_edit/_sim_btn/_dbg_btn,S17)保持宿主,其余 14 个收进内部状态件(_run_data/_run_labels 经 run_data_probe()/update_run_data() 方法出口,随迁方法读点)→ 宿主 4 | -| u8 | ui_assembler.gd | 循环内 new(:156);build_start_overlay 83 行 16 局部(:97) | build_start_overlay 拆列/行构建私有族;立绘循环体提私有构建函数 | -| u9 | battle_stage_view.gd | 循环内 new(:266);_init 97 行(:27);_enemy_portrait_tex return 9/6(:233) | _init 拆子视口/世界/壳层构建私有族;_enemy_portrait_tex 改查表+回退(映射语义零变化) | -| u10 | curio_pick_overlay.gd | _init 52 行(:27);_icon_for_id return 7/6(:192) | _init 拆构建私有族;_icon_for_id 改查表+回退 | -| u11 | settings_overlay.gd | _build 77 行 13 局部(:31) | _build 拆行构建私有族 | -| u12 | battle_log_view.gd | _format_row 68 行 21 局部 13 return 9 分支(:144) | _format_row 按行型拆私有格式化函数族(iter38 卡⑥类型修复后现行形态为准) | -| u13 | curio_interact_controller.gd | 类变量 18/15 | **引用束注入(v1.1)**:16 个注入成员(db/4 视图/11 Callable)全部来自 _init(ctx) 逐成员抄写(:32-48)=CurioFlowContext 冗余面——删除 16 成员、正文读点改址 ctx 束(u20 三束键名,S12);_pending_curio/_curio_context 纯内部态保持 → 宿主 3(ctx+2)。探针零成员直读(S17——press_candidate 等全走方法面),零冻结面 | -| u14 | ap_bar_view.gd | _init 69 行(:34) | _init 拆构建私有族(源码锚句逐字保留) | -| u15 | board_zone_view.gd | _init 59 行(:21) | _init 拆构建私有族 | -| u16 | board_fx_view.gd | 循环内 new(:93) | play_perfect_sweep 循环体提私有 band 构建函数 | -| u17 | legend_overlay.gd | 循环内 new×2(:35/:37) | ENTRIES 循环体提私有行构建函数 | -| u18 | ui_kit.gd | 公开方法 26/20;beams_rect 13 局部(:333);modal_shell 参数 6(:453);BCard._init 参数 6(:752);bcard 参数 6(:812) | ①删零消费 frame_skinned(:566)/verb_button(:662)②私有化 modal_dim/beams_rect/gradient_base/switch_toggle(消费方全在本卡触面文件或单条测试行随动;load_font 保留公开——探针三行直引,收敛算术不需要它)→26→20 ③modal_shell 尾参哨兵收拢(6→5)④BCard._init/bcard 可选尾参收拢 opts(6→5)⑤beams_rect 像素循环拆私有函数 | -| u19 | hud_presenter.gd | refresh 参数 8(:14);_refresh_out_of_battle 参数 6(:147);tune_sim_report 参数 10(:188) | refresh/_refresh_out_of_battle 运行态尾参收拢 ctx 字典(4 参);tune_sim_report 统计束收拢(5 参);文案逐字不变 | -| u20 | curio_flow_context.gd | 类变量 16/15;_init 参数 16/5(:25) | 参数与成员按域收拢三束(views/getters/flow 字典)→ 4 参 4 成员 | -| u21 | camp_flow_context.gd | _init 参数 12/5(:21) | 同 u20 三束收拢 → 4 参 | -| u22 | battle_narrator.gd | bonus_card_text return 9/6(:100) | match 分支拆私有文案函数/查表(文案逐字不变,现役单测断言零改动) | -| u23 | tune_sim_controller.gd | print 残留(:43);循环内 await(:65);run 11 局部(:36) | 统计六成员收拢一 stats 字典(与 u19 束同构)→≤10 局部;**print 一行删除(v1.1 落死)**:日志路径信息由 logger 会话产物与落盘 JSONL 承载(禁改 set_sim_report 文本——契约 1 文案逐字不变);**循环内 await 架构豁免(v1.19 §「S13 测量面豁免登记」在册)**:禁重构测速循环,豁免状态进实现报告申报 | -| u24 | playtest_logger.gd | print 残留×2(:160/:161) | **两行删除(v1.1 落死)**:路径信息已由 toast 承载(main_debug_flow.gd:16 `show_toast("已转储诊断: "+path)`)、上下文 JSON 已落转储文件——stdout 重复输出零独有信息 | -| u25 | main.gd | 类变量 49/15 | **架构豁免(v1.1)**:组合根类变量面=探针契约面(约 46 句柄被探针挂载假设钉死),v1.19「呈现层装配与会话生命周期」节 S13 豁免登记在册——**键永久基线内、禁再恶化;禁收拢 main 句柄、禁为清键改写探针挂载契约**。卡内任务=核对注记在位(v1.19 :183)+实现报告申报豁免状态(依据指针 v1.19);死成员清点删除任务随豁免取消(类变量面冻结) | - -**完成定义**: -1. u1–u25 落地;`python tools/gdstyle_gate.py` 读数:**基线外新违规(NEW)=0**;**恶化(WORSENED)=0**(开工时点唯一在册红 level_map_screen 类变量由 u2 归绿吸收;battle_orchestrator 行数已随迭代 40 归绿——v1.2 重锚);**71 键=69 键清零+2 键豁免**(main 类变量、tune_sim 循环内 await——v1.19 两处豁免登记段在册,键永久基线内;§8.4 账目)。 -2. 呈现逐像素零变化:§7 T0 建锚面(甲/乙/丙三组)改后对拍全 0.00%。 -3. 现役全套断言面绿:探针面(含源码锚字面量契约)与单元/集成套件零红、零删改(契约 5)。 -4. 撤销证明逐行落地(§8 对照表末列);三份产出物写齐(T5,含豁免两键申报件);独立验收审计过。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | [审计-gdstyle存量债清点与清偿方案-2026-10-26.md](审计-gdstyle存量债清点与清偿方案-2026-10-26.md) §六第 3 条 | 波 6 形态=视图内部拆私有函数、**不拆构建步件**(main_ui_build 先例动机是组合根超限,普通视图不类比——2026-10-26 用户裁) | -| D2 | 同上 §六第 7 条 | 归并裁定:本卡=波 6+波 8 呈现侧 8 文件=71 键;treasure_interact_controller 归卡 1 | -| D3 | 同上 §三波次表+§四纪律 | 改前建 golden 基线或对拍 0.00%;基线禁改禁 refresh;还债=数值下降自然绿;呈现零变化 | -| D4 | [architecture](../design/engineering/architecture/architecture.md) **v1.19**「三屏壳与组合根句柄面」节(:183) | 探针挂载假设 `main.X` 路径零迁移;**S13 豁免登记在册:组合根类变量面即探针契约面(约 46 句柄被探针挂载假设钉死),max-class-variables 对本件按架构契约豁免(键永久基线内、禁再恶化),豁免理由在册本节,禁为清键改写探针挂载契约** | -| D5 | 本卡 §3 逐文件实查(2026-10-27,master 8b146321) | 现状行号与键值;**逐文件实查确认不触碰任何 owner 契约(GDD 零修订预期)——实现段查到触碰点立即停笔呈报,禁内联求裁** | -| D6 | architecture **v1.19**「测试与质量域·S13 测量面豁免登记」段(:311) | tune_sim_controller 循环内 await(测速循环逐帧让出)是调参测量的 wall-clock 步进承载语义——重构即测量口径漂移,违行为零变化红线;**该键按架构豁免(键永久基线内),禁重构测速循环**;同件 print 残留不豁免(随全清批删除) | - -## 3. 现状事实(2026-10-27 写卡会话实测于 master 8b146321;开工日 T0 复核行号) - -**S13 读数**(v1.2 重锚——波 0 刷新 git d219dd3d 后基线 168 键):基线外新违规 0/恶化 1(level_map_screen 类变量 22>21=**本卡还债义务**,iter38 卡① _layout_cache 缓存成员特批带红挂账 c4c69701;battle_orchestrator 行数红已随迭代 40 卡①还债归绿——实测 1037=登记 1037)。25 文件逐文件读数见 §1 改动单元清单(gdstyle v0.4.0 实测,与清点报告 §五 2026-10-26 读数逐条吻合、行号为本次实测)。 - -**探针与测试直引面**(重构冻结面,逐条实测;v1.1 补全收拢件冻结成员——S17): - -| # | 事实 | 出处 | -|---|---|---| -| S1 | debug_overlay 公开面被 8 探针+系统测试直引:set_sliders/effect_text/press_apply_for_probe/press_reset_for_probe/press_simulate_for_probe/set_sim_count/visible/get_index/seed_edit;ui_tune_probe 另有**源码契约**:debug_overlay.gd 源码禁含 "create_t"/"UiKit.motion" token(零动效契约)+子树零 AnimationPlayer | `game/probe/ui_tune_probe.gd:46-67/225-239`;`game/tests/system_test.gd:204/228/258` | -| S2 | camp_overlay_view **双重源码契约**:ui_struct_probe 源扫描 `count("UiKit.STONE") == count("UiKit.STONE_DEEP")`(裸 STONE 禁令);theme_projection_test 源锚 `custom_minimum_size = Vector2(0, 336)` 恰 3 处、`size_flags_vertical = Control.SIZE_FILL` 恰 4 处、`SIZE_SHRINK_CENTER` ≥3 处 | `game/probe/ui_struct_probe.gd:46-50`;`game/tests/unit/presentation/theme_projection_test.gd:722-730` | -| S3 | camp_overlay 探针直引成员:_balance_label/**_tree_buy_btns/_tree_fork_btns/_workshop_holder/_workshop_rows**+refresh_camp/closed/visible(v1.1 实查补 _balance_label——ui_probe 直读 .text 判余额文案,原 S3 漏记) | `game/probe/ui_click_probe.gd`、`ui_probe.gd:36-42`、`screen_flow_probe.gd`(grep 实测) | -| S4 | settings_overlay 探针直引:retarget/_motion_btn/_volume/find_button 面;legend_overlay:visible/close/get_index+player_copy_sweep_test 直构 `.new()`+`ENTRIES` 常量消费+smoke_boot `main.get("legend_overlay")` | `game/probe/ui_click_probe.gd:286-343`;`game/tests/unit/presentation/player_copy_sweep_test.gd:69-71`;`game/tests/smoke_boot.gd:76` | -| S5 | ap_bar/log_view/info_panel/level_screen/stage/_end_overlay/board_zone/curio_overlay 探针直引成员与方法面(含私有成员 _cand_ids/_hover_id/_btn_stop/_log/_summary/_curio_section/_gp_val 等)逐条在案:press_candidate/status_badge/route_chosen/abandon_btn/press_card/press_confirm/press_continue/open_pick/is_open/verdict_text/continue_pressed/_btn_legend/_btn_stop/_dots/is_refresh_ready/confirm_visible/press_refresh_for_probe/press_confirm_for_probe/refresh_remaining_text/parsed_text/mode/armor_text/attack_text/item_slots/hero_standee/enemy_body_at/enemy_box/round_label/status_badge/legend_toggled/toast;**v1.1 补:battle_end 四句柄直读=_btn(5 处)/_gp_name/_gp_row/_gp_val(3 处)** | `game/probe/` 八探针 grep 实测(深访问清单已录实现报告素材口径,T0 复核) | -| S6 | standee_body 直构面:fx_probe `new("enemy")`/box/set_data/set_pending/intent_probe();standee_fx_sweep_test preload 直构+`s2.box` 读;theme_projection 源锚四句(GOLD_BRIGHT 顺位行/HERO_BLUE_BRIGHT/GOLD_BRIGHT 护甲/`_intent_charge = pid in CHARGE_SKILL_IDS`+GOLD_DEEP 旧判据禁句) | `game/probe/fx_probe.gd:15-30`;`game/tests/unit/presentation/standee_fx_sweep_test.gd:87-90`;`game/tests/unit/presentation/theme_projection_test.gd:689-696` | -| S7 | ap_bar_view 源锚:`UiKit.label("",UiKit.FS_CAPTION, false, UiKit.STONE_DEEP)` 逐字在位+"STONE_FAINT" 全文零命中 | `game/tests/unit/presentation/theme_projection_test.gd:696-700` | -| S8 | ui_kit 工厂消费方普查(逐方法 grep 产品码+probe/sim/tests,2026-10-27 实测):**零消费=frame_skinned/verb_button**(仅注释提及);消费方全在本卡触面=modal_dim(camp:45)/beams_rect(ui_assembler:104+theme:639)/gradient_base(level_map:65+theme:664)/switch_toggle(settings_overlay:76/:91);测量面直引(保留公开)=load_font+FONT_UI(board_shot_probe:49/type_glow_shot_probe:71/ui_font_asset_test:15);跨面消费(保留公开)=label 137/motion 96/panel_flat 35/load_tex 35/button 44/modal_shell 9/panel_skinned 9/primary_button 7/glow 族 7/keystone_badge 5/page_shell 5/scaled 5/vignette_rect 4/tg_band 3/backdrop_tile 3/danger_button 3/icon_rect 2/bcard 2+static var motion_scale(探针 15 处直引)/victory_fx_style | `game/presentation/views/ui_kit.gd:566/662/333/453/752/812`;grep 普查表(T0 存档) | -| S9 | ui_kit **扫描契约**:ui_contrast_probe 全 presentation 递归扫描——裸 `Color8(` 计数逐文件对空白名单(ui_kit 本体为合法定义面)、素材 preload 红线=0;theme T5② 源锚 `UiKit.panel_flat(SLOT_BACKDROP_SOFT, PANEL_BORDER, 0, 1)`;V4 四文件(ui_kit/ui_assembler/settings_overlay/debug_overlay)源码零 "styled_slider/tooltip_theme/_tip_theme/overlay.theme" token;theme V1-V3 直接调用 button()/vignette_rect()/beams_rect()/gradient_base() 做 Linear 白名单断言 | `game/probe/ui_contrast_probe.gd:164-195`;`game/tests/unit/presentation/theme_projection_test.gd:524-535/584-668` | -| S10 | main.gd 类变量 49 个(:61-148 实数);探针 `main.X` 一级句柄直引 46 名(run_scope/level_screen/debug_overlay/camp_overlay/settings_overlay/legend_overlay/ap_bar/log_view/info_panel/board_zone/stage/curio_overlay/_end_overlay/_start_overlay/save_select_overlay/career_overlay/status_panel/shop_overlay/node_overlay/board_view/db/meta/save_manager/settings_store/debug_badge/LAYER_CONTRACT/_modals/_deferred_modal/_confirm_consumer/_row_queue/_row_pacer/_settlement_stop_pending/_inter_overlay/_battle_root/_menu_screen/_camp_screen/_adventure_screen/_treasure_ui/_bonus/_camp_pres/_modal_flow/_tune_sim/_debug/_debug_entry/_seed_edit/confirm_dialog 等——46 名全量清单 T0 存档);装配拆件经 root 显式传参消费 main 成员(main_ui_build/main_*_flow 五件);**v1.1:该键按 v1.19 :183 豁免登记(组合根类变量面=探针契约面)——面冻结,u25 任务改申报件** | `game/presentation/main.gd:61-148`;`game/probe/` 12 探针 grep 实测 | -| S11 | hud_presenter 单调用面:refresh 唯一产品消费方=main.gd:810;tune_sim_report 唯一消费方=tune_sim_controller.gd:67;hud_presenter_test 直测静态族(feat_holdings_lines 等)不经 refresh;**核心读取只走 settlement.presentation_snapshot() 成文快照面(头注纪律)** | `game/presentation/main.gd:810`;`game/presentation/tune_sim_controller.gd:67`;`game/presentation/hud_presenter.gd:1-14` | -| S12 | flow context 单装配面:CurioFlowContext 构造=main_ui_build.gd:132(16 参 lambda 束,**curio_interact_controller 同行构造 `new(CurioFlowContext.new(...))`——v1.1 持 ctx 方案的装配单点**);CampFlowContext 构造=main_ui_build.gd:152(12 参);成员消费=curio_interact_controller(v1.1 改形后=ctx 束直读,正文 16 成员读点改址)/camp_shop_presenter(:23-34 读 12 处) | `game/presentation/main_ui_build.gd:130-153`;`game/presentation/curio_interact_controller.gd:31-48`;`game/presentation/camp_shop_presenter.gd:21-34` | -| S13 | open_victory 现行 8 参(:116-117);消费方 8 处——传可选参者 5 处须随动(main.gd:454/:459 八参、main_adventure_flow.gd:100/:166 四参、ui_struct_probe 四参),三参调用 3 处(fx_probe:53/standee_fx_sweep_test×2/curio_interact:107)缺省兼容零改动;open_defeat 不在收编账目零触碰 | grep 实测(§8 wr 行) | -| S14 | 测量面:playtest_logger print 两行(:160/:161——诊断转储路径与上下文 JSON);同路径信息已由 toast 承载(main_debug_flow.gd:16 `show_toast("已转储诊断: "+path)`)且转储 JSONL 文件本身落盘;tune_sim_controller print 一行(:43 日志路径)+循环内 await(:65 逐帧让出驱动浮窗进度刷新);playtest_logger 被 4 个 sim 驱动件构造消费(adventure_monte_carlo:104/rhythm_batch:21/level_autoplay:40,118/verifier_batch:41);**v1.1 处置定案=print×3 删除、await 豁免(D6)** | `game/presentation/playtest_logger.gd:160-161`;`game/presentation/tune_sim_controller.gd:43/65`;`game/presentation/main_debug_flow.gd:15-16` | -| S15 | golden 现行基线集五张:棋盘三图(900×760 裁剪区)/menu_boot(全屏)/level_map(全屏,iter38 卡①改前建锚先例——对拍经 golden_compare 直跑,render_gate 现行只对拍棋盘三图+menu_boot);shot_probe 七屏帧(menu/settings/career/camp/level/battle/status);加严口径=棋盘三图裁剪区内差异一律判失效 | `game/tests/golden/README.md`;`tools/render_gate.sh` | -| S16 | level_map_screen 探针冻结成员:_cand_ids(ui_struct/ui_click 3 处)/ _hover_id(ui_input_probe:109)、_content_size(S16 公式同源锚 :152)、_layout_cache(iter38 特批债成员——layout_probe() 判同实例断言 V1/V2,本体不经成员直读)、display_probe()→_drawn_disp(绘制记录唯一读出——经方法出口)、abandon_btn/status_badge(探针直引 5+1 处) | `game/probe/ui_struct_probe.gd:157/289`、`ui_input_probe.gd:109/152`、`ui_click_probe.gd:491-492`;`game/tests/unit/presentation/level_map_info_fog_test.gd:199-230` | -| S17 | **收拢件冻结与外部契约面全集(v1.1 逐件实查,2026-10-27)**:①camp_overlay_view 探针直读 5=_balance_label/_tree_buy_btns/_tree_fork_btns/_workshop_holder/_workshop_rows(ui_probe:36-42/ui_click_probe:70-116);②level_map_screen 探针直读 6=_cand_ids/_hover_id/_content_size/_layout_cache/abandon_btn/status_badge(S16+ui_click_probe);_runner 装配注入无直读(组合根零成员直写 grep 实测);③board_cell_unit=被动绘制壳:31 成员中 30 个被 board_view 直写(`u.edge = _cell` :248/:295、`u.bg_sb = sb` :710、`u.glyph = glyph` :711、`u.plate = …` :719、`u.fog_state = …` :778/:780 等 47 行实测),探针/测试直读 4=glyph(ui_input_probe:271/:363-366)/fog_state(:400-:492 多处)/plate+glyph_color(player_copy_sweep_test:139-142);board_view 外产品码零直写;④standee_body 外部直访 4=box(battle_stage_view:180/:190 直写、:367 直读、fx_probe:17/:41/:109 直写、standee_fx_sweep_test:87/:90 读)/font(:214/:217)/slot_row(:122/:204/:268)/has_world_hp_bar(ui_probe:141 直读);⑤battle_end_overlay 探针直读 4=_btn/_gp_name/_gp_row/_gp_val(S5 补);组合根零成员直写;⑥debug_overlay 探针直读 3=seed_edit(15 处)/_sim_btn/_dbg_btn(ui_tune_probe:132+standee_fx_sweep_test:119/:121);_run_data/_run_labels 经 run_data_probe()/update_run_data() 方法出口;⑦curio_interact_controller 探针零成员直读(_bonus 面全走方法——press_card/_curio_card_texts() 等,grep 实测) | `game/probe/` 全目录+`game/tests/` grep 实测(逐条出处随行);T0 复核存档 | - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 呈现零变化**:一切视图/工厂/投影改动像素级零变化——§7 T0 建锚面改后对拍差异非零即红(golden 逐像素);文案拼装逐字不变(battle_narrator_test 等现役断言零改动);信号面、`main.LAYER_CONTRACT` 层序合同、模态编排(ModalFlow/ModalStack)、装配序零触碰;print 删除三行=stdout 诊断文本移除(页面/toast/落盘信息零变化),禁顺手改任何 set_sim_report/报告文案。 - -🔴 **契约 2 · 探针断言面禁削弱**:S1–S7/S9/S10/S16/S17 所列探针直引公开面(方法/成员/常量/信号)逐字保留——**私有化、改名、搬文件均不进口径**;收拢件冻结成员(S17 ①–⑥)住宿主类不变不进状态件;源码锚字面量契约(camp STONE 等式与三组计数锚、ap_bar 锚句、standee 四句、debug 三句、V4 token 禁令、ui_contrast Color8/preload 扫描)随拆分逐字保持——拆分只许把锚句整行原样留在文件内,禁改写措辞、禁换行重排锚句。测试与探针随动仅限消费面迁移(访问路径改写),断言语义与判据逐条保持。 - -🔴 **契约 3 · main.X 句柄面冻结(架构豁免)**(architecture v1.19 :183 豁免登记在册):main.gd 类变量面=探针契约面,按架构契约豁免(键永久基线内、禁再恶化)——**禁收拢 main 句柄、禁删除成员、禁改名、禁为清键改写探针挂载契约**;`main.LAYER_CONTRACT` 常量零触碰。u25=注记核对+申报件(§1)。 - -🔴 **契约 4 · S13 纪律**:`tools/gdstyle_baseline.txt` 禁改禁 refresh(还债=数值下降自然归绿;豁免键=键留基线内绿,豁免依据在 architecture v1.19 在册,非基线注记);本批不得引入基线外新违规——**拆出的每个私有函数与内部状态件自身在阈值内**(≤50 行/≤10 局部/≤8 分支/≤6 return/≤5 参数),批末 gate NEW=0 是验收判据;机检键与本卡契约互斥时一律停卡呈报,禁自造第三条路。 - -🔴 **契约 5 · 测试削弱申报=零**:现役断言(单元/集成/探针/源码锚)零删除、零放宽、零缩小扫描面;测试直构面的随动改址只改访问路径;实现期任何「顺手简化断言」判红。 - -🔴 **契约 6 · 波 6 形态裁定**:视图内部拆私有函数,**不拆构建步件**——禁新建任何 .gd 文件(D1);v1.1 内部状态件一律**宿主文件内 inner class**(`class XxxState extends RefCounted` 嵌套声明,裁决两形态〔inner class/独立小状态类〕中与零新文件相容的唯一形态);拆分零行为变化、零新信号、零新公开成员(ui_kit 净 −6 公开方法是唯一减面);私有函数命名与归属属代拍板白名单(§10)。 - -🔴 **契约 7 · 类变量全清与豁免边界(v1.1)**:七收拢件宿主类变量收拢后 ≤15(键消失=S13 对账绿;u2 恶化债归绿被吸收);main/await 两键豁免在册(D4/D6)不参与清偿;收拢只收纯状态数据与无外部直访成员,**禁为计数造转发属性/别名/空壳成员**(§13);board_view 随动只许写入行机械改址(`u.X =` → `u.st.X =` 等价形),发现非机械改址点即停呈。 - -🔴 **契约 8 · 豁免键零重构**:tune_sim 测速循环(:65 逐帧 await)**禁重构**(D6——wall-clock 步进承载语义,重构即测量口径漂移);main 句柄面禁收拢(契约 3)。豁免键在实现报告各申报一行(键值/依据指针 v1.19 段名/禁再恶化注记)。 - -🔴 **契约 9 · 拆分边界纪律(DDD/高内聚,2026-10-28 用户裁)**:一切拆分(私有函数族/内部状态件/参数束)的边界沿职责轴、不沿阈值轴——①每个拆出单元须有可陈述的职责语句(实现报告逐件一行)与单一变化原因;②内部状态件须有集体身份:成员共同表达一个可命名的领域概念,**禁跨子域混装**(u1 四柜台子域为硬例——树/锻造/同调/刷新各成状态件);「探针直读之外剩下的成员」打包=凑计数袋,禁;③「过阈值」只许作为发现信号,作为收拢动机即违规;④某视图按本条拆不出内聚单元 → 该键不强清:停卡呈报走豁免/还债通道(main.gd 同款架构豁免登记),禁硬拆凑绿;⑤私有函数族边界沿绘制/构建域(底面/徽标/封印等既判分组为准),无域可循的长函数拆分停卡呈报。code-conventions §1.1 为上位规约。 - -## 5. 范围边界 - -**做**:u1–u25;消费面随动改址(§7 结构图注记行;含 board_view 写入行机械随动——u3 全清必要执行面);T0 锚面采集;撤销证明;产出物(含豁免申报件)。 - -**不做**(去向明示): -- 三宿主拆件(adventure_runner/level_runner/board_view 结构拆件)→ iter 39 主卡(本卡对 board_view 只做 u3 随动的写入行机械改址,禁结构触碰);battle_orchestrator/settlement/damage_controller/treasure_interact_controller → 卡 1;core/data 侧 86 键 → 卡 2;波 7 现成卡与波 0 基线 refresh → 各自通道(本批禁自行 refresh,契约 4); -- **不拆构建步件**(main_ui_build 分步形态不类比到普通视图——D1);不新建任何文件(内部状态件=宿主内 inner class——契约 6);不动 open_defeat 与任何清单外公开方法语义; -- **main 句柄面零收拢零删除(契约 3);tune_sim 测速循环零重构(契约 8)**——两豁免键只核对申报、不做任何键清偿动作; -- design/ 与根规则文件任何编辑 → 反哺点清单(§6);MC/对拍锚零触碰(数值与 RNG 零改动=零 MC,纪律 §四.4); -- user 目检项登记不阻塞(§8.2)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| `game/tests/golden/README.md` | 乙组新建基线(camp/settings/battle 帧)判定记录+甲组判读记录 | 批内机械同步(game 内 .md,非禁写面) | -| `game/tests/验证集清单.md` | 测试直构面随动改址不改断言语义与数量——预期零变化;若实现期补静态判据则机器提取重生成(tools/extract_checks.py) | 批内机械同步(game 内 .md,非禁写面) | -| `design/engineering/architecture/architecture.md` | 预期零修订——v1.19 两处豁免登记段在册(D4/D6 依据);零新件、模块归属表零行变化、组合根句柄面条款不受影响;ui_kit 公开面收敛不动模块表(无 ui_kit 独立行) | 反哺点 · 列清单(预期零改动注记;实现中若发现表述漂移逐条列) | -| `待办清单.md` | 来源条目状态推进(写卡段回写归主会话;实现批收尾归 batch-closure) | 反哺点 · 列清单 | - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/presentation/views/camp_overlay_view.gd` | u1 拆私有函数族+类变量收拢内部状态件(复用既有·修改) | 非行为 → wr1 | -| `game/presentation/views/level_map_screen.gd` | u2 拆私有函数族+类变量收拢(装饰域字典随迁状态件)(复用既有·修改) | 非行为;**恶化债归绿+键清** → wr2 | -| `game/presentation/views/board_cell_unit.gd` | u3 拆绘制私有族+类变量收拢(复用既有·修改) | 非行为 → wr3 | -| **随动·`game/presentation/views/board_view.gd`** | **u3 写入行机械改址约 40 行(`u.X =` → `u.st.X =`,v1.1 新增随动件——S17 ③)** | 非行为(机械改址零语义)→ wr3 | -| `game/presentation/views/standee_body.gd` | u4 拆绘制私有族+类变量收拢(复用既有·修改) | 非行为 → wr4 | -| `game/presentation/views/hero_info_panel_view.gd` | u5(复用既有·修改) | 非行为 → wr5 | -| `game/presentation/views/battle_end_overlay.gd` | u6 拆私有+open_victory 4 参化+类变量收拢(复用既有·修改) | 非行为(签名收拢缺省兼容)→ wr6 | -| `game/presentation/views/debug_overlay.gd` | u7 拆五区块+类变量收拢(复用既有·修改) | 非行为 → wr7 | -| `game/presentation/ui_assembler.gd` | u8(复用既有·修改) | 非行为 → wr8 | -| `game/presentation/views/battle_stage_view.gd` | u9(复用既有·修改) | 非行为 → wr9 | -| `game/presentation/views/curio_pick_overlay.gd` | u10(复用既有·修改) | 非行为 → wr10 | -| `game/presentation/views/settings_overlay.gd` | u11(复用既有·修改) | 非行为 → wr11 | -| `game/presentation/views/battle_log_view.gd` | u12(复用既有·修改) | 非行为 → wr12 | -| `game/presentation/curio_interact_controller.gd` | u13 引用束注入(删 16 冗余成员持 ctx)(复用既有·修改) | 非行为 → wr13 | -| `game/presentation/views/ap_bar_view.gd` | u14(复用既有·修改) | 非行为 → wr14 | -| `game/presentation/views/board_zone_view.gd` | u15(复用既有·修改) | 非行为 → wr15 | -| `game/presentation/views/board_fx_view.gd` | u16(复用既有·修改) | 非行为 → wr16 | -| `game/presentation/views/legend_overlay.gd` | u17(复用既有·修改) | 非行为 → wr17 | -| `game/presentation/views/ui_kit.gd` | u18 公开面收敛+参数收拢(复用既有·修改) | 非行为(消费面随动改址承载撤销证明)→ wr18 | -| `game/presentation/hud_presenter.gd` | u19 参数束收拢(复用既有·修改) | 非行为 → wr19 | -| `game/presentation/curio_flow_context.gd` | u20 三束收拢(复用既有·修改) | 非行为 → wr20 | -| `game/presentation/camp_flow_context.gd` | u21 三束收拢(复用既有·修改) | 非行为 → wr21 | -| `game/presentation/battle_narrator.gd` | u22(复用既有·修改) | 非行为 → wr22 | -| `game/presentation/tune_sim_controller.gd` | u23 stats 束+print 删除+await 豁免申报(复用既有·修改) | 非行为(print 删除=stdout 诊断文本)→ wr23 | -| `game/presentation/playtest_logger.gd` | u24 print×2 删除(复用既有·修改) | 非行为 → wr24 | -| `game/presentation/main.gd` | u25 豁免申报件(零改动——v1.19 :183 豁免在册,面冻结)(复用既有·零修改) | 非行为(申报)→ wr25 | -| 随动·`game/presentation/main_ui_build.gd` | u20/u21 两构造行改束传参(清单外单行随动) | 非行为 → wr20/21 | -| 随动·`game/presentation/camp_shop_presenter.gd` | u21 ctx 束读改址 12 处(清单外随动) | 非行为 → wr21 | -| 随动·`game/presentation/main_adventure_flow.gd` | u6 open_victory 四参调用改址 2 处(清单外随动) | 非行为 → wr6 | -| 随动·`game/presentation/shop_overlay_view.gd` | u18 bcard 五参调用改址 1 处(清单外随动) | 非行为 → wr18 | -| 随动·`game/presentation/views/node_overlay.gd`/`status_panel.gd`/`confirm_dialog.gd`/`settlement_review_overlay.gd` | u18 modal_shell 尾参改址各 1 处(清单外随动) | 非行为 → wr18 | -| 随动·`game/probe/fx_probe.gd` | u6 open_victory 四参改址 1 处(测量面随动) | 非行为 → wr6 | -| 随动·`game/probe/ui_struct_probe.gd` | u6 open_victory 四参改址 1 处(测量面随动) | 非行为 → wr6 | -| 随动·`game/tests/unit/presentation/theme_projection_test.gd` | u18 beams/gradient 私有化改址 2 处(断言语义不变) | 断言面随动 → wr18 | - -(零新增文件;私有函数族与内部状态件随各宿主文件内新增——落位预检见下节。) - -### 接口块 - -**T0 产出(T1–T5 取用)**:①改前 S13 读数表(25 文件 71 键现行值 `文件|规则|函数 = 值`,实现报告素材);②golden 锚三组(甲组在库基线判读记录;乙组 camp/settings/battle 三帧基线入 `game/tests/golden/`+README 判定记录;丙组 battle_end/curio_pick/legend/debug 直构改前帧——落临时区,批末退役);③**S17 冻结面复核清单**(七收拢件冻结成员逐名+board_view 直写 47 行清单——u3 随动改址的行级依据)。 - -**内部状态件形态(v1.1 收拢件统一形,u1/u2/u3/u4/u6/u7 取用)**: - -```gdscript -# 宿主文件内嵌套声明(零新文件——契约 6);探针/外部直访冻结成员(S17)住宿主,不进状态件;状态件须有职责语句+单一子域(契约 9,跨子域混装禁) -class _DrawState extends RefCounted: - var glyph_col := UiKit.INK # 纯状态数据成员逐个迁入(命名随宿主原成员) -# 宿主侧: -var st := _DrawState.new() # 状态件单成员(宿主类变量 −N+1) -# 内部读点改址:self.X → st.X(宿主私有函数族与 _draw 一并落); -# 经方法出口的状态(fx_probe()/run_data_probe()/update_run_data())读点随迁方法体,方法签名与返回值零变化 -``` - -**u18 ui_kit 新形态**(T3 落地,wr18 断言取用): - -```gdscript -# 删除:frame_skinned / verb_button(全库零消费,S8 普查凭据) -# 私有化(改名加下划线,消费方随动):_modal_dim / _beams_rect / _gradient_base / _switch_toggle -# (load_font 保留公开——board_shot/type_glow 探针与 ui_font_asset_test 三行直引,收敛算术不需要它) -# 公开方法 26→20(≤阈值,键清偿) -const PANEL_DEFAULT := true # modal_shell 面板哨兵(非 StyleBox 实例) -static func modal_shell(parent: Control, dim_color: Color, min_size := Vector2.ZERO, - separation := 12, panel_sb = null) -> Dictionary -# panel_sb == null → 无面板(原 with_panel=false) -# panel_sb == PANEL_DEFAULT → 默认样式盒面板(原 with_panel=true+panel_sb=null——settlement_review 形态) -# panel_sb is StyleBox → 自定义样式盒面板(原双参形态) -static func bcard(title: String, desc: String, band: Color, icon_path: String, opts := {}) -> BCard -# opts 键 {price: String = "", footnote: String = ""}——BCard._init 同形收拢(6→5 参) -``` - -**u19 hud_presenter 新签名**(T3/T4 取用): - -```gdscript -static func refresh(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApBarView, ctx: Dictionary) -> void -# ctx 五键:{settlement, runner, level_active: bool, db, refresh_remaining: int}(原 :14 尾五参收拢) -static func _refresh_out_of_battle(stage: BattleStageView, info: HeroInfoPanelView, ap_bar: ApBarView, ctx: Dictionary) -> void -static func tune_sim_report(n: int, atk_pct: int, hp_pct: int, stats: Dictionary, base_hp: int) -> String -# stats 六键:{wins: int, dmg_all: Array, hp_left_win: Array, hp_boss: Array, rounds_all: Array, death_nodes: Dictionary} -``` - -**u20/u21 flow context 新形态**(T4 取用;u13 改址同取键名): - -```gdscript -# CurioFlowContext / CampFlowContext 同形: -func _init(db_ref, views: Dictionary, getters: Dictionary, flow: Dictionary) -> void -# views = {curio_overlay, end_overlay, board_view, toast}/camp 侧 {camp_overlay, shop_overlay, toast, start_overlay, logger} -# getters = {meta_get, save_get, adventure_get, runner_get, adventure_mode_get}/camp 侧 {meta_get, save_get, runner_get}(Callable 活引用——禁快照语义不变) -# flow = {open_modal, open_modal_after_playback, close_modal, refresh_presentations, fatal_screen, gp_summary}/camp 侧 {open_modal, close_modal, refresh_presentations} -``` - -**u13 curio_interact_controller 新形态**(T4 取用):`_init(ctx: CurioFlowContext)` 保持——16 抄写成员删除(:32-48 赋值块),正文 `db`/`_meta_get`/`curio_overlay`/…/`_gp_summary` 读点改址 `ctx.db`/`ctx.getters.meta_get`/`ctx.views.curio_overlay`/…/`ctx.flow.gp_summary`(键名按上表);`_pending_curio`/`_curio_context` 保持宿主。装配行 main_ui_build.gd:132 零改动(仍 `CurioInteractController.new(CurioFlowContext.new(...))`,构造参数随 u20 改束传参)。 - -**u6 battle_end 新签名**:`open_victory(verdict_line: String, continue_label: String, board_rect: Rect2, opts := {}) -> void`,opts 键 `{gp_summary: String = "", ks_summary: String = "", bonus_summary: String = "", gp_gain: int = -1, gp_total: int = -1}`。 - -**u23/u24 测量面定案(v1.1)**:playtest_logger :160/:161 两行删、tune_sim_controller :43 一行删(grep 残留=撤销证明);tune_sim :65 await 零触碰(D6 豁免——实现报告申报行:`tune_sim_controller 循环内 await=v1.19 测试与质量域·S13 测量面豁免登记段在册,键永久基线内`)。 - -**u25 豁免申报件(v1.1)**:零代码改动;实现报告申报行:`main 类变量 49/15=v1.19 呈现层装配节 S13 豁免登记在册(组合根类变量面=探针契约面),键永久基线内、禁再恶化`;T0 核对注记在位(v1.19 :183)。 - -**T 卡间接口**:T0 产出锚面与读数表+冻结面复核清单(全部卡取用);T1 产出 level_map/board_cell 收拢后读数(T5 复核取用);T3 产出 ui_kit/hud_presenter 新签名(T4 tune_sim stats 束按 u19 stats 六键构造);各卡验收随卡落地。 - -### 落位与可复用性预检 - -| 新增件 | 复用面(为何不能复用既有) | 唯一面 | 分层与交互 | -|---|---|---|---| -| 各宿主文件内私有函数族(约 60–80 个私有函数,随拆分产生) | **零新增文件、零新增公开件**——全部落既有宿主文件内(契约 6);私有函数非「新增件」意义上可复用单元:它们是被拆函数的原文分段,禁抽共享骨架(波 2 同款裁定精神:13 文件结构各异,强行归一有抽象层风险) | 每个私有函数唯一归属其宿主视图;禁把 helper 散落到别的文件(波 6 形态裁定) | 视图内部自调用,零跨层交互新增;Core 零 UI 不破(本批零触 core/);随机零消费、ConfigDB 读面零新增 | -| **各收拢件宿主内 inner class 状态件(_DrawState 形,u1/u2/u3/u4/u6/u7 六件各一,新增)** | **不能复用既有件也不能跨视图共用一个状态类**:各视图绘制态/运行态彼此独立、零共用结构(camp 柜台行板登记、cell 绘制输入、standee 演出态、battle_end 行板与 fx 计数、debug 表值态各成一套,字段集无交集)——强归一共用类=跨视图耦合+字段冗余;也不能复用 flow context 束(那是对组合根回调的活引用束,非视图绘制态) | 每件唯一归属其宿主文件(inner class 随宿主),禁散落到别的文件(契约 6 零新文件) | 宿主内部自持有(RefCounted 值件,不进场景树、零信号),冻结成员(S17)住宿主不进件;零跨层交互新增 | -| golden 三帧基线(乙组 camp/settings/battle) | 复用 shot_probe 现成七屏帧采集面与 golden_compare.py 判据(iter38 卡① 手法)——不扩 golden_baseline_refresh.sh(工具改动超本批面) | 三帧各一,落 `game/tests/golden/`+README 判定记录 | 采集=探针隔离档(无断点+出厂设置 1280);对拍判据复用现行容差 | -| u18 `PANEL_DEFAULT` 哨兵常量 | modal_shell 六参收拢的最小形态——拆分两个函数会 +1 公开方法破 20 收敛(S8 收敛算术),哨兵是唯一不加方法的收拢形态 | 常量唯一,定义于 ui_kit | 纯 ui_kit 内部判别语义,消费方仅改传参形态 | - -### T0 事实坐实+改前锚面采集(≈0.45d,**时点铁序:本卡全部锚面采集先于一切生产码改动**) - -- [ ] 复核 S1–S17 行号与直引清单(吸收 iter39 批漂移——若 iter39 已合回,u2/u13/u19/u25 相关行号重定位);产出探针直引 46 名全量清单、ui_kit 消费方普查表、**S17 七收拢件冻结成员复核清单+board_view 直写 47 行清单(u3 随动改址行级依据)**存档实现报告素材。可核查结果:复核清单在案。 -- [ ] 产出改前 S13 读数表(71 键现行值逐键)。可核查结果:读数表进实现报告素材。 -- [ ] **甲组判读**(在库 golden 五张):跑渲染闸对拍段+golden_compare 直跑 level_map——棋盘三图/level_map/menu_boot changed 全 0.00% 方可动码(棋盘三图按加严口径裁剪区内差异一律停机呈报)。可核查结果:判读记录进 golden/README 判定记录节。 -- [ ] **乙组建锚**(无在库基线三屏):改前采集 shot_probe 的 camp/settings/battle 三帧→各自连采两轮逐像素比对实测跨跑次一致性=0.00%→直拷落盘 `game/tests/golden/`(文件命名属代拍板白名单 §10.3,随 README 判定记录登记)+README 判定记录(改前建锚、触发原因=呈现层结构收敛批对拍锚)。**battle 帧若两轮比对非 0.00%(动效相位不确定)→ 该屏锚降级丙组直构对拍**,判定记录写明。可核查结果:三帧基线或降级注记在案。 -- [ ] **丙组改前帧**(模态/覆盖层四件):临时抓帧脚本(--script 或临时场景,直构 battle_end_overlay.open_victory/curio_pick_overlay.open_pick/legend_overlay.open/debug_overlay 构建态,落 mktemp 临时区,禁入 git、批末退役);同法采集改前帧存档。可核查结果:四件改前帧与采集脚本在案(脚本禁入 git)。 -- [ ] **豁免注记核对(v1.1)**:architecture v1.19 :183(组合根豁免段)与 :311(测量面豁免段)两处注记在位核对,段名与键指针抄录实现报告(u25/u23 申报件素材)。可核查结果:两段在位核对记录在案(缺位=停卡呈报)。 - -### T1 营地与地图面拆分(≈1.6d) - -- [ ] u1 camp_overlay_view:_init 拆四柜台构建私有族、_rebuild_tree/_rebuild_forge/refresh_camp 拆行板构建私有族、七处循环体提私有构建函数;**类变量收拢**——冻结 5 成员保持(S17 ①),其余 14 个迁 `_CampState` inner class、宿主读点改 st.X;源码锚句(S2 两组)整行原样保留。可核查结果:gdstyle 单文件复扫该文件键全清(类变量 9/15 键消失——子域件形 v1.2);ui_struct camp 源扫描绿;theme camp 三锚绿;camp 乙组帧对拍 0.00%。 -- [ ] u2 level_map_screen:_init/_draw_graph 拆私有族;**类变量收拢**——冻结 6 成员+状态件保持(S17 ②),其余 16 个迁 `_MapState`(_node_icons/_noise_rect/_tint_level 在状态件内持 `_layer_decor` 域字典);S16 冻结成员与 layout_probe/display_probe 行为逐字不变。可核查结果:单文件复扫类变量 ≤15(键消失,恶化债归绿被吸收);level_map_info_fog_test 全绿(V1/V2 缓存断言继承);level_map golden 对拍 0.00%。 -- [ ] u3 board_cell_unit:_draw 拆绘制私有族;**类变量收拢**——探针直读 4 成员+_glow_layer+状态件保持(S17 ③),board_view 直写 26 成员迁 `_CellPaintState`、board_view 写入行机械改址约 40 行(`u.X =` → `u.st.X =`,逐行对照 T0 直写清单,等价形禁改语义)。可核查结果:单文件复扫类变量 6/15 键消失+函数级键全清;board_view 随动行 grep 对账(改址行数=清单行数);棋盘三图 golden 0.00%(甲组);ui_input/player_copy 直读面回归绿。 -- [ ] u4 standee_body:_draw 拆绘制私有族、循环体提私有构建函数;**类变量收拢**——外部直访 4 成员保持(S17 ④),其余 25 个迁 `_StandeeState`(fx 出口三计数随迁,fx_probe() 方法体读点改 st.X、返回键名零变化);standee 源锚四句(S6)逐字保留。可核查结果:单文件复扫键全清(类变量 5/15 键消失);standee_fx_sweep_test+fx_probe+theme 源锚段绿。 -- [ ] 验证步骤:甲/乙组对应锚复拍(board 三图+level_map+camp+battle 帧)全 0.00%;波内出红只跑红件最小单元。 - -### T2 战斗屏与覆盖层拆分(≈1.25d) - -- [ ] u5/u6/u7:hero_info_panel(段构建私有族+槽位循环提函数)、battle_end_overlay(行板私有族+open_victory 四参化——S13 五处传参消费点按接口块改址;**类变量收拢**——探针直读 4 句柄保持(S17 ⑤),其余 16 个迁 `_EndOverlayState`)、debug_overlay(五区块私有族——S1 全部公开面与源码契约零触碰;**类变量收拢**——直读 3 成员保持(S17 ⑥),其余 14 个迁 `_DebugState`,run_data_probe()/update_run_data() 方法体读点随迁、签名与返回零变化)。可核查结果:三文件函数级键全清+类变量键全清(5/4/4 均键消失);ui_tune/debug 系探针直跑绿;ui_struct/丙组 battle_end 对拍 0.00%。 -- [ ] u8–u12:ui_assembler(build_start_overlay 拆列/行私有族+立绘循环提函数)、battle_stage_view(拆构建私有族+_enemy_portrait_tex 查表化)、curio_pick_overlay(拆构建+_icon_for_id 查表化)、settings_overlay(拆行私有族)、battle_log_view(_format_row 按行型拆私有格式化族)。可核查结果:五文件函数级键全清;ui_struct/丙组 curio_pick/settings 帧对拍 0.00%;reward_overlay_test/player_copy_sweep_test/theme 源锚段绿。 -- [ ] u14–u17:ap_bar(拆构建私有族,S7 锚句逐字保留)、board_zone(拆构建私有族)、board_fx(循环体提 band 构建函数)、legend(ENTRIES 循环提行构建函数)。可核查结果:四文件键清;ui_probe/ui_click ap_bar 直引面回归绿;fx_probe 直构面绿。 -- [ ] 验证步骤:乙组 battle/settings 帧+丙组四件对拍全 0.00%;波内出红只跑红件最小单元。 - -### T3 装配与工厂件收敛(≈0.75d) - -- [ ] u18 ui_kit 按接口块落地五步:删 frame_skinned/verb_button→私有化四件(消费方改址:camp:45/ui_assembler:104/level_map:65/settings:76/:91+theme:639/:664)→modal_shell 哨兵收拢(八消费点改址)→BCard._init/bcard opts 收拢(curio_pick:99/shop_overlay:212 改址)→beams_rect 像素循环拆私有函数。可核查结果:单文件复扫公开方法 ≤20(键清偿)、参数键全清;theme V1–V3/T5② 段绿;ui_contrast 扫描段绿(ui_kit 素材 preload=0、Color8 面零外溢)。 -- [ ] u19 hud_presenter 按接口块三签名收拢;消费方改址=main.gd:810(ctx 五键)+tune_sim_controller:67(stats 六键)。可核查结果:参数键三键清;hud_presenter_test+system_test 呈现段绿;refresh 后呈现与改前逐帧同像(battle golden 帧 0.00%)。 -- [ ] u25 main.gd **豁免申报件(零改动)**:核对 T0 豁免注记核对记录;实现报告申报行落位(键值 49/15+依据指针 v1.19 :183+禁再恶化注记);对 main.gd 的 diff 零行(面冻结实证)。可核查结果:git diff main.gd 为空+申报行在案;12 探针+system_test 全绿。 -- [ ] 验证步骤:全套闸按改动域选档跑一次全绿(里程碑步出口)。 - -### T4 交互与上下文件+测量面定案执行(≈0.85d) - -- [ ] u20/u21 flow context 三束收拢(接口块形态);消费方改址=main_ui_build 两构造行+camp_shop_presenter 12 处 ctx 读(束键访问改写,零语义变化)。可核查结果:curio_flow_context 类变量 16→4、_init 4 参(两键清偿);camp_flow_context _init 4 参(键清偿);ui_click/ui_struct 三选一与营地段回归绿。 -- [ ] u13 curio_interact_controller 引用束注入:16 抄写成员删除、正文读点按接口块键名改址 ctx 束;_pending_curio/_curio_context 保持(S17 ⑦——探针零成员直读实证)。可核查结果:单文件复扫类变量 3/15 键消失;ui_click/ui_struct 三选一真链段绿(press_candidate/press_confirm/press_refresh 面零变化)。 -- [ ] u22 battle_narrator bonus_card_text 拆私有文案族(battle_narrator_test 零改动全绿)。可核查结果:读数改善在案(键清);battle_narrator_test 绿。 -- [ ] u23/u24 测量面定案执行:playtest_logger :160/:161 两行删、tune_sim :43 一行删(禁改 set_sim_report 文本)、u23 stats 束收拢(≤10 局部);**:65 await 零触碰**(D6——禁重构测速循环);tune_sim 链路回归=ui_tune_probe 批量模拟段直跑绿(wall-clock/进度语义保持)。可核查结果:三行 print grep 零命中(撤销证明载体);tune_sim 键读数=stats/局部两键清+await 豁免在册;u23 await 豁免申报行(依据 v1.19 :311)落实现报告。 -- [ ] 验证步骤:全套闸按改动域选档跑一次全绿。 - -### T5 撤销证明+产出物落位卡(≈0.45d,末卡) - -- [ ] 逐 wr 行撤销证明(§8.1 末列——读数对拍类:回退该文件 hunk→对照 T0 读数表该文件键读数回升=红→还原复绿;消费面迁移类:回退生产 hunk→随动消费方调用断红=更强证明;print 类:回退→源码 grep 命中=红;随动改址类〔board_view〕:回退改址 hunk→board_view 写入行对迁出成员断红)。记录进实现报告。 -- [ ] S13 批末读数对拍:gate 输出 NEW=0、WORSENED=0(开工时唯一在册红 level_map_screen 类变量由 u2 归绿吸收——v1.2 重锚)、**71 键账目对账(§8.4)逐键核对=69 键消失+2 键豁免在册**(main 49/15、tune_sim await——两申报行落位)。可核查结果:读数对拍表+豁免申报对账进实现报告。 -- [ ] 写齐三份产出物(实现报告〔各卡状态+读数对照+豁免两键申报行+实机目检总清单——乙组三屏与丙组四态实机开合目检登记(登记不阻塞)〕/代拍板追认单/反哺点清单〔§6 逐条落点〕);临时抓帧脚本与丙组过程帧按中间产物纪律退役。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计 ≈5.3d**(区间 5.0–5.5;v1.2 子域拆件增量 ≈+0.1d 已含区间内;v1.0 ≈4.0d 上调 ≈1.3d——收拢增量明细:u1/u2/u4 各 ≈0.15d+u3 收拢与 board_view 随动改址 ≈0.25d+u6/u7 各 ≈0.12d+u13 束注入改址 ≈0.2d+print 删除与豁免申报 ≈0.1d;超软盒预挂=iter39 先行合回致行号重定位面扩大时 T0 +0.2d)。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -撤销证明三型:**读数型**=回退该文件 hunk → 对照 T0 改前读数表该文件键读数回升=红 → 还原复绿(结构拆分与收拢单元的断言载体);**迁移型**=回退生产 hunk → 随动消费方调用断红(签名/改名/束注入单元的更强证明,迁移不对称作断言);**grep 型**=print 删除类,回退 → 源码 grep 命中=红。对拍锚=T0 三组(甲:棋盘三图/level_map/menu_boot;乙:camp/settings/battle 帧;丙:battle_end/curio_pick/legend/debug 直构帧)。**收拢件断言三件套(v1.1)=S13 键消失(类变量计数对账绿)+golden 逐像素 0.00%+探针冻结面断言零变化(S17 冻结成员直引面回归绿)**。 - -| 需求点 | 改动(文件) | 验收测试(名称+落点) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 u1 营地覆盖层拆分+收拢 | camp_overlay_view | S13 键消失(10 键清:函数级 9+类变量);S17 ① 冻结 5 成员断言零变化;ui_struct camp 源扫描+theme camp 三锚;乙组 camp 帧对拍 0.00% | 静态+探针+golden | ui_struct_probe 真实驱动+shot_probe 帧 | 读数型+锚句 grep | -| wr2 u2 关卡地图拆分+收拢 | level_map_screen | S13 键消失(6 键清:函数级 5+类变量≤15);S16/S17 ② 冻结成员断言零变化;level_map_info_fog_test(V1/V2 继承);level_map golden 0.00% | 静态+单元+golden | open_choices 真实入口(测试白盒夹具) | 读数型 | -| wr3 u3 棋盘格单元拆分+收拢+board_view 随动 | board_cell_unit(+随动 board_view 写入行约 40 行) | S13 键消失(4 键清:函数级 3+类变量);S17 ③ 探针直读 4 成员断言零变化;board_view 改址行 grep 对账;迁移型断言(回退随动 hunk→写入行断红);棋盘三图 golden 0.00%(甲组) | 静态+探针+golden | board_shot_probe 真实抓帧+ui_input/player_copy 直读面 | 读数型+迁移型 | -| wr4 u4 站桩拆分+收拢 | standee_body | S13 键消失(4 键清);S17 ④ 外部直访 4 成员断言零变化(box/font/slot_row/has_world_hp_bar);fx_probe+standee_fx_sweep_test;theme 源锚四句 | 静态+单元+探针 | fx_probe 直构真链 | 读数型+锚句 grep | -| wr5 u5 信息面板拆分 | hero_info_panel_view | S13 读数(4 键清);player_copy_sweep_test;ui_probe info_panel 直引面 | 静态+单元+探针 | 直构+探针真链 | 读数型 | -| wr6 u6 战末覆盖层+open_victory 收拢+类变量收拢 | battle_end_overlay(+随动 5 消费点) | S13 键消失(4 键清:函数级 3+类变量);S17 ⑤ 四句柄断言零变化;迁移型断言(回退→五消费点断红);丙组对拍 0.00%;t17_defer/ui_struct/ui_probe _end_overlay 面绿 | 静态+探针+golden | ui_struct_probe open_victory 真链 | 迁移型 | -| wr7 u7 调试浮窗拆分+收拢 | debug_overlay | S13 键消失(3 键清:函数级 2+类变量);S17 ⑥ 三成员断言零变化(seed_edit/_sim_btn/_dbg_btn);ui_tune_probe 全段(公开面+零动效源码契约);system_test 调试段;theme V4/debug 源锚 | 静态+探针+系统 | ui_tune_probe 真实驱动 | 读数型+契约 grep | -| wr8 u8 装配器拆分 | ui_assembler | S13 读数(3 键清);theme V4/退役判据段;ui_probe 启动态 | 静态+单元+探针 | shot_probe 启动态真链 | 读数型 | -| wr9 u9 战斗舞台拆分 | battle_stage_view | S13 读数(3 键清);ui_probe stage 直引面;乙组 battle 帧对拍 | 静态+探针+golden | 探针真链 | 读数型 | -| wr10 u10 三选一覆盖层拆分 | curio_pick_overlay | S13 读数(2 键清);reward_overlay_test;丙组对拍 0.00%;ui_struct/ui_click curio 段 | 静态+单元+探针+golden | 直构+探针真链 | 读数型 | -| wr11 u11 设置覆盖层拆分 | settings_overlay | S13 读数(2 键清);乙组 settings 帧对拍;ui_click 设置段+theme V4 | 静态+探针+golden | 探针真链 | 读数型 | -| wr12 u12 结算日志拆分 | battle_log_view | S13 读数(4 键清);theme_projection :386 直构断言+player_copy :100 | 静态+单元 | 直构真链 | 读数型 | -| wr13 u13 三选一交互件引用束注入 | curio_interact_controller(+main_ui_build:132 构造行随 u20 束形态) | S13 键消失(类变量 3/15);迁移型断言(回退→ctx 束读点断红);S17 ⑦ 探针方法面零变化;ui_click/ui_struct 三选一真链段 | 静态+探针 | 装配真实构造链+探针真链 | 迁移型 | -| wr14 u14 AP 条拆分 | ap_bar_view | S13 读数(1 键清);S7 源锚逐字;ui_probe/ui_click ap_bar 直引面 | 静态+探针 | 探针真链 | 读数型+锚句 grep | -| wr15 u15 棋盘区容器拆分 | board_zone_view | S13 读数(1 键清);board_zone 直引面(status_badge/legend_toggled/toast) | 静态+探针 | 探针真链 | 读数型 | -| wr16 u16 棋盘动效循环提函数 | board_fx_view | S13 读数(1 键清);fx_probe 逻辑层+棋盘三图 golden(fx 不入静止帧对拍) | 静态+探针+golden | fx_probe 真链 | 读数型 | -| wr17 u17 图例循环提函数 | legend_overlay | S13 读数(1 键清);player_copy_sweep 直构+ui_struct legend 段;丙组对拍 | 静态+单元+探针+golden | 直构+探针真链 | 读数型 | -| wr18 u18 ui_kit 公开面收敛 | ui_kit(+随动 6 文件:theme/shop_overlay/node_overlay/status_panel/confirm_dialog/settlement_review_overlay) | S13 读数(5 键清);迁移型断言(回退→随动消费点断红);theme V1–V3/T5②+ui_contrast 扫描;menu_boot/camp/battle 帧对拍 | 静态+单元+探针+golden | theme 直构真链+探针 | 迁移型 | -| wr19 u19 HUD 投影参数收拢 | hud_presenter(+main:810/tune_sim:67) | S13 读数(3 键清);迁移型断言;hud_presenter_test+battle golden 帧 | 静态+单元+golden | 真实 refresh 调用链 | 迁移型 | -| wr20 u20 三选一流上下文收束 | curio_flow_context(+main_ui_build:132) | S13 读数(2 键清);迁移型断言;ui_click 三选一段 | 静态+探针 | 装配真实构造链 | 迁移型 | -| wr21 u21 营地流上下文收束 | camp_flow_context(+main_ui_build:152/camp_shop_presenter) | S13 读数(1 键清);迁移型断言;ui_click 营地段 | 静态+探针 | 装配真实构造链 | 迁移型 | -| wr22 u22 叙述件拆分 | battle_narrator | S13 读数(1 键清);battle_narrator_test 零改动全绿 | 静态+单元 | 直构真链 | 读数型 | -| wr23 u23 批量模拟控制器+测量面定案 | tune_sim_controller | S13 读数(print+局部两键清;await 豁免在册);print grep 零命中;**await 豁免申报行**(非行为改动+依据指针 v1.19 :311);ui_tune_probe 批量模拟段(进度/报告语义零变化) | 静态+探针 | ui_tune_probe 真实驱动 | 读数型+print grep | -| wr24 u24 试玩日志器 print 删除 | playtest_logger | S13 读数(1 键清);print grep 零命中;sim 四驱动件直构回归+诊断转储 toast 链 | 静态+集成 | main_debug_flow 转储真链 | grep 型 | -| wr25 u25 组合根豁免申报 | main.gd(零改动) | **豁免申报行**(非行为改动+依据指针 v1.19 :183);git diff main.gd 为空(面冻结实证);S10 46 名直引面断言零变化;12 探针+system_test 全绿 | 静态+探针+系统 | 探针 main.X 真链 | 零改动实证(diff 空)+申报件核 | -| wr26 产出物 | T5 三份(含豁免两键申报行) | 件核(wr26) | — | — | 缺项红 | - -### 8.2 测试方式两分法与目检登记 - -本批零行为改动=无调试接口验证项;能力面(debug_overlay/批量模拟)经 ui_tune_probe 真链回归即闭环。用户目检项(登记不阻塞,入实现报告实机目检总清单):乙组三屏(camp/settings/battle)开合观感、丙组四态(战末/三选一/图例/调试浮窗)开合观感、营地三柜台与锻造工坊交互回归——全部为「与改前一致」判读。 - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=①T0 时点铁序(锚面采集先于码改——git 提交序核)②golden 对拍读数复现(抽 3 锚直跑)③S13 读数对拍表逐键复核+基线文件 git diff 零变化+**71=69 清+2 豁免账目复核(豁免两键依据指针 v1.19 段名在册)**④源码锚字面量契约抽检(S2/S6/S7/S9)⑤撤销证明抽两条复现⑥探针直引 46 名+S17 冻结成员零迁移抽检⑦**board_view 随动改址抽 5 行复核(等价机械形、零语义漂移)**⑧main.gd git diff 为空+await 行零触碰复核⑨拆分边界抽检(契约 9:各状态件/私有函数族职责语句逐件在案、u1 子域分组核对,跨子域混装或凑计数袋即红)。未过不得合并。 - -### 8.4 S13 账目(71 键=69 清+2 豁免,v1.1 全清口径) - -**清偿 69 键(键消失)**:u1×10/u2×6/u3×4/u4×4/u5×4/u6×4/u7×3/u8×3/u9×3/u10×2/u11×2/u12×4/u13×1/u14×1/u15×1/u16×1/u17×1/u18×5/u19×3/u20×2/u21×1/u22×1/u23×2(print+run 局部)/u24×1。(69=10+6+4+4+4+4+3+3+3+2+2+4+1+1+1+1+1+5+3+2+1+1+2+1,逐项与 §1 改动单元清单一一对应。) - -**豁免 2 键(键留基线内绿、永久在册、禁再恶化——非残留,架构契约豁免)**:main 类变量 49/15(v1.19 :183——组合根类变量面=探针契约面,禁收拢禁改写)+tune_sim_controller 循环内 await :65(v1.19 :311——测速循环 wall-clock 步进承载语义,禁重构)。两键各落实现报告申报行(wr23/wr25)。 - -回归措辞:里程碑步(T 卡段)出口跑一次全套闸;波内修复只做出红最小单元的最窄确认;新增测试/工具先行孤立验证再并入全套。 - -## 9. 异常分级 - -- **L1(自救)**:行号漂移(T0 复核自吸收);私有函数命名、inner class 状态件命名与注释措辞;对拍帧采集的等价实现形态(探针帧直拷 vs 临时脚本)。 -- **L2(记录继续)**:乙组 battle 帧跨跑次非 0.00% 降级丙组(判定记录写明);消费面随动改址的单行等价写法(含 board_view 写入行 `u.st.X =` 等价形);读数改善幅度与预估偏差(非清键义务单元);u4 fx 出口计数随迁后 fx_probe() 返回键序变化(键名零变化前提下)。 -- **L3(停机呈报)**:任何 golden 对拍差异非零(契约 1);探针直引面/源码锚契约与拆分或收拢互斥(契约 2——S17 冻结成员被误迁状态件即属此);board_view 改址遇非机械点(写入行与读取交织/条件内联——契约 7);main 句柄面出现任何改动企图、测速循环重构企图(契约 3/8);机检键与契约互斥(契约 4);拆分或收拢产生基线外新违规且不可在阈值内消化(契约 4);发现收编清单外同病根新键(禁扩面——呈报由用户裁);**逐文件实查发现触碰 owner 契约/GDD 陈述**(D5——停笔呈报,禁内联求裁);豁免注记(v1.19 两段)缺位或段名漂移(T0 核对不通过);拆分边界无职责语句可陈述/状态件跨子域混装/凑计数袋(契约 9——停卡呈报走豁免/还债通道)。 - -## 10. 代拍板白名单(超清单必呈报) - -1. 各宿主内私有函数命名、分组与注释随迁措辞(语义不变前提下)。 -2. 各收拢件 inner class 状态件命名(`_XxxState` 形)与件内成员命名(随宿主原成员名迁入)。 -3. 乙组基线帧文件命名(随 golden/README 现行命名规则)与丙组临时采集脚本的实现形态。 -4. wr 断言挂点与读数表格式。 -5. 提交切分与 worktree 分支命名。 -6. u23/u25 豁免申报行的行文措辞(键值/依据指针/禁再恶化三要素在案前提下)。 - -## 11. 待裁点 - -**零待裁点(2026-10-27 用户裁决记录:print 删除;await 按 v1.19 测量面豁免)**。 - -(原 W1 测量面卫生键处置已按裁决落死——print×3 删除〔信息已由 toast/JSONL 承载,见 S14/D6〕、循环内 await 按 v1.19「测试与质量域·S13 测量面豁免登记」段豁免〔键永久基线内、禁重构测速循环〕;main 类变量按 v1.19「三屏壳与组合根句柄面」节豁免登记。三项处置全部进 §1 单元清单与 §8.1 对照表,无需实现段再裁。) - -## 12. 自审六查与复核记录 - -**自审六查(2026-10-27 写卡会话)**:①规格覆盖——u1–u25→wr1–wr25 逐条对上、T0–T5 各卡可指认、恶化债/锚面/裁点各有落点;②步骤扫描——每步一动作一可核查结果,接口块给签名不给实现体,无「TBD/酌情」行(T0 乙组降级分支为带判据的条件路径非酌情);③类型一致性——接口块签名与 §3 实查、wr 行、T3/T4 取用关系逐字一致(refresh ctx 五键=main:810 现八参尾五;stats 六键=tune_sim:67 现十参中六;S17 冻结成员清单与 §1 收拢列逐件对上);④审查焦点——呈现零变化(三组锚)与探针直引面(S1–S17)为最可能坑点,已逐文件挂 wr 行与契约 2;行为改动覆盖:本批零行为改动,print 删除(stdout 文本——wr23/24 以 grep 与 ui_tune 真链承载);⑤篇幅比例——零实现体抄写,接口块全为签名与键清单;⑥落位预检——零新增文件原则下四件新增面(私有函数族/inner class 状态件/golden 基线/PANEL_DEFAULT 哨兵)各有不能复用理由与唯一落点,与结构图对上。 - -**grilling 自检一轮(2026-10-27,写卡会话内对抗复核)折入记录**:①收敛算术复核——ui_kit 26−2−4=20 成立(modal_shell 哨兵收拢不增方法;拆分方案会 21 超阈,已弃);②open_victory 三参消费点缺省兼容免改址(fx_probe/standee_fx_sweep/curio_interact)——S13 改为「传参者 5 处随动」;③level_map 恶化债归绿判据写死 ≤21(gdstyle 判红线=登记值 21,「回到登记值以下」歧义消除);④撤装置教训回扣——u2 换层装饰域归并禁计数迎合(契约 7 显式禁转发/别名,_cand_ids/_hover_id/_content_size/_drawn_disp 四探针直引成员排除出归并候选);⑤撤销证明两型分层(读数型/迁移型)补强——纯拆分文件回退后现役套件仍绿,读数对拍表是唯一断言载体,已在对照表末列写死;⑥补 S16(level_map 探针冻结成员清单)与 §8.4 残留键账目——完成定义第 1 条账目闭合;⑦**load_font 私有化撤换(实查翻案)**——初稿拟私有化 load_font,逐消费方复核发现其直引含两处渲染闸探针(board_shot_probe:49/type_glow_shot_probe:71)+ui_font_asset_test:15,私有化须动渲染闸探针;换选 switch_toggle(消费方 settings_overlay:76/:91 全在本卡触面、零探针测试面),收敛算术不变、随动面缩 3 行且零探针触碰——S8/接口块/T3/wr18/结构图五处随改;⑧W1 案① tune_sim print 处置收紧为「删除」并禁改 set_sim_report 文本(并入报告文本属文案变化,违契约 1 文案逐字不变);⑨乙组基线帧命名改挂代拍板白名单(初稿行内命名自造,禁行句式剔除)。 - -**v1.1 修订自审六查(2026-10-27 裁决折入会话)**:①裁决覆盖——四条款逐条落位:全清口径→§1 目标/§8.4 账目(69=62+7 类变量键,逐件累加核过);print 删除→u23/u24 改法列+T4+wr23/wr24;main/await 豁免→D4/D6+契约 3/8+u23/u25 任务改写+wr23/wr25 申报行;大户收拢→u1/u2/u3/u4/u6/u7/u13 改法列+接口块状态件形态+T1/T2/T4 任务行;②步骤扫描——收拢任务每件带「冻结成员保持+迁件清单+可核查结果(键消失+冻结面断言零变化+对拍 0.00%)」三段,无酌情行;u3 随动带 T0 行级清单前置;③类型一致性——S17 冻结清单与 §1 收拢列、契约 2、wr 行三处逐名一致(camp 5/level_map 6/board_cell 4/standee 4/battle_end 4/debug 3/curio_interact 0);u13 改址键名与 u20 接口块束键逐字同源;④审查焦点——冻结面补全是本轮最大坑点:原卡 S3/S5 漏记直读成员(camp _balance_label、battle_end _btn/_gp_name/_gp_row/_gp_val、debug _sim_btn/_dbg_btn、standee has_world_hp_bar),若按原清单收拢即探针断红——v1.1 已补全 S17 并挂契约 2;board_view 禁触冲突为第二坑点(board_cell 30/31 成员被其直写),按裁决全清口径的唯一路径落机械随动+错波扩展+L3 兜底(§0/§5/契约 7/§9 四处闭环);⑤篇幅比例——收拢清单以成员名列举进 §1/S17,零实现体;⑥落位预检——inner class 状态件六件各填「为什么不能复用」(各视图绘制态彼此独立无共用结构;与 flow context 束异质),零新文件保持。 - -**v1.1 grilling 自检一轮(同会话对抗复核)折入记录**:①**board_cell_unit 被动壳定性(实查翻案)**——31 成员逐名核外部直访:30 个被 board_view 直写 47 行+探针直读 4 个皆在写入集内,纯内部仅 _glow_layer;按「句柄成员不收」判据本无收拢面,但裁决全清口径下唯一路径=写入行随动改址(约 40 行机械形)——落 u3+§0 禁触条目收窄(board_view 结构拆件仍禁、错波集扩五文件)+契约 7 非机械点停呈+§8.3 抽 5 行复核;②**探针直读成员非全部冻结(出口判据补强)**——fx 出口三计数(_death_shards/_hit_sparks/_flash_count 经 fx_probe() 方法)与 _run_data/_run_labels(经 run_data_probe()/update_run_data() 方法)不被字段直访,判可收拢、方法体读点随迁——判据句(字段直访冻结/方法出口可收)写进接口块状态件形态注记;③**curio_interact 冗余面发现(实查翻案)**——16 个注入成员=_init(ctx) 逐成员抄写件(:32-48 实读),与 ctx 完全同源;u20 三束后直接持 ctx=3 成员,比原「域归并改善非清零」方案更彻底且零新概念(构造注入先例形态),S12/u13/wr13 三处随改,装配行零随动;④**u25 死成员清点任务随豁免取消**——豁免语义=类变量面冻结(契约 3),清点删除动机(键清偿)消失;wr25 改零改动实证(git diff 空)+申报行,避免豁免与清点并存的面语义打架;⑤**69 清账目复核**——v1.0 清偿 62 键构成重算(u23×2=print+run 局部,await 另计残留)+七件类变量键(u1/u2/u3/u4/u6/u7/u13 各+1)=69,与豁免 2 键合计 71 对平;u13 原在清偿列 0 键(改善非清零),v1.1 转 +1——清单逐项累加在 §8.4 留痕;⑥**估时逐件落账**——上调 ≈1.3d 拆到八笔(u1/u2/u4 各 0.15+u3 0.25+u6/u7 各 0.12+u13 0.2+print/申报 0.1),防整段模糊上调;T0 冻结面复核扩容(S17 七件+board_view 47 行清单)计 +0.05d;⑦**契约 6 与裁决两形态冲突收口**——「独立小状态类」需新 .gd 文件违 D1,inner class 相容——卡内定死 inner class 单形态(裁决给的是形态自由、契约 6 是硬红线,取交集);⑧**冻结成员补全反推(原卡 S 清单缺陷)**——S3 原记 camp 四成员漏 _balance_label(ui_probe:36 直读 .text),若按原清单收拢即探针断红;S5 原为方法面汇总未展开 battle_end 四句柄直读(_btn 5 处/_gp_val 3 处);debug _sim_btn/_dbg_btn(ui_tune:132+standee_fx_sweep_test:119/121)、standee has_world_hp_bar(ui_probe:141)、level_map abandon_btn/status_badge(ui_click 直引)同为实查新增——八处全部补进 S3/S5/S6/S16/S17,冻结面口径由「探针公开方法面」扩为「字段直访全集」。 - -## 13. 禁为机检文本保留无效成员(重构类必填条款) - -禁止为迎合机检消息文本(含计数)而保留或新增无效成员/别名/转发属性;本批收敛(拆分+收拢)不得以「探针便利」「基线计数」为由保留任何清单外死成员或新增同种装置;u1–u7/u13 收拢与 u2 归并、u25 申报的每一笔处置必须以 S17 实查冻结面或真实零消费为凭据(对账表在案);禁以转发属性形态「保住」被收拢成员的外部写法(字段直访契约面一律随动改址或冻结保持,二选一,无第三态);机检键与本卡契约互斥时实现段一律停卡呈报,不得自造第三条路(code-conventions §1.1 同款)。 diff --git a/reports/需求卡片-核心数据面结构收敛批-2026-10-27.md b/reports/需求卡片-核心数据面结构收敛批-2026-10-27.md deleted file mode 100644 index abf76582..00000000 --- a/reports/需求卡片-核心数据面结构收敛批-2026-10-27.md +++ /dev/null @@ -1,356 +0,0 @@ -# 需求卡片:核心数据面结构收敛批(gdstyle 存量债清偿·卡 2——数据校验族/生成器族/效果引擎/core-data 散条 86 键) - -- 版本:**v1.2**(v1.1=2026-10-27 用户全清裁决四项折入+拆件面实查补全;v1.2=2026-10-28 用户裁「拆分边界纪律(DDD/高内聚)」落卡——新增契约 7+审计⑪+L3 增款+基线读数锚重锚〔216→168 键,随波 0 刷新 d219dd3d〕;自审六查与 grilling 自检记录见 §12) -- 来源:[待办清单](../待办清单.md)「gdstyle 存量债全量清偿——216 键按病根分波整改」条目(2026-10-26 登记,P0,状态=文档设计已闭合+已写卡)(唯一事实源:清点报告 [审计-gdstyle存量债清点与清偿方案-2026-10-26](审计-gdstyle存量债清点与清偿方案-2026-10-26.md) §六第 2/3/4/7 条裁定——证据指认形态,见 §2) -- 归并账目(清点报告 §六第 7 条):本卡收编=**波 2(40 键/13 文件)+波 4(17 键/2 文件)+effect_engine(8 键)+波 8 core/data 侧 10 文件(21 键)=86 键/26 文件**;与卡 1(B1 战斗域拆件批 45 键)、卡 3(呈现层结构收敛批 71 键)账目闭合 45+86+71=202+三宿主规避 14=216。**2026-10-27 用户全清裁决:86 键全部清零**——v1.19 在册豁免仅两处(组合根 main 句柄面/测量面 tune_sim await),均不在本卡文件集,本卡零豁免零残留 -- 归属:`game/data/schemas/` 12 文件+`game/core/` 14 文件+`game/data/tables/adventure.tres`(等值迁移)+**新件 8**(`game/core/config_domain_combat.gd`/`config_domain_run.gd`/`config_domain_crossrun.gd`/`slot_store.gd`/`meta_state_store.gd`+`game/data/schemas/adventure_quota_segment.gd`/`adventure_value_segment.gd`/`adventure_cap_segment.gd`)+消费方改址(`game/core/`、`game/presentation/`、`game/tests/`、`game/probe/`、`game/sim/` 约 60 文件,实查合计 ≈1330 处——§3.5 分面计数) -- 排期:未编入(迭代批卡片;预配迭代 41——卡①与波 7 迭代 40 先行合回,串行序见 §0;估时 **≈7.9 个工作日,区间 7.4–8.4**,逐 T 卡实估见 §7;超迭代冻结线 5 个工作日——编入时循迭代 39 特批先例由用户裁) -- 开工门:U0+复核门过(§12)——零待裁点(2026-10-27 用户裁决落定,§11) - -## 0. 前置依赖与并行性 - -- **第〇步核对(2026-10-27 写卡会话)**:来源条目=需求性工程条目(整行无设计线段、首段落「文档设计已闭合+已写卡」)——逐波裁定(清点报告 §六第 1–6 条)+2026-10-27 整合裁定(§六第 7 条)+2026-10-27 全清设计补课(架构 v1.19)即证据指认,放行。 -- **全清裁决(2026-10-27 用户,本卡修订依据,实现段零裁断)**:①config_db 双键(公开方法 44/类变量 25)彻底清零=行族访问器归位各 schema 表类+表持有成员按域收进域容器 Resource;②save_manager 52/meta_progression 31 彻底清零=SlotStore/MetaStateStore 拆件(架构 v1.19 :89/:90 行已登记);③adventure_table 类变量 44 拆子 Resource 段(形态同 settlement_table 拆段——嵌套段单 .tres 保持);④unit_container spawn 参数 10 签名引用束化。红线不变:ConfigDB 仍是唯一加载与持有单点(架构 :88 定稿注记口径)。 -- **卡间串行(迭代 40 先行合回)**:卡①文件集(battle_orchestrator/grant_segment/combat_segment/settlement_table/damage_controller/treasure_interact_controller+BattleFxHost/RewardGrant 两新件)与波 7 现成卡(结构小件定点修批 v1.3,同触 board_generator.gd/reward_economy.gd 两 `_fatal`)在迭代 40 先行合回——本卡改址 battle_orchestrator 的 spawn 调用点按**卡①合回后形态**(行号 T0 重锚);本卡对 board_generator/reward_economy 两文件的拆分行号**禁照搬 §3 锚**,一律 T0 重核(后行者吸收漂移义务,波 7 卡自带同款)。 -- **spawn 参数键入本卡(K6′)**:签名束化必改全部调用方——battle_orchestrator 调用点经卡①(迭代 40)先行收敛,本卡(迭代 41)改址顺路;v1.0 的「卡间零交叠留残」义务随串行序解除。 -- **与卡③(呈现层结构收敛批)触碰=呈现侧改址行**:hud_presenter/camp_shop_presenter/main/save_select_overlay/treasure_interact_controller 等文件的访问点换址(纯改址、无结构改动)——编排错波,后行者 T0 吸收漂移(迭代 39 副卡同款先例)。 -- **与迭代 39 两卡(已编)的文件触碰**:副卡(同调配装充能域封装批)触 effect_engine.gd(仅 :94 注释面 RunLedger 表述清)与 meta_progression_forge_test.gd(:290-291 直构改址)——本卡重构 effect_engine.gd 本体并改址同一测试文件的其他行;同文件异行域,编排错波(39 先于 41),后行者 T0 吸收行号漂移。 -- **PARITY/MC 纪律**:本批零数值改动、零 RNG 流改动、零 PARITY 触面(S8_FILES/PARITY_TOUCH_FACES 零命中)→ 零 MC、零对拍补跑。存档面等价由现役 save 断言面+读写逐位断言承载(wr6),不属对拍补跑。 - -## 1. 目标与完成定义 - -**目标**:86 键收编文件的结构债**全数清偿**——①数据校验族 13 文件 validate()/cross_validate() 按校验域拆私有函数族(2026-10-26 用户裁:各文件内部拆、不抽共享骨架);②生成器族两件拆私有阶段函数(RNG 消费序冻结);③effect_engine 拆解释器与校验私有域(全同步语义、装载声明序、四词表封闭零变化);④**config_db 归位+域容器**:35 个行族/resolve/门控访问器归位各 schema 表类(表管自己的行查询)、19 个表持有成员按域收进 3 个域容器 Resource,ConfigDB 只剩加载/校验/override/诊断门面;⑤**存档域拆件**:SlotStore(槽位文件域)+MetaStateStore(存档内元进度数据读写唯一层)建件收编,save_manager 瘦身剩磁盘 IO+版本迁移链+断点族+门面,meta_progression 纯转发读退役、业务规则与写口编排留置(封闭面 20);⑥波 8 core/data 散条按 K 清单收敛(adventure_table 拆段、action_economy 删并、spawn 束化、其余拆分/私有化)。**游戏行为零变化**(契约 1)。 - -**清偿账目**:86 键全清——校验族 40+生成器族 17+效果引擎 8=65 键由文件内私有拆分清偿(gdstyle 直扫键消失,闸读数下降自然绿);波 8 core/data 侧 21 键由结构收敛清偿:config_db 44+25 两键=归位+容器(44→8/25→9)、save_manager 52=拆件(52→7)、meta_progression 31=瘦身(31→20)、adventure_table 44=拆段(44→12)、action_economy 18=删并(18→15)、unit_container spawn 参数=束化(10→1)、save_manager `_peek_summary_at`/load_from_disk 返回键与 meta_progression tree_can_buy 返回键=留置函数原位拆分清偿。新件 8 封闭面全部在阈(§7 预检逐件核验),零基线外 NEW。 - -**完成定义**: -1. §7 结构图全部行落地(含 8 新件);`tools/gdstyle_gate.py` 改前改后读数对拍:**基线外 NEW=0(含新件)、恶化=0、在案键计数较 T0 实测基线(波 0 刷新后 168 键,git d219dd3d)下降 86**(86 键消失清单+新件键账表进实现报告); -2. 行为等价证据齐:数据校验族断言面(data_config 八套件+core 直引 12 文件)全绿;生成器同种子逐位一致(现役 determinism 断言继承);效果引擎现役四套件全绿;**存档读写逐位等价**(save 现役断言面改址保持全绿——原子写/兜底/拒读/迁移链语义零变化); -3. 撤销证明逐 wr 行落地(§8.1 末列);三份产出物写齐(T10);独立验收审计过。 - -## 2. 设计事实源 - -| # | 出处 | 取用条款 | -|---|---|---| -| D1 | 待办清单条目「gdstyle 存量债全量清偿」(需求性工程条目证据指认) | 波次框架、纪律、本卡放行凭据 | -| D2 | 清点报告 §六**第 2 条**(波 2 形态=各文件内部拆校验域私有函数族、不抽共享骨架、零新概念零架构登记) | 校验族拆分形态 | -| D3 | 清点报告 §六**第 3 条**(全部波不改游戏规则与玩家可见行为;design/gdd/systems/ 零修订预期) | 行为零变化总纲 | -| D4 | 清点报告 §六**第 4 条**(波 8 config_db 公开方法收敛=纯代码删冗余/私有化) | **已被 D7 取代**——方法集由「删冗余/私有化」扩为「归位+域容器」(2026-10-27 全清裁决),本行仅存账目沿革 | -| D5 | 清点报告 §六**第 7 条**(2026-10-27 整合裁定:本卡=波 2+波 4+effect_engine+波 8 core/data 侧=86 键;文件交叠冲突归零) | 收编范围与卡间边界 | -| D6 | 2026-10-27 写卡会话**逐文件实查声明**:26 收编文件全数实读+gdstyle 0.4.0 直扫复测(读数与 2026-10-26 基线零漂移);公开面消费方 grep 全域核验;未发现触碰任何 owner 契约/GDD 陈述的病根——三处文档机械指址漂移(§6 反哺点承载,陈述本体不变) | 本卡写法③证据基座 | -| D7 | **2026-10-27 用户全清裁决四项**(§0 抄录;待裁点 1 案 B 变体=归位+域容器 Resource〔非词典化〕、待裁点 2 案 B=域对象拆件经设计段先行定稿) | config_db/save/meta/adventure/spawn 五面的清偿深度与形态 | -| D8 | `design/engineering/architecture/architecture.md` **v1.19**::88 ConfigDB 行定稿注记(行族访问器归位+域容器持有+「经 ConfigDB 单点读取=经其持有的表对象」口径);:89 SlotStore 行;:90 MetaStateStore 行(「数据读写原语族+只读投影」——本卡 K2′ 读投影设计的直接依据);:126 meta_progression 行定稿注记(纯转发读退役+业务规则与写口编排留本类 ≤20+tree_can_buy 留公开对外暴露列);:183 组合根 S13 豁免在册(本卡改址经 `main.save_manager` 既有句柄、零新增句柄成员——豁免面不扩大) | 拆件设计与红线口径的唯一架构凭据 | - -## 3. 现状事实(2026-10-27 写卡会话实查于 master 8b146321,gdstyle 0.4.0 直扫——与基线零漂移;修订会话复测于 be2f6ca6,两次提交均为写卡文档面、代码零漂移。开工日 T0 复核行号——迭代 40 卡①/波 7 合回后全表重锚) - -### 3.1 数据校验族(波 2,40 键/13 文件) - -| 文件 | 键(现值/阈值) | 实查 | -|---|---|---| -| `game/data/schemas/meta_tree_table.gd` | validate 长度 86/50·分支 26/8·局部 13/10·嵌套 5/4 | :27-111(单循环体+requires/requires_level/彩蛋三尾段) | -| `game/data/schemas/treasure_item_table.gd` | validate 长度 147/50·分支 44/8·局部 26/10·嵌套 6/4 | :61-206(行头校验/活行校验/同调行校验三段可分,:104 调 EffectEngine.validate_trigger_row) | -| `game/data/schemas/board_gen_table.gd` | validate 长度 67/50·分支 20/8·局部 16/10 | :14-81 | -| `game/data/schemas/enemy_table.gd` | validate 长度 116/50·分支 32/8·局部 29/10 | :36-150(行核心/池模板/行序纪律/锚行四段) | -| `game/data/schemas/forge_table.gd` | validate 长度 95/50·分支 30/8·局部 20/10 | :31-126(行校验+初始持有覆盖尾段+默认轴交叉尾段) | -| `game/data/schemas/level_gen_params.gd` | validate 长度 59/50·分支 15/8·局部 18/10 | :15-72(行校验+层深递进尾段) | -| `game/data/schemas/meta_table.gd` | validate 长度 60/50·分支 14/8·局部 14/10 | :15-74(boss_keystone/conversion/attune_refresh 三行族天然分段) | -| `game/data/schemas/reward_table.gd` | validate 长度 99/50·分支 30/8·局部 20/10 | :16-113(行校验+字典完整性/池护栏/clear_default 三尾段) | -| `game/data/schemas/skill_table.gd` | validate 长度 80/50·分支 29/8 | :19-97(按 type=basic/damage/buff/debuff 四段类型校验) | -| `game/data/schemas/variation_table.gd` | validate 长度 58/50·分支 20/8 | :24-80(行校验+互锁段) | -| `game/data/schemas/status_effect_table.gd` | validate 分支 12/8 | :14-51(按 unit=percent/flat/ac 三段量纲域) | -| `game/core/config_db_cross_validator.gd` | cross_validate 长度 107/50·分支 21/8·局部 24/10·嵌套 5/4;validate_skill_pool_links 局部 11/10 | :8-113(①①b②③⑤⑥⑦编号块天然分段);:121-159 | -| `game/core/config_db_resolver.gd` | resolve_enemy_rowset 分支 12/8;_resolve_progress 长度 52/50·分支 16/8·局部 11/10 | :33-81(行集寻址);:107-157(缺位标注 if 链+告警去重块) | - -### 3.2 生成器族(波 4,17 键/2 文件) - -| 文件 | 键(现值/阈值) | 实查 | -|---|---|---| -| `game/core/board_generator.gd` | generate 长度 62/50·局部 14/10;_attempt 长度 51/50;measure_inferability 长度 64/50·分支 12/8·局部 13/10·嵌套 5/4;_finalize 参数 6/5 | :20-80(params 快照段 :26-39 可提);:85-134(布雷+剃雷段可提);:151-213(single/subset 两算子与派生约束段可提);:336(`_db` 形参全函数零消费——删即 5 参) | -| `game/core/node_map_generator.gd` | check_params 分支 12/8;validate_output 长度 132/50·返回 7/6·分支 34/8·局部 22/10;_build 局部 15/10;_add_forks 局部 12/10;_assign_types 分支 11/8;_check_fork_rules 嵌套 5/4 | :68-106(域校验段/结构可行性段两分);:111-241(六阶段早退结构天然分拆);:246-286;:292-334(锚收集段无 RNG 可提);:359-402(配比填余段/岔口修型段两分——后者零 RNG);:468-514(支路签名比较嵌套) | - -### 3.3 effect_engine(8 键) - -| 文件 | 键(现值/阈值) | 实查 | -|---|---|---| -| `game/core/effect_engine.gd` | rebuild 长度 55/50·嵌套 5/4;_cond_ok 长度 52/50·返回 19/6·嵌套 5/4;validate_trigger_row 分支 14/8·局部 11/10;多余 else(no-else-return) | :95-148(feats装载/同调装载/树规则合成三段,装载序 feats→treasure→tree);:259-309(13 算子 match——比较族/ends_with/has/计数器族四组);:341-388(when 键校验段/do 键校验段);:210/:212=bucket_of 的 elif-after-return(:207-214) | - -### 3.4 波 8 core/data 散条(21 键/10 文件) - -| 文件 | 键(现值/阈值) | 实查 | -|---|---|---| -| `game/core/config_db.gd` | 公开方法 44/20;类变量 25/15 | 公开方法实测 44 个(修订会话逐方法构成核验见 §3.5);类变量=19 类型化表持有+is_ready+5 私有。类变量外部直读核验:19 持有变量全部有生产直读(db.hero 159 处/db.settlement 177 处/db.adventure 137 处等) | -| `game/core/save_manager.gd` | 公开方法 52/20;_peek_summary_at 返回 7/6;load_from_disk 返回 8/6 | 公开方法实测 52 个,构成核验见 §3.5(槽位族 10+元进度族 35+断点族 4+IO/迁移 3) | -| `game/core/status_container.gd` | apply_effect 返回 9/6·嵌套 5/4;_new_instance 参数 7/5 | :28-66(三臂 match 公共尾部都是 `_instances.append(_new_instance(...)); return true`);:69-80 | -| `game/core/unit_container.gd` | spawn 长度 81/50·参数 10/5·局部 17/10 | :36-118(英雄段 :55-63/行集段 :69-112 两分);签名 10 参,调用方=battle_orchestrator(迭代 40 卡①合回后 T0 重锚)+测试 6 文件 10 处(damage_controller_test 1/roll_multiplier_test 3/round_flow_skill_pool_test 2/skill_unlock_test 1/level_shop_economy_test 2——修订会话 grep 实查;部分调用省略尾部缺省参) | -| `game/core/reward_economy.gd` | roll_board 长度 54/50·局部 11/10;_skewed_cell_rows 局部 13/10 | :37-88(资格清单规范化段 :42-52 在开流前,可无虞提取);:220-259(分摊量计算段/权重装配段两分) | -| `game/core/meta_progression.gd` | 公开方法 31/20;tree_can_buy 返回 8/6 | 构成核验见 §3.5(纯转发 2/hero_override 单调用点内联 3/内部自用私 2/并组 3 组/零生产私 1/留置 20);:320-350(requires/requires_level 两循环段可提) | -| `game/core/treasure_items.gd` | validate_use 分支 11/8·嵌套 5/4 | :88-131(空间解析段/预读窗口段两分) | -| `game/core/action_economy.gd` | 类变量 18/15 | 18 变量逐个核验:**`_next_round_mode` 只写零读(死存储,:36 声明/:219 写入,全库无第三处)**;**`_ap_exhausted_last` 可派生**(:275 在 _finish_round 内由 path_tag 派生,与 :274 `_last_round_end` 同源同刻——ap_exhausted_last_round() :280-282 改派生读语义逐字);**`last_round_end` 属性对外仅 minesweeper_rules.gd:495 一处消费**(architecture.md :102 该行只列「last_round_end」于消费依赖列,未钉属性形态;「ap/rap/phase 只读」三属性在架构对外暴露列——不动) | -| `game/core/minesweeper_rules.gd` | _do_dig 长度 53/50 | :280-332(连锁揭示循环段 :301-329 可提——cell_revealed 发射序即链序,整体搬迁零漂移) | -| `game/data/schemas/adventure_table.gd` | 类变量 44/15 | 44 变量=44 个 @export 标量槽(修订会话逐列复核:配额 13+件值 13+cap 9+knob 9——v1.0 行「37 个 @export」计法有误随本版订正,账目 44 不变)。**列族分组**:curio_quota_*(13,"kind/tier" 13 组合)/curio_value_*(13)/curio_cap_*(9)/knob 9(clear_heal_pct、curio_candidate_count、shop_refresh_*3、feat_ticket_*4)。外部直读核验:36 个配额/件值/cap 槽生产直读为零(仅 2 处测试例外:pool_case_d_test.gd:164/165/190 直写 curio_cap_gp 模拟满层、adventure_feats_test.gd:206 直读 curio_value_max_hp_common);生产消费全走 curio_quota()/curio_value()/curio_cap() 三个访问器与 9 个 knob 槽。adventure.tres 在册 36 个标量属性(等值迁移载体) | - -### 3.5 拆件面实查(2026-10-27 修订会话消费方 grep 全域——改址计数与封闭面设计依据) - -- **config_db.gd 44 公开方法构成**(留置 8+归位 33+删 2+私 1=44 闭合):留置=门面/诊断/加载/override 8(push_diag/is_fatal/reset_diagnostics/diagnostics/diagnostics_count/load_tables/set_reload_gate/reload);归位=**溶解 16**(feat_row/feat_rows/tree_node/tree_rows/status_effect_row/level_row/level_gen_params_row/level_count/treasure_item_row/treasure_transitional_rows/treasure_attunement_rows/skill_row/shop_price_a/shop_price_b/forge_default_attack_type/forge_default_armor_type——底层表方法或属性现成,访问点改直连)+**迁移 14**(shop_gp_drop_row/shop_level_gp_bonus/shop_price_level_bonus/shop_products/shop_product_row/shop_pool_rows/shop_pool_row 7+meta_boss_keystone_row/meta_attune_refresh_row 2+forge_routes/forge_route/forge_armor_route_by_type 3+variant_pool/global_variant_row 2——实扫逻辑随方法入表类)+**委托 3**(resolve_board_gen/resolve_enemy_rowset/resolve_difficulty_modifiers——resolver 协作件经装配段注入三表,resolver 文件与键零搬移);删 2(meta_conversion_row/forge_weapon_route_by_type——生产零消费,K1′);私 1(validate_skill_pool_links——测试 2 文件 9 处改 _ 前缀,K1′)。成员直读 `db.<表>` 537 处(core 99/呈现 24/测量面 414)+访问器调用 264 处=**改址 ≈800 处**。 -- **save_manager.gd 52 公开方法构成**:槽位族 10(attach_path/attach_slot_template/slot_path/active_slot/has_write_target/activate_slot/create_slot/delete_slot/peek_slot_summary/peek_summary_at→SlotStore;消费面 main/save_select_overlay/hud/main_overlay_flow/main_ui_build ≈12 处+探针 ≈17 处+测试 ≈77 处)+元进度族 35(钥石 3〔keystone_balance/add_keystone/spend_keystone〕/道具 2/树 3/叉侧 3/锻造 9/同调 2/Y 账本 2/真视 2/计数 5/摘要 2/首冒险 2→MetaStateStore;消费面 meta_progression 内部+attunement.gd+adventure_runner.gd+hud/camp 呈现+sim/探针/测试,grep 实查 ≈340 处)+断点族 4(set_breakpoint/clear_breakpoint/has_breakpoint/breakpoint_snapshot——留置 save_manager)+IO/迁移 3(load_from_disk/write_to_disk/register_migration——留置)。**改址 ≈450 处**。 -- **meta_progression.gd 31 公开方法构成**(瘦身 −11+并组回加 +3=留置 20):纯转发读退役 2(keystone_balance〔grep 实查 67 处接收者混布——生产 3:hud 2/camp 1,测量面 64 按接收者实例机械区分:meta 实例随本项退役改 `meta_state.` 直连、save 实例随 K2′ 族改址〕、is_item_unlocked〔treasure_interact_controller 1 处〕——消费方直连 meta_state);hero_override 单调用点内联 3(forge_weapon_atk_bonus/forge_armor_ac_bonus/tree_stat_flat——v1.0 行「内部零调用」实查笔误随本版订正:三件均由 hero_override :303-305 调用,内联后输出逐字等价);内部自用私 2(tree_spent_total/tree_gate_text——测试 1 文件 2 处改 _ 前缀);并组 3 组(tree_camp_rows+tree_fork_groups→tree_camp_status〔消费方 camp_shop_presenter 各 1 处〕、hero_attack_type+hero_armor_type→hero_type_axes〔main.build_adventure_params 2 处+测试 2 处〕、forge_select_weapon+forge_select_armor→forge_select(kind, route_id)〔camp 2 处+测试 4 处〕);零生产私 1(forge_route_unlocked——生产零、测试 7 处改 _ 前缀);留置 20(封闭面定稿=架构 v1.19 :126 对外暴露列 6 件+UI 投影/写口编排——§7-K3′ 列全)。 -- **新件封闭面预演**(gdstyle 阈值实测:max-public-methods 21 即红/max-class-variables 含私有成员 16 即红):SlotStore 公开 10/类变量 4 ✓;MetaStateStore 公开 19(写口原语 13+读投影 6)/类变量 1 ✓;域容器×3 类变量 7/7/5、零方法 ✓;adventure 段件×3 类变量 13/13/9、零方法 ✓——全部 ≤阈零 NEW。 - -## 4. 设计契约(红线,违反 = L3 停机呈报) - -🔴 **契约 1 · 行为零变化**:①fail-fast 契约与校验覆盖面零变化——全部 validate/cross_validate 对同一输入的错误清单**逐字等价**(类别、文案、追加顺序);②生成结果逐位零变化——board_generator/node_map_generator 同种子同参产出与改前逐位一致,**RNG 消费序冻结**(拆分只许整段搬迁取数代码,禁重排任何 rng_stream/纯流取号调用);③伤害数值与效果语义零触碰;④效果引擎**装载声明序**(feats→treasure→树规则,行内数组序)与**四词表封闭**(EVENTS/EFFECT_KINDS/FACTS/OPS 常量零改动)零变化;⑤玩家可见呈现零变化;⑥**存档序列化语义零变化**——tmp+rename 原子写、无激活态拒写、高版本拒读禁写、损坏兜底改名、迁移链幂等、旧单档一次性迁移判据,对同一输入的盘面结果与返回值逐字等价(现役 save 断言面为载体)。 - -🔴 **契约 2 · 断言面逐字保留**:现有 validate 系单测(data_config 八套件+core 直引 12 文件)、生成器断言面(board_generator_test/node_map_generator_test/node_map_determinism_test 等)与 save/meta 断言面(save_manager_domain/save_slot_isolation/save_slot_summary/save_boot_no_activate/breakpoint_resume/meta_progression_forge/tree_requires_level 等)**禁删禁改判据**;确需改判据=测试削弱申报节逐条列明理由。测量面改址(§7-K 列明的调用点换址)=访问路径改写,断言语义与判据逐条保持。 - -🔴 **契约 3 · S13 纪律**:`tools/gdstyle_baseline.txt` 禁改禁 refresh(波 0 已于 2026-10-28 批外刷新至 168 键,批内禁改口径不变);还债=数值下降自然绿;**在案键的函数禁搬移文件**(基线函数级键逐一核对:save_manager 两函数键与 meta_progression tree_can_buy 返回键全部原位留置——本卡搬移面均为无键方法,§3.5 已核对);新件封闭面按 §3.5 预演值落地、禁超阈;机检键与卡片契约互斥时停卡呈报。 - -🔴 **契约 4 · 禁为机检文本保留无效成员**(req-card 第 13 条,本卡属重构类):禁为迎合机检消息文本(含计数)保留或新增无效成员/别名/死存储/**转发壳**(action_economy `_next_round_mode` 删除即本契约的执行例;K1′ 删除的两访问器禁以兼容名留转发、K3′ 退役的两纯转发禁在 meta_progression 留同名委托);机检键与本卡契约互斥时实现段一律停卡呈报,不得自造第三条路。 - -🔴 **契约 5 · 公开面收敛边界(全清口径)**:文件内拆分只准动私有函数体与私有签名;公开签名/公开方法数/类变量数的改动**逐项按 §7-K1′–K6′ 清单执行**(每项已列改法、归位映射与消费方影响面),清单外公开面禁动;新件公开面=清单列明的封闭面,禁超禁缩(缩=消费面断裂,超=NEW 键)。 - -🔴 **契约 6 · 核心层纪律不破**:Core 层零 UI 依赖(拆分后完整战斗仍可 `--headless --script` 跑通);数值单一事实源(adventure_table 拆段后玩法数值仍只存 `data/tables/*.tres` 经 ConfigDB 单点读取——口径按架构 v1.19 :88:「经 ConfigDB 单点读取」=经其持有的表对象,访问器语义不变);RNG 单点(零新增随机);**新件零 autoload**(SlotStore/MetaStateStore 由 save_manager 组装持有、经 `save.slots`/`save.meta_state` 直连——组合根句柄面与 autoload 链零新增,架构 :89/:90 消费依赖单向)。 - -🔴 **契约 7 · 拆分边界纪律(DDD/高内聚,2026-10-28 用户裁)**:一切拆分(私有函数族/新件/段件/容器)的边界沿职责轴、不沿阈值轴——①每个拆出单元须有可陈述的职责语句(「X 域归 Y 件,因为 Z」,实现报告逐件一行)与单一变化原因;②单元须有集体身份:成员共同表达一个可命名的领域概念——命不出名字、只能说「剩下的成员」的打包=凑计数袋,禁;③成员被互不相干调用方分别消费=边界切错,按消费域重切;④「过阈值」只许作为发现信号,作为拆分动机即违规;⑤职责上不可分且拆不出内聚单元 → 停卡呈报走豁免/还债通道(architecture「S13 豁免登记」同款),禁硬拆凑绿。code-conventions §1.1(高内聚低耦合/禁为机检保留无效成员)为本条上位规约。**v1.2 审查预检结论**:本卡 T1–T9 拆分族与新件 8 逐项核对均有职责语句与集体身份(校验域/装载域/管线阶段/槽位文件域/存档内元进度数据域/三域容器/列族段),无凑计数形态——本条对卡 2 为确认性纪律,无改法变更。 - -## 5. 范围边界 - -**做**:§3 所列 26 文件的结构拆分与 §7-K1′–K6′ 公开面收敛(含 8 新件建件与 ≈1330 处消费方改址);adventure.tres 等值迁移;撤销证明;产出物。 - -**不做**(去向明示): -- config_db 类变量词典化(域容器 Resource 为既裁形态,词典化不采——D7);save/meta 的第三种拆法(SlotStore/MetaStateStore 为架构 v1.19 定稿件,禁另起形态); -- 卡①文件集的结构改动(本卡对其仅 spawn 调用点一行改址)与卡③呈现层结构收敛(本卡对其仅访问点改址行)→ 各归其卡,编排错波; -- 波 7 五小件(现成卡 v1.3,迭代 40)、三宿主残留债(迭代 39)、波 0 基线 refresh(直改)→ 各归其位; -- design/ 与根规则文件任何编辑 → 反哺点清单(§6); -- MC/对拍锚重跑 → 用户发起(本批零触发)。 - -## 6. 关联文档同步面 - -| 文档 | 关联点 | 同步义务 | -|---|---|---| -| `design/gdd/systems/战斗循环/地图战斗资源.md` | :83 引 `reward_economy.gd#roll_board` 内部行号(「循环第 65-67 行」)——roll_board 提取规范化段后行号漂移;`_rollable_rows()` 207-213 指址不变 | 反哺点 · 列清单(①:行号随动,陈述本体——收 pool 全集与资格一视同仁语义——零变化) | -| `design/gdd/systems/冒险循环/冒险结构.md` | :267「adventure_table curio_value_*(…列族)」——拆段后标量槽随段件嵌套(段路径),值域陈述(int [0,999]/kind×tier)不变 | 反哺点 · 列清单(②:落点列改指段路径) | -| `design/engineering/architecture/architecture.md` | v1.19 定稿注记四行的实现批后现状改写::88 ConfigDB 行(「实现卡随批改址」→改写为容器三件现状+公开面 8 实数);:89/:90 两新件行(「实现批建件」→现状登记);:126 meta_progression 行(「随件退役」→改写为公开面 20 现状);另 :102 minesweeper 行消费依赖列「A3 last_round_end」属性→方法注记;:90 action_economy 行与 :92/:93/:103/:104 四行(公开 API 零变化——T0 核后记「零改动」注记) | 反哺点 · 列清单(③:v1.19 定稿注记的现状改写由文档批执行,本卡只列落点) | -| `game/tests/验证集清单.md` | 测量面改址涉及测试文件的调用点地址(机器提取重生成) | 批内机械同步(game 内 .md,非禁写面) | -| `待办清单.md` | 来源条目状态推进(主会话统一回写——本卡代理禁改) | 反哺点 · 列清单(④:状态核对注记) | - -## 7. 任务卡 - -### 卡前 · 文件结构图 - -| 文件 | 职责 | 行为改动 | -|---|---|---| -| `game/data/schemas/meta_tree_table.gd` | validate 拆行校验域+requires/requires_level 尾段(复用既有·修改) | 非行为 → wr1 | -| `game/data/schemas/treasure_item_table.gd` | validate 拆行头/活行/同调行三域(复用既有·修改) | 非行为 → wr1 | -| `game/data/schemas/enemy_table.gd` | validate 拆行核心/池模板/行序域+resolve_rowset 委托收编(复用既有·修改) | 非行为 → wr1/wr8 | -| `game/data/schemas/forge_table.gd` | validate 拆行校验+两尾段+forge 族 3 方法归位(复用既有·修改) | 非行为 → wr1/wr8 | -| `game/data/schemas/reward_table.gd` | validate 拆行校验+三尾段(复用既有·修改) | 非行为 → wr1 | -| `game/data/schemas/board_gen_table.gd` | validate 拆行校验域+resolve_row 委托收编(复用既有·修改) | 非行为 → wr2/wr8 | -| `game/data/schemas/level_gen_params.gd` | validate 拆行校验+层深递进尾段(复用既有·修改) | 非行为 → wr2 | -| `game/data/schemas/meta_table.gd` | validate 拆三行族域+meta 族 2 方法归位(复用既有·修改) | 非行为 → wr2/wr8 | -| `game/data/schemas/skill_table.gd` | validate 拆四类型域(复用既有·修改) | 非行为 → wr2 | -| `game/data/schemas/variation_table.gd` | validate 拆行校验+互锁域+variant_pool/global_variant_row 归位(复用既有·修改) | 非行为 → wr2/wr8 | -| `game/data/schemas/status_effect_table.gd` | validate 拆量纲域(复用既有·修改) | 非行为 → wr2 | -| `game/data/schemas/difficulty_table.gd` | resolve_modifiers 委托收编(复用既有·修改) | 非行为 → wr8 | -| `game/data/schemas/level_table.gd` | level_count 归位(复用既有·修改) | 非行为 → wr8 | -| `game/data/schemas/shop_table.gd` | shop 族 7 方法归位(复用既有·修改) | 非行为 → wr8 | -| `game/core/config_domain_combat.gd` | **新增**——战斗域容器(board_gen/variation/status_effects/enemy/skill/hero/settlement 7 类型化成员) | 非行为 → wr8 | -| `game/core/config_domain_run.gd` | **新增**——冒险域容器(level/difficulty/level_gen_params/reward/adventure/action_economy/shop 7 成员) | 非行为 → wr8 | -| `game/core/config_domain_crossrun.gd` | **新增**——跨局域容器(meta/meta_tree/treasure_items/feats/forge 5 成员;跨局循环=单局之外的长线进度域) | 非行为 → wr8 | -| `game/core/config_db.gd` | 19 表成员→3 容器+33 访问器归位+删 2 私 1+resolver 装配注入三表(K1′) | 非行为 → wr8 | -| `game/core/config_db_cross_validator.gd` | cross_validate 拆七编号块域+_check_cast_side(复用既有·修改) | 非行为 → wr2 | -| `game/core/config_db_resolver.gd` | 拆键收集/缺位标注/告警发射域(复用既有·修改——文件零搬移,键原位) | 非行为 → wr2 | -| `game/core/slot_store.gd` | **新增**——存档槽位文件域件(槽位挂载与模板/激活与建删/摘要窥视 10 公开,架构 :89) | 非行为 → wr6 | -| `game/core/meta_state_store.gd` | **新增**——存档内元进度数据读写唯一层(写口原语 13+读投影 6=19 公开,架构 :90) | 非行为 → wr6 | -| `game/core/save_manager.gd` | 槽位族/元进度族 45 方法收编出户+断点族/IO/迁移链留置+读盘域提取+状态分家(K2′) | 非行为 → wr6 | -| `game/core/meta_progression.gd` | 纯转发退役 2+内联 3+并组 3+私 3+留置 20+meta_state 成员(K3′) | 非行为 → wr7 | -| `game/core/board_generator.gd` | 拆 params 快照/布雷/single-subset 算子域+_finalize 删 _db 参(复用既有·修改) | 非行为 → wr3 | -| `game/core/node_map_generator.gd` | validate_output 拆六阶段+check_params 两分+构建域拆分(复用既有·修改) | 非行为 → wr3 | -| `game/core/effect_engine.gd` | rebuild 三装载域+_cond_ok 四算子域+validate_trigger_row 两键域+bucket_of elif 收口(复用既有·修改) | 非行为 → wr4 | -| `game/core/status_container.gd` | apply_effect 公共尾部收口+_new_instance 打包 5 参(复用既有·修改) | 非行为 → wr5 | -| `game/core/treasure_items.gd` | validate_use 拆空间解析/预读窗口域(复用既有·修改) | 非行为 → wr5 | -| `game/data/schemas/adventure_quota_segment.gd` | **新增**——令牌配额段(curio_quota_* 13 @export;嵌套段单 .tres 保持) | 非行为 → wr9 | -| `game/data/schemas/adventure_value_segment.gd` | **新增**——令牌件值段(curio_value_* 13 @export) | 非行为 → wr9 | -| `game/data/schemas/adventure_cap_segment.gd` | **新增**——已拿上限段(curio_cap_* 9 @export) | 非行为 → wr9 | -| `game/data/schemas/adventure_table.gd`+`game/data/tables/adventure.tres` | 36 列族槽拆 3 段件+.tres 等值迁移+访问器改读段+knob 9 留置(K4′) | 非行为 → wr9 | -| `game/core/action_economy.gd` | 删死存储+派生合并+last_round_end 属性→方法(K5) | 非行为 → wr10 | -| `game/core/reward_economy.gd` | roll_board 拆规范化域+_skewed_cell_rows 两域(复用既有·修改) | 非行为 → wr10 | -| `game/core/minesweeper_rules.gd` | _do_dig 拆连锁揭示域(复用既有·修改) | 非行为 → wr10 | -| `game/core/unit_container.gd` | spawn 签名束化(10→1 参 req 束)+体内拆英雄/行集两域(K6′) | 非行为 → wr11 | -| `game/core/attunement.gd`/`adventure_runner.gd` 等 core 消费面 | save 族/`db.<表>` 访问点改址(复用既有·修改) | 非行为 → wr6/wr7/wr8 | -| `game/presentation/`(main/hud_presenter/camp_shop_presenter/save_select_overlay/treasure_interact_controller 等) | 纯转发退役直连+槽位族/`db.<表>` 改址(复用既有·修改) | 非行为 → wr6/wr7/wr8 | -| `game/tests/`…+`game/probe/`…+`game/sim/`…(约 50 文件) | 五组改址与测量面随动(复用既有·修改) | 断言面(改址非削弱)→ wr6/wr7/wr8/wr9/wr11 | - -### 落位与可复用性预检 - -- **新件 8 逐件「为什么不能复用既有」**: - - 域容器×3(`config_domain_*.gd`):config_db 本体即 God Class 本体(44 方法/25 成员)——「按域分组的类型化表持有」是新职责所有者,复用 config_db 内部结构=延续 God Class(D7 裁决的整管对象正是它);架构 v1.19 :88「类型化域容器属性(每域一张容器)」。落位 `game/core/`(持有结构与 owner ConfigDB 同层同域)。 - - `slot_store.gd`:save_manager 本体 God Class(52 方法)——槽位文件域唯一所有者是新职责切面,架构 :89 行登记;落位 `core/`(D3 存档域)。 - - `meta_state_store.gd`:save 与 meta 双 God Class 的共同病根=同一「存档内元进度数据域」摊在两文件——归一件即新职责本体,架构 :90 行登记;落位 `core/`。 - - adventure 段件×3:adventure_table 44 成员超阈本体——列族分组是新持有结构,复用=维持 44 列平铺;形态同 settlement_table 拆段既裁(嵌套段单 .tres 保持);落位 `game/data/schemas/`(表 schema 同层)。 -- **唯一面**:新件类名全库 grep 零同名(ConfigDomainCombat/Run/Crossrun、SlotStore、MetaStateStore、AdventureQuota/Value/CapSegment——修订会话 grep 确认零命中);既有文件内新增私有函数只落其所属文件,不抽共享骨架为既裁(D2);跨文件同名私有方法(多个 schema 各自的 `_validate_row`)属 GDScript 类作用域私有,互不冲突,grep 全库名确认盘上无第二处同职责实现。 -- **分层与交互面**:新件全部构造注入/组装持有,零裸引用 autoload(S5 不触);域容器/段件不 load 不 preload(S3 不触);新件零随机(S1/S2 不触);SlotStore/MetaStateStore→save_manager 单向依赖(S6 反向引用面不触——零信号零订阅);resolve 委托经装配段注入(resolver 文件与键零搬移——契约 3)。Core 零 UI 不破(全套件 headless 可跑)。 -- **改址五组计数**(§3.5 实查,T0 复核):①`db.<表>` 成员直读 537 处→`db.<容器>.<表>`;②config_db 访问器调用 264 处→表类直连/归位新名(映射表见 K1′);③save 槽位族 ≈110 处→`save.slots.`;④save/meta 元进度族 ≈340 处→`save.meta_state.`(读面部分随投影改形);⑤meta 纯转发退役/并组 ≈60 处+spawn 调用点 10 处+K5 一处。合计 ≈1330 处——改址一律符号级 grep 全域后机械替换+逐文件复核(残余人工核),断言语义逐条保持(契约 2)。 -- **K1′–K6′ 逐项**(公开面收敛清单,契约 5 载体——每项改法、映射与消费方影响面): - - **K1′ config_db(44→8、25→9)**:①19 表成员收进三容器——`combat`(board_gen/variation/status_effects/enemy/skill/hero/settlement)/`run`(level/difficulty/level_gen_params/reward/adventure/action_economy/shop)/`crossrun`(meta/meta_tree/treasure_items/feats/forge),分组判据=消费方域归属(战斗编排域 7/冒险 runner 域 7/跨局元进度域 5);ConfigDB 类变量余 is_ready+_diagnostics+_resolver+_validator+_reload_gate+_fatal_flag+3 容器=9。②33 访问器归位映射(改址映射表,命名避开表类既有成员名——routes 属性在册故 forge_routes()→ForgeTable.route_rows()、shop_products()→product_rows() 等):溶解 16(db.feat_row→db.crossrun.feats.row_by_id、db.tree_node→db.crossrun.meta_tree.row_by_id、db.status_effect_row→db.combat.status_effects.row_by_id、db.level_row→db.run.level.row_by_level_index、db.level_gen_params_row→db.run.level_gen_params.row_by_level_index、db.level_count→db.run.level.level_count、db.treasure_item_row→db.crossrun.treasure_items.row_by_id、db.treasure_transitional_rows/attunement_rows→同名表方法、db.skill_row→db.combat.skill.row_by_id、db.shop_price_a/price_b→db.run.shop.price_a/price_b 属性、db.forge_default_attack_type/armor_type→db.crossrun.forge.default_attack_type/armor_type 属性);迁移 14(db.shop_gp_drop_row→db.run.shop.gp_drop_row、shop_level_gp_bonus→level_gp_bonus_at、shop_price_level_bonus→price_level_bonus_at、shop_product_row→product_row、shop_pool_row→pool_row、shop_pool_rows→pool_rows、db.meta_boss_keystone_row→db.crossrun.meta.boss_keystone_row、db.meta_attune_refresh_row→db.crossrun.meta.attune_refresh_row、db.forge_route→db.crossrun.forge.route、db.forge_armor_route_by_type→db.crossrun.forge.armor_route_by_type、db.variant_pool→db.combat.variation.variant_pool、db.global_variant_row→db.combat.variation.global_variant_row);委托 3(db.resolve_board_gen→db.combat.board_gen.resolve_row、db.resolve_enemy_rowset→db.combat.enemy.resolve_rowset、db.resolve_difficulty_modifiers→db.run.difficulty.resolve_modifiers——resolver 实例由 load_tables 装配段注入三表)。③删 meta_conversion_row(生产零;测试 3 处改直扫 `db.crossrun.meta.conversion` 行集同判据)+删 forge_weapon_route_by_type(生产零;forge_table_test 2 处改扫 route_rows() 同判据)。④私 validate_skill_pool_links→_validate_skill_pool_links(测试 2 文件 9 处改 _ 前缀;cross_validator 自有公开同名方法不动)。⑤空表护栏语义:溶解面原 null-guard 仅覆盖「表未加载」态——生产消费全部在 load_tables 成功后(D6 实查),加载期护栏由 is_ready 门承担, ForgeTable 缺省轴语义与 schema 字段默认值同口径(normal/light)零行为变化。 - - **K2′ save_manager 拆件(52→7)**:①SlotStore 收编槽位族 10(attach_path/attach_slot_template/slot_path/active_slot/has_write_target/activate_slot/create_slot/delete_slot/peek_slot_summary/peek_summary_at),槽位态随迁(_slot_template/_path/_active_slot),save_manager 留 _data/_migrations/_read_only+slots/meta_state 两组装成员=类变量 5;peek 的只读推演内核 _peek_summary_at(键在案)留 save_manager 原位,SlotStore 两 peek 方法经槽路径派生委托(迁移链/规整归 IO 域)。②MetaStateStore 收编元进度族 35——**公开面 19=写口原语 13**(spend_keystone/unlock_item/set_tree_level/set_fork_side/set_forge_route_level/add_forge_unlock/set_forge_weapon/set_forge_armor/set_attunement_equipped/set_attune_refresh_level/add_vision_used/apply_adventure_summary/mark_first_adventure_done)**+读投影 6**(keystone_balance()、item_unlocked(id)、tree_state()→{nodes, fork_sides}、forge_state()→{levels, unlocked, weapon, armor}、attune_state()→{equipped, refresh_level}、career_state()→{clear_counts, boss_first_kill, boss_kill_count, adventure_total, adventure_cleared, vision_used, recent_summaries, first_adventure_done}——读投影即架构 :90「只读投影」形态,值拷贝出户 duplicate 纪律随迁);add_keystone 私有化 _add_keystone(生产零、测量 21 处改 _ 前缀——K2 同法)。③save_manager 留置 7 公开:load_from_disk/write_to_disk/register_migration+断点族 4;读盘域提取 `func _load_parsed(f: FileAccess) -> bool`+`func _peek_migrated(parsed: Variant) -> Variant`(:320-355/:175-209 两函数与迁移循环同构可提——corrupt_fallback 调用点随段迁移,副作用序逐字)。④跨件协作:两 store 持 save 注入引用,建/删/激活的数据重置与读写盘经 save 内部 _ 前缀协作家族(_reset_to_default/_load_parsed/_rename_overwrite 等),store 零 _data 副本零缓存(load 整体换新不陈旧);激活失败回退四态(路径/激活号/禁写位/数据)跨件原子性由现役 save_slot_isolation 断言面承载。⑤消费方直连:`save.slots.`/`save.meta_state.`(存档 UI/营地树 UI/锻造 UI/调试面);组合根句柄面零新增(契约 6)。 - - **K3′ meta_progression(31→20,封闭面定稿)**:纯转发退役 2(keystone_balance/is_item_unlocked——消费方改 `meta.meta_state.` 直连);内联 3(forge_weapon_atk_bonus/forge_armor_ac_bonus/tree_stat_flat 收编进 hero_override 单调用点——输出逐字等价);私 3(tree_spent_total/tree_gate_text〔测试 1 文件 2 处〕/forge_route_unlocked〔测试 1 文件 7 处〕改 _ 前缀);并组 3 组(tree_camp_status()→{rows, fork_groups}、hero_type_axes()→{attack, armor}、forge_select(kind, route_id)——camp/main 与测试改址 ≈10 处);留置公开 20=buy_treasure_unlock/refresh_treasure_unlocks/treasure_shop_status/forge_buy_level/forge_buy_unlock/forge_select/hero_type_axes/forge_shop_status/settle_adventure/hero_override/tree_can_buy〔v1.19 :126 对外暴露列在册——留公开,测试零改址〕/tree_buy/tree_toggle_fork/tree_buy_fork/tree_rule_keys/tree_camp_status/toggle_attunement/attune_camp_status/attune_refresh_charges/buy_attune_refresh;补公开成员 `meta_state`(_ready 装配)。写口唯一性保持:全部购买/切换/装配写路径仍只经本类编排(扣币 spend_keystone+域写原语+write_to_disk 时序归本类门面)。 - - **K4′ adventure_table 拆段(44→12)**:36 个列族标量槽拆 3 段件——`AdventureQuotaSegment`(curio_quota_* 13)/`AdventureValueSegment`(curio_value_* 13)/`AdventureCapSegment`(curio_cap_* 9),段内 @export 槽名逐字不动;宿主留 3 段成员+9 knob=12 ≤ 15 ✓(knob 留置=生产直读零改址);curio_quota(kind, tier)/curio_value(kind, tier)/curio_cap(kind) 三访问器签名与返回语义逐字不变(内部改读段成员;未列组合 = 0/缺省 99 语义保持);validate() 域判据经访问器读数不变(现役文案逐字);`adventure.tres` 等值迁移(36 在册值逐槽照抄入嵌套段 sub_resource、单 .tres 保持、缺省槽保持缺省语义);测试改址 4 处(pool_case_d_test.gd:164/165/190 直读写→段路径、adventure_feats_test.gd:206 直读→段路径——断言语义不变)。改后宿主类变量 12+段件 13/13/9 全在阈。 - - **K5 action_economy(18→15)**:删 `_next_round_mode` 死存储(:36 声明+:219 死写;`notify_settlement_done` 形参保留签名不变);`_ap_exhausted_last` 删除、`ap_exhausted_last_round()` 改派生读 `_last_round_end.get("path_tag", "") == "ap_exhausted"`(同源同刻等值——:274/:275 实查依据);`last_round_end` 属性→方法 `func last_round_end() -> Dictionary`(消费方仅 minesweeper_rules.gd:495 一处改方法调用)。 - - **K6′ unit_container(spawn 参数 10→1)**:签名改 `func spawn(req: Dictionary) -> bool`——束键封闭词表:必载 level_index/node_depth/hero_hp,可选 unit_count_overrides=[]/enemy_atk_overrides=[]/hero_atk_override=-1/hero_max_hp_override=-1/hero_attack_type=""/hero_armor_type=""/row_kind="battle"(缺省语义与现行形参缺省逐字同值);体内拆分照旧(`_spawn_hero_unit`/`_spawn_rowset` 两私有域)。调用点改址 11 处 7 文件(battle_orchestrator 1〔按卡①合回后形态〕+测试 10——束字面量构造,断言语义不变)。 - -### T0 事实坐实+改前读数采集(≈0.3d) - -- [ ] 复核 §3 全部 file:line(**按迭代 40 卡①/波 7 合回后 master 重锚**——spawn 调用点、board_generator/reward_economy 两 `_fatal`、卡③/迭代 39 触碰行);跑 `python tools/gdstyle_gate.py` 记录改前读数(在案键计数、NEW/WORSENED 判定)。可核查结果:改前读数表进实现报告素材。 -- [ ] 留档行为等价对拍基线:data_config 八套件与生成器 determinism 断言记录改前全绿读数;坏表夹具错误清单留档;**save 断言面套件名与断言数留档**(save_manager_domain/save_slot_isolation/save_slot_summary/save_boot_no_activate/breakpoint_resume/save_rng_roundtrip 等——wr6 逐位等价载体)。可核查结果:改前基线读数在案。 -- [ ] 五组改址计数复核(§3.5 五组 grep 读数逐组重跑留档——机械替换的完备性依据)。可核查结果:改址计数表在案。 -- [ ] 核实窄确认载体:单元面直跑形态(`--headless --path . --script res://tests/run_all.gd`)与单套件过滤机制。可核查结果:T1–T9 验证步骤的命令形态定稿。 - -### T1 数据校验族·大表组(5 文件 17 键,≈0.7d) - -- [ ] meta_tree_table:validate 拆 `func _validate_row(row: Dictionary, seen: Dictionary, fork_seen: Dictionary) -> Array`(行内全判据,fork_seen 引用传递)+`func _validate_requires_dangling(rows: Array, seen: Dictionary) -> Array`+`func _validate_requires_level(rows: Array, seen: Dictionary) -> Array`(requires 与 requires_level 两尾段分离);validate 本体留空表护栏+行循环 append_array+彩蛋计数尾段。可核查结果:错误追加序与改前逐字等价(现役 meta_progression_forge_test/table_structure_guard 断言绿)。 -- [ ] treasure_item_table:validate 拆 `func _validate_row_head(row: Dictionary, iid: String) -> Array`(:76-107 display_name→form 段)+`func _validate_row_active(row: Dictionary, iid: String) -> Array`(:111-141 活行段,kind_seen 内建)+`func _validate_row_attunement(row: Dictionary, iid: String, kind_seen: Dictionary) -> Array`(:142-205 同调段);validate 本体留空表护栏+seen/dup+三域顺序调用(retired/deferred continue 位置逐字)。可核查结果:treasure_target_violation_test/table_structure_guard/config_db_test 秘宝段全绿,EffectEngine.validate_trigger_row 调用点零变化。 -- [ ] enemy_table:validate 拆 `func _validate_row_core(row: Dictionary) -> Array`(:52-88 进度键/枚举/值域段)+`func _validate_row_pool(row: Dictionary, eid: String) -> Array`(:90-116 池模板段)+`func _validate_rowset_order(rowset_key: String, last_rowset_key: String, closed_rowset: Dictionary, L: int, rk: String, band: int) -> Array`(:129-138 行序纪律段);validate 本体留 seen/dup、行序状态机、锚行尾段。可核查结果:现役敌人表断言面(config_db_test/round_flow_skill_pool_test 前置)全绿。 -- [ ] forge_table:validate 拆 `func _validate_route_row(row: Dictionary, kind_by_id: Dictionary) -> Array`(:47-106 行段)+`func _validate_initial_coverage(routes: Array) -> Array`(:107-125 初始持有覆盖+默认轴交叉尾段)。可核查结果:forge_table_test 全绿(含 13 处行级判据)。 -- [ ] reward_table:validate 拆 `func _validate_row(row: Dictionary, cell_dict: Dictionary, tallies: Dictionary) -> Array`(:25-101 行段;tallies={cell_positive_live, clear_value_ok} 引用传递)+validate 本体留三尾段(字典完整性/池护栏/clear_default)。可核查结果:reward_dangling_treasure_test/table_structure_guard/seal_polarity_test 前置全绿。 -- [ ] 验证步骤:数据面窄确认(data_config+受涉 core 套件直跑全绿)+`D:/code/gdstyle/gdstyle.exe` 直扫五文件——17 键全部消失。 - -### T2 数据校验族·小表组+跨表校验器+解析器(8 文件 23 键,≈0.7d) - -- [ ] board_gen_table:validate 拆 `func _validate_row(row: Dictionary, levels: Dictionary, anchor_ok: Dictionary) -> Array`;validate 本体留空表护栏+锚行尾段。 -- [ ] level_gen_params:validate 拆 `func _validate_row(row: Dictionary, seen: Dictionary, layers_by_level: Dictionary) -> Array`;本体留层深递进尾段。 -- [ ] meta_table:validate 拆 `func _validate_boss_keystone() -> Array`+`func _validate_conversion() -> Array`+`func _validate_attune_refresh() -> Array`;本体留三行族空护栏+顺序拼接。 -- [ ] skill_table:validate 拆 `func _validate_basic_row(sid: String, row: Dictionary, cd: int) -> Array`/`func _validate_damage_row(...)`/`func _validate_buff_row(...)`/`func _validate_debuff_row(...)`(同签名形态);本体留 seen/type 分派+普攻存在性+pity 尾段。 -- [ ] variation_table:validate 拆 `func _validate_row(row: Dictionary, seen: Dictionary) -> Array`;本体留互锁段(或并入 _validate_row——以分支 ≤8 为准)。 -- [ ] status_effect_table:validate 拆 `func _validate_magnitude_domain(row: Dictionary, eid: String) -> Array`(percent/flat/ac 三段量纲域)。 -- [ ] config_db_cross_validator:cross_validate 拆七编号块域——`func _cv_reward_dangling(st, rt, push_diag: Callable) -> void`/`func _cv_reward_treasure(st, rt, loaded: Dictionary, push_diag: Callable) -> void`/`func _cv_poolmap(st_tab, effect_ids: Dictionary, push_diag: Callable) -> void`/`func _cv_source_labels(st_tab, push_diag: Callable) -> void`/`func _cv_counter_closure(loaded: Dictionary, treasure_tab, feats_tab, push_diag: Callable) -> void`(①①b②③⑤⑥⑦对应;货架块 ⑥ 并入 _cv_reward_treasure 或独立 `_cv_shelf_pool`——以各件 ≤50 行/≤8 分支为准);validate_skill_pool_links 拆 `func _check_cast_side(skill_table: SkillTable, status_table: StatusEffectTable) -> Array`。 -- [ ] config_db_resolver:resolve_enemy_rowset 拆 `func _level_keys_of(rows: Array) -> Array[int]`+`func _band_keys_of(rows: Array, l_star: int, row_kind: String) -> Array[int]`+`func _band_rows(rows: Array, l_star: int, row_kind: String, d_star: int) -> Array[Dictionary]`(纯行扫描,告警发射序不变);_resolve_progress 拆 `func _depth_keys_of(rows: Array, l_star: int) -> Array[int]`+`func _missing_label(l_clamped: bool, d_clamped: bool, l_star: int, L: int, d_star: int, D: int) -> String`+`func _emit_missing_warning(table_id: String, missing: String, l_star: int, d_star: int, L: int, D: int) -> void`(去重注册表语义逐字)。 -- [ ] 验证步骤:数据面窄确认全绿(config_db_fatal_oob/counter_prefix_fatal/level_gen_params_test/config_db_resolver_test/config_db_cross_validator_test 等)+直扫八文件——23 键全部消失。 - -### T3 生成器族(2 文件 17 键,≈0.7d) - -- [ ] board_generator:拆 `func _board_params(row: Dictionary, L: int, D: int) -> Dictionary`(:26-39 快照段——零 RNG);`func _populate_mines(b: BoardData, params: Dictionary, rng_stream: RandomNumberGenerator) -> int`(:93-127 布雷+剃雷段——Fisher-Yates 取号段整体搬迁,返回 ring_removed);`func _apply_single_rules(constraints: Array, r: Dictionary, known_mines: Dictionary) -> bool`+`func _derived_constraints(constraints: Array) -> Array`+`func _apply_derived_rules(derived: Array, r: Dictionary, known_mines: Dictionary) -> bool`(measure_inferability 的 single/subset 算子域——返回 changed,主循环序不变);`_finalize` 删 `_db` 形参(:336,调用点 :79 一处随动)。可核查结果:board_generator_test/board_gen_reward_test 全绿+同种子改前改后逐位一致断言绿(RNG 消费序冻结——契约 1②)。 -- [ ] node_map_generator:validate_output 拆六阶段域——`func _vo_node_fields(nodes: Array, errs: Array) -> Dictionary`(字段/dup/类型/深度,返回 {by_id, indeg, ok})+`func _vo_edges(nodes: Array, by_id: Dictionary, indeg: Dictionary, errs: Array) -> bool`+`func _vo_flow_facts(nodes: Array, indeg: Dictionary, errs: Array) -> Dictionary`(entries/terminals/Boss 终点判据)+`func _vo_depth_reach(nodes: Array, by_id: Dictionary, entries: Array, terminals: Array, errs: Array) -> bool`(最长路径+可达性)+`func _vo_shop_rules(nodes: Array, by_id: Dictionary, entries: Array, terminals: Array, errs: Array) -> bool`(摆放约束①+_all_paths_one_shop+_check_fork_rules)+`func _vo_count_rules(nodes: Array, params: Dictionary, by_id: Dictionary, entries: Array, terminals: Array, errs: Array) -> void`(多终点深度互异+宽度上限+参数档对照)——validate_output 本体=空图护栏+六阶段顺序调用+阶段间早退合并(返回 ≤6);check_params 拆 `func _cp_domain(params: Dictionary) -> Array`+`func _cp_structural(params: Dictionary) -> Array`;_build 拆 `func _build_region(rg: RandomNumberGenerator, r: int, e: int, t: int, prevs: Array) -> void`(区域段——_build 本体零 RNG,拆分自由);_add_forks 拆 `func _collect_fork_anchors(L: int, t: int, e: int) -> Array`(锚收集——零 RNG,shuffle 与扩岔循环留本体保取号序);_assign_types 拆 `func _fill_ratios(rg: RandomNumberGenerator) -> void`(e==1 配比填余段——shuffle+randf 取号序整体搬迁)+`func _fix_detour_heads() -> void`(岔口修型段——零 RNG);_check_fork_rules 拆 `func _fork_signature(outs: Array, by_id: Dictionary) -> Array`+`func _fork_has_unique(comps: Array, i: int) -> bool`(嵌套 5→≤4)。可核查结果:node_map_generator_test/node_map_growth_test/node_map_determinism_test 全绿+同参数同种子逐位一致(纯流取号序冻结)。 -- [ ] 验证步骤:核心面窄确认全绿+直扫两文件——17 键全部消失。 - -### T4 效果引擎(8 键,≈0.35d) - -- [ ] rebuild 拆 `func _load_feat_triggers(feat_ids: Array) -> void`+`func _load_attune_triggers(item_ids: Array) -> void`+`func _push_tree_rules(tree_rules: Array) -> void`——**调用序=装载声明序 feats→treasure→tree 逐字**(契约 1④),sense_sharp/guard 双行 push 序随段整体搬迁。 -- [ ] _cond_ok 拆四算子域:`func _cmp_ok(op: String, actual: Variant, val: Variant) -> bool`(eq..lte 六比较)+`func _ends_with_ok(actual: Variant, val: Variant) -> bool`+`func _has_ok(c: Dictionary, actual: Variant) -> bool`+`func _counter_op_ok(ctx: EffectContext, c: Dictionary, op: String, actual: Variant) -> bool`(mod_zero/mod_eq/advantageous/gte_ref/lt_ref);_cond_ok 本体=fact/op/val 取值+分派+未知算子 assert(false)+return false(返回 ≤6、嵌套 ≤4)。语义逐字:判定结果与 unknown-op 致命路径零变化。 -- [ ] bucket_of 的 elif-after-return 收口(:207-214)→ 独立 if 序或 match——前缀判定序 round→lvl→adv→battle 缺省逐字(no-else-return 键消失)。 -- [ ] validate_trigger_row 拆 `func _vtr_when_keys(rid: String, tr: Dictionary, errs: Array) -> void`+`func _vtr_do_keys(rid: String, tr: Dictionary, row: Dictionary, errs: Array) -> void`——错误追加序逐字(:341-388 现序=trigger 键→on→when→do 键→kind→counter_id→value_from 双侧)。 -- [ ] 验证步骤:效果面窄确认全绿(effect_words_t1_test/tree_rules_v11_test/counter_prefix_fatal_test/adventure_feats_test/round_flow_skill_pool_test)+直扫——8 键全部消失。 - -### T5 存档域拆件——SlotStore/MetaStateStore 建件收编+save_manager 瘦身(≈1.5d) - -- [ ] SlotStore 建件(K2′①):槽位族 10 方法+槽位态三成员随迁;`attach_path`/`attach_slot_template`/`activate_slot`/`create_slot` 的数据侧协作经 save 内部 _ 前缀协作家族(重置默认态/加载/写盘/回退四态),`delete_slot` 的 _remove_file 与 `_migrate_legacy_save` 的 `_copy_file` 随迁(槽文件域原语),`_rename_overwrite` 留 save_manager(IO 原语单点)经注入引用调用;save_manager._ready 旧单档迁移改调 slots 侧入口(幂等判据逐字)。可核查结果:save_boot_no_activate/save_slot_isolation/save_slot_summary 直跑全绿+grep 槽位族 10 名在 save_manager 零命中。 -- [ ] MetaStateStore 建件(K2′②):元进度族 35 收编为公开 19(写口原语 13+读投影 6)+_add_keystone 私有——投影按 K2′② 键构成逐字落地,值拷贝出户随迁;零 _data 副本零缓存。可核查结果:save_manager_domain/save_rng_roundtrip 直跑全绿+gdstyle 直扫两新件公开方法/类变量零 NEW。 -- [ ] save_manager 瘦身:断点族 4+load_from_disk/write_to_disk/register_migration 留置;读盘域提取 `func _load_parsed(f: FileAccess) -> bool`(:320-355 解析/版本/迁移/规整段——corrupt_fallback 调用点随段迁移,副作用序逐字)+`func _peek_migrated(parsed: Variant) -> Variant`(迁移循环提取,失败返回 null=现「返回未填充 out」逐字);load_from_disk 本体留文件存在分支+corrupt 委托(返回 ≤6);_init 组装 slots/meta_state 两成员。可核查结果:直扫 save_manager 公开方法 52→7、_peek_summary_at 返回 7→≤6、load_from_disk 返回 8→≤6。 -- [ ] 存档族改址(≈450 处):槽位族 →`save.slots.`(≈110 处——呈现 ≈12/探针 ≈17/测试 ≈77);元进度族 →`save.meta_state.`(≈340 处——读面 tree_level/forge_route_level/clear_count 等随投影改形为 `.tree_state().nodes.get(...)` 等同值读);断点族零改址。可核查结果:改址后 save 断言面全套直跑全绿(T0 留档套件清单)+grep 五组前缀零漏改。 -- [ ] 验证步骤:存档面窄确认全绿(save_manager_domain/save_slot_isolation/save_slot_summary/save_boot_no_activate/breakpoint_resume/save_rng_roundtrip+integration 三件+probe 直跑)+直扫三文件——save_manager 52→7、新件零 NEW。 - -### T6 meta_progression 瘦身+status_container/treasure_items 拆分(≈0.7d) - -- [ ] meta_progression 瘦身(K3′):纯转发退役 2+内联 3(hero_override 输出逐字)+私 3(含 forge_route_unlocked)+并组 3 组+`meta_state` 成员装配;本类数据读写全部改经 meta_state(读投影同值改形)。可核查结果:tree_requires_level_test/meta_progression_forge_test 改址后全绿+grep 纯转发零残留(`save.keystone_balance`/`save.item_unlocked` 在本文件零命中)+直扫公开方法 31→20、tree_can_buy 返回键 ≤6。 -- [ ] 树购买真链验证:tree_buy→meta_state.set_tree_level→write_to_disk→重读读回的真链断言改址保持(tree_requires_level_test 购买/cap/门槛判据逐字)。可核查结果:真链断言绿。 -- [ ] status_container:apply_effect 按「三臂语义逐字+公共尾部收口」重构——守卫两 return 保留,independent/refresh/stack 三臂与未知 policy 告警保持现行为(independent 恒追加/refresh 命中改 R 未命中追加/stack 满层拒零写入·未满加层·未命中追加/未知 policy 告警拒),追加尾部收口单点;`_new_instance` 签名改 `func _new_instance(effect_id: String, layers: int, dur: int, source: Dictionary, snap: Dictionary) -> Dictionary`(7→5 参,snap={m, unit, display})。可核查结果:seal_polarity/roll_multiplier/damage_controller/system_contracts 四套件全绿(满层拒绝/空刷新/快照语义现役断言面)。 -- [ ] treasure_items:validate_use 拆 `func _spatial_reject_reason(row: Dictionary, kinds: Array, target: Vector2i, board_size: Vector2i) -> String`+`func _window_cells(target: Vector2i, board_size: Vector2i) -> Array`+`func _preview_window_dead(resolved: Array, cell_unrevealed_cb: Callable) -> bool`。可核查结果:treasure_items_test 全绿。 -- [ ] 验证步骤:受涉套件窄确认全绿+直扫三文件——8 键消失+meta_progression 公开方法 31→20 读数记录。 - -### T7 config_db 归位+域容器(≈1.4d) - -- [ ] 三容器建件(K1′①):ConfigDomainCombat/Run/Crossrun(Resource、类型化成员、零方法)+config_db 三容器成员替换 19 表成员+load_tables 装配段改写(loaded→容器成员)。可核查结果:三新件直扫类变量 7/7/5 零 NEW。 -- [ ] 访问器归位(K1′②):溶解 16+迁移 14+委托 3——迁移面按映射表入 shop_table(7 方法)/meta_table(2)/forge_table(3)/variation_table(2);三表收 resolver 注入成员(类变量 1→2);命名避开表类既有成员名(K1′② 映射表——routes 属性在册故 route_rows() 等)。可核查结果:受涉表类直扫公开方法/类变量零 NEW+resolver 文件零 diff(键原位核验)。 -- [ ] 删 2+私 1(K1′③④):meta_conversion_row/forge_weapon_route_by_type 删除+validate_skill_pool_links 私有化。可核查结果:grep 两删除名零命中。 -- [ ] 全域改址(≈800 处):`db.<表>`→`db.<容器>.<表>`(537)+访问器→表类直连/归位新名(264)——按映射表机械替换+逐文件复核;诊断/门控保留核验:push_diag/is_fatal/diagnostics 族/reset_diagnostics/set_reload_gate/reload 与 EC8 门语义逐字(reload_gated 拒绝路径现役断言)。可核查结果:data_config 八套件+core 直引 12 文件改址后全绿(行数据逐字断言=表值等价载体)+config_db_fatal_oob/level_shop_economy/forge_table_test/table_structure_guard/config_db_test 全绿+直扫 config_db 44→8、25→9。 -- [ ] 验证步骤:数据面+核心面窄确认全绿+`db.combat.`/`db.run.`/`db.crossrun.` 前缀 grep 抽检(每容器 ≥5 文件零旧形态残留)。 - -### T8 adventure_table 拆段+.tres 等值迁移(≈0.4d) - -- [ ] 三段件建件(K4′):AdventureQuotaSegment/Value/CapSegment(段内槽名逐字)+宿主 3 段成员+访问器改读段(签名与返回语义逐字)+validate() 判据经访问器读数不变。可核查结果:段件直扫类变量 13/13/9 零 NEW+宿主 44→12。 -- [ ] adventure.tres 等值迁移:36 在册标量值逐槽照抄入嵌套段 sub_resource(单 .tres 保持);缺省槽不写入=缺省语义保持。可核查结果:deck_total()=102 结构锚断言绿+adventure_feats/pool_case_d/feat_vouchers/table_structure_guard 全绿+表值逐字对拍(改前改后 curio_quota/curio_value/curio_cap 全 13×4+13×4+9 组合读数零差异——T0 留档读数)。 -- [ ] 测试改址 4 处(pool_case_d_test :164/:165/:190 段路径读写、adventure_feats_test :206 段路径读)。可核查结果:改址断言绿。 - -### T9 散条组——action_economy/reward_economy/minesweeper_rules/unit_container spawn 束(≈0.6d) - -- [ ] action_economy:K5 三件(删 _next_round_mode 死存储+_ap_exhausted_last 派生合并+last_round_end 属性→方法)+minesweeper_rules.gd:495 改址一处。可核查结果:minesweeper_rules_test/round_flow_skill_pool_test 的 round_end 载荷断言全绿(ap_exhausted_last_round 派生读等值——一滴不剩 when 面现役断言)+直扫类变量 18→15。 -- [ ] reward_economy:拆 `func _normalize_eligible(eligible: Array) -> Array`(:42-52 去重/排序段——开流前,零 RNG 风险)+`func _skew_amounts(down: Array, up: Array) -> Array`(两次 _largest_remainder_split 调用段)+`func _apply_skew(base: Array, down: Array, up: Array, drops: Array, gains: Array) -> Array`(权重装配段——守恒 assert 随段迁移)。可核查结果:board_gen_reward_test/seal_polarity_test 前置全绿+roll_board 取号序冻结(同种子身份批/清图批尾/区间行逐位一致——现役 reward_roll 流断言)。 -- [ ] minesweeper_rules:拆 `func _reveal_chain(c: Vector2i, reveal_order: Array, was_sealed: bool) -> void`(:301-329 揭示循环段——cell_revealed 发射序即链序,整体搬迁)。可核查结果:minesweeper_rules_test 全绿(cell_revealed 事件序现役断言)。 -- [ ] unit_container spawn 束化(K6′):签名改 `func spawn(req: Dictionary) -> bool`(束键封闭词表逐字)+体内拆 `func _spawn_hero_unit(hero_hp: int, atk_override: int, max_hp_override: int, hero_attack_type: String, hero_armor_type: String) -> bool`+`func _spawn_rowset(rowset: Array, unit_count_overrides: Array, enemy_atk_overrides: Array, hp_mult: float, atk_mult: float) -> bool`(英雄段/行集段随分;束键解包留本体)。调用点改址 11 处 7 文件(battle_orchestrator 调用点按卡①合回后形态+测试 10 处束字面量构造)。可核查结果:damage_controller/roll_multiplier/round_flow_skill_pool/skill_unlock/level_shop_economy 前置全绿+grep `\.spawn(` 调用点全束形零旧签名残留+直扫 spawn 参数键消失(长度/局部两键随体内拆分消失)。 -- [ ] 验证步骤:受涉套件窄确认全绿+直扫四文件——上述键全部消失。 - -### T10 读数对拍+撤销证明+产出物落位卡(≈0.55d,末卡) - -- [ ] 改后 `python tools/gdstyle_gate.py` 对拍:基线外 NEW=0(含 8 新件——新件键账表逐件核验)、恶化=0、在案键计数较改前下降 86(86 键消失清单写进实现报告,零残留申报)。可核查结果:读数对拍表在案。 -- [ ] 逐 wr 行撤销证明(§8.1 末列——回退对应文件 hunk→gdstyle 直扫该键重现或改址断言红→还原复绿),记录进实现报告。 -- [ ] 写齐三份产出物(实现报告〔86 键清偿清单+新件键账表+五组改址计数实绩+读数对拍表+实机目检总清单——启动冒烟实机一屏登记(行为零变化批,登记不阻塞)〕/代拍板追认单/反哺点清单〔§6 逐条落点〕)。 -- [ ] 合并前置:独立验收审计(§8.3)逐行「通过」。 - -**估时合计 ≈7.9d**(区间 7.4–8.4:T0 0.3/T1 0.7/T2 0.7/T3 0.7/T4 0.35/T5 1.5/T6 0.7/T7 1.4/T8 0.4/T9 0.6/T10 0.55;扩容主因=K1′ 改址 ≈800 处〔T7〕、K2′ 拆件与改址 ≈450 处〔T5〕、K3′ 瘦身与投影改形〔T6〕、K4′ 拆段与 .tres 迁移〔T8〕、K6′ 束化〔T9〕——五组改址合计 ≈1330 处,机械替换+逐文件复核计价)。 - -### T 卡间接口 - -- **取用与先后**:T5 先于 T6(meta 瘦身的读写面以 MetaStateStore 在位为前件);T1–T4/T7/T8/T9 各自文件域独立、零相互取用(T7 与 T9 同触 minesweeper_rules.gd :495 仅 K5 改址一处——同卡内先 T7 后 T9 或一次性完成);T10 取用各卡读数记录。 -- **产出**:T5 产出 SlotStore/MetaStateStore 公开面与投影键构成(K3′/反哺点③改写依据);T6 产出 meta 封闭面 20 清单与 tree_can_buy 公开在位凭据;T7 产出三容器成员分组与 K1′ 归位映射落地形(反哺点③依据);T8 产出段路径形态(反哺点②依据);T9 产出 spawn 束键词表(卡①/卡③ T0 对齐依据)。 - -## 8. 验证闸 - -### 8.1 改动—验收对照表 - -| 需求点 | 改动(文件:行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 撤销证明 | -|---|---|---|---|---|---| -| wr1 校验族大表组 17 键 | 五 schema validate 拆分 | data_config+core 受涉套件直跑全绿〔现役错误清单断言面=逐字等价载体〕+gdstyle 直扫五文件键消失 | 单元 | ConfigDb.load_tables 真实加载入口(套件经 _ready/load_tables 驱动) | 回退该文件 hunk→gdstyle 直扫该键重现→还原复绿 | -| wr2 校验族小表组+跨表+解析 23 键 | 八文件拆分 | 同上形态(八文件受涉套件)+直扫键消失 | 单元 | 同上 | 同上 | -| wr3 生成器族 17 键 | board 四域拆+_finalize 5 参+node 六阶段拆 | board_generator_test/board_gen_reward_test+node_map 三件全绿+同种子逐位一致(T0 基线对拍) | 单元+集成 | generate 真实调用(表驱动+rng_stream 注入)/generate(参数档, 种子) 纯函数入口 | 回退 hunk→同种子对拍失配或直扫键重现 | -| wr4 effect_engine 8 键 | 三装载域+四算子域+两键域+elif 收口 | effect_words_t1/tree_rules_v11/counter_prefix_fatal/adventure_feats/round_flow_skill_pool 全绿(装载序/词表/计数器面现役断言) | 单元 | rebuild→dispatch 真实战斗链 | 回退 hunk→直扫键重现 | -| wr5 save 读盘域+status/treasure 拆分 | _load_parsed/_peek_migrated 提取+apply_effect 收口+validate_use 拆三 | save_manager_domain/save_slot_summary/seal_polarity/roll_multiplier/damage_controller/system_contracts/treasure_items_test 全绿 | 单元 | autoload _ready+套件真实驱动 | 回退 hunk→直扫键重现 | -| wr6 存档域拆件 K2′ | SlotStore/MetaStateStore 建件+save 52→7+状态分家+改址 ≈450 | save 断言面全套直跑全绿(**存档读写逐位断言**=save_rng_roundtrip roundtrip 键集逐位+save_manager_domain 写读回等价,改址后判据逐字)+**原子写/无激活态拒写/高版本拒读/激活回退四态**现役断言改址保持+grep 槽位族/元进度族方法名在 save_manager 零命中+直扫新件零 NEW | 单元+探针 | SaveManagerCore autoload _ready 真实装配+套件直构实例经 save.slots/save.meta_state 真链驱动 | 回退 hunk→改址断言红(save.slots 成员不存在=脚本错误被闸③捕获)或直扫键重现 | -| wr7 meta_progression 瘦身 K3′ | 纯转发退役 2+内联 3+并组 3+私 3+留置 20 | tree_requires_level/meta_progression_forge 改址后全绿(**树购买真链断言**=tree_buy→set_tree_level→write_to_disk→重读读回真链)+hero_override 输出逐字断言绿+grep **纯转发零残留**(save.keystone_balance/save.item_unlocked 在本文件零命中)+直扫 31→20、tree_can_buy 返回键 ≤6 | 单元 | meta.tree_buy/forge_buy_level 真实购买链(camp 投影数据源同链) | 回退 hunk→改址断言红或直扫公开方法键回 31 | -| wr8 config_db 归位+域容器 K1′ | 3 容器建件+33 归位+删 2 私 1+改址 ≈800 | data_config 八套件+core 直引 12 文件改址后全绿(**行数据逐字断言**=表值读数等价载体)+**消费改址断言**(config_db_test/forge_table_test/level_shop_economy/table_structure_guard/config_db_resolver_test 全绿)+grep 两删除名零命中+reload/EC8 门保留断言绿+直扫 44→8、25→9、新件零 NEW | 静态+单元 | load_tables 真实加载入口+resolve_rowset 消费链(unit_container spawn 前置) | 回退 hunk→改址断言红(db.combat 成员不存在)或直扫键回 44/25 | -| wr9 adventure_table 拆段 K4′ | 3 段件+.tres 等值迁移+访问器改读段+4 处改址 | adventure_feats/pool_case_d/feat_vouchers/table_structure_guard 全绿+**deck_total()=102 结构锚+表值逐字**(T0 留档全组合读数零差异)+validate 绿+直扫 44→12、段件零 NEW | 单元 | 表加载→访问器读数真实链 | 回退 hunk(含 .tres)→改址断言红(段路径不存在)或直扫键回 44 | -| wr10 散条组 K5+reward/minesweeper 拆分 | action 删并+两文件域拆 | minesweeper_rules_test/round_flow_skill_pool round_end 载荷/reward_roll 流序全绿 | 单元 | 各系统真实调用链 | 回退 hunk→对应断言红(last_round_end() 方法不存在/取号序失配/事件序失配)或直扫键重现 | -| wr11 spawn 束化 K6′ | 签名 10→1+体内两域拆+调用点 11 处改址 | 前置五套件全绿+**调用点断言**(grep `\.spawn(` 全束形零旧签名残留)+直扫参数键消失 | 单元 | battle_orchestrator begin_battle 真实遭遇链 | 回退 hunk→调用点 grep 现旧形(断言红)或直扫键重现 | -| wr12 读数对拍+产出物 | T10 | 读数对拍表+三份产出物件核〔wr12〕 | — | — | 缺项红 | - -回归措辞:里程碑步(T 卡)出口跑一次全套闸(按本批改动域选档 `--code`);卡内修复只做出红最小单元的最窄确认;新增测试先行孤立验证再并入全套。本批零新增测试断言(现役断言面即验收载体;grep 形判据为静态在位核验,非新运行时断言)。 - -### 8.2 测试削弱申报 - -零(无断言删除、无阈值放宽、无扫描面缩小;全部测试改动=K1′–K6′ 列明的调用点改址与投影同值改形,断言语义与判据逐条保持——契约 2)。 - -### 8.3 独立验收审计 - -入口=未参与实现的会话或子代理;报告落 `reports/iter-验收审计-<日期>.md`;抽查重点=①错误清单逐字等价(任选三 schema 改前改后坏表对拍读数)②生成器同种子逐位一致记录③效果引擎装载序与词表零 diff(git diff 查 EVENTS/EFFECT_KINDS/FACTS/OPS 四常量)④归位映射抽检(每容器 ≥3 处行数据逐字+K1′ 溶解/迁移/委托三形态各 ≥2 处)⑤拆件抽检(save roundtrip 逐位读数+激活回退四态断言+纯转发零残留 grep 复跑)⑥拆段表值逐字(全组合读数对拍)⑦新件键账零 NEW(gdstyle 直扫 8 新件)⑧S13 基线未改(git diff 查 `tools/gdstyle_baseline.txt` 零变化)⑨改址抽检(五组各 ≥3 处断言语义等价)⑩撤销证明复现⑪拆分边界抽检(契约 7:新件/段件/拆分族职责语句逐件在案,抽 3 件核「单一变化原因+集体身份」两判据,凑计数袋形态即红)。未过不得合并。 - -## 9. 异常分级 - -- **L1(自救)**:行号漂移(T0 重锚自核);私有 helper 与投影内部实现的命名与注释措辞(投影键构成与公开签名不属此列);拆分域边界微调(各件 ≤阈值前提下)。 -- **L2(记录继续)**:五组改址中发现清单外调用点(同法改址+计数记录进实现报告);束键解包的等价实现细节;段件/容器成员的 @export 形态细节(类型化成员语义不变前提下)。 -- **L3(停机呈报)**:任何断言红且非测试问题;拆分后错误清单与改前不等价;RNG 取号序失配;存档读写逐位不等价或原子性语义漂移;归位后表读取语义漂移(空表护栏/缺省兜底);发现触碰 GDD/owner 契约的病根(停卡呈报,禁内联求裁);新件或留置面超阈(封闭面破坏——契约 3);K 清单外须动公开面的场景(实现段零裁断——退回上游);拆分边界无职责语句可陈述或凑计数袋形态(契约 7——停卡呈报走豁免/还债通道)。 - -## 10. 代拍板白名单(超清单必呈报) - -1. 私有 helper 的命名与注释措辞(语义不变前提下)。 -2. 拆分域边界的等价微调(各件 ≤阈值、错误序/RNG 序不变前提下)。 -3. 五组改址的等价调用写法(访问路径等价、断言语义不变前提下)。 -4. 归位方法在表类侧的等价命名微调(避开既有成员名、映射语义不变前提下)。 -5. 提交切分与 worktree 分支命名。 - -## 11. 待裁点(零待裁点) - -**零待裁点(2026-10-27 用户裁决记录:①config_db 彻底清零=归位+域容器 ②save/meta 彻底清零=SlotStore/MetaStateStore 拆件)**。随裁记录全四项:③adventure_table 类变量 44 拆子 Resource 段(形态同 settlement_table 拆段);④unit_container spawn 参数签名引用束化。裁决落点:v1.0 裁点 1 的案 B 走向=归位+域容器 Resource(非词典化形态,D7);v1.0 裁点 2 的案 B 走向=域对象拆件经设计段先行定稿(架构 v1.19 :88/:89/:90/:126 四行登记)后扩入本卡。开工门=U0+复核门(§12)。 - -## 12. 自审六查与复核记录 - -**自审六查(2026-10-27 修订会话,grilling 自检一轮合并执行——对抗审点逐条过并就地折入)**: -- ①规格覆盖:86 键逐文件→T1–T9(大表组/小表组/生成器/效果引擎/存档拆件/meta 瘦身/config_db 归位/拆段/散条与 spawn)→wr1–wr11,读数与产出物→T10/wr12;全清账目闭合(86=65 拆分+21 结构收敛;留置 8+归位 33+删 2+私 1=44、槽位 10+元进度 35+断点 4+IO 3=52、31−11+3=20);K1′–K6′ 公开面改动逐项有改法+映射+消费方影响面+封闭面预演值。**折入**:修订会话实查订正 v1.0 两处实查笔误——meta_progression 三件「内部零调用」实为 hero_override 单调用点(处置由删改内联、输出逐字)、adventure_table「37 个 @export」计法订正为 44(账目不变)。 -- ②步骤扫描:每步一动作一可核查结果(拆分步挂「受涉套件绿+直扫键消失」双结果;建件步挂「键账零 NEW+断言改址绿」双结果);无 TBD/酌情行;实现体零抄写(helper 只给签名与域边界)。 -- ③类型一致性:K1′ 归位映射表与 T7 步骤逐字一致;K2′ 两 store 公开面清单(13 写+6 投影/10 槽位)与 §3.5 预演值、T5 步骤逐字一致;K3′ 封闭面 20 清单与 T6 步骤逐字一致;K4′ 段件键名与宿主访问器签名逐字一致;K6′ 束键词表与 T9 步骤逐字一致;wr 行与 T 卡引用对得上;投影返回键构成在 K2′②/K3′ 两处表述同文。 -- ④审查焦点+改动覆盖:最可能坑到玩家的失败模式=①错误清单不等价(fail-fast 面变形)→ 现役 data_config 断言面逐字保留+审计①对拍;②RNG 取号序漂移 → 契约 1②+T3/T9 同种子对拍;③效果引擎装载序漂移 → 契约 1④+T4 调用序钉死+审计③四常量零 diff;④存档盘面语义漂移(原子写/回退/迁移链)→ 契约 1⑥+wr6 逐位与四态断言+审计⑤;⑤拆段 .tres 迁移值错位 → 等值迁移+deck_total=102+全组合读数对拍+审计⑥;⑥归位后空表护栏/缺省兜底漂移 → 契约 6 口径+K1′⑤ 注记+审计④。结构图中全部行为改动行=「非行为」并指到 wr 行——**查毕确认零行为改动、无未覆盖失败模式**。 -- ⑤篇幅比例:全文无函数体,helper 为签名+域边界;§3 现状表为键账载体非抄写;映射表为改址合同非代码罗列。 -- ⑥落位与复用:新件 8 逐件「为什么不能复用既有」有答(God Class 本体不可复用其内部结构——§7 预检)+架构 v1.19 行指针(:88/:89/:90+段件形态既裁);唯一面(新件类名 grep 零同名+跨文件同名私有方法类作用域不冲突)与分层面(零新跨层路径、零 autoload、S1–S6 逐项过)已答;K1′–K6′ 每项公开面改动可指到预检节条目;新件封闭面逐件给出与阈值的余量(19/20、10/20、7·7·5/15、13·13·9/15、留置 20/20——20/20 与 15/15 均循卡①「封闭面 15≤15」先例,架构 :126 对外暴露列即封闭依据)。 - -**grilling 自检一轮结论(写卡段内自检,独立复核门仍须在开工前由用户/独立会话执行)**:骨架成立——全清账目闭合、零待裁点、新件封闭面全部可达阈内、行为零变化契约族完备(含存档序列化第六款)。对抗审点七条全折入:①MetaStateStore 35 原语直收将出 NEW 键(35>20)→ 读投影 6+写原语 13=19 收敛(架构 :90「数据读写原语族+只读投影」即此形态,K2′②);②meta_progression 按 v1.0 K3 算法只到 24/25,到不了 20 → 并组 3 组+forge_route_unlocked 私有化补齐 20(消费面 grep 逐方法核验——生产零者才私);③tree_can_buy 按 v1.0 应私有、但 v1.19 :126 对外暴露列在册 → 留公开、测试 8 处零改址(随 K3′ 记录);④resolver 文件键函数禁搬移 → resolve 委托注入形态(文件零搬移、T2 照旧);⑤shop_table/forge_table 归位方法与既有属性同名冲突(routes/products 等)→ 映射表改名(gp_drop_row/route_rows/product_rows 等);⑥db.adventure 表与容器命名的双层同名风险 → 容器名 combat/run/crossrun 三名全避让(成员名零碰撞——grep 零命中);⑦改址量重估:v1.0 口径 139 处 → 实查五组 ≈1330 处(估时 4.9→7.9d 如实上调)。遗留提示三件随卡在案:①估时超迭代冻结线——编入时循迭代 39 特批先例由用户裁;②本卡与卡③呈现侧改址行同文件触碰——编排错波;③main.save_manager 句柄面改址不新增句柄成员——:183 豁免面不扩大(审计⑧随核)。 - -## 13. 禁为机检文本保留无效成员(重构类必填条款) - -禁止为迎合机检消息文本(含计数)而保留或新增无效成员/别名/死存储/转发壳:本批删除的 `_next_round_mode` 死存储与 K1′ 两访问器、K3′ 两纯转发即该契约的执行例——不得以「基线计数」「兼容过渡」「调试便利」等理由保留任何在删清单成员、新增同种件或在退役点留同名转发;新件公开面=K 清单封闭面(MetaStateStore 19/SlotStore 10/meta_progression 20/config_db 8),禁为凑数或过渡加别名与委托壳;机检键与卡片契约互斥时实现段一律停卡呈报,不得自造第三条路(code-conventions §1.1 同款)。 diff --git a/roadmap.md b/roadmap.md index 51933ad8..02866b6b 100644 --- a/roadmap.md +++ b/roadmap.md @@ -5,8 +5,8 @@ ## 当前位(只回答「现在该做什么」;三行内随批次换代,禁止在此扩写成状态快照) - **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。 -- **迭代位**:迭代 1–40 全部已完成——迭代 40 两卡 2026-10-28 合回(合并提交 514457d1,用户特许免闸直合),同日完成批后收尾(反哺落文 13 条+产出物退役+账面换代)。 -- **下一步**:迭代 41 已编两卡(核心数据面结构收敛批+呈现层结构收敛批,≈13.15 个工作日〔用户特批 2026-10-27 超 10 个工作日〕)——待开工,实现段由用户以 /iter 41 发令(开工前固定动作波 0 gdstyle 基线刷新已于 2026-10-28 执行销号)。待编池:营地交互重做卡⑤(排卡④之后)、卡④(已退回美术设计段,美术设计闭合后重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。 +- **迭代位**:迭代 1–41 全部已完成——迭代 41 两卡(核心数据面结构收敛批+呈现层结构收敛批)2026-10-29 合回(合并提交 eb9bb537,测试特许移交+用户裁直接合回),同日完成批后收尾(反哺点落文+产出物退役+账面换代)。 +- **下一步**:待编池:营地交互重做卡⑤(排卡④之后)、卡④(已退回美术设计段,美术设计闭合后重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。批后可裁事项:gdstyle 基线 152 死键 refresh 清账(`python tools/gdstyle_gate.py --refresh`,待办清单在册)——用户发令时机。 ## 里程碑时间线 @@ -74,11 +74,12 @@ | 迭代 38 | 已完成(2026-10-26) | 已退役(git 历史可考) | 2026-10-26 | ≈5.225 个工作日 | 已退役(git 历史可考) | | 迭代 39 | 已完成(2026-10-27) | 已退役(git 历史可考) | 2026-10-26 | ≈10.15 个工作日〔用户特批 2026-10-26 超 10 个工作日〕 | 已退役(git 历史可考) | | 迭代 40 | 已完成(2026-10-28) | 已退役(git 历史可考) | 2026-10-27 | ≈6.375 个工作日 | 已退役(git 历史可考) | -| 迭代 41 | 待开工 | reports/需求卡片-核心数据面结构收敛批-2026-10-27.md
reports/需求卡片-呈现层结构收敛批-2026-10-27.md | 2026-10-27 | ≈13.15 个工作日〔用户特批 2026-10-27 超 10 个工作日〕 | — | +| 迭代 41 | 已完成(2026-10-29) | 已退役(git 历史可考) | 2026-10-27 | ≈13.15 个工作日〔用户特批 2026-10-27 超 10 个工作日〕 | 已退役(git 历史可考) | - 迭代 38 收口为带红合并〔用户特批 2026-10-26〕:09 静态扫描 S13 gdstyle 恶化 2 条经批准记入基线存量红(git 提交 c4c69701),卡② 停卡退上游,处方已于 2026-10-26 修订定稿 v1.3(git 提交 b3ea7532),随「gdstyle 存量债全量清偿」条目波 7 待编排。 - 迭代 39 收口为带红合并〔用户特批 2026-10-27〕:02 EV 锚 goblin 0.9148∉[1.00,1.20](触发器批有意行为改动,fp f74b9a48ef4a)已随 EV 锚重锚批换带归绿(git 提交 ba5105aa);08d 生涯.md:55 行号漂移已随 2026-10-28 批后收尾反哺落文修复归绿。三卡拆分后终局 gdstyle 恶化 2 条(battle_orchestrator max-file-length、level_map_screen max-class-variables)归迭代 40 卡①还债与迭代 41 存量债序列。 - 迭代 40 收口为用户特许免闸直合〔2026-10-28〕:全量域验收回执未取得(回执环节断于用户特许,验收审计报告如实记档不作绿报;独立审计结论=通过,F1 一行修 iter40 8a319369 先行入库)。卡① 契约 2 宿主行数残余债(实测 1036 行,合并适配带入 36 行)经用户裁登记归后续批清偿(待办清单「战斗域结构深拆批」条目承载);09 存量红剩 level_map_screen 类变量一条归迭代 41 卡③。 +- 迭代 41 收口为测试特许移交+用户裁直接合回〔2026-10-28/2026-10-29〕:全部套件与闸停跑(gdstyle 结构闸除外——开发期读数反馈在跑),验收断言、golden 对拍与独立验收审计一并移交用户执行,2026-10-29 用户裁直接合回(合并提交 eb9bb537);golden 改前锚未建让步与四项实机目检已迁体验验证清单 ㊵;gdstyle 基线 152 死键 refresh 待用户发令(待办清单在册)。 - 历史行的「—」= 该列事实不可考:迭代 1~8 早于需求卡片制;编排时点与预计周期不再回溯,细节查 git 提交史。 - 「已退役(git 历史可考)」= 需求卡片或实现报告曾存在,已按「证据只留最新」退役;已完成迭代的实现报告列只填 reports/ 现存路径或本保留字,不填「—」。 - 新迭代行的编排与各列判据见 doc-conventions §12.2 与 iter-plan 技能,由流水线闸(`tools/pipeline_gate.py`)机检。 diff --git a/体验验证清单.md b/体验验证清单.md index 8b1cdba4..a3c3d9a7 100644 --- a/体验验证清单.md +++ b/体验验证清单.md @@ -466,3 +466,16 @@ | 2 | 战斗会话更替状态行(删动效+常态两档) | 两档下新开一场战斗后上一场遗留状态行已清、新会话首行即时显示(wr4 会话 flush) | - **红灯信号**:弹窗关闭后底层未恢复或残留残影、新战斗开始后旧状态行未清即报缺陷。 - **结论回流**:呈现缺陷归待办清单登记新条目。 + +## ㊵ 迭代 41——结构收敛两卡实机目检(2026-10-29 随批后收尾登记) + +> 两卡合回(2026-10-29,git 提交 eb9bb537):卡① 核心数据面结构收敛批(config_db 三域容器+存档拆件 SlotStore/MetaStateStore+adventure_table 拆段三段件+meta_progression 瘦身+spawn 束化)+卡② 呈现层结构收敛批(视图拆私有族+六状态件+ui_kit 收敛+print 删)。行为零变化批,判读口径全部=「与改前一致」;本批测试经用户特许(2026-10-28)全数移交未跑,呈现等价的其余证据承载=现役探针/单元测试断言面。登记不阻塞(2026-10-12 真人检测立规)。 + +| # | 目检项 | 判据 | +|---|---|---| +| 1 | 启动冒烟实机一屏 | 正常进主菜单并开一局,无错误无缺图(行为零变化批总入口) | +| 2 | 三屏开合观感:营地/设置/战斗 | 三屏开合正常、布局与改前一致,无私有函数族拆分引入的错位或残影 | +| 3 | 四浮层开合观感:战末结算/三选一/图例/调试浮窗 | 四浮层开合正常、遮挡关系正确、文案与改前一致(print 删除不影响呈现) | +| 4 | 营地三柜台与同调交互回归 | 树淬炼/锻造工坊/秘宝匣三柜台可购可交互,同调充能与改前一致 | +- **红灯信号**:任一屏/浮层布局错位、交互无响应或读数与改前不一致即报缺陷。 +- **结论回流**:呈现缺陷归待办清单登记新条目。 diff --git a/待办清单.md b/待办清单.md index cdd91a34..8053d018 100644 --- a/待办清单.md +++ b/待办清单.md @@ -34,22 +34,13 @@ **状态**:待执行 -#### gdstyle 存量债全量清偿——216 键按病根分波整改(2026-10-26 登记,来源=会话提及,优先级=P0) +#### gdstyle 基线死键 refresh 清账——152 键人工专用(2026-10-29 登记,来源=批次移交) -**实况**:S13 闸实测存量债 216 键/60 文件(2026-10-26,master f3b148ce,gdstyle v0.4.0 默认阈值;基线登记 234 键=实存 216+陈旧 18)。全量清单、波次方案与纪律见清点报告(本条目裁决源)。2026-10-26 用户裁:撤销「一条总账」与「按病根拆多条」两案,并为本条单账(存量债全部清除,紧急优先级);原「gdstyle 基线陈旧键待人工清理」条目并入波 0(基线对账刷新),原「结构审查未立项小件候审」条目并入波 7(卡已写;iter38 施工停卡后经用户裁于 2026-10-26 修订定稿 v1.3,待编排)。**2026-10-26 设计段闭合(逐波裁定全数落定)**:①段组织=逐波开设计段,纯代码波(波 0/2/3/4/5/6/8)写卡前确认零设计改动+按当时 master 重测读数即可写卡;②波 2 各文件内部拆、波 6 视图内部拆私有函数、波 8 config_db 纯代码收敛(三处零设计改动);③波 1 拆件定稿=轴甲两件——battle_orchestrator 拆出 BattleFxHost(效果引擎宿主域)+RewardGrant(奖励授予域),宿主保留状态机/facts 缓冲/订阅/段驱动/行发射基建/呈现投影,attune 族原位保留(迭代 39 副卡语义领地),emit 经 bind 注入 Callable,行数恶化债(c4c69701 挂账)本波还债归绿,残留债「改善非清零」口径预计 8–10 键;定稿落文 architecture.md v1.18(功能层两新件行+「战斗编排域拆件定稿」节);**同日独立审查折入**(grilling+godot-master 双子代理并行、双判回炉补裁级——骨架成立、接线未闭合):阻断 8 条去重 6 组+建议 5 条全数折入 v1.18——跨件单向接线裁死(RewardGrant 持 fx 件引用/fx 兑付走注入 Callable,禁 RefCounted 环)、settlement/ 段类随动(直持三引用封转发壳)、12 随迁键卡内收敛义务(禁波 0 refresh 吸收)、两新件消费依赖列补全+引用束注入、treasure_interact_controller 三触点分家(现值回调双取值面)、_fx_revealing 再入闸归 fx 件(裁定全文见清点报告 §六第 6 条);④全部波不改游戏规则与玩家可见行为,design/gdd/systems/ 零修订预期;波 5 已实查落定纯代码(open_ticket 12 参=单据声明形态)。波 7 的 wr5/wr6 验收载体重裁为写卡段用户裁点(卡 v1.2 在册,写卡补呈报)。裁定全文见清点报告 §六。**2026-10-28 迭代 40 合回出账(波 1+波 7 闭合,合并提交 514457d1)**:卡①(波 1)45 键清 44、宿主类变量键豁免第三条顺带落 architecture v1.22 S13 豁免登记,行数恶化债还清(实测 1036≤登记 1302;契约 2 残余 36 行系合并适配承接 master 迭代 39 内容带入,用户裁登记残余债归后续批);卡②(波 7)六件定点修+运行期违约通道负面套件(run_time_fatal_test)落地合回。余波 2/4/6/8 归迭代 41 两卡(在册)。 +**实况**:迭代 41 两卡合回(合并提交 eb9bb537)后 S13 键账终局=16 键在册、全部基线内——构成:两卡之外 12 键(board_view 6/level_runner 3/battle_orchestrator 2〔类变量键为 architecture v1.22 S13 豁免第三条〕/adventure_runner 1)+呈现层两豁免(main 组合根类变量、tune_sim 测速 await——v1.22 豁免登记在册)+2 键「改善未消」(board_cell_unit/standee_body 类变量——gdstyle 对宿主内状态件成员按宿主展平计数,独立状态类形态被拆分边界纪律禁用)。基线文件 `tools/gdstyle_baseline.txt` 尚余 152 死键待清账:命令=`python tools/gdstyle_gate.py --refresh`(只降不升纪律、骤降守卫须 --force 显式确认,人工专用禁闸内自动重生成),执行时机归用户发令。证据=迭代 41 键账终局对拍(git 提交 eb9bb537 一线可考)。 -关联文档清单: -- 清点报告 reports/审计-gdstyle存量债清点与清偿方案-2026-10-26.md(2026-10-26,216 键全量清单+波次方案+纪律+设计段裁定记录 §六含整合裁定第 7 条) -- 设计定稿 design/engineering/architecture/architecture.md v1.19(2026-10-27:波 1 拆件定稿 v1.18 节+全清设计补课——ConfigDB 访问器归位与域容器持有+SlotStore/MetaStateStore 两新件行+组合根句柄面/测量面两处 S13 豁免登记) -- 需求卡片 B1 战斗域拆件批卡(2026-10-27 v1.1 全清口径修订后编入;已随迭代 40 实现批合回退役,git 历史可考——合并提交 514457d1) -- 需求卡片 reports/需求卡片-核心数据面结构收敛批-2026-10-27.md(v1.2=v1.1 全清口径修订〔2026-10-27〕+拆分边界纪律契约 7 落卡〔2026-10-28 用户裁 DDD/高内聚〕;config_db 访问器归位+三域容器+SlotStore/MetaStateStore 拆件+adventure_table 拆段+spawn 束化;估时 ≈7.9d;零待裁点) -- 需求卡片 reports/需求卡片-呈现层结构收敛批-2026-10-27.md(v1.2=v1.1 全清口径修订〔2026-10-27〕+拆分边界纪律契约 9 与 u1 子域拆件改法落卡〔2026-10-28 用户裁 DDD/高内聚〕;print 删除+七件绘制态内部收拢+main/await 两键按 v1.19 豁免申报;估时 ≈5.3d;零待裁点) -- 三宿主主副卡(已随迭代 39 实现批合回退役,git 历史可考——合并提交 ffb0ac15;原「规避指向:本事项禁触三宿主」随三宿主债清偿完成历史使命,残留归尾波) -- 需求卡片 结构小件定点修批卡(波 7 现成卡:iter38 卡②停卡退回上游后经 v1.3→v1.4 修订定稿编入;已随迭代 40 实现批合回退役,git 历史可考——合并提交 514457d1) +**改动面**:工具代码 -**改动面**:游戏代码+工具代码 - -**状态**:文档设计已闭合+已写卡+已编迭代 41 +**状态**:待执行 #### 数值标定窗口总挂账——原九条数值类条目合并(2026-10-28 登记,来源=会话提及)