diff --git a/roadmap.md b/roadmap.md index 06d4ab8b..51933ad8 100644 --- a/roadmap.md +++ b/roadmap.md @@ -6,7 +6,7 @@ - **阶段**: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 基线刷新(待办清单在册,待用户发令)。待编池:营地交互重做卡⑤(排卡④之后)、卡④(已退回美术设计段,美术设计闭合后重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。 +- **下一步**:迭代 41 已编两卡(核心数据面结构收敛批+呈现层结构收敛批,≈13.15 个工作日〔用户特批 2026-10-27 超 10 个工作日〕)——待开工,实现段由用户以 /iter 41 发令(开工前固定动作波 0 gdstyle 基线刷新已于 2026-10-28 执行销号)。待编池:营地交互重做卡⑤(排卡④之后)、卡④(已退回美术设计段,美术设计闭合后重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。 ## 里程碑时间线 diff --git a/tools/gdstyle_baseline.txt b/tools/gdstyle_baseline.txt index 0a4cda6e..87d30af9 100644 --- a/tools/gdstyle_baseline.txt +++ b/tools/gdstyle_baseline.txt @@ -3,37 +3,12 @@ # (class variables/public methods/file length)=文件|规则;无数字条目=文件|规则|消息全文(裸键)。 # 带数条目行格式「键 = 数值」,数值=消息剥掉 (max N) 段后首个整数;无数字条目裸键。 # 判定=键不在基线红(NEW)、同键数值较登记值恶化红(WORSENED)、改小/持平不红。 -# 阈值口径=gdstyle 默认值(tools/gdstyle.toml 不设数值阈值);本文件只是欠账簿,登记值只准随 -# 还债下降,禁抬高到现状(抬高=把既有代码当尺子,默认恶化)。 # 重生成=人工专用:python tools/gdstyle_gate.py --refresh(禁清基线换绿;改规则口径/工具升级须随批 -# 重生成;新键数较旧基线少逾 10% 或登记值被抬高均拒写,须加 --force 显式确认)。 +# 重生成;新键数较旧基线少逾 10% 须加 --force 显式确认)。 game/core/action_economy.gd|quality/max-class-variables = 18 -game/core/adventure_runner.gd|quality/max-branches|_apply_curio_pick = 10 -game/core/adventure_runner.gd|quality/max-class-variables = 42 -game/core/adventure_runner.gd|quality/max-public-methods = 23 -game/core/adventure_runner.gd|quality/max-returns|_apply_curio_pick = 9 -game/core/battle_orchestrator.gd|quality/max-branches|begin_battle = 17 -game/core/battle_orchestrator.gd|quality/max-branches|use_treasure = 18 -game/core/battle_orchestrator.gd|quality/max-class-variables = 50 -game/core/battle_orchestrator.gd|quality/max-file-length = 1302 -game/core/battle_orchestrator.gd|quality/max-function-length|_place_variants = 52 -game/core/battle_orchestrator.gd|quality/max-function-length|begin_battle = 141 -game/core/battle_orchestrator.gd|quality/max-function-length|use_treasure = 62 -game/core/battle_orchestrator.gd|quality/max-local-variables|_place_variants = 14 -game/core/battle_orchestrator.gd|quality/max-local-variables|begin_battle = 16 -game/core/battle_orchestrator.gd|quality/max-local-variables|use_treasure = 11 -game/core/battle_orchestrator.gd|quality/max-nesting-depth|_place_variants = 6 -game/core/battle_orchestrator.gd|quality/max-parameters|_apply_flat_row = 7 -game/core/battle_orchestrator.gd|quality/max-parameters|_apply_gp_row = 6 -game/core/battle_orchestrator.gd|quality/max-parameters|_apply_percent_row = 6 -game/core/battle_orchestrator.gd|quality/max-parameters|_dispatch_row = 6 -game/core/battle_orchestrator.gd|quality/max-parameters|_emit_row = 8 -game/core/battle_orchestrator.gd|quality/max-parameters|_grant_routed = 8 -game/core/battle_orchestrator.gd|quality/max-parameters|_submit_flat_hero = 7 -game/core/battle_orchestrator.gd|quality/max-returns|_apply_flat_row = 9 -game/core/battle_orchestrator.gd|quality/max-returns|_fx_fact = 7 -game/core/battle_orchestrator.gd|quality/max-returns|begin_battle = 7 -game/core/battle_orchestrator.gd|quality/max-returns|use_treasure = 8 +game/core/adventure_runner.gd|quality/max-class-variables = 28 +game/core/battle_orchestrator.gd|quality/max-class-variables = 38 +game/core/battle_orchestrator.gd|quality/max-file-length = 1037 game/core/board_generator.gd|quality/max-branches|measure_inferability = 12 game/core/board_generator.gd|quality/max-function-length|_attempt = 51 game/core/board_generator.gd|quality/max-function-length|generate = 62 @@ -47,21 +22,11 @@ game/core/config_db.gd|quality/max-public-methods = 44 game/core/config_db_cross_validator.gd|quality/max-branches|cross_validate = 21 game/core/config_db_cross_validator.gd|quality/max-function-length|cross_validate = 107 game/core/config_db_cross_validator.gd|quality/max-local-variables|cross_validate = 24 -game/core/config_db_cross_validator.gd|quality/max-local-variables|validate_skill_pool_links = 11 game/core/config_db_cross_validator.gd|quality/max-nesting-depth|cross_validate = 5 game/core/config_db_resolver.gd|quality/max-branches|_resolve_progress = 16 game/core/config_db_resolver.gd|quality/max-branches|resolve_enemy_rowset = 12 game/core/config_db_resolver.gd|quality/max-function-length|_resolve_progress = 52 game/core/config_db_resolver.gd|quality/max-local-variables|_resolve_progress = 11 -game/core/damage_controller.gd|quality/max-branches|_hero_attack_ctx = 9 -game/core/damage_controller.gd|quality/max-branches|_hero_attack_redeem = 10 -game/core/damage_controller.gd|quality/max-class-variables = 19 -game/core/damage_controller.gd|quality/max-function-length|_hero_attack_ctx = 61 -game/core/damage_controller.gd|quality/max-function-length|_hero_attack_redeem = 54 -game/core/damage_controller.gd|quality/max-local-variables|_hero_attack_ctx = 16 -game/core/damage_controller.gd|quality/max-local-variables|_hero_attack_redeem = 12 -game/core/damage_controller.gd|quality/max-local-variables|_resolve_enemy_skill = 13 -game/core/damage_controller.gd|quality/max-parameters|open_ticket = 12 game/core/effect_engine.gd|quality/max-branches|validate_trigger_row = 14 game/core/effect_engine.gd|quality/max-function-length|_cond_ok = 52 game/core/effect_engine.gd|quality/max-function-length|rebuild = 55 @@ -70,9 +35,8 @@ game/core/effect_engine.gd|quality/max-nesting-depth|_cond_ok = 5 game/core/effect_engine.gd|quality/max-nesting-depth|rebuild = 5 game/core/effect_engine.gd|quality/max-returns|_cond_ok = 19 game/core/effect_engine.gd|quality/no-else-return|unnecessary 'elif' after 'return' -game/core/level_runner.gd|quality/max-class-variables = 38 -game/core/level_runner.gd|quality/max-parameters|start_level_external = 7 -game/core/level_runner.gd|quality/max-public-methods = 54 +game/core/level_runner.gd|quality/max-class-variables = 30 +game/core/level_runner.gd|quality/max-public-methods = 50 game/core/level_runner.gd|quality/max-returns|_enter_node = 7 game/core/meta_progression.gd|quality/max-public-methods = 31 game/core/meta_progression.gd|quality/max-returns|tree_can_buy = 8 @@ -86,37 +50,27 @@ game/core/node_map_generator.gd|quality/max-local-variables|_build = 15 game/core/node_map_generator.gd|quality/max-local-variables|validate_output = 22 game/core/node_map_generator.gd|quality/max-nesting-depth|_check_fork_rules = 5 game/core/node_map_generator.gd|quality/max-returns|validate_output = 7 -game/core/reward_economy.gd|quality/max-function-length|roll_board = 54 +game/core/reward_economy.gd|quality/max-function-length|roll_board = 52 game/core/reward_economy.gd|quality/max-local-variables|_skewed_cell_rows = 13 game/core/reward_economy.gd|quality/max-local-variables|roll_board = 11 game/core/save_manager.gd|quality/max-public-methods = 52 game/core/save_manager.gd|quality/max-returns|_peek_summary_at = 7 game/core/save_manager.gd|quality/max-returns|load_from_disk = 8 -game/core/settlement/combat_segment.gd|quality/max-function-length|run = 83 -game/core/settlement/combat_segment.gd|quality/max-local-variables|run = 13 -game/core/settlement/grant_segment.gd|quality/max-branches|_judge_seal = 14 -game/core/settlement/grant_segment.gd|quality/max-branches|run = 33 -game/core/settlement/grant_segment.gd|quality/max-function-length|_judge_seal = 84 -game/core/settlement/grant_segment.gd|quality/max-function-length|run = 211 -game/core/settlement/grant_segment.gd|quality/max-local-variables|_judge_seal = 11 -game/core/settlement/grant_segment.gd|quality/max-local-variables|run = 36 -game/core/settlement/grant_segment.gd|quality/max-nesting-depth|_judge_seal = 6 -game/core/settlement/grant_segment.gd|quality/max-nesting-depth|run = 6 game/core/status_container.gd|quality/max-nesting-depth|apply_effect = 5 game/core/status_container.gd|quality/max-parameters|_new_instance = 7 game/core/status_container.gd|quality/max-returns|apply_effect = 9 game/core/treasure_items.gd|quality/max-branches|validate_use = 11 game/core/treasure_items.gd|quality/max-nesting-depth|validate_use = 5 -game/core/unit_container.gd|quality/max-function-length|spawn = 81 -game/core/unit_container.gd|quality/max-local-variables|spawn = 17 +game/core/unit_container.gd|quality/max-function-length|spawn = 68 +game/core/unit_container.gd|quality/max-local-variables|spawn = 16 game/core/unit_container.gd|quality/max-parameters|spawn = 10 game/data/schemas/adventure_table.gd|quality/max-class-variables = 44 game/data/schemas/board_gen_table.gd|quality/max-branches|validate = 20 game/data/schemas/board_gen_table.gd|quality/max-function-length|validate = 67 game/data/schemas/board_gen_table.gd|quality/max-local-variables|validate = 16 -game/data/schemas/enemy_table.gd|quality/max-branches|validate = 32 -game/data/schemas/enemy_table.gd|quality/max-function-length|validate = 116 -game/data/schemas/enemy_table.gd|quality/max-local-variables|validate = 29 +game/data/schemas/enemy_table.gd|quality/max-branches|validate = 30 +game/data/schemas/enemy_table.gd|quality/max-function-length|validate = 110 +game/data/schemas/enemy_table.gd|quality/max-local-variables|validate = 28 game/data/schemas/forge_table.gd|quality/max-branches|validate = 30 game/data/schemas/forge_table.gd|quality/max-function-length|validate = 95 game/data/schemas/forge_table.gd|quality/max-local-variables|validate = 20 @@ -133,10 +87,8 @@ game/data/schemas/meta_tree_table.gd|quality/max-nesting-depth|validate = 5 game/data/schemas/reward_table.gd|quality/max-branches|validate = 30 game/data/schemas/reward_table.gd|quality/max-function-length|validate = 99 game/data/schemas/reward_table.gd|quality/max-local-variables|validate = 20 -game/data/schemas/settlement_table.gd|quality/max-branches|validate = 16 -game/data/schemas/settlement_table.gd|quality/max-class-variables = 18 -game/data/schemas/skill_table.gd|quality/max-branches|validate = 29 -game/data/schemas/skill_table.gd|quality/max-function-length|validate = 80 +game/data/schemas/skill_table.gd|quality/max-branches|validate = 26 +game/data/schemas/skill_table.gd|quality/max-function-length|validate = 76 game/data/schemas/status_effect_table.gd|quality/max-branches|validate = 12 game/data/schemas/treasure_item_table.gd|quality/max-branches|validate = 44 game/data/schemas/treasure_item_table.gd|quality/max-function-length|validate = 147 @@ -154,8 +106,6 @@ game/presentation/hud_presenter.gd|quality/max-parameters|refresh = 8 game/presentation/hud_presenter.gd|quality/max-parameters|tune_sim_report = 10 game/presentation/main.gd|quality/max-class-variables = 49 game/presentation/playtest_logger.gd|quality/no-debug-print|debug 'print()' call found -game/presentation/treasure_interact_controller.gd|quality/max-local-variables|inventory_projection = 11 -game/presentation/treasure_interact_controller.gd|quality/max-parameters|_init = 7 game/presentation/tune_sim_controller.gd|quality/await-in-loop|'await' used inside a loop game/presentation/tune_sim_controller.gd|quality/max-local-variables|run = 11 game/presentation/tune_sim_controller.gd|quality/no-debug-print|debug 'print()' call found @@ -181,7 +131,7 @@ game/presentation/views/board_cell_unit.gd|quality/max-local-variables|_draw = 1 game/presentation/views/board_fx_view.gd|quality/allocation-in-loop|object allocation '.new()' inside a loop game/presentation/views/board_view.gd|quality/allocation-in-loop|object allocation '.new()' inside a loop game/presentation/views/board_view.gd|quality/max-branches|_paint_cell = 24 -game/presentation/views/board_view.gd|quality/max-class-variables = 45 +game/presentation/views/board_view.gd|quality/max-class-variables = 32 game/presentation/views/board_view.gd|quality/max-function-length|_paint_cell = 139 game/presentation/views/board_view.gd|quality/max-local-variables|_paint_cell = 22 game/presentation/views/board_view.gd|quality/max-public-methods = 27 diff --git a/待办清单.md b/待办清单.md index ff6978fa..c5fe9fd1 100644 --- a/待办清单.md +++ b/待办清单.md @@ -31,7 +31,7 @@ **实况**:三条同病根的结构债,需先一次设计讨论定端口形态,再谈切卡;`RewardEconomy` 的最小缝拆样本已由迭代 40 卡② 落卡。 - 效果发射端口(设计题本体):`game/core/damage_controller.gd:46/47/71` 与 `game/core/action_economy.gd:44/45/50` 仍直持 `EffectEngine`+`EffectContext`——前者用 attack_commit/armor_roll/clamp_check/kill/damage_taken 五枚事件并带计数器读写回写(:348/:354),后者用 dig_paid/dig_stop/charge_full 三枚事件。`RewardEconomy` 同款直连已由迭代 40 卡② p5 缝拆实装合回(单枚查询口 `luck_bias_query`——成员 −2+2、类变量净 15、判定归 `BattleFxHost.luck_bias_for`),最小样本在库可考;另两处事件多且带计数器回写,缝拆不成立,必须先设计「业务类只持一个回调、取回命中批」的端口形态。 -- battle_orchestrator 瘦身:迭代 40 卡① 拆出 `BattleFxHost`/`RewardGrant` 后宿主实测 38 类变量(阈值 15;豁免第三条已顺带落 architecture v1.22 S13 豁免登记——豁免不等于了结),`tools/gdstyle_baseline.txt` 在册 `game/core/battle_orchestrator.gd|quality/max-class-variables = 50` 与 `|quality/max-file-length = 1302` 两键,实测 38/1036 均已收敛到登记值内(波 0 刷新时按实测重锚)。 +- battle_orchestrator 瘦身:迭代 40 卡① 拆出 `BattleFxHost`/`RewardGrant` 后宿主实测 38 类变量(阈值 15;豁免第三条已顺带落 architecture v1.22 S13 豁免登记——豁免不等于了结),`tools/gdstyle_baseline.txt` 在册 `game/core/battle_orchestrator.gd|quality/max-class-variables = 38` 与 `|quality/max-file-length = 1037` 两键(已随 2026-10-28 波 0 刷新按实测重锚)。 - reward_economy 分件:`RewardEconomy` 现 15 类变量恰在阈值线上(加第 16 枚即出闸 09 新增红——迭代 40 卡② 施工实测撞见,正是本条登记起因),掷格面(install 期 roll/池行装配/权重合成)与受理账面(grant/身份查询/快照/retire)两职责同居一件。 - 相关文档:design/engineering/architecture/architecture.md(系统分层图与功能层 B1/B4 行、「战斗编排域拆件定稿」节须随端口定稿改写)· reports/审计-gdstyle存量债清点与清偿方案-2026-10-26.md(216 键波次方案与残留债口径;在册「尾波」只覆盖迭代 39 三宿主,不含本条)· 结构小件定点修批卡已随迭代 40 合回退役(git 历史可考,合并提交 514457d1;缝拆样本与 2026-10-27 用户裁史见该卡 git 版本) @@ -41,14 +41,6 @@ **状态**:待文档设计 -#### 波 0:gdstyle 基线刷新——清 18 陈旧键+登记迭代 40 还债水位(2026-10-27 登记,来源=会话提及) - -**实况**:证据=`tools/gdstyle_baseline.txt` 存量登记 234 键中有 18 条陈旧键不命中当前盘面(迭代 37 重构已消、键未清)+迭代 38 特批带红合并的恶化债(git 提交 c4c69701)待迭代 40 还债归绿——刷新后账本对齐现实。人工 `python tools/gdstyle_gate.py --refresh` 一次,清陈旧键 18 条(骤降 18/234≈7.7% 低于 10% 守卫线无需 --force)+登记迭代 40 还债后的新水位(卡① battle_orchestrator 行数归绿、卡① settlement_table 拆段后的键账变化)。**执行时点=迭代 40 合回 master 之后、用户发令**(「gdstyle 存量债全量清偿」条目清点报告波 0 行同源);处迭代 40 与 41 之间的固定动作,完成即删本条目。 - -**改动面**:工具代码 - -**状态**:待执行 - #### level_runner 商店委托层拆除——迭代 37 冻结契约期过渡件(2026-10-26 登记,来源=批次移交) **实况**:证据=迭代 37 卡④ ShopSession 拆分时立「冻结公开面」契约,level_runner 保留 buy_product/shop_refresh 等同签名委托方法(架构模块表登记为「外部调用面由宿主同签名委托承载」)。2026-10-26 AdventureRunner 真拆分设计会话裁定新原则:纯转传委托=Middle Man 反模式,新件一律调用方直连不留壳(godot-master 技能库审查同判);本批不动该委托层(真拆分条目范围仅撤 8 条白盒转发属性),其拆除与调用文件改址由本条承接。