收尾(迭代45批后收尾): 反馈点七条处置闭合——①architecture落文六条: breakpoint_store行现状化(已建件-迭代45,构造句改述=九引用束解包原名成员保迁移函数体逐字+resume_adventure留宿主壳与宿主侧回填语句按R2所有权缝分家+实测类变量15贴顶禁再增)+board_hover行现状化(引用束实为7项=三引用+四Callable,卡片预估5项偏差实况在案)+单格两件与站桩两件两行现状化(成员数12/13与25/12/11及宿主30→10/19→10与实现一致零改述)+gdstyle计数截断缺陷节补清偿结果(两件已随迭代45真实清偿且基线refresh收账,上游报issue仍在册);第6条adventure_runner/board_view键账终值半=基线已在册承载(31/23留债收账归refresh批已完成),architecture无对应计数行零落文面;②第7条工具观察迁待办新条(run_all_gates 02关联档多套件词传参与run_all选跑解析器不兼容——两修法待用户裁决,直改类待执行);③目检三项登记体验验证清单㊸(悬停三语义抽验/站桩意图三档与三态观感/单格六步时序整帧零预期差异确认);④产出物退役九件(吸收即死+证据只留最新): iter45实现报告/反哺点/验收审计/两停机呈报+呈现层状态件批/gdstyle尾波补件批两卡+单格绘制状态件/站桩状态件两设计过程稿——判据全过: 反馈点七条全处置(1-6落文/7登记),遗留义务全迁移(键账终值=基线在册/02传参=待办新条/目检三项=㊸),引用面=roadmap行保留字+尾波条目随整删出清;⑤账面: gdstyle尾波补件批条目整条删除(两卡合回+键账留债收账在册,状态机出口),roadmap迭代45行状态已完成+卡片/报告两列退役保留字+当前位换代(迭代1-45全完成,下一步=两卡入编排待用户发令)
This commit is contained in:
1 parent
da24047c51
commit
457e073901
13 files changed
+25
-1020
No files matched your search
@@ -110,7 +110,7 @@
|
||||
| **HeroLedger**(`core/hero_ledger.gd`,冒险域主角实体账,已实装(2026-10-27 迭代 39 拆件批)) | 冒险生命周期主角数值与获得记录唯一所有者:生命与 GP 钱包(gain/spend/clear 单写原语,钱包事件发射点归件)、锻造强化快照、调试百分比、攻击/甲类型轴快照、特性持有集(活引用注入——关内兑付当关生效)、本局钥石增量与逐杀明细、真视使用记录;获得记录三层结构=获得记录列表(三选一件/商店购买/战末奖励各一条)→属性增益明细(带来源指回)→四轴汇总(由明细推导);生效上限与回血封顶公式单点归件 | 构造注入;单写原语族+只读投影;断点自交片段(账本键+获得日记键) | ConfigDB(表值读取);由 AdventureRunner 冒险开始创建、注入 CurioStop/level_runner/ShopSession/战斗 encounter | 无(RefCounted 纯逻辑) |
|
||||
| **AttuneLoadout**(`core/attune_loadout.gd`,同调配装件,已实装(2026-10-27 迭代 39 拆件批)) | 装备中的秘宝件对象集唯一所有者(每件内含充能单位与重置周期);同调充能的物化行为唯一事实源——种行/补行改写时同步(RunLedger 充能字典轨与差额对账函数退役);旧档 aux_items 同调行迁移归件 | 构造注入;充能查询/消耗/按周期重置原语;断点自交片段(attunement_charges 键,键名与策略不变) | ConfigDB(秘宝行集);TreasureItems(同调行投放面);注入战斗使用路径 | 无 |
|
||||
| **CurioStop**(`core/curio_stop.gd`,三选一停点件,已实装(2026-10-27 迭代 39 拆件批)) | 三选一停点编排唯一所有者(架构原则 9 本域承载):停点三态(关卡完成三选一在途/已兑付待推进/奖励节点三选一在途)、刷新三源账(刷新件 X/营地池 Y/刷新券存量/付费刷新计数)、兑付方法族(pick/refresh/redeem/skip)、凭证出箱(RAP/时沙待注入);三选一信号面自带;零自动推进停点语义承载 | 对外=开停点/刷新/兑付/放行谓词/交断点片段五组入口+信号面(curio_choice_presented/curio_resolved);由 AdventureRunner 关卡完成受理时调用 | ConfigDB;注入 CurioDeck(抽签/摘牌)与 HeroLedger(落账);随机只经 CurioDeck 的 reward_pick 封闭流 | 无 |
|
||||
| **breakpoint_store**(`core/breakpoint_store.gd`,冒险域·断点组装与回放件,2026-10-29 零豁免裁设计闭合——实现批建件) | 存档断点组装与回放唯一承载(自 adventure_runner 收编 6 成员+函数族):断点快照拼盘、回放回填、读侧策略分发;`BREAKPOINT_FIELDS` 27 键登记单源随件(键名/策略标签/键序冻结) | 构造=引用束注入;`resume_adventure` 留宿主薄壳;断点键面零变化 | adventure_runner(宿主);注入主角账三件与 curio/stop/bank/loadout 引用 | 无(RefCounted 纯逻辑) |
|
||||
| **breakpoint_store**(`core/breakpoint_store.gd`,冒险域·断点组装与回放件,已建件——迭代 45) | 存档断点组装与回放唯一承载(自 adventure_runner 收编 6 成员+函数族):断点快照拼盘、回放回填、读侧策略分发;`BREAKPOINT_FIELDS` 27 键登记单源随件(键名/策略标签/键序冻结) | 构造=引用束注入(九引用束成员解包为原名成员——保迁移函数体逐字);`resume_adventure` 留宿主(壳+宿主侧回填语句——R2 所有权缝分家);断点键面零变化;实测类变量 15(贴顶禁再增) | adventure_runner(宿主);注入主角账三件与 curio/stop/bank/loadout 引用 | 无(RefCounted 纯逻辑) |
|
||||
|
||||
### 功能层
|
||||
|
||||
@@ -165,9 +165,9 @@
|
||||
| **D1 HUD**(呈现面拆分持续换代:组合根 main.gd + 三屏壳(MenuScreen/CampScreen/AdventureScreen)+ views/ 视图单元(现行承载面见「呈现层装配与会话生命周期」节;早期 9 单元清单与 LevelStripView 已随场景换代退役);营地覆盖层=四柜台并排〔树淬炼主界面/锻造工坊·秘宝匣钥匙门/图鉴常开——迭代 21 T6 程序占位重排〕) | 全部 Control/CanvasLayer(例外:BoardView 棋盘本体与 BattleStageView 站桩本体 = Control 壳 + SubViewportContainer + SubViewport + Node2D 世界〔BoardWorld/CellUnit;StageWorld/StandeeBody——B 区 slot_row 伴随件留壳层〕,探针契约面不变——棋盘 Node2D 迁移批 Phase A 2026-09-23 / 战斗舞台 Phase B 2026-09-26)、输入→意图翻译(**唯一提交路径 = settle_batch,不直调 A3**)、呈现义务状态记录(A2×6 / B2×4 / B3×4 / B4×5 / B1×3) | 视图单元接口(信号外发、setter 只读注入) | A2 compute_move_path / ActionOutcome;A3 ap/rap;B1 步骤流行协议(数据源);ConfigDB display_name | **MEDIUM**:Control / CanvasLayer / draw_* / InputEvent / RichTextLabel——对照 breaking-changes.md 4.5–4.7 条目(CanvasItem 线条无抗锯齿羽化、设备 ID 常量、RichTextLabel 图片参数两轮变化) |
|
||||
| **组合根拆件**(呈现侧写口子件:curio_interact_controller / camp_shop_presenter / treasure_interact_controller) | 代组合根执行核心写调用(冒险节点后续推进/营地购买与刷新/道具使用——依赖与回调由 main 构造注入) | 各拆件的写入口(仅组合根装配面可达;视图零直连) | 构造注入的核心写引用(推进/商店/道具各域——详见各拆件头注) | 无 |
|
||||
| **ui_registry**(`presentation/ui_registry.gd`,界面注册面,已建件——迭代 44) | 呈现层接口面唯一承载:层序合同(LAYER_CONTRACT)迁驻与合同寻址、三域句柄容器 ui_screens(9 屏壳与覆盖层句柄)/ui_battle(5 战区句柄)/ui_modals(13 模态句柄+ModalFlow);组合根经其一级寻址接线,探针挂载假设迁移为 `main.ui.<域容器>.<句柄>`;七个探针别名/转发成员随批消灭 | 三容器属性+合同寻址口(RefCounted 门面,不挂树、零会话期引用);四件(UiRegistry/UiScreens/UiBattle/UiModals)类变量 3/9/5/14,ModalFlow 随 UiModals 容器构造即建 | 构造注入:三屏壳、覆盖层、战区句柄、ModalFlow(main_ui_build 交付随之改型) | 无(RefCounted) |
|
||||
| **board_hover**(`views/board_hover.gd`,悬停预承诺呈现域件,尾波清偿批 D2 设计闭合——实现批建件) | 悬停反馈域唯一承载(自 board_view 收编 11 函数族+_hover/_last_click 两成员):三语义光标、目标格边框、BFS 路径预览、chord 双击首遇锚;_r0 出生展开区成员留宿主 | 构造=引用束注入(cells/minesweeper/diggable 引用+光标写入与 hover_forbidden 注入回调);三入站口留宿主委托;hover_probe 读面留宿主 | board_view(宿主);输入事件经宿主入站口 | 无(RefCounted) |
|
||||
| **cell_base_layer/cell_mark_overlay**(`views/`,单格两绘制域件,2026-10-29 设计闭合——实现批建件) | 单格绘制域拆分(自 board_cell_unit 状态件 `_CellPaintState` 收编,入参与该层绘制命令同件):基座层(底面/描边/立面/投影/接触带/倒角,12 成员)与标识叠加层(标记/字形/徽章/封印/点迹/高亮/退色,13 成员);宿主 _draw 退为六步时序器,类变量 30→10 | 构造注入;绘制命令由宿主 _draw 按层序调用 | board_cell_unit(宿主);gdstyle 键各文件独立计数(12/13 均 ≤15) | 无(RefCounted) |
|
||||
| **standee_vitals/standee_motion**(`views/`,站桩两状态件,2026-10-29 设计闭合——实现批建件) | 站桩状态域拆分(自 `_StandeeState` 真实 25 成员收编):身份命值(hp/atk/状态值族,12 成员)与资产演出(动作/姿态/位移演出族,11 成员);三个演出探针计数器留宿主,宿主类变量 19→10 | 构造注入;st(沿用)/mo 两实例由宿主持有 | standee_body(宿主);battle_stage_view 写入面逐字保持 | 无(RefCounted) |
|
||||
| **board_hover**(`views/board_hover.gd`,悬停预承诺呈现域件,已建件——迭代 45) | 悬停反馈域唯一承载(自 board_view 收编 11 函数族+_hover/_last_click 两成员):三语义光标、目标格边框、BFS 路径预览、chord 双击首遇锚;_r0 出生展开区成员留宿主 | 构造=引用束注入实为 7 项(cells/minesweeper/diggable 引用+格命中换算/光标写入/hover_forbidden/chord_attempted 四 Callable——卡片预估 5 项,11 函数逐字迁移的最小必需面);三入站口留宿主委托;hover_probe 读面留宿主 | board_view(宿主);输入事件经宿主入站口 | 无(RefCounted) |
|
||||
| **cell_base_layer/cell_mark_overlay**(`views/`,单格两绘制域件,已建件——迭代 45) | 单格绘制域拆分(自 board_cell_unit 状态件 `_CellPaintState` 收编,入参与该层绘制命令同件):基座层(底面/描边/立面/投影/接触带/倒角,12 成员)与标识叠加层(标记/字形/徽章/封印/点迹/高亮/退色,13 成员);宿主 _draw 退为六步时序器,类变量 30→10 | 构造注入;绘制命令由宿主 _draw 按层序调用 | board_cell_unit(宿主);gdstyle 键各文件独立计数(12/13 均 ≤15) | 无(RefCounted) |
|
||||
| **standee_vitals/standee_motion**(`views/`,站桩两状态件,已建件——迭代 45) | 站桩状态域拆分(自 `_StandeeState` 真实 25 成员收编):身份命值(hp/atk/状态值族,12 成员)与资产演出(动作/姿态/位移演出族,11 成员);三个演出探针计数器留宿主,宿主类变量 19→10 | 构造注入;st(沿用)/mo 两实例由宿主持有 | standee_body(宿主);battle_stage_view 写入面逐字保持 | 无(RefCounted) |
|
||||
| **HudPresenter**(`presentation/hud_presenter.gd`,迭代 37 加注) | 战斗屏**数据投影+文案拼装静态族**——核心状态→呈现文案的全部翻译集中于此(B/C/D 区文案与投影),静态无状态 | `refresh(…)` 全量重查装配(组合根每次动作/结算返回后调用,漏调即陈旧呈现)+只读静态投影族 | 核心读取只走 `settlement.presentation_snapshot()` 成文快照面(禁链式穿透结算内部);ConfigDB display_name | 无(RefCounted 静态) |
|
||||
| **board_resolvers**(`presentation/board_resolvers.gd`,迭代 37 拆出) | 棋盘每格渲染数据的只读解析回调四函数(奖励徽章身份——挖掘期 Active 相位内、地形变异数字遮蔽与角标、调试加成生效值)——有态绑定件,与无态静态投影族 HudPresenter 职责互斥 | 构造注入 db、调试浮窗与结算活态取值,产出绑定 Callable 供组合根接线 | ConfigDB / DebugOverlay / 结算活态取值 Callable | 无(纯投影) |
|
||||
| **main_ui_build**(`presentation/main_ui_build.gd`,迭代 37 拆出) | `_build_ui` 八步拆分件——组合根 UI 装配分步承接(三屏壳实例化、视图句柄接线、覆盖层装配与模态编排注入按步拆开);main 侧留同名薄委托,装配序与 z 序零改动 | 分步静态函数(成员访问经 root 显式传入) | 层序逻辑不在此件——唯一事实源=`ui_registry.LAYER_CONTRACT`+`ui.apply_layer_contract(root)`(迭代 44 迁驻注册面) | 同 D1(Control 装配面) |
|
||||
@@ -322,7 +322,7 @@
|
||||
|
||||
**S13 豁免第三条注销(2026-10-29 零豁免裁)**:原 battle_orchestrator max-class-variables 豁免〔2026-10-28 迭代 40 卡①〕注销——RoundCycle/BattleFacts 两新件设计闭合(宿主实测 15,已建件——迭代 44 卡② 合回,见「战斗编排域拆件定稿」节轴丁)。
|
||||
|
||||
**gdstyle 计数截断缺陷登记(2026-10-29 两设计批独立实证)**:gdstyle v0.4.0 对文件内 inner class 的成员计数存在截断——内嵌类中带行尾注释的属性声明截断其后续成员计数(standee_body 实测 31 声明仅记 19、board_cell_unit 33 仅记 30)。基线登记值属欠估;闸机扫描与基线同源、判定口径自洽不误报,债的真值以实查为准——零豁免各批按真实口径设计(实数低于阈值,不依赖解析缺陷)。登记待办:向 gdstyle 上游报 issue。
|
||||
**gdstyle 计数截断缺陷登记(2026-10-29 两设计批独立实证)**:gdstyle v0.4.0 对文件内 inner class 的成员计数存在截断——内嵌类中带行尾注释的属性声明截断其后续成员计数(standee_body 实测 31 声明仅记 19、board_cell_unit 33 仅记 30)。基线登记值属欠估;闸机扫描与基线同源、判定口径自洽不误报,债的真值以实查为准——零豁免各批按真实口径设计(实数低于阈值,不依赖解析缺陷)。**清偿结果(2026-10-31)**:board_cell_unit 30→10、standee_body 19→10 已随迭代 45 真实清偿,基线 refresh 已收账(欠估口径旁证=33/31 声明与实测吻合)。登记待办:向 gdstyle 上游报 issue(仍在册)。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
# 停机呈报——迭代 45 卡②「gdstyle 尾波补件批」T2 断点域拆件规格缺口(上游缺陷移交)
|
||||
|
||||
> 接收方:需求卡片 `reports/需求卡片-gdstyle尾波补件批-2026-10-29.md` T2(上游=写卡段/设计段);对应待办清单条目「gdstyle 尾波补件批——悬停域与断点域拆件」。
|
||||
> 状态:卡② T0 完成(三键实测 32/27/28 与卡面一致、file:line 零漂移、基线无两族函数级键);T1 board_hover 半边硬前置=卡①合回(卡① 已因 L3③ 定谳停机)→ 不可开工;T2 断点域拆件发现规格缺口 → 停卡呈报。
|
||||
|
||||
## 缺口本体
|
||||
|
||||
卡片 T2 与第 12/13 节申报:函数族 9 个(`_snapshot_breakpoint`/`_bp_parts`/`_bp_read`/`_bp_strategy`/`_bp_read_int`/`_resume_ledger`/`_resume_curio_state`/`_resume_params`/`_resume_counters`)**迁出且逐字搬运**,新件构造=引用束注入(db、rng、主角账三件 stats/wallet/journal、curio/stop/bank/loadout——卡片 T2 明列,architecture.md v1.26 :113 行同)。
|
||||
|
||||
实读九函数 bodies(game/core/adventure_runner.gd 现行行号):
|
||||
|
||||
| 迁移函数 | 改写的宿主留守成员/调用(不在引用束内) |
|
||||
|---|---|
|
||||
| `_snapshot_breakpoint`(:571) | `state != "running"` 守卫(host state 属性) |
|
||||
| `_bp_parts`(:583) | `level_index`(int)、`master_seed`(int)、`adventure_counters`(Dictionary 但 start_adventure :119 有重绑定)、`_runner`(LevelRunner 引用) |
|
||||
| `_bp_read`/`_bp_strategy`/`_bp_read_int`(:636/:646/:651) | 无——纯函数,只读 BREAKPOINT_FIELDS 与入参 |
|
||||
| `_resume_ledger`(:182) | `summary`、`levels_total`、`level_index`(+_pending_next_level 属六成员之一) |
|
||||
| `_resume_curio_state`(:193) | `_reset_curio_state()`(宿主函数——内含 `adventure_counters = {}` 宿主成员重绑定) |
|
||||
| `_resume_params`(:218) | `_shop_mode`、`_treasure_unlocked`、`_attunement`、`_tree_rules`、`_attune_refresh_x_total()`(宿主函数) |
|
||||
| `_resume_counters`(:237) | `adventure_counters` |
|
||||
|
||||
约束:breakpoint_store 为 RefCounted、宿主亦 RefCounted——**件不能反向持宿主引用**(强引用成环泄漏;code-conventions §4 S6「core↔core 连信号一律方法 Callable,禁 lambda 捕获 self(RefCounted 成环)」同源)。且上述宿主成员全为**重绑定**(`= params.get(...)`、`= {}`)而非原处突变,连 Dictionary/Array 引用共享也不可用。六成员中的值类型成员(`_pending_next_level` bool、`_last_treasure_cleared` int)由宿主函数(`continue_to_next_level`/`_on_level_finished`/`_settle`)读写,迁入件后宿主侧仅可改址经件读写(机械改写)。
|
||||
|
||||
结论:**「九函数迁出+逐字搬运+resume_adventure 留宿主薄壳」三条同时成立不可满足**——四 `_resume_*` 与快照两函数各含宿主留守成员改写,逐字搬运入件即需宿主回引(禁);留在宿主则违反「迁出」;拆开则违反「逐字搬运」且「薄壳」变厚。卡片与 architecture 行均未给宿主状态的访问机制(getter Callable / 逐调传参 / 语句分家三种皆未指定)。
|
||||
|
||||
## 两种可行读法(均需卡片授权,超代拍板白名单)
|
||||
|
||||
- **读法 R1(快照件口径)**:store 收编六成员+BREAKPOINT_FIELDS+纯读侧三函数(逐字)+快照两函数(宿主输入逐调传参:state/level_index/master_seed/runner/counters,body 其余逐字);四 `_resume_*` 留宿主、store 自有成员读写改址经件。最小改码、行为零变化最易证;偏差=「回放回填」未归件(architecture :113「回放回填」句落空)。
|
||||
- **读法 R2(整族归件口径,建议案)**:store 收编六成员+BREAKPOINT_FIELDS+纯三函数逐字+快照两函数(宿主输入逐调传参)+四 `_resume_*` 的**件侧语句**(三件片段回填、curio 池还原、六成员改写);四函数的**宿主侧语句**(上表所列重绑定与两宿主函数调用)按原语句序吸收进 `resume_adventure` 壳与 `_reset_curio_state` 宿主半边——语句序逐步保形、行为零变化可证(27 键冻结不变);偏差=四函数非整体逐字搬运(按所有权缝语句分家)、「薄壳」吸收约 12 行宿主侧语句。机制先例=CurioStop 收 `_snapshot_breakpoint` 方法 Callable(adventure_runner.gd:56-57)——宿主方法 Callable 注入件是库内在役安全形态。
|
||||
- 两读法 store 类变量均为 6+1 束 ≤15;adventure_runner 类变量均 28→22(键账预期不受读法影响)。
|
||||
|
||||
## 建议
|
||||
|
||||
按 R2 授权复工:卡片 T2 第 2 条改述为「函数族迁出——纯读侧三函数与快照两函数逐字(快照宿主输入逐调传参);四 `_resume_*` 按所有权缝语句分家:件侧语句迁入 store、宿主侧语句按原序吸收进 resume_adventure 壳,27 键冻结与语句序零变化」。若用户更重最小改码则裁 R1。裁后由写卡段出卡片修订版(v1.1)再复工;待办清单条目状态建议回退段=「已写卡(修订中)」。
|
||||
|
||||
## 复工所需
|
||||
|
||||
用户裁决 R1/R2(或另行给出机制);卡片修订落 v1.1 后 T2 复工。T1(board_hover)另候卡①闭合。
|
||||
@@ -1,29 +0,0 @@
|
||||
# 停机呈报——迭代 45 卡①「呈现层状态件批」T0 潜伏红定谳=绿(L3③)
|
||||
|
||||
> 接收方:需求卡片 `reports/需求卡片-呈现层状态件批-2026-10-29.md` §10 L3③ 的裁决请求(用户)。
|
||||
> 状态:卡① T0 全项完成,按卡片预设停机点停机;卡② breakpoint_store 半边无此前置、继续施工。
|
||||
|
||||
## T0 完成记录
|
||||
|
||||
1. **前置确认**:迭代 42 已合回 master——`_build_cell_unit`(board_view.gd:249/:256)与五段 `_paint_cell`(:623-627 调用链、:634/:675/:704 段函数)在盘。
|
||||
2. **键账双读数**:board_cell_unit.gd 宿主 6+inner 27=33 声明、gdstyle 闸账 30;standee_body.gd 宿主 6+inner 25=31 声明、闸账 19——与卡片/设计文档申报逐一吻合,截断口径欠估照旧。基线两文件仅此两条类级键、无函数级键(迁移函数零超标键前提成立)。
|
||||
3. **board_view 写入面重锚(五段新分布)**:全部写入点形态仍为 `u.st.X`,行号整体下移——set_world_font :185、set_cell_area :204、rebuild :258/:259/:261/:268、悬停面 :517-539、路径预览 :554/:559、封印槽 :616/:620、ink 段 glyph/glyph_color/plate :661-:669、base 段 :699-:700、facade 段 :705-:738、overlays 段 :749-:763、fog 段 :774/:776、glow 同步 :806、接触带 :818/:825/:842/:843/:848/:854、cell_rect_probe :929。与设计文档单格篇 §5.1 对账表逐行同形。
|
||||
4. **潜伏红定谳=绿**:ui_input_probe 实跑 exit 0,`[ui_input_probe] PASS` 十八断言全绿(含 case①②③⑭ 四处)。**四处断言现行读路径为 `u1.st.hl_visible`/`.st.hl_color`/`.st.dot_visible`/`.st.mutation_mark`(合法),不存在卡片 §3 所述「绕过 st 直读宿主成员」形态;探针内零残留直读。**
|
||||
|
||||
## 定谳绿的事实成因(卡片成文后上游已修复)
|
||||
|
||||
卡片 §3 潜伏红前提(探针直读 `u1.hl_visible` 绕过 st)写卡时成立,但当晚被修复:
|
||||
|
||||
- 时间线:状态件合入 2026-10-29 01:37(eb9bb537,迭代 41 合并)→ 卡片成文 20:30(755dd823)→ 编排 21:58(833d483e)→ **迭代 41 测试债批 22:45(413124b0)把探针格面成员直读改址入 st 六处并跑绿 03/04/05 三闸**。
|
||||
- 即:潜伏红已被上游先行消解;卡片 §3 的时间线句「合入后未跑过」在写卡当晚已过时。
|
||||
|
||||
## 裁断请求(两读法与建议案)
|
||||
|
||||
- **分歧点**:设计文档单格篇 §8.6(绿→「改址四处照做,结论记实现报告」即继续)与卡片 §10 L3③(绿→「停机呈报等用户裁决后继续」)处置不同,卡片为实现合同故按卡片停机。
|
||||
- **读法一(字面执行,本呈报所循)**:绿=证伪设计前提→停机等裁。
|
||||
- **读法二(事实校准)**:本次绿非「GDScript 取索引语义判断有误」,而是前提事实在卡后被 413124b0 改变——设计前提失效的方式是「上游已修复」而非「语义误判」;设计的拆分方案与改址义务不受任何影响(四个成员本批迁入 face,四处断言无论定谳红绿都必须改址 u.face.*,判据与期望值零变化)。
|
||||
- **建议案**:按读法二裁决「前提失效=上游已修复,不构成设计缺陷;改址四处义务不变,卡①复工」——复工后 T1-T4 按卡执行,T3 四处改址兼作本定谳的落码收口(其「存量红修复身份」不再适用,现状本就绿)。
|
||||
|
||||
## 复工所需
|
||||
|
||||
用户一句裁决即可(采纳建议案或另行裁)。复工点=T1 建件,T0 其余各项已闭合。
|
||||
@@ -1,13 +0,0 @@
|
||||
# 迭代 45 反哺点清单(2026-10-31)
|
||||
|
||||
> 接收方:待办清单在册条目「零豁免五键清偿批」(卡①)与「gdstyle 尾波补件批」(卡②);落文归文档批(用户裁决后写入 `design/`,本批禁直改)。每条写清:哪个文件哪一节、改成什么、依据是什么。
|
||||
|
||||
1. **architecture.md「模块归属·呈现层」表 cell_base_layer/cell_mark_overlay 行(:169)**:行尾「实现批建件」状态句改「已建件(迭代 45)」;职责语句与成员数(12/13)与宿主 30→10 实现一致,零改述需求。
|
||||
2. **architecture.md「模块归属·呈现层」表 standee_vitals/standee_motion 行(:170)**:同上改「已建件(迭代 45)」;行内「真实 25 成员」「计数器留宿主 19→10」与实现一致(宿主终值 10)。
|
||||
3. **architecture.md「模块归属·呈现层」表 board_hover 行(:168)**:改「已建件(迭代 45)」;行内「11 函数族+2 成员」「_r0 留宿主」与实现一致;补充事实一句:构造引用束实为 7 项(cells/minesweeper/diggable+格命中换算/光标写入/hover_forbidden/chord_attempted 四 Callable)——卡片预估 5 项,逐字迁移最小必需面,依据=实现报告实现决定记录 6。
|
||||
4. **architecture.md「核心层」表 breakpoint_store 行(:113)**:改「已建件(迭代 45)」;补充事实:类变量 15 贴顶(六断点成员+九引用束成员解包为原名成员保迁移函数体逐字——依据实现决定记录 9);「resume_adventure 留宿主薄壳」句改述为「留宿主(壳+宿主侧回填语句——R2 所有权缝分家)」,依据=卡片 v1.1 与用户裁决。
|
||||
5. **architecture.md「gdstyle 计数截断缺陷登记」节(:325)**:登记态数字补清偿结果——board_cell_unit 30→10、standee_body 19→10 已随迭代 45 真实清偿(欠估口径旁证 33/31 声明实测吻合);「向 gdstyle 上游报 issue」仍在册待办。
|
||||
6. **architecture.md adventure_runner 行(模块归属·核心层)**:行内「收编 6 成员+函数族」的进行时表述可随 4 条一并换代为完成态;另 board_view 行的键账描述(类变量 32)可注终值 31、adventure_runner 28→23(留债只降不升,收账归人工 refresh 批)。
|
||||
7. **运行验证类(非 GDD)**:`tools/run_all_gates.sh` 02 关联档多套件词传参与 `game/tests/run_all.gd` --only 解析器不兼容(逗号整串不做切分,多词即零命中)——工具工程批候选,依据=实现报告 §5 遗留观察;归待办清单登记裁决,非文档落文项。
|
||||
|
||||
以上 1–6 为文档落文项;第 7 条为工具登记项(请用户裁决后归工程批或登记待办)。
|
||||
@@ -1,83 +0,0 @@
|
||||
# 迭代 45 实现报告(2026-10-31)
|
||||
|
||||
> 接收方:roadmap 迭代 45 行(呈现层状态件批+gdstyle 尾波补件批两卡)。卡片:`reports/需求卡片-呈现层状态件批-2026-10-29.md`(v1.0)、`reports/需求卡片-gdstyle尾波补件批-2026-10-29.md`(v1.1,2026-10-30 用户裁 T2 机制=R2)。工作区 iter45(自 14054d9d 检出),重塑后台账两笔卡提交(ca7ca992),原史留 backup/iter45-20261031-001705。
|
||||
|
||||
## 1. 各卡状态
|
||||
|
||||
| 卡 | T 段 | 状态 |
|
||||
|---|---|---|
|
||||
| 卡① 呈现层状态件批 | T0/T1/T2/T3/T4 | 全部完成收口(T1 建件与改址/T2 站桩两件/T3 探针改址/T4 键账对账) |
|
||||
| 卡② gdstyle 尾波补件批 | T0/T1/T2/T3 | 全部完成收口(T1 board_hover/T2 breakpoint_store R2/T3 键账对账) |
|
||||
|
||||
T0 定谳与两停机裁决:卡① 潜伏红 T0 实跑=绿(十八断言全绿),按 L3③ 停机呈报,用户裁「前提失效=上游已修复(413124b0),不构成设计缺陷,改址义务不变,复工」;卡② T2 规格缺口停机呈报,用户裁 R2 整族归件(卡片 v1.1,主区提交 df6cafcb)。两份停机呈报随批入库 `reports/iter45-停机呈报-*.md`。
|
||||
|
||||
## 2. 实际对照表(逐行;层级/真实入口/判据绑定面沿卡片申报,行号按本轮实测)
|
||||
|
||||
| 行 | 需求点 | 实际改动 | 验收测试(名称+落点) | 真实入口 | 判据绑定面 | 结果 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| V1 | 单格基座层域件 | cell_base_layer.gd 新建(12 成员+九函数+九常量+draw_base);board_cell_unit.gd 宿主 33→10+六步时序器;board_view.gd 基座域写入点改址 | render_gate 棋盘 golden 三张(board_L1/L2/L3);probe_gate --full(board_shot_probe 双帧取证);type_glow 单元套件 | BoardView.rebuild()→refresh() 真实场景帧 | golden 逐像素差异 0.00%(容差 ≤16/≤2%)=绘制命令流逐位;双帧取证 glow=4 非生效格零变化 | 绿(golden 三张 0.00%,render_gate exit 0) |
|
||||
| V2 | 单格标识叠加域件+冻结面保留 | cell_mark_overlay.gd 新建(13 成员+六函数段+draw_centered_text 单点化);四冻结成员宿主原位;board_view 标识域改址+cell_rect_probe u.edge | player_copy_sweep_test.gd(wa8 :137-140 u.glyph/u.plate/u.glyph_color 直读);ui_input_probe case④b⑪⑮;run_all 02 选跑 | player_copy 夹具真实构建;ui_input_probe 合成 push_input | 冻结面直读断言零改动全绿;golden 三张 0.00%(雾层原位夹在 overlay_under 与 removed_dim 之间) | 绿(四套件全绿+probe_gate 全绿) |
|
||||
| V3 | 站桩两状态件 | standee_vitals.gd/standee_motion.gd 新建;standee_body.gd 宿主 31→10+转调壳+tween 路径串改指;battle_stage_view 一行未改(实测) | standee_fx_sweep_test 全套(_intent_charge 直读、fx_probe().flash_count、enemy_id 解析);theme_projection_test 三条源码锚(GOLD_BRIGHT 顺位墨/HERO_BLUE_BRIGHT/GOLD_BRIGHT 护甲墨/_intent_charge = pid in CHARGE_SKILL_IDS 逐字);probe_gate --full fx_probe 段(碎裂 5/火花 6/闪白计数/三态切换/意图三档) | StandeeBody 公开方法面与 battle_stage_view 演出链;探针场景真实实例化 | fx_probe/intent_probe/hero_state_probe 出口逐键;源码锚 contains 断言逐字命中;tween 路径串由意图弹入与三态断言兜底 | 绿(两套件全绿+fx_probe 段全绿) |
|
||||
| V4 | 潜伏红处置与探针改址 | ui_input_probe.gd 直读改址 u.face.*:四处断言(case①②③⑭,11 处)+case④b 封印纹理槽 st.tex_seal 两处(设计文档直读面清单漏计第五处,L1 就地修复) | ui_input_probe 全套改址后执行且绿;probe_gate --click --full 全绿 | ui_input_probe 合成鼠标事件→BoardView._gui_input() | 断言条件与期望值零变化只改读路径;probe_gate 三硬闸全过 | 绿(probe_gate 全绿,ui_input_probe PASS 十八断言) |
|
||||
| 补件 V1 | 悬停域拆件 | board_hover.gd 新建(11 函数族+2 成员+引用束 7);board_view.gd 函数族与 :70-71 成员迁出、三入站口与 hover_probe 留宿主委托 | ui_input_probe 悬停三语义断言(case①②③)+ui_click_probe+type_glow_shot_probe;render_gate golden | 合成 InputEventMouseMotion/Button 经 _gui_input 入站口;hover_probe() 读面 | 探针可见性断言面(按卡①改型后投影面 u.face.* 口径);golden 三张 0.00% | 绿(probe_gate 全绿+golden 8 屏 OK) |
|
||||
| 补件 V2 | 断点域拆件 | breakpoint_store.gd 新建(R2:六成员+27 键+九函数归件);adventure_runner 断点函数族与 6 成员迁出(件侧语句入 store、宿主侧语句按原语句序入壳) | breakpoint_resume_test 全套(:186 改址 BreakpointStoreScript.BREAKPOINT_FIELDS 后 27 键断言面);save_rng_roundtrip_test;cross_system_flow_test(含 _feats_breakpoint_roundtrip) | AdventureRunner.resume_adventure()/start_adventure() × SaveManagerCore 断点域 | 断点快照往返逐键断言面(键名/策略/键序零变化);RNG 回放同序取号 | 绿(三套件全绿+冒烟 15 项 0 失败) |
|
||||
|
||||
孤儿断言:无(零新增断言、零改名,两处既有断言读路径改址均挂 V4/补件 V2 行申报)。测试削弱:仅卡片第 15/14 节申报的两处读路径改址+一处漏计补改址,判据零变化。全部断言在当轮真实跑批执行且通过(孤立验证各 T 段留痕于提交信息;probe_gate/render_gate/run_all 回执与日志在案)。
|
||||
|
||||
## 3. 独立验收审计结论
|
||||
|
||||
**通过(可合回),零缺漏**——审计报告 `reports/iter45-验收审计-2026-10-31.md`(未参与实现的独立子代理执行:对照表六行逐行 grep 核实+九份跑批日志全绿核对+真实入口代码级核实+源码锚逐字+BREAKPOINT_FIELDS 与 master 旧表机械化 diff 零行+测试削弱与两卡申报逐字相符+三函数零漂移抽查+键账直数与 §5 表逐格一致+终树与合并态零 diff+独立复跑 ui_input_probe exit 0)。两条不阻塞注记:A——type_glow_shot_probe 系窗口化人工取证探针非闸件,V1 行归属表述已按审计修正,其取证语义由 board_shot_probe 双帧+golden+type_glow 单元套件 48 检查承接;B——tween 路径串实落为目标对象换代+裸属性名(与卡面「mo._intent_scale」句同义异形,全仓零字面绑定面,意图弹入与三态兜底断言实跑绿)。
|
||||
|
||||
## 4. 实机目检总清单(登记项,真人检测只登记不阻塞)
|
||||
|
||||
1. 棋盘悬停三语义(光标/目标格边框/路径预览点迹)实机抽验——ui_input_probe 十八断言已绿,登记可选目检。
|
||||
2. 站桩意图三档动画与主角三态切换实机观感——fx_probe 断言已绿,登记可选目检。
|
||||
3. 单格六步时序重排后整帧观感——golden 三张 0.00% 已证逐位一致,登记为「零预期差异」确认项。
|
||||
(登记动作归批后收尾/文档批入体验验证清单;本批义务以本清单登记为了结。)
|
||||
|
||||
## 5. 遗留读数义务与键账终值(留债口径)
|
||||
|
||||
| 键 | 登记值 | 终值 | 口径 |
|
||||
|---|---|---|---|
|
||||
| board_cell_unit max-class-variables | 30 | 10 | 清偿(10 < 30 改小不红;基线收账归用户发令人工 --refresh --force) |
|
||||
| standee_body max-class-variables | 19 | 10 | 同上 |
|
||||
| board_view max-class-variables | 32 | 31 | 留债只降不升(+1 为 _hover_comp 件引用成员) |
|
||||
| board_view max-public-methods | 27 | 27 | 持平(全为契约面) |
|
||||
| adventure_runner max-class-variables | 28 | 23 | 留债只降不升(+1 为 _bp_store 件引用成员;约 22 预期+件引用=23) |
|
||||
| 六新件(cell_base_layer 12/cell_mark_overlay 13/standee_vitals 12/standee_motion 11/board_hover 9/breakpoint_store 15) | 无基线键 | 全部 ≤15 阈内零新键(store 15 贴顶禁再增) | gdstyle 单文件直跑零命中实测 |
|
||||
|
||||
遗留观察(工具面,非本批范围):`tools/run_all_gates.sh` 02 关联档以逗号连接多套件词传单个 `--only=a,b` 参数,而 `game/tests/run_all.gd` 解析器不切逗号(多词整串做子串匹配→零命中 quit(2))——本轮验证以多 `--only=` 旗标形态绕过;合回后 CI 跑全量档不经此路径,不受影响。建议工程批统一(闸脚本改传多旗标或解析器补 split),登记待办由用户裁决。
|
||||
|
||||
## 6. 实现决定记录
|
||||
|
||||
1. **draw_glyph_layer 增 plate 第 5 参**:设计文档单格篇 §2.1「plate 绘制侧零消费」系 413124b0(迭代 41 测试债批)恢复 `if plate:` 守卫之前的过时实查——现行码守卫在位,迁出即随行,否则 dungeon 数字一律垫牌(golden L1 将漂移 2.74%,正是 413124b0 修过的缺陷)。保零漂移优先于设计文档过时细节。
|
||||
2. **探针第五处改址**:设计文档单格篇 §1.4 直读面全清单漏计 case④b 的 `st.tex_seal` 两处(其「其余成员全仓零外部读方」复核有漏);实跑暴露脚本错误挂死,按卡片 L1(改址漏改就地修复)改址 `u.face.tex_seal`,判据零变化。
|
||||
3. **st/mo 类型化**:宿主成员以 preload 常量作类型注解(`var st: _VITALS`)——无类型则 `bar_w * st.hp_value` 等 `:=` 推断失效(S9 同尺度编译错);cell 件 base/face 无推断消费点保持无类型。
|
||||
4. **HeroState 枚举与 _HS_NAME/_HS_VALUE 随三态机归 standee_motion**:三态切换是 motion 职责语句内域;全仓 grep 零外部消费实测(外部 String 契约经 register/set 形参不变)。
|
||||
5. **motion.set_portrait_texture 三参无默认**:box 必传(宿主壳恒传),避免字面量默认值二写。
|
||||
6. **board_hover 引用束实为 7 项**:卡片约 7 预期=cells/minesweeper/diggable+光标写入+hover_forbidden——实际另需 _cell_at 命中换算与 chord_attempted 发射两 Callable(11 函数逐字迁移的最小必需面),单字典注入 9 成员在预算内;minesweeper 每战重绑由 rebuild 同拍回写件成员。
|
||||
7. **悬停常量处置**:COL_HL_TARGET/CURSOR_DIG/CURSOR_MOVE_SEM/CHORD_WINDOW_MS 仅悬停函数消费→随迁;COL_SEAL 双侧服役(宿主 :658 留守)→双侧各自 alias UiKit 单源零二写。
|
||||
8. **board_view 31/adventure_runner 23**:较卡面「约 30/约 22」各+1,来源=拆出件引用成员(_hover_comp/_bp_store),留债「只降不升」口径达成。
|
||||
9. **breakpoint_store 引用束解包为原名成员**(db/rng/_stats/_wallet/_journal/_curio/_stop/_refresh_bank/_loadout,6+9=15 贴顶):保迁移函数体逐字(成员名与宿主侧原名一致);快照宿主输入 state/level_index/master_seed/runner/adventure_counters 逐调传参(5 参合规上限内),件禁反向持宿主(RefCounted 成环)。
|
||||
10. **_bp_read_int 零调用者随族迁移**:迁移前实查无调用点(疑历史遗留),逐字搬运保现状,零行为面。
|
||||
11. **卡② v1.1 修订**:T2 机制经停机呈报用户裁 R2 后由本会话执行写卡职能落 v1.1(主区 df6cafcb)——用户裁决链完整。
|
||||
12. **新增件 .uid 边车随各卡末笔入库**(六件)——.gd/.uid 同步纪律。
|
||||
13. **适配本地 CI 换代**:批末不在工作区跑全量域闸(旧协议作废)——收口=冻结→并 master(rebase 重放形态,master 尖为分支祖先且台账无合并笔,终树与合并态逐字节一致经断言)→重塑→独立审计→主区 --no-ff 合回→post-merge 钩子自动 CI 全量→ci-status.json 绿判收口。
|
||||
14. **批件四件改主区直提**:工作区批件提交被 08c 流水线闸拦(非本批红——master 侧 7a2d19fd 补提交的「棋盘格边长口径收口批」卡片申报能力行在该卡并行会话未提交的 README 脏件里,工作区读树即红、主区读盘绿);reports/ 属文档面,按车道铁律主工作区直改+直提合法,改在合回后主区提交(与验收审计报告同笔)。
|
||||
15. **resume_adventure 超长修复(CI 追绿期,主区直提)**:合回后 CI 首次全量跑到代码域现 S13 新键 `adventure_runner|max-function-length|resume_adventure`(55 行 > 默认 50——壳吸收宿主侧回填语句所致);修复=把续玩收束段(停点直回/已兑付重发/无停点续玩起步,19 行)按原语句序抽为宿主私有函数 `_resume_pending_or_start(bp)`,壳降 34 行,语句序逐句不变、所有权面零变化;干净树复验=三断点套件全绿+S13 零新键。CI 同轮另两红(02 theme_projection 脚本错误、09 `config_db.gd|load_tables` 新键)经干净树分离判定均系「布局几何单点化批」未提交代码脏改所致,非本批面。
|
||||
|
||||
## 7. 能力行核对(收尾义务)
|
||||
|
||||
`game/tests/README.md` 能力表核对:本批零新增能力、零退役、零改名——「棋盘悬停反馈」「地形瓦片套与格面数字可读」「站桩敌人呈现与结算演出落点」「UI 全局主题与按钮五态」「玩家面文案与危险格格面字形」「未开格类型微光」「断点片段往返与续玩幂等」「旧档迁移链与断点续玩零跳号」各行的真实入口与代表用例名与落地一致(ui_input_probe.gd:_ready/player_copy_sweep_test/theme_projection_test/standee_fx_sweep_test/breakpoint_resume_test 等全数在库原名)。核对通过,零回表需求。
|
||||
|
||||
## 8. 合回落地与收口阻塞记录(2026-10-31 00:34 时点)
|
||||
|
||||
合并 f817ab2d 已落地(两笔卡提交 e7920e8f/9b0b164d,树与已验证合并态逐字节一致)。post-merge CI 首跑 **verdict=red(23 秒快速失败)**,三红闸归属核验:
|
||||
|
||||
| 红闸 | 红项 | 归属 |
|
||||
|---|---|---|
|
||||
| 08c 流水线闸 | 待办清单.md:5 来源词「批次移交;原三点之一」不在四选一 | **并行会话未提交脏改**(该行其把迭代 43 批后待裁三点改两点时在来源词追加了非白名单后缀;已提交态无此后缀)——本批零涉 |
|
||||
| 08e 能力审计 | design/gdd/ux/battle.md:148 代码路径 `.py`(禁写实现细节) | **并行会话未提交脏改**(battle.md 系其在飞件;已提交态 :148 无此内容)——本批零涉 |
|
||||
| 10 熵增闸 | CI 时点瞬态红;直跑复验 PASS(六查全过) | 已消解 |
|
||||
|
||||
代码域闸因文档域快速失败未及运行——本批代码的合回后全量验证待两处并行脏件由其归属会话修复(或用户裁决处置)后 CI 追绿时兑现。批件五件(本报告/反哺点/审计报告/两停机呈报)主区提交同被 08c 红拦(git add 已就绪,红解即提)。工作区清理(git worktree remove+删分支)待 CI 绿后执行。
|
||||
@@ -1,46 +0,0 @@
|
||||
# 迭代 45 验收审计报告(2026-10-31)
|
||||
|
||||
> **接收方**:迭代 45 合回门。审计员=未参与实现的独立会话,只读审计;工作区 `D:\code\g-plan2-iter45`(分支 iter45,两笔卡提交 ca7ca992/7f2da008,父=master 尖),主区只读参照。审计对象=卡①呈现层状态件批+卡②gdstyle 尾波补件批,输入=两卡(§9/§15、§8/§14)、实现报告(§2/§6)、净变更 diff、九份跑批日志(/tmp)。审计动作=grep 定位+diff 比对+日志核对+一次最窄复跑;未跑其他闸、未改任何库内文件。
|
||||
|
||||
## 0. 证据基线
|
||||
|
||||
- 净变更面:`git diff master...iter45-merge-state` 恰 18 文件(六新件+四宿主+ui_input_probe+breakpoint_resume_test+六个 .uid),其余全部测试/探针/文档文件零改动;`git diff iter45 iter45-merge-state` = 0 行(分支终树与合并态逐字节一致,重塑前跑批证据跨重塑有效)。
|
||||
- 跑批日志(/tmp,九份全绿):render_t3/render_c2t1(render_gate 全绿,golden 三张 0.00% 各现两遍)、probe_t3b/probe_c2t1(probe_gate 全绿,ui_input_probe 十八断言 PASS、fx_probe PASS、ui_click_probe 问题=0)、runall_t1b(4 套件:terrain 19/type_glow 48/theme_projection 164/player_copy 22 全绿)、runall_t2b(2 套件:standee_fx_sweep 18/theme_projection 164 全绿)、runall_c2t2(3 套件:breakpoint_resume/save_rng_roundtrip 17/cross_system_flow 22 全绿)、smoke_merge(15 项 0 失败,重塑后)、uip_rebase(十八断言 PASS,重塑后)。
|
||||
- 审计员独立复跑(重塑终树):`--headless res://probe/ui_input_probe.tscn` → exit 0+「十八断言全绿」PASS 行(日志 /tmp/audit_uip.log)。
|
||||
|
||||
## 1. 对照表逐行核对(实现报告 §2 六行)
|
||||
|
||||
- **V1 单格基座层域件——通过(附注记 A)**。golden 三张真实成立:render_t3.log 与 render_c2t1.log 各有三行 `[golden] board_L1_dungeon.png — changed=0.00%(容差 ≤16 差/≤2%)OK`(L2/L3 同)+`[golden] PASS(3 屏黄金图对比全过)`+`[render_gate] 全绿`;board_shot_probe 双帧取证 PASS 两遍(`非生效格零变化/生效格内缘带外零侵入`,L1 glow=2/L2、L3 glow=4)。六步时序器在 board_cell_unit.gd `_draw`(:56-63):base.draw_base→face.draw_marks→face.draw_glyph_layer→face.draw_overlay_under→_draw_fog_layer→face.draw_removed_dim,与卡§8 T1 序逐字对齐。注记 A:报告 V1 行验收测试写「probe_gate --full(board_shot_probe/type_glow_shot_probe)」——board_shot_probe 实属 render_gate(render 日志在案),type_glow_shot_probe 当轮未执行(非任何闸件:tools/ 全 grep 零挂载;头注自述「必须窗口化运行,headless 抓帧恒空」);其取证语义(禁侵/带外零侵入)由 board_shot_probe 双帧+golden 0.00%+type_glow 单元套件 48 检查全绿+ui_input_probe case⑰ 承接,判据面无缺口,属报告单元格表述不准+人工取证未登记,不阻塞。
|
||||
- **V2 单格标识叠加域件+冻结面保留——通过**。player_copy_sweep_test.gd:137-140 三断言在位(u.glyph=="危"/u.plate==true/u.glyph_color==RED_MINE,〔wa8〕尾缀),runall_t1b 该套件 22 检查全绿;ui_input_probe case④b/⑪/⑮ 冻结读面(glyph/fog_state)在 probe diff 中零触碰(全 diff 仅 13 处 st→face 读路径行);probe_gate 两日志全绿。
|
||||
- **V3 站桩两状态件——通过**。standee_fx_sweep_test :88 enemy_id/:97 flash_count/:116 `s1._intent_charge` 直读断言在位,runall_t2b 18 检查全绿;theme_projection_test :676-684 四条 contains 断言在位(164 检查全绿);probe_gate fx_probe 段 PASS(碎裂5/火花6/闪白/三态/意图三档)。battle_stage_view.gd 不在 18 文件 diff 清单=一行未改证实。
|
||||
- **V4 潜伏红处置与探针改址——通过**。改址落地:ui_input_probe.gd :234-235(u1.face.hl_visible/hl_color)、:243-244、:250、:374-379,全 diff 恰 13 处读路径(11+case④b tex_seal 两处 :269/:270,与「漏计补改址」申报数一致),u.st. 残留 grep=0;断言条件与期望值文本逐字未动(见第 3 节);probe_gate 两日志全绿;审计员独立复跑 exit 0+PASS。
|
||||
- **补件 V1 悬停域拆件——通过(附注记 A 同条)**。ui_input_probe 悬停三语义断言(case①②③)在位且两轮 probe 日志 PASS;ui_click_probe 两日志「问题=0」;render golden 三张 0.00%;board_hover.gd 在库(9 var),board_view 三入站口委托与 hover_probe 留宿主经 diff 核实(board_view 仅函数族与 :70-71 成员迁出+改址)。
|
||||
- **补件 V2 断点域拆件——通过**。breakpoint_resume_test 真实入口核实:全程 `AdventureRunnerScript.new(db, rng)` + `set_save_manager(sm)` + start_adventure/resume_adventure 真调(:28-:186 十个 runner 实例),非直调内件;runall_c2t2 三套件全绿(breakpoint_resume PASS 行+「断点往返/续玩确定性/幂等…全绿」);smoke 15 项 0 失败。
|
||||
|
||||
## 2. 判据绑定面抽查
|
||||
|
||||
- **golden 零差异(卡①)**:第 1 节 V1 行已引——三张 0.00% 行在两份 render 日志真实出现,非报告转述。
|
||||
- **theme_projection 三条源码锚(卡①)**:standee_body.gd 逐字 present——`_intent_charge = pid in CHARGE_SKILL_IDS`(:154)、`HORIZONTAL_ALIGNMENT_LEFT, -1, UiKit.FS_HINT, UiKit.GOLD_BRIGHT`(:405)、`col = UiKit.HERO_BLUE_BRIGHT`(:471)、`col = UiKit.GOLD_BRIGHT`(:473)。
|
||||
- **27 键冻结(卡②)**:`git show master:game/core/adventure_runner.gd`(:539-569)与 breakpoint_store.gd(:16-46)两段常量机械化抽取比对——各 28 条 `"键": {"strategy": "…"}`、diff 零行=键名/策略/键序逐键一致。计数注记:master 实表 28 键(27+gain_journal,前者批次已声明的唯一扩展;测试冻结清单 :186 段同 28 键口径),卡片「27 键」沿旧账,冻结判据不受影响。
|
||||
|
||||
## 3. 测试削弱核对——通过(零未申报削弱)
|
||||
|
||||
`git diff master...iter45-merge-state` 全量 18 文件中测试面仅两个,逐一全文 diff:
|
||||
|
||||
- ui_input_probe.gd:13 处 `u.st.X→u.face.X` 读路径替换, hunks 内断言条件(`not …hl_visible or …hl_color != UiKit.GOLD`/`!= UiKit.RED_FORBID`/`dot_visible` 计数/`mutation_mark` 两态/`seal_tex` 槽位)与期望值文本逐字未动;零删断言、零阈值改动、零扫描面缩小。与卡① §15 申报(4 处 11 读+漏计 2 读)数目与内容一致。
|
||||
- breakpoint_resume_test.gd:恰两行——新增 `const BreakpointStoreScript := preload(...)` 与 :186 承载换代(`AdventureRunnerScript.BREAKPOINT_FIELDS`→`BreakpointStoreScript.BREAKPOINT_FIELDS`),断言条件与冻结键清单文本零变化。与卡② §14 申报逐字相符。
|
||||
- 其余 66 套件文件与全部探针文件零改动(18 文件清单外无任何测试面)。
|
||||
|
||||
## 4. 非行为改动零漂移核对——通过
|
||||
|
||||
- **迁移函数逐行比对(三件抽查)**:
|
||||
- `_draw_south_facade`(master board_cell_unit :352-366 → cell_base_layer :168-182):diff 全部行属申报内机械改写三形态——`st.facade_south`→`facade_south`、`st.edge`→`rect.size.x`(3 处)、`draw_rect`→`canvas.draw_rect`(3 处)+签名增 (canvas, rect) 形参;几何常量/色值/绘制序零变化。
|
||||
- `play_intent_motion`(master standee_body `_play_intent_motion` :213-227 → standee_motion :111-125):diff 属申报改形——`_intent_charge`→参 `charge`、tween 目标 `st`→`self`、`create_tween()`→`_owner.create_tween()`;各档时长/位移/缓动零变化。注记 B:卡面「tween 路径串改 "mo._intent_scale"」实落为「目标对象换代+路径串保留裸名」(与 master 实形 `tween_property(st, "hp_value",…)` 同构等价);全仓 grep「mo._intent_scale/st.hp_value」零测试/闸绑定字面串,卡片判据绑定面原文即「由意图弹入与三态断言兜底」且已实跑绿——判据无缺口,属卡面表述与实现的同义异形。
|
||||
- `_bp_read`(master adventure_runner :636-650 → breakpoint_store :196-210):含注释行逐字节相同(diff exit 0)。
|
||||
- **键账实测(grep 直数 top-level var,与实现报告 §5 表逐格一致)**:cell_base_layer 12(另 9 常量随迁=申报)/cell_mark_overlay 13/standee_vitals 12/standee_motion 11/board_hover 9/breakpoint_store 15/board_cell_unit 10(30→10 清偿)/standee_body 10(19→10 清偿)/board_view 31(32→31 留债)/adventure_runner 23(28→23 留债)。
|
||||
- **总判据**:golden 0.00%×3×两轮+既有断言面六套件全绿+probe_gate/render_gate 全绿+冒烟 15 项,日志在案(第 0 节)。
|
||||
- 申报内决定核对:draw_glyph_layer 增 plate 第 5 参(board_cell_unit :58 调用 5 参)=实现报告 §6.1 申报在案,理由(41324b0 plate 守卫恢复)成立,golden 0.00% 佐证零漂移。
|
||||
|
||||
## 5. 总结论
|
||||
|
||||
**通过(可合回)**——六行对照全绿、抽查判据面全部成立、零未申报削弱、零漂移证明在案;两条例外注记(A:type_glow_shot_probe 未执行属窗口化人工取证面+报告单元格闸归属笔误,判据面由 board_shot_probe/golden/单元套件完整承接;B:tween 目标对象换代与卡面路径串句同义异形,零字面绑定面)与两条观察(工作区未跟踪散件 game/tests/unit/presentation/tune_sim_batch_parity_test.gd.uid 非本批改动面、合回不受影响;八份日志产自重塑前原史——终树与合并态零 diff+重塑后 smoke/uip 复跑+审计员独立复跑三重兜底)均不构成缺漏。
|
||||
@@ -1,322 +0,0 @@
|
||||
# 设计——单格绘制状态件拆分(board_cell_unit 类变量键真实清偿)
|
||||
|
||||
设计讨论段过程稿 v1.0——待主会话汇总裁决。
|
||||
|
||||
结论行:推荐「绘制层域两件案」——状态件按 _draw 既有的层域轴拆成两个独立文件的绘制域件(格面基座层件 12 成员/格面标识与叠加层件 13 成员),几何与微光子件面留宿主(10 成员),绘制命令随入参同件迁移,宿主 _draw 退为六步时序器;三文件各自类变量 10/12/13,全部低于阈值 15 且不依赖任何闸机口径漏洞。
|
||||
|
||||
---
|
||||
|
||||
## 1. 现状与两项关键发现
|
||||
|
||||
### 1.1 键账现状
|
||||
|
||||
- 涉案键:`game/presentation/views/board_cell_unit.gd|quality/max-class-variables = 30`(tools/gdstyle_baseline.txt,2026-10-29 重锚版)。阈值 15(gdstyle 默认值,tools/gdstyle.toml 不设数值阈值)。
|
||||
- 源码实查(2026-10-29):全文件 33 个类级 var 声明=宿主 6+inner 状态件 `_CellPaintState` 27。闸实测 30(本会话对单文件实跑 gdstyle v0.4.0 复核)。
|
||||
- 文件头注在案:状态件职责语句「单格绘制输入集」;探针直读冻结成员(glyph/fog_state/plate/glyph_color)与 `_glow_layer` 住宿主。
|
||||
- 迭代 41 已把 `_draw` 拆成约 20 个分层私有函数——函数级键已清零,本设计只解决类变量 30 这一个键。
|
||||
|
||||
### 1.2 发现一:gdstyle 对 inner class 的计数不是均匀展平,是「首个 setter 截断」
|
||||
|
||||
主会话给的事实是「inner class 成员按宿主展平计数」。本会话实测修正:截断点在 inner class 内**第一个带 setter 的属性**。
|
||||
|
||||
| 文件 | 声明数(宿主+inner) | 闸实测 | 归因 |
|
||||
|---|---|---|---|
|
||||
| board_cell_unit.gd | 6+27=33 | 30 | 宿主 6+inner 第一个 setter(edge,30–35 行)之后的 24 个=30;setter 声明本身及其之前的 3 个(_owner/cell/edge)留在 inner 类一侧不进宿主账 |
|
||||
| standee_body.gd | 6+25=31 | 19 | 宿主 6+inner 第一个 setter(_intent_scale,37–40 行)之后的 13 个=19 |
|
||||
| board_view.gd(无 inner class) | 32 | 32 | 平面文件=声明数逐一全计 |
|
||||
| main.gd(无 inner class) | 49 | 49 | 同上 |
|
||||
|
||||
四点全部精确吻合。推论三条:
|
||||
|
||||
1. 现行登记值 30 是截断口径的**欠估**——若 gdstyle 升级修掉该解析行为,同文件键跳到 33=恶化红。任何「调整 inner class 内成员顺序/把 setter 挪位置」的降数手法都是在利用解析缺陷,工具一升级即翻车,且属「为迎合机检保留无效形态」,禁。
|
||||
2. 主会话「任何 inner class 重新分组都降不了数」的结论在截断口径下依然成立(重排不改总量级),且存在更深的坑——重排确实能改数(把首个 setter 挪到类尾=宿主账只剩 6),但那正是第 1 条禁的手法。
|
||||
3. **唯一稳健出路=拆成独立文件**:平面文件口径=声明数逐一全计(board_view/main 两点实证),预测值即实数,不依赖闸机任何解析行为。
|
||||
|
||||
### 1.3 发现二:ui_input_probe 疑似潜伏红(迭代 41 合并遗留,须 T0 先证)
|
||||
|
||||
ui_input_probe.gd 有四处**绕过 st 直接读格件成员**的断言:case① `u1.hl_visible`/`u1.hl_color`(234–235 行)、case② `.hl_color`(243–244 行)、case③ `.dot_visible`(250 行)、case⑭ `.mutation_mark`(374–379 行)。这四个成员迭代 41 已随状态件迁入 `_CellPaintState`,而 GDScript 外部实例读不到 inner class 的成员(取索引=运行时脚本错误)。
|
||||
|
||||
时间线:探针末次全绿 2026-10-28 05:03(game/tests/.gates/probe_full.log)早于状态件合入 2026-10-29 01:37(三文件同秒 mtime=合并检出);基线注记「迭代 41 两卡特许直接合回未重跑代码域闸」。合入后探针未跑过,潜伏红未经证实也未经证伪。同批 standee(u4)作者对同类问题做了宿主侧出口(fx_sweep_counters 方法返回计数器字典),u3 未处理这四处直读。
|
||||
|
||||
处置(本设计的立场):**无论潜伏红真假,本设计的拆分都把探针直读面显式化**——hl_color/hl_visible/dot_visible/mutation_mark 落入格面标识与叠加层件,探针四处断言改址 `u.face.*`(对照表申报的探针改址,断言条件与期望值零变化);四个头注冻结成员(glyph/fog_state/plate/glyph_color)留宿主不动。T0 用一次 ui_input_probe 实跑证实或证伪潜伏红,结果记实现报告。
|
||||
|
||||
### 1.4 探针/测试直读面全清单(改址与保留的依据)
|
||||
|
||||
| 消费方 | 读什么 | 现路径 | 设计后路径 |
|
||||
|---|---|---|---|
|
||||
| ui_input_probe case④b⑪ | glyph | u.glyph | u.glyph(宿主冻结,不变) |
|
||||
| ui_input_probe case⑮ | fog_state | u.fog_state | u.fog_state(宿主冻结,不变) |
|
||||
| player_copy_sweep_test wa8 | plate/glyph_color | u.plate/u.glyph_color | 不变(宿主冻结) |
|
||||
| ui_input_probe case①②③⑭ | hl_visible/hl_color/dot_visible/mutation_mark | u.X(已断——潜伏红) | u.face.X(探针改址四处) |
|
||||
| board_view.cell_rect_probe:891 | edge | u.st.edge | u.edge(board_view 内部改址) |
|
||||
| board_shot_probe/type_glow_shot_probe | 格矩形 | 经 cell_rect_probe | 不变(间接) |
|
||||
|
||||
其余状态件成员全仓零外部读方(本会话 grep 全量复核)。
|
||||
|
||||
---
|
||||
|
||||
## 2. 现状成员全列(33 个)
|
||||
|
||||
写入方全部在 board_view.gd(唯一写方文件);行号为 2026-10-29 实查,实现批 T0 重核。setter→重绘语义列=该成员 setter 的现行副作用(无 setter=普通赋值不重绘)。
|
||||
|
||||
### 2.1 宿主 6 个
|
||||
|
||||
| 成员 | 类型 | 重绘语义 | 写入方 | 读取方 | 绘制消费层 |
|
||||
|---|---|---|---|---|---|
|
||||
| st | _CellPaintState 聚合 | — | 宿主 _init:147 | 全部绘制函数经 st.X | 载体 |
|
||||
| glyph | String | setter→queue_redraw | _paint_cell:667 | _draw_glyph_layer:200/205、_draw_fog_memory:344 | 字形层+迷雾记忆态(探针冻结) |
|
||||
| glyph_color | Color(UiKit.INK) | setter→queue_redraw | _paint_cell:668/674 | _draw_glyph_layer:205 | 字形层(探针冻结) |
|
||||
| plate | bool | 无 setter | _paint_cell:675 | **绘制侧零消费**(_draw_digit_plate 由 glyph 非空无条件触发,plate 不参与判据);读方仅 player_copy_sweep_test:138 | 无(探针冻结成员,禁删禁接线——接线即行为变化) |
|
||||
| fog_state | int | 守卫 setter→queue_redraw | _paint_cell:734/736 | _draw_fog_layer:247 | 迷雾层(探针冻结) |
|
||||
| _glow_layer | Node2D 子件 | — | _sync_glow_layer:407–412 | edge/badge_glyph 两 setter、_sync_glow_layer | 微光子件(头注在案住宿主) |
|
||||
|
||||
### 2.2 状态件 27 个
|
||||
|
||||
| 成员 | 类型 | 重绘语义 | 写入方(board_view) | 读取方 | 绘制消费层 |
|
||||
|---|---|---|---|---|---|
|
||||
| _owner | Node2D 回引 | — | 宿主 _init:147 | 各 setter 内部 | — |
|
||||
| cell | Vector2i | 无 setter | rebuild:250 | **全仓零读方** | 无(诊断观测面,待裁点 3) |
|
||||
| edge | float | setter→glow setup+queue_redraw | set_cell_area:204、rebuild:251;读 _paint_cell:704、cell_rect_probe:891 | 全部层 | 全层(rect 尺寸基准) |
|
||||
| bg_sb | StyleBoxFlat | 无 setter | _paint_cell:666 | _draw_base_layer:174、_draw_contact_or_fallback:187、_draw_bevel:314 | 基座层 |
|
||||
| contact_bands | Array[int] | 无 setter | _apply_contact_bands:804 | _draw_contact_bands:271 | 接触带 |
|
||||
| contact_corners | Array[int] | 无 setter | :805 | :279 | 接触带 |
|
||||
| contact_col | Color | 无 setter | _process 呼吸:780/787、_apply_contact_bands:810/816 | _draw_contact_or_fallback:183、_draw_contact_bands:278、_draw_contact_corner:293–305 | 接触带 |
|
||||
| outline_sides | Array[int] | 无 setter | _paint_cell:676(assign)/:700(append) | _draw_base_layer:166、_draw_outline_sides:257 | 描边 |
|
||||
| facade_south | bool | setter→queue_redraw | _paint_cell:677/690;读 :696 | _draw_south_facade:352 | 南立面 |
|
||||
| proj_band | float | setter→queue_redraw | _paint_cell:678/704 | _draw_north_projection:367 | 地面投影 |
|
||||
| badge_glyph | String | setter→glow mask+queue_redraw | _paint_cell:719/726 | _draw_glyph_layer:206–210、_sync_glow_layer:413 | 徽章 |
|
||||
| dot_visible | bool | setter→queue_redraw | 路径预览:549/554 | _draw_overlay_layers:230 | 叠加层(探针直读 case③) |
|
||||
| hl_visible | bool | setter→queue_redraw | 悬停:512/517/521/525/534 | :233 | 叠加层(探针直读 case①) |
|
||||
| hl_color | Color | setter→queue_redraw | :513/518/522/526 | :235 | 叠加层(探针直读 case①②) |
|
||||
| font | Font | 无 setter | set_world_font:185、rebuild:260 | _draw_glyph:392、_draw_badge:418 | 字形/徽章/迷雾记忆 |
|
||||
| bevel | float | setter→queue_redraw | rebuild:253 | _draw_bevel:312–321 | 倒角 |
|
||||
| tex_base | Texture2D | 无 setter | _paint_cell:665 | _draw_base_layer:161、_draw_fog_memory:341 | 基座+迷雾记忆 |
|
||||
| tex_mutation | Texture2D | 无 setter | 无(素材槽位恒 null) | _draw_glyph_layer:197 | 纹带槽 |
|
||||
| tex_glyph | Texture2D | 无 setter | 无(槽位) | :202 | 数字槽 |
|
||||
| tex_badge | Texture2D | 无 setter | 无(槽位) | :207 | 徽章槽 |
|
||||
| tex_seal | Texture2D | 守卫 setter→queue_redraw | _paint_cell:614/618 | :212 | 封印槽 |
|
||||
| tex_facade | Texture2D | 无 setter | _paint_cell:679/709 | _draw_e_facade:380–386 | E 格墙面 |
|
||||
| facade_strip | bool | setter→queue_redraw | _paint_cell:680/708 | :380 | E 格墙面 |
|
||||
| treasure_mark | String | 守卫 setter→queue_redraw | _paint_cell:713 | _draw_mutation_marks:326 | 变异标记 |
|
||||
| mutation_mark | String | 守卫 setter→queue_redraw | _paint_cell:723/725 | :330 | 变异标记(探针直读 case⑭) |
|
||||
| glow_group | int | 守卫 setter→_owner._sync_glow_layer() | _paint_cell:727、_sync_glow_to_units:768 | _sync_glow_layer:404/412 | 微光子件 |
|
||||
| removed_dim | bool | setter→queue_redraw | _paint_cell:737 | _draw_overlay_layers:239 | 退色层 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 方案形态——三条路的评估
|
||||
|
||||
### 3.1 路 A:状态件升格独立文件×N(推荐,取「绘制域件」形态)
|
||||
|
||||
按 _draw 已有的层域轴切。迭代 41 拆函数时已经沿这条轴走了(基座/字形/叠加/迷雾/描边/接触带/倒角……),本设计把同一条轴从函数级升到类级:**每个件=一个绘制层的入参+该层的绘制命令**。件有行为(draw 方法族+setter 重绘语义)、有职责语句、单一变化原因=该层的视觉规格(art-bible 对应条款族),满足 code-conventions §1.1 全部五条拆分判据与 §1.2「功能=类」。这是对迭代 41「被动数据袋」否决的正面回答:成员不再是「剩下的装一起」,而是「这一层画什么、怎么画」的完整领域单元。
|
||||
|
||||
细化两个子形态:
|
||||
|
||||
- **A2 绘制命令随迁(推荐)**:件的 draw 方法持有绘制命令本体,宿主 _draw 退为时序器。真内聚(状态+行为同件);宿主从 423 行缩到约 150 行,退离 §1.1 的 400 行审视线。
|
||||
- **A1 纯入参件(淘汰)**:件只装数据,绘制函数留宿主。宿主仍有约 20 个绘制函数经 st 间接取值,件本质=把一个被动数据袋拆成两个被动数据袋,迭代 41 的否决理由原样复活;§1.1-① 立不住。
|
||||
|
||||
### 3.2 路 B:成员真实削减(淘汰为主出路,保留两处微收割)
|
||||
|
||||
要降到 15 需削 18 个成员,而可削的只有:
|
||||
|
||||
- `cell`:全仓零读方(写入仅 rebuild 一处)。可删,零行为变化(待裁点 3)。
|
||||
- `plate`:绘制侧零消费,**但**是探针冻结成员(player_copy_sweep_test wa8 直读)——禁删;给它接上绘制判据反而改变 golden 现状(「人」回退格会少画牌),禁。
|
||||
- tex_mutation/tex_glyph/tex_badge 三槽位:从未被写入但被 _draw 消费(elif 程序化回退路径),是 art-bible §8.2 在册素材槽位——结构承载,非无效成员,留。
|
||||
|
||||
削减上限 1–2 个,差 16 个以上,**单独不可达**。上移 board_view 方向被堵死:board_view 类变量 32 已按尾波卡 D5 裁豁免终局(键永久基线内、禁再恶化),上移任何成员都构成禁再恶化的恶化。
|
||||
|
||||
### 3.3 路 A3:整体搬成一个大状态件文件(淘汰)
|
||||
|
||||
状态件 24–27 个成员整体独立成文件,新文件自身 24–27>15=基线外新键——任务简报预警的陷阱,实测确认。拆是必须的,问题只是切几刀、沿什么轴。
|
||||
|
||||
### 3.4 路 C:重绘回引形态三选(随 A2 定案)
|
||||
|
||||
| 形态 | 判定 |
|
||||
|---|---|
|
||||
| **_owner 直引(推荐,现状形态)** | Node 持 RefCounted 成员、RefCounted 持 Node 回引——Node 引用不参与引用计数,**无环无泄漏**(现行 inner class 同款,先例在役)。setter 语句逐字保形,零新契约。Godot 官方判据下 RefCounted 值对象持宿主回引是常规形态。 |
|
||||
| Callable 注入 | 淘汰。edge/badge_glyph/glow_group 三个 setter 的副作用不止 queue_redraw(glow 层 setup/badge mask/子件同步),一个 Callable 表达不了,得注两三个=每件多 1–2 成员+setter 体改写=语义面重写而非迁移。 |
|
||||
| 信号 | 淘汰。Godot 信号同步派发、时序等价,但守卫式 setter(tex_seal/treasure_mark/mutation_mark/fog_state 的判重)与 glow 副作用都得改写成发射+宿主分发,新增每信号一行的 §2.1 成文义务,换不来任何行为收益。 |
|
||||
| 弱引用 | 淘汰。解的是不存在的环引用问题,白白加 is_instance_valid 守卫复杂度。 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 拆分定案(推荐案 A2 两件案)
|
||||
|
||||
### 4.1 总账
|
||||
|
||||
| 文件 | 类变量(全计) | 构成 |
|
||||
|---|---|---|
|
||||
| board_cell_unit.gd(宿主) | **10** | edge/cell/glow_group/glyph/glyph_color/plate/fog_state/_glow_layer/base/face |
|
||||
| cell_base_layer.gd(新) | **12** | _owner/bg_sb/contact_bands/contact_corners/contact_col/outline_sides/facade_south/proj_band/bevel/tex_base/tex_facade/facade_strip |
|
||||
| cell_mark_overlay.gd(新) | **13** | _owner/badge_glyph/dot_visible/hl_visible/hl_color/font/tex_mutation/tex_glyph/tex_badge/tex_seal/treasure_mark/mutation_mark/removed_dim |
|
||||
|
||||
对账:原 33 声明=新 10+12+13=35;差额 2=每件各持一个 _owner(原仅一个)。edge/cell/glow_group 上收宿主的理由:edge 是格件自身几何且其 setter 驱动宿主自有 _glow_layer(收编后 setter 体少两处跨对象回引);glow_group 驱动微光子件生命周期(加/撤子节点是 Node 职责,RefCounted 件做不了);cell 是格件身份。三者上收后,跨对象回引只剩「件→宿主 queue_redraw/glow mask」这一类,与头注「setter 触发宿主重绘语义经 _owner 回引保持逐字」完全同形。
|
||||
|
||||
### 4.2 件 A:cell_base_layer.gd(格面基座层绘制件)
|
||||
|
||||
- 落点:`game/presentation/views/cell_base_layer.gd`;extends **RefCounted**(godot-master 判据:瞬态逻辑/数据容器用 RefCounted,Resource 是给可序列化、要进 Inspector 的数据——绘制入参每拍重写、永不落盘,Resource 只带来共享默认值陷阱与序列化包袱);无 class_name(类名缓存面纪律,同宿主与 cell_type_glow_layer 先例),经宿主 preload 引用。
|
||||
- 职责语句:格面基座层绘制域——底面/描边/高墙立面/地面投影/接触带微光/顶面倒角的全部绘制入参与绘制命令。
|
||||
- 单一变化原因:art-bible 基座层视觉规格(§1.2 叠层序/§3.2 接触带/§8.5 结构归程序/v3.5 冻结①立面条款族)——瓦片、立面、投影、微光的画法变了改本件,不触字形与迷雾。
|
||||
- 成员:上表 4.1 行所列 12 个;类型与默认值逐字继承,四个 setter(facade_south/proj_band/bevel/facade_strip)体逐字(_owner.queue_redraw())。
|
||||
- 绘制命令:现宿主九个私有函数随迁——_draw_base_layer/_draw_outline_sides/_draw_south_facade/_draw_north_projection/_draw_e_facade/_draw_contact_or_fallback/_draw_contact_bands/_draw_contact_corner/_draw_bevel——逐字搬运,三处机械改写:`st.X`→裸成员名、`draw_X(...)`→`canvas.draw_X(...)`、`st.edge`→`rect.size.x`;公开入口一个 `draw_base(canvas: CanvasItem, rect: Rect2)`,其余私有。九函数现役零超标键(基线无其函数级键),搬运不改行数与分支=零新函数级键。
|
||||
- 常量随迁:FACADE_HIGHLIGHT_PX/FACADE_NEAR_FRAC/FACADE_FAR_FRAC/FACADE_NEAR_COL/FACADE_FAR_COL/PROJECTION_NEAR_COL/PROJECTION_MID_COL/PROJECTION_EDGE_COL/E_FACADE_FRAC 九个 D/E 档常量(本会话 grep 实查全仓零外部引用,宿主头注「绘制侧单点」句随迁改写)。UiKit.E_FACADE_FOOT_COL 是 UiKit 自己的成员,不动。
|
||||
- 素材槽位 tex_base 例外消费:迷雾记忆态画底纹(宿主 _draw_fog_memory)读 base.tex_base——公开成员读,单向、成文于宿主头注。
|
||||
|
||||
### 4.3 件 B:cell_mark_overlay.gd(格面标识与顶层叠加绘制件)
|
||||
|
||||
- 落点:`game/presentation/views/cell_mark_overlay.gd`;extends RefCounted;无 class_name。
|
||||
- 职责语句:格面标识与顶层叠加绘制域——变异标记/数字色牌与字形/奖励徽章/封印/路径点迹/焦点高亮/中立移除退色的全部绘制入参与绘制命令。
|
||||
- 单一变化原因:art-bible 标识与叠加层视觉规格(冻结④色牌/徽章金字/真视红框/悬停高亮/退色降档条款族)——「格面上标什么记号」变了改本件,不触底面与迷雾。
|
||||
- 成员:上表 4.1 行所列 13 个;八个守卫/非守卫 setter 体逐字(含 badge_glyph 的 glow mask 回引 `_owner._glow_layer`——头注在案的回引语义原样保留)。
|
||||
- 绘制命令:现宿主六个私有函数随迁——_draw_mutation_marks/_draw_glyph_layer/_draw_digit_plate/_draw_glyph/_draw_badge+_draw_overlay_layers 的 dot/hl/removed 三段。字形文字与色(glyph/glyph_color)是宿主冻结成员,作**参数**传入(`draw_glyph_layer(canvas, rect, glyph, glyph_color)`,4 参≤5);文字渲染单点化为本件公开方法 `draw_centered_text(canvas, rect, text, color, font_size)`(5 参合规),宿主迷雾记忆态复用它画记忆墨数字——零复制。
|
||||
- 拆出两个绘制入口的原因:迷雾(fog_state 宿主冻结成员)在原 _draw_overlay_layers 内部夹在 hl 与 removed 之间,宿主时序器在两入口之间插雾层——见 §6。
|
||||
|
||||
### 4.4 宿主保留面(10 成员)
|
||||
|
||||
- 职责语句:被动绘制壳——绘制时序器+视野迷雾域(fog_state 冻结成员+记忆态换装)+微光子件生命周期(_glow_layer/glow_group/_sync_glow_layer)+格件几何(edge/cell)+探针冻结面(glyph/glyph_color/plate)。
|
||||
- 单一变化原因:迷雾规格(art-bible §6.5)与格件节点生命周期。迷雾居基座与标识两件之上、又读件 A 的 tex_base 与件 B 的字体渲染——把它留在宿主是三域中唯一不产生跨件回引的落点。
|
||||
- 头注改写要点(S10 口径 ≤8 行、无日期、无链接):状态件句改为两件句;「探针直读冻结成员」清单照旧(glyph/fog_state/plate/glyph_color+_glow_layer);新增一句「hl_color/hl_visible/dot_visible/mutation_mark 探针读 u.face.*」。
|
||||
|
||||
### 4.5 宿主 _init 与建件
|
||||
|
||||
```
|
||||
const _BASE_LAYER := preload("res://presentation/views/cell_base_layer.gd")
|
||||
const _MARK_OVERLAY := preload("res://presentation/views/cell_mark_overlay.gd")
|
||||
|
||||
func _init() -> void:
|
||||
base = _BASE_LAYER.new(self)
|
||||
face = _MARK_OVERLAY.new(self)
|
||||
```
|
||||
|
||||
件侧 `func _init(owner: Node2D) -> void: _owner = owner`(S9 R3 对 _init 参数豁免——构造注入面形态自由)。每格三对象(Node2D+两 RefCounted)与现状每格两对象同量级;尾波卡 T1 的 `_build_cell_unit` 构建器里仍只有一处 `_CELL_UNIT.new()`,件在宿主 _init 内自建,不触发 allocation-in-loop 新键(该规则扫循环体内的 .new() 文本,构建器函数体不在循环体内)。
|
||||
|
||||
### 4.6 类型闸与头注义务
|
||||
|
||||
两个新件全量类型标注(S9 R1/R2/R3 同尺度);文件头 `##` 注释 ≤8 行、零日期、零链接、零变更叙事(S10);每件头注写职责语句与 _owner 回引语义(§2.1 精神——回引不是跨类信号,无信号成文义务)。
|
||||
|
||||
---
|
||||
|
||||
## 5. setter→重绘语义零变化论证(写入路径逐点对账)
|
||||
|
||||
原则:全部 setter 体逐字搬家或原位不动;改址只改 board_view 侧赋值表达式的路径段。queue_redraw 本身合帧(同帧多次申请一次重绘),时序逐字=写入点顺序不变。
|
||||
|
||||
### 5.1 board_view 写入面改址对照(行号 2026-10-29,T0 重核)
|
||||
|
||||
| 现写点 | 新写点 | 语义 |
|
||||
|---|---|---|
|
||||
| u.st.edge(:204/:251 写;:704/:891 读) | u.edge | 宿主 setter 体:原 `_owner._glow_layer`→`_glow_layer`、`_owner.queue_redraw()`→`queue_redraw()`——glow setup+重绘的执行序逐字等价(语句同、对象同、时机同) |
|
||||
| u.st.glow_group(:727/:768) | u.glow_group | 守卫 setter 调 _sync_glow_layer()(原经 _owner 转发,现直调——同一函数同一时机) |
|
||||
| u.st.cell(:250) | u.cell(或随待裁点 3 删除) | 无 setter,纯数据 |
|
||||
| u.st.bg_sb(:666) | u.base.bg_sb | 无 setter |
|
||||
| u.st.tex_base(:665) | u.base.tex_base | 无 setter |
|
||||
| u.st.outline_sides(:676 assign/:700 append) | u.base.outline_sides | 无 setter;**assign 保持数组引用语义**——件内成员同为一处 Array[int],引用不变 |
|
||||
| u.st.facade_south(:677/:690 写;:696 读) | u.base.facade_south | setter→queue_redraw 逐字;双写触发两次申请=现状同形 |
|
||||
| u.st.proj_band(:678/:704) | u.base.proj_band | 同上 |
|
||||
| u.st.tex_facade(:679/:709) | u.base.tex_facade | 无 setter |
|
||||
| u.st.facade_strip(:680/:708) | u.base.facade_strip | setter→queue_redraw 逐字 |
|
||||
| u.st.contact_bands/corners(:804/:805) | u.base.contact_* | 无 setter(整组引用换新) |
|
||||
| u.st.contact_col(:780/:787/:810/:816) | u.base.contact_col | 无 setter(_process 逐拍呼吸色) |
|
||||
| u.st.bevel(:253) | u.base.bevel | setter→queue_redraw 逐字 |
|
||||
| u.st.badge_glyph(:719/:726) | u.face.badge_glyph | setter:`_owner._glow_layer` mask+queue_redraw 逐字(回引体原样) |
|
||||
| u.st.dot_visible(:549/:554) | u.face.dot_visible | setter→queue_redraw 逐字 |
|
||||
| u.st.hl_visible/hl_color(:512–526/:534) | u.face.hl_* | setter→queue_redraw 逐字 |
|
||||
| u.st.tex_mutation/tex_glyph/tex_badge | u.face.tex_* | 无 setter |
|
||||
| u.st.tex_seal(:614/:618) | u.face.tex_seal | 守卫 setter 逐字(判重防覆盖语义是 case④b 回归断言的守护对象,禁动) |
|
||||
| u.st.treasure_mark/mutation_mark(:713/:723/:725) | u.face.*_mark | 守卫 setter 逐字 |
|
||||
| u.st.removed_dim(:737) | u.face.removed_dim | setter→queue_redraw 逐字 |
|
||||
| u.st.font(:185/:260) | u.face.font | 无 setter |
|
||||
| u.glyph/u.glyph_color/u.plate/u.fog_state | 不变 | 宿主冻结面 |
|
||||
| u.queue_redraw()(:738 终写) | 不变 | paint 尾部全格重绘申请原样 |
|
||||
|
||||
### 5.2 宿主内消费改址
|
||||
|
||||
- _sync_glow_layer:st.glow_group→glow_group、st.edge→edge、st.badge_glyph→face.badge_glyph(公开成员读);setup/set_badge_mask 调用序逐字。
|
||||
- _draw_fog_memory:st.tex_base→base.tex_base;字形重画改调 face.draw_centered_text(self, rect, glyph, UiKit.FOG_MEMORY_INK, maxi(18, int(ceil(edge * 0.5))))——同公式同字号(§7.4 冻结式)。
|
||||
- cell_rect_probe:u.st.edge→u.edge。
|
||||
|
||||
---
|
||||
|
||||
## 6. 绘制命令序零变化论证(golden 判据本体)
|
||||
|
||||
新宿主 _draw=六步时序器,命令序与现行四函数调用树**逐命令等价**:
|
||||
|
||||
```
|
||||
func _draw() -> void:
|
||||
var rect := Rect2(Vector2.ZERO, Vector2(edge, edge))
|
||||
base.draw_base(self, rect) # 原青 _draw_base_layer 整树(含描边/立面/投影/接触带/倒角与其补画序)
|
||||
face.draw_marks(self, rect) # 原青 _draw_mutation_marks
|
||||
face.draw_glyph_layer(self, rect, glyph, glyph_color) # 原青 _draw_glyph_layer+_draw_digit_plate+_draw_glyph+_draw_badge
|
||||
face.draw_overlay_under(self, rect) # 原青 _draw_overlay_layers 前两段(点迹+高亮)
|
||||
_draw_fog_layer(rect) # 宿主(原位不变——雾夹在 hl 与 removed 之间)
|
||||
face.draw_removed_dim(self, rect) # 原青 _draw_overlay_layers 末段(退色)
|
||||
```
|
||||
|
||||
等价性来源:①层间顺序=原 _draw 的四调用序+_draw_overlay_layers 内部序,一步未动;②件内顺序=九+六函数逐字搬运,`draw_*` 引擎调用全部经 canvas 参数落到同一 CanvasItem(宿主 self),命令流与命令参数逐位相同;③接触带回退路径(contact_col.a>0 时补画投影/E 墙面/接触带;elif bg_sb 路径补画立面/投影/倒角)整体在件 A 内部,补画序逐字;④浮点面:rect.size.x 与 st.edge 同值同源,推导式零改动。结论:绘制命令流逐位一致 ⇒ golden 三张差异 0.00% 可预期。
|
||||
|
||||
---
|
||||
|
||||
## 7. gdstyle 键账预期(逐文件,平面口径=声明数全计)
|
||||
|
||||
| 文件 | 类变量(阈值 15) | 公开方法(阈值 20) | 函数级键预测 |
|
||||
|---|---|---|---|
|
||||
| board_cell_unit.gd | 10(余量 5) | 6(5 setter+_draw) | 无——_draw 时序器约 10 行;_draw_fog_layer/_draw_fog_memory/_sync_glow_layer 原体(现役零键) |
|
||||
| cell_base_layer.gd | 12(余量 3) | 5(draw_base+4 setter) | 无——九函数逐字搬运,行数/分支/局部/返回不变,现役零键 |
|
||||
| cell_mark_overlay.gd | 13(余量 2) | 13(5 绘制入口+8 setter) | 无——同上;draw_glyph_layer 4 参、draw_centered_text 5 参(max-parameters 5=合规上限内) |
|
||||
|
||||
三件全无 inner class ⇒ 不受 §1.2 截断口径影响,预测值即闸实测值。余量最小 2(件 B)——后续 art-bible 加标记类成员的余量,恶化守卫(WORSENED)在位兜底。
|
||||
|
||||
---
|
||||
|
||||
## 8. 行为零变化风险点
|
||||
|
||||
1. **golden 三张(L1 dungeon/L2 underdark/L3 deep_underdark)**:判据=§6 命令流逐位一致;差异非零即停机呈报,禁换锚。最大实操风险=搬运时手误(常量值、rect 推导式)——对照表逐函数「逐字搬运」核对。
|
||||
2. **探针冻结成员**:glyph/fog_state/plate/glyph_color 宿主保留、名称路径零变化(ui_input case④b⑪⑮+player_copy wa8 断言零改动);hl_*/dot_visible/mutation_mark 探针改址四处(断言条件与期望值零变化,只改路径段——对照表申报行)。
|
||||
3. **绘制调用序**:见 §6——含「平色回退+微光并发的英雄格补画」这种跨层重复绘制路径,必须原样保形(重复无害是现行为的一部分)。
|
||||
4. **setter 双写时序**:_paint_cell 内 facade_south(:677/:690)、badge_glyph(:719/:726)、mutation_mark(:723/:725)的多写多触发序不变。
|
||||
5. **`_glow_layer` 生命周期**:宿主成员不动;glow_group/edge 上收后其 setter 直调宿主自有面——子件 add/free 时机零漂移(type_glow_shot_probe/type_glow_probe 断言面)。
|
||||
6. **潜伏红变量**:T0 先跑 ui_input_probe——若现状已红(§1.3 判定),红因与本设计无关但同批修复(改址四处);若绿(本会话对 GDScript 取索引语义判断有误),改址四处照做(新路径本就不同),结论记实现报告。
|
||||
|
||||
---
|
||||
|
||||
## 9. 验收载体建议(全部既有载体,零新增断言面)
|
||||
|
||||
| 载体 | 钉什么 |
|
||||
|---|---|
|
||||
| render_gate 棋盘 golden 三张 | 绘制命令流逐位一致(本批主判据;对拍差异 0.00%) |
|
||||
| ui_input_probe(probe_gate 默认段) | case①②③④b⑪⑭⑮——悬停/禁入/点迹/封印槽/字形回退/变异角标/迷雾直读面全链路 |
|
||||
| probe_gate --click(ui_click_probe) | dig/seal/chord 输入路径(hl 状态写入面的行为侧) |
|
||||
| probe_gate --full(type_glow_shot_probe/board_shot_probe/fx_probe) | 微光子件与格矩形取证面 |
|
||||
| run_all --only=player_copy,theme_projection,type_glow | u.plate/u.glyph_color 直读面+字形墨族+微光派生 |
|
||||
| run_smoke+run_system_test+static_scan(三件保险恒跑) | 启活面+真实玩法路径+S9/S10/S13 键账对账 |
|
||||
|
||||
批末跑 `tools/run_all_gates.sh --code`(改动全为代码面);改址探针断言与对应表申报同批落地。
|
||||
|
||||
---
|
||||
|
||||
## 10. 估时
|
||||
|
||||
| 段 | 内容 | 估时 |
|
||||
|---|---|---|
|
||||
| T0 | 读数复核(33 声明/30 闸账对账)+ui_input_probe 潜伏红一跑定谳 | 0.25–0.5 日 |
|
||||
| T1 | 建 cell_base_layer.gd(成员+九函数+九常量随迁) | 0.5–0.75 日 |
|
||||
| T2 | 建 cell_mark_overlay.gd(成员+六函数随迁+draw_centered_text 单点化) | 0.5–0.75 日 |
|
||||
| T3 | 宿主瘦身(时序器/雾/glow/edge/glow_group setter 上收)+board_view 写入面约 40 处改址 | 0.5 日 |
|
||||
| T4 | 探针改址四处+孤立验证(run_all 选档+probe_gate --click) | 0.25–0.5 日 |
|
||||
| T5 | 批末代码域全量闸+键账对账(10/12/13 实测核对) | 0.25–0.5 日 |
|
||||
|
||||
合计 2.25–3.5 工作日。出红只跑红件最小单元(闸机轮次纪律)。
|
||||
|
||||
---
|
||||
|
||||
## 11. 待裁点清单(呈主会话)
|
||||
|
||||
1. **潜伏红处置**:ui_input_probe 四处直读疑似已被迭代 41 打断(§1.3)。方案=本设计批内改址 u.face.* 并 T0 实跑定谳;若用户希望不等本批,可先走最小工程批把四处改 u.st.* 恢复(后续本批再改一次)。取哪个时序,裁。
|
||||
2. **与尾波清偿卡的编排关系**:尾波卡 T1 把 _paint_cell 拆五段(传值句写明「经 u.st/glyph/digit_col」)。本设计改变状态件路径名——同批编队时 T1 段函数传值句改指 u.base./u.face.(T0 对账自然兜住);先后皆可,同批省一次 golden 全套。取哪个编队,裁。
|
||||
3. **cell 成员去留**:全仓零读方(写入仅 rebuild:250)。删除=真实削减+§1.1-⑤ 无效成员归零;保留=「诊断观测面」注释语义。本设计倾向删(宿主降为 9),删/留,裁。
|
||||
4. **gdstyle 截断口径的登记**:§1.2 发现属工具行为事实(基线欠估、工具升级可能翻键),建议经反哺点通道在 gdstyle_gate 头注或审计报告补一句注记(工程改动,防后人按「均匀展平」误判键账)。落不落、落哪里,裁。
|
||||
|
||||
---
|
||||
|
||||
## 12. 把握度声明
|
||||
|
||||
把握最低的一点:**潜伏红判定**——它建立在「GDScript 外部实例读不到 inner class 成员」这一语义判断与时间线推断上,本会话禁跑测试无法实证,T0 一次 ui_input_probe 即可证实或证伪;即便误判(现状可读),设计本身不受影响(改址四处照做,冻结四面照留)。次低:gdstyle 截断口径系两点反推(30=6+24、19=6+13 双双精确吻合),未读工具源码;设计不依赖该口径——三文件平面化后预测=实数。
|
||||
@@ -1,171 +0,0 @@
|
||||
# 设计——站桩状态件拆分(S13 max-class-variables 键清偿)
|
||||
|
||||
设计讨论段过程稿 v1.0——待主会话汇总裁决。
|
||||
|
||||
## 0. 一句话结论
|
||||
|
||||
把 `_StandeeState` 沿「身份命值 / 资产演出」职责缝拆成两个独立文件类(12 + 11 成员),三个演出探针计数器移到宿主;宿主类变量 19 → 10,两新文件各自 ≤15,站桩外部契约与呈现时序零变化。
|
||||
|
||||
**先纠一个前提**:主会话实测的「_StandeeState 成员 13 个、独立成文件即 13≤15 合规」不成立。实测(gdstyle v0.4.0 二进制逐案验证):该文件 `_StandeeState` 真实成员是 **25 个**;基线键账 19 是 gdstyle 一个解析缺陷造出的截断读数——内嵌类里**带行尾注释的属性声明**(`var _intent_scale := 1.0: # 注释`)会把该内嵌类的成员计数截断,其后的成员全部漏记进宿主。把 `_StandeeState` 原样拆成独立文件,键账是 25 不是 13,照样红。
|
||||
|
||||
## 1. 机检事实(gdstyle v0.4.0 计数语义,实测五案)
|
||||
|
||||
| 案 | 内容 | gdstyle 读数 | 结论 |
|
||||
|---|---|---|---|
|
||||
| 1 | standee_body.gd 原文件 | 外层类 19(1:1),内嵌类零命中 | 19 = 顶层 6 + 漏记内嵌 13 |
|
||||
| 2 | 内嵌 25 成员抽成独立文件 | 该类 25 | **拆出即 25 > 15,方案①不成立** |
|
||||
| 3 | 内嵌类全普通 var(无属性) | 内嵌类单独报 25,宿主 6 不报 | 无属性时内嵌类独立计数,正常 |
|
||||
| 4 | 内嵌类 12 普通 var + 带行尾注释属性 + 12 普通 var + 宿主 6 | 宿主 18(6+12 漏记) | 属性行尾注释 = 截断点 |
|
||||
| 5 | board_cell_unit.gd(旁证) | 基线 30 = 顶层 6 + 漏记 24 | 同一规则,账目吻合 |
|
||||
|
||||
有效规则:**类各自计数;内嵌类遇到「属性声明 + 行尾注释」即成员计到该属性为止,其后成员漏进宿主**。standee_body.gd 的截断点 = `_intent_scale`(37 行),其后 13 个成员(`_glyph_rot` 起到 `_flash_count`)漏进宿主:6 + 13 = 19。board_cell_unit.gd 截断点 = `edge`(30 行),6 + 24 = 30,同款吻合。
|
||||
|
||||
含义:不动内嵌形态,把三行属性声明移到内嵌类末尾(或删其行尾注释)就能让账变回「宿主 6 / 内嵌 25」——但内嵌 25 仍超阈。**真正的债是状态件 25 个成员本身**,任何合规解都必须把它拆成 ≥2 个类或砍到 ≤15。
|
||||
|
||||
## 2. 现状成员全列(31 个:宿主 6 + 状态件 25)
|
||||
|
||||
### 2.1 宿主顶层(6 个——全部有外部冻结契约)
|
||||
|
||||
| 成员 | 类型 | 写入方 | 读取方 |
|
||||
|---|---|---|---|
|
||||
| `st` | _StandeeState | 成员初始化器;`_init` 灌 _owner/_hero_state/_kind | 宿主全部内部函数经 `st.X` 读写;**外部零直访**(全仓 grep 证实) |
|
||||
| `box` | Vector2(150,176) | battle_stage_view `_sync_layout`(198/208 行);fx_probe 三处 | `_place_portrait`/`_portrait_rect`/`_pedestal_rect`/`content_rect`/`_draw_*` 五域;battle_stage_view 两个 center 出口读 |
|
||||
| `font` | Font | battle_stage_view `set_world_font`(232/235 行) | `_efont` |
|
||||
| `slot_row` | StatusSlotRow | battle_stage_view(140/265 行) | `set_effects`/`set_effects_cleared_feedback`/`mark_dead`/`_revive`;battle_stage_view `_sync_companions`;ui_probe/ui_click_probe |
|
||||
| `_intent_charge` | bool | `set_pending`(源码锚行 194)、`mark_dead` | `_play_intent_motion`;standee_fx_sweep_test 直读(103 行) |
|
||||
| `has_world_hp_bar` | true 常量 | 无(声明即终值) | ui_probe 141 行 |
|
||||
|
||||
### 2.2 _StandeeState(25 个)
|
||||
|
||||
| # | 成员 | 类型 | 写入方 | 读取方 |
|
||||
|---|---|---|---|---|
|
||||
| 1 | `_owner` | Node2D | `_init` | 三个属性 setter(queue_redraw) |
|
||||
| 2 | `_kind` | String | `_init` | `set_hero_state`/`_revive`/`_portrait_glyph`/`_draw`/`_draw_hp_bar`/`_portrait_color` |
|
||||
| 3 | `_portrait_sprite` | Sprite2D | `set_portrait_texture`/`_place_portrait` | 同函数 + `_draw_portrait`/`set_hero_state`/`_settle_hero_idle`/`portrait_probe` |
|
||||
| 4 | `_portrait_tex` | Texture2D | `set_portrait_texture` | 仅 `_place_portrait` 判空(与 sprite.texture 冗余) |
|
||||
| 5 | `_hero_tex` | Dictionary | `register_hero_state` | `set_hero_state`/`_settle_hero_idle`/`hero_state_probe` |
|
||||
| 6 | `_hero_state` | int | `_init`/`set_hero_state`/`_settle_hero_idle`/`_revive` | `set_hero_state`/`hero_state_probe` |
|
||||
| 7 | `_state_revert_tw` | Tween | `set_hero_state` | 同函数(重启先杀) |
|
||||
| 8 | `_order` | int | `_set_order` | `_draw_hp_bar`(顺位徽标) |
|
||||
| 9 | `_intent_glyph` | String | `set_pending` | `intent_probe`/`_draw_intent_badge` |
|
||||
| 10 | `_intent_col` | Color | `set_pending` | `_draw_intent_badge` |
|
||||
| 11 | `_intent_visible` | bool | `set_pending`×3/`mark_dead` | `intent_probe`/`_draw_intent_badge` |
|
||||
| 12 | `_intent_scale` | float(属性→重绘) | `_play_intent_motion` 的 tween | `_draw_intent_badge` |
|
||||
| 13 | `_glyph_rot` | float(属性→重绘) | `_play_intent_motion` 的 tween | `_draw_portrait` |
|
||||
| 14 | `_display_name` | String | `set_data` | `display_name`/`name_line_probe`/`_draw_armor_name_line` |
|
||||
| 15 | `_enemy_id` | String | `set_data` | `enemy_id`(d12 解析主键) |
|
||||
| 16 | `_armor` | String | `set_data` | `name_line_probe`/`_draw_armor_name_line` |
|
||||
| 17 | `_dead` | bool | `mark_dead`/`_revive` | `set_data`/`set_hero`/`is_dead`/`flash_hit`/`_portrait_glyph`/`set_pending`/`mark_dead` |
|
||||
| 18 | `_hp_max` | float | `set_data`/`set_hero` | `_set_hp`/`_draw_hp_bar` |
|
||||
| 19 | `_hp_cur` | int | `_set_hp` | `_draw_hp_bar`(数字即时值) |
|
||||
| 20 | `hp_value` | float(属性→重绘+clamp) | `_set_hp` 的 tween | `_draw_hp_bar`(条宽) |
|
||||
| 21 | `_hp_tween` | Tween | `_set_hp` | 同函数(重启先杀) |
|
||||
| 22 | `_hp_flash_tw` | Tween | `flash_hit` | 同函数(重启先杀;回色读 `_dead`) |
|
||||
| 23 | `_death_shards` | int | `_spawn_death_shards` | `fx_probe` |
|
||||
| 24 | `_hit_sparks` | int | `_spawn_hit_spark` | `fx_probe` |
|
||||
| 25 | `_flash_count` | int | `flash_hit` | `fx_probe` |
|
||||
|
||||
### 2.3 外部触面(拆分边界 = 全部保持)
|
||||
|
||||
写状态的外部方只有 battle_stage_view(box/font/slot_row 三 var + 全部经方法)与 fx_probe(box 三处);读面 = 两个 center 出口、六个 probe 出口、`_intent_charge` 测试直读、theme_projection_test 三条源码锚断言(679–683 行:`GOLD_BRIGHT` 顺位墨、`HERO_BLUE_BRIGHT`/`GOLD_BRIGHT` 护甲墨、`_intent_charge = pid in CHARGE_SKILL_IDS`)——三条锚所在函数(`_draw_hp_bar`/`_draw_armor_name_line`/`set_pending`)**全部留在宿主且锚行逐字不动**。
|
||||
|
||||
## 3. 方案形态评估
|
||||
|
||||
### 方案 A(主会话原①):_StandeeState 升格独立文件
|
||||
|
||||
**淘汰。** 实测拆出即 25 > 15(机检事实案 2),不削成员不合规;而削到 15 需砍 10 个,全是承重成员(见方案 B 的砍不动论证),等于把 A 逼成 B+拆分。
|
||||
|
||||
### 方案 B(主会话原②):原地真实削减 4 个(19→15)
|
||||
|
||||
**淘汰。** 被计入 19 的是宿主 6(全部外部冻结:box/font/slot_row/has_world_hp_bar 探针契约面、_intent_charge 源码锚成员、st 本体)+ 漏记的 13(`_glyph_rot`/身份三元组/`_armor`/`_dead`/`_hp_max`/`_hp_cur`/`hp_value`/两条 tween 槽/三个探针计数)。逐个过堂:身份三元组合一个字典 = 丢类型的凑计数袋(违反 code-conventions §1.1①⑤);三个探针计数合一个字典同理且键变字符串;`_hp_cur` 与 `hp_value` 一个是即时目标一个是 tween 滞后值,不可互推;两条 tween 槽的重启语义各自独立;`_glyph_rot` 是 tween 目标属性。**诚实削减余额 ≈ 0(顶多 `_portrait_tex` 一个冗余成员)**,−4 凑不出来。
|
||||
|
||||
### 方案 C(推荐):沿职责缝拆两个独立文件类 + 三个演出探针计数器移宿主
|
||||
|
||||
25 个成员按领域分三堆,各自命得出名字:
|
||||
|
||||
**新件一 `game/presentation/views/standee_vitals.gd`「站桩身份与命值态」(12 成员)**
|
||||
- 成员:`_owner`、`_kind`、`_display_name`、`_enemy_id`、`_armor`、`_order`、`_dead`、`_hp_max`、`_hp_cur`、`hp_value`(属性→重绘+clamp)、`_hp_tween`、`_hp_flash_tw`。
|
||||
- 职责语句:站桩是谁、活没活、血量几何的唯一账面——身份五元组(种类/名/id/护甲/顺位)+ 存活位 + 血量账与两条血量系 tween 槽。
|
||||
- 单一变化原因:战斗结算快照投影的字段形态(set_data/set_hero 投影什么它记什么)。
|
||||
- 迁入行为(防纯数据袋):`apply_hp(hp)`=原 `_set_hp` 整体搬移(clamp、重启 `_hp_tween`、tween 写 `hp_value`);`hp_value` 属性 setter 逐字。`_hp_flash_tw` 归此件:`flash_hit` 的回色分支读 `_dead`,与存活位同域。
|
||||
- extends **RefCounted**(godot-master 判据:瞬态逻辑数据包、随宿主生灭、零序列化零 Inspector——Resource 的共享/.tres 语义此处零收益)。
|
||||
|
||||
**新件二 `game/presentation/views/standee_motion.gd`「站桩资产与演出态」(11 成员)**
|
||||
- 成员:`_owner`、`_portrait_sprite`、`_portrait_tex`、`_hero_tex`、`_hero_state`、`_state_revert_tw`、`_intent_glyph`、`_intent_col`、`_intent_visible`、`_intent_scale`(属性→重绘)、`_glyph_rot`(属性→重绘)。
|
||||
- 职责语句:站桩的资产挂点与一次性演出——立绘精灵落位与换装、主角三态注册与 0.35s 短驻回归、意图徽标弹入动画。
|
||||
- 单一变化原因:美术素材落位规则与演出编排设计(立绘 48px 档、三态帧档、§4.6.4 三档运动签名)。
|
||||
- 迁入行为:`set_portrait_texture(tex, flip, box)`(原函数整体搬移,box 由宿主传入——box 是宿主冻结 var);`register_hero_state`;`apply_hero_state(state, is_hero)`(原 `set_hero_state`,唯一改形 = `st._kind != "hero"` 早退改参判 `is_hero`——早退序逐字);`reset_state()`(原 `_revive` 内「`_hero_state = RESET` 强制绕同态早退」两拍的 encapsulation);`play_intent_motion(charge)`(原 `_play_intent_motion`,`_intent_charge` 改参传入);`state_probe()`。
|
||||
|
||||
**宿主 standee_body.gd 保留(类变量 10)**
|
||||
- 五个冻结 var 原位 + `st`(vitals 实例,**名字保留**——约 40 处引用与 tween 路径串 `"st.hp_value"` 零改)+ `mo`(motion 实例,命名待裁)+ 三个演出探针计数器 `_death_shards`/`_hit_sparks`/`_flash_count`。
|
||||
- 计数器归宿主的内聚依据:唯一写入方 = 宿主演出函数(`_spawn_death_shards`/`_spawn_hit_spark`/`flash_hit`),唯一读取方 = 宿主 `fx_probe()` 出口——仪器跟着驱动它的函数走;同时给 vitals 让出余量(15 满额 → 12)。
|
||||
- 保留函数:`_init`、`set_data`/`set_hero`(跨两域编排)、`set_effects`/`set_effects_cleared_feedback`(slot_row 域)、`set_pending`(分档计算 + 源码锚行,字段写改指 mo)、`mark_dead`/`flash_hit`/`play_hit_impact`/`_spawn_*`/`_revive`(跨域演出编排)、`_draw` 全族与几何函数(绘制是宿主 CanvasItem 职责)、六个 probe/display_name/enemy_id/is_dead 出口(外形零变,体内前缀改指)。
|
||||
|
||||
接线形态:**保持 `_owner: Node2D` 直回引,不改 Callable 注入、不改信号**。依据:①现状形态,setter 体逐字(`_owner.queue_redraw()`)即重绘时序零漂移——tween 每帧写属性 → setter 同步触发,正是「弹入动画逐帧重绘」的承载;②Node 非 RefCounted,state→宿主回引无环引用泄漏(与 BattleFxHost 场景不同——那边是两 RefCounted 互持才禁双向);③queue_redraw 是 CanvasItem 公开 API,不属「件回调宿主私有族」禁令射程。
|
||||
|
||||
淘汰的变形:**两内类同居主文件**(diff 更小)——依赖成员排序躲解析缺陷(属性须排各类末尾),未来任何人往类中部加一个带注释属性就静默漏账(基线恶化闸要到 19→29 才红,9→15 区间六格漂移无感知);两新件独立文件则完全脱离该缺陷的作用面。**改属性行注释形态躲缺陷**同理淘汰——赌解析器怪癖不如离开怪癖作用面。
|
||||
|
||||
## 4. 写入路径对账(外部写入方零改动清单)
|
||||
|
||||
| 外部触点 | 现状 | 改后 |
|
||||
|---|---|---|
|
||||
| battle_stage_view 140/265 行 `slot_row =` | 宿主 var 直写 | 不变(var 原位) |
|
||||
| battle_stage_view 198/208 行 `box =` | 宿主 var 直写 | 不变;box 仍是无 setter 普通 var,**不触发重绘是现状语义**(重排后的呈现由后续 set_data/字体注入等 queue_redraw 承载),设计不补挂不拆挂 |
|
||||
| battle_stage_view 232/235 行 `font =` + `queue_redraw` | var 直写 | 不变 |
|
||||
| battle_stage_view 132–138/267 行 set_portrait_texture/register_hero_state | 宿主方法 | 同名宿主方法保留(1–2 行转调 mo,box 作参),battle_stage_view 一行不改 |
|
||||
| battle_stage_view 313/316/388 行 set_hero_state | 宿主方法 | 同名保留,转调 `mo.apply_hero_state(state, st._kind == "hero")` |
|
||||
| battle_stage_view 333–335 行 play_hit_impact/flash_hit/mark_dead | 宿主方法 | 不变(宿主保留) |
|
||||
| hud_presenter 77/78/137/162/163 行 set_hero/set_effects | 宿主方法 | 不变 |
|
||||
| fx_probe/ui_probe/ui_struct_probe/ui_click_probe 全部读数 | 六 probe 出口 + box/has_world_hp_bar/slot_row | 出口外形零变(fx_probe 改读宿主计数器、intent_probe/portrait_probe 前缀改指 mo) |
|
||||
| standee_fx_sweep_test 103 行 `s1._intent_charge` | 宿主 var 直读 | 不变(成员原位) |
|
||||
| 内部 tween 路径串 | `"st.hp_value"`(vitals 成员名保留 → 零改);`"st._intent_scale"`/`"st._glyph_rot"` | 改 `"mo._intent_scale"`/`"mo._glyph_rot"`(搬进 mo 的同一函数体内) |
|
||||
|
||||
重绘/重排时序零变化论证:三个属性 setter 体逐字(`_owner.queue_redraw()`);tween 目标路径只换持有者前缀、写序不变;box/font/slot_row 写入面与现状同拍同序(battle_stage_view 一行不改 = 接线时序恒等)。
|
||||
|
||||
## 5. gdstyle 键账预期(逐文件 ≤15)
|
||||
|
||||
| 文件 | 类变量实数 | 基线对账 |
|
||||
|---|---|---|
|
||||
| standee_body.gd | **10**(5 冻结 + st + mo + 3 计数器) | 基线登记 19,实数 10 < 19 = 改小不红 |
|
||||
| standee_vitals.gd | **12** | 无基线键,12 ≤ 15 = 零命中 |
|
||||
| standee_motion.gd | **11** | 无基线键,11 ≤ 15 = 零命中 |
|
||||
|
||||
函数级键:**零函数迁入新键**——六个搬移函数逐字搬运(仅前缀与两处改参),长度/分支/局部/返回/参数全在原值内(最大者 `apply_hero_state` 4 参数 4 分支);宿主新增转调壳 1–2 行零键。基线不随批刷新(改小即绿;收账归后续全清批人工 `--refresh`,须用户批准——与 battle_orchestrator 50→38 先例同口径)。
|
||||
|
||||
## 6. 行为零变化风险点
|
||||
|
||||
1. **tween 属性路径串**:`"st.hp_value"`/`"mo._intent_scale"`/`"mo._glyph_rot"` 拼错 = 运行时属性找不到、动画静默失效。兜底:fx_probe 段的意图弹入断言、hero_state_probe 三态断言、fx_shot_probe 帧取证都在闸内。
|
||||
2. **hero 三态机改形两处**(`is_hero` 参数化、`reset_state` 封装):早退序与 RESET 哨兵语义必须逐拍对齐——`set_hero_state` 的三连早退(非主角/同态/未注册)条件序不变;`_revive` 强制回 idle 两拍改两调用、顺序不变。
|
||||
3. **`_hp_flash_tw` 回色读 `_dead`**:flash_hit 留宿主、跨读 `st._dead`,与现状同一拍。
|
||||
4. **源码锚三条**(theme_projection 679–683):锚行所在函数留宿主且锚行逐字,改造只动同函数其他行的 `st.` 前缀。
|
||||
5. **成员初始化时序**:st/mo 于成员初始化器构造、`_init` 灰 `_owner`/`_kind`——与现状同形,构造期零属性写早于 `_owner` 赋值。
|
||||
6. **counters 迁移**:三个计数器无 setter 无重绘语义,纯读写易位;`fx_probe()` 返回键名逐字。
|
||||
|
||||
## 7. 验收载体建议(真实入口)
|
||||
|
||||
| 载体 | 断言面 | 绑定 |
|
||||
|---|---|---|
|
||||
| static_scan S13(gdstyle_gate 回执) | 「基线外新违规 0、恶化 0」+ standee_body 键账 10 | 被测改动本身的直接判据(键清偿),grep 回执可定位 |
|
||||
| run_all 关联套件 | standee_fx_sweep_test(_intent_charge 直读、fx_probe().flash_count、enemy_id 解析);theme_projection_test(三条源码锚) | 拆分后宿主成员与源码锚零变 |
|
||||
| probe_gate --full | fx_probe 段(碎裂 5/火花 6/闪白计数/三态切换/死亡残位 idle);ui_probe(intent_probe 三档、name_line_probe、portrait_probe、has_world_hp_bar、slot_row);ui_struct_probe ⑥standee 出框断言;ui_click_probe slot_row tooltip | 外部契约面逐一可达 |
|
||||
| render_gate | fx_shot_probe 取证 + 战斗舞台 golden | 站桩呈现像素级零变化 |
|
||||
| run_smoke / run_system_test | 恒跑保险 | 活性 |
|
||||
|
||||
对照表口径:本批为非行为改动(结构重组)逐行申报 + 既有断言面全绿作呈现零变化证明;S13 键账数字即键清偿判据,无需新增断言。
|
||||
|
||||
## 8. 估时
|
||||
|
||||
写卡段不计。实现批(worktree):宿主改造与函数搬移 ≈2h;两新件与头注(≤8 行、无反向链接)≈0.5h;闸跑(S13 + run_all 关联 + probe_gate --full + render_gate + 冒烟/系统)与取证 ≈1.5h;对照表与实现报告 ≈0.5h——**合计 ≈0.5 工作日**。
|
||||
|
||||
## 9. 反哺点(预登记)
|
||||
|
||||
1. architecture.md「模块归属·呈现层」表登记两新件(standee_vitals/standee_motion,各一句职责)。
|
||||
2. 相邻发现(不属本批):board_cell_unit.gd 内嵌类 `_CellPaintState` 27 成员受同一 gdstyle 解析缺陷截断(基线 30 = 6 + 24 漏记),属 gdstyle 存量债同族,是否立卡清偿待裁。
|
||||
3. `_portrait_tex` 与 `_portrait_sprite.texture` 冗余(单一事实源可归一)——本批不动(零变化优先),留债册。
|
||||
|
||||
## 10. 待裁点
|
||||
|
||||
1. **方案形态确认**:推荐案 C(两独立文件 + 计数器归宿主)vs 淘汰案 B(原地 −4,凑不出)与两内类变形(赌解析缺陷)。前提修正:原①「拆出即合规」实测不成立。
|
||||
2. **探针计数器落点**:宿主(推荐——写入方/读取方同在宿主,vitals 让出余量)vs vitals 内(15 满额零余量,快照投影类加一个字段即红)。
|
||||
3. **motion 实例成员命名**:`mo`(推荐,短、域对)vs 其他;vitals 实例沿用 `st`(引用面与 `"st.hp_value"` 路径串零改)。
|
||||
4. **基线收账时点**:本批不刷新(改小即绿,先例口径)vs 随批人工 `--refresh`(须用户批准)。
|
||||
@@ -1,134 +0,0 @@
|
||||
# 需求卡片——gdstyle 尾波补件批
|
||||
|
||||
> **版本状态**:v1.1——2026-10-30 用户裁 T2 机制=R2 整族归件(实现段停卡呈报 `reports/iter45-停机呈报-断点域拆件规格缺口-2026-10-30.md` 裁决),第 7 节 T2 条款改述、其余条款沿 v1.0 定稿——零待裁点(2026-10-29 用户裁:恢复尾波卡 v2.0 裁去的 D2/D4 两拆件项;D5 五降值键=留债、零豁免延伸)。
|
||||
> **接收方**:待办清单条目「gdstyle 尾波补件批——悬停域与断点域拆件(2026-10-29 登记)」。
|
||||
> **来源**:尾波清偿批设计闭合后的用户再裁(D2/D4 改判拆件)。**唯一事实源**:`design/engineering/architecture/architecture.md` v1.25(「模块归属·呈现层」表 board_hover 行、「核心层」表 breakpoint_store 行、「冒险域拆分」节断点随动句、「呈现层装配」节屏成员寻址句)。
|
||||
|
||||
## 1. 目标与完成定义
|
||||
|
||||
这批做什么:把尾波卡 v2.0 裁去的两个拆件项恢复执行——board_view 悬停域拆出 board_hover、adventure_runner 断点域拆出 breakpoint_store。三个 gdstyle 键随之降值(board_view 类变量 32→约30、adventure_runner 类变量 28→约22;board_view 公开方法 27 持平——全为契约面)。
|
||||
|
||||
什么状态算完:
|
||||
|
||||
1. 两新件在库、宿主成员迁出、键账达第 3 节预期(降值口径,不承诺清零)。
|
||||
2. 行为零变化:同种子下事件流、断点快照、棋盘渲染逐位一致。
|
||||
3. 批末代码域闸全绿;三键终值按留债口径记入实现报告(禁落 architecture 豁免登记)。
|
||||
|
||||
## 2. 设计事实源
|
||||
|
||||
architecture.md v1.25 三处在册设计(2026-10-29 零豁免裁设计闭合):board_hover 行(职责语句「悬停预承诺呈现域」、拟收 11 函数族+2 成员、耦合边界)、breakpoint_store 行(职责语句「存档断点组装与回放唯一承载」、拟收 6 成员+函数族、27 键冻结)、「冒险域拆分」节随动句(拼盘与读侧策略机组拆出、应用层落盘口不变)。
|
||||
|
||||
## 3. 现状事实(2026-10-29 实查;行号为迭代 42 合回前基线——T0 必须按当轮 master 重测重锚,board_view 的 `_paint_cell` 届时已由迭代 42 拆为五段、行号必漂移)
|
||||
|
||||
- board_view.gd:悬停域成员 `_hover`(:70)、`_last_click`(:71);函数族 11 个=`_hover_at`(:442)、`_on_shell_mouse_exited`(:453)、`_detect_chord`(:475)、`_on_cell_hover`(:486)、`_on_cell_unhover`(:491)、`_refresh_hover_after_paint`(:497)、`_apply_hover_visuals`(:503)、`_clear_hover_visuals`(:531)、`_set_cursor_shape`(:538)、`_show_path_preview`(:542)、`_hide_path_preview`(:552)。`_r0`(:72)是出生展开区资格域成员(:238/:296/:563 三消费方),**不随迁**——划入悬停件即凑计数袋。
|
||||
- adventure_runner.gd:断点域成员 6 个=`_save_manager`(:35)、`_resume_bp`(:36)、`_pending_next_level`(:30)、`_last_level_payload`(:31)、`_last_treasure_cleared`(:32)、`_loadout_seeded`(:37);常量 `BREAKPOINT_FIELDS`(:539-568,27 键);函数族=`_snapshot_breakpoint`(:571)、`_bp_parts`(:583)、`_bp_read`(:636)、`_bp_strategy`(:646)、`_bp_read_int`(:651)、`_resume_ledger`(:182)、`_resume_curio_state`(:193)、`_resume_params`(:218)、`_resume_counters`(:237);公开入口 `resume_adventure`(:141;:94 为 start_adventure)留宿主薄壳。
|
||||
- 测试触面:`game/tests/unit/core/breakpoint_resume_test.gd:185` 直读 `AdventureRunnerScript.BREAKPOINT_FIELDS`——随件迁改址(判据零变化)。
|
||||
- 键账:board_view 类变量 32(键留债目标约 30)、公开方法 27(持平——27 个逐类核对全为探针契约面与依赖单向纪律承载面);adventure_runner 类变量 28(留债目标约 22)。
|
||||
|
||||
## 4. 设计契约(违反即返工的红线条款)
|
||||
|
||||
- 🔴 **行为零变化**:同种子下事件流/断点快照/存档往返/棋盘渲染逐位一致;玩家可见面零变化。
|
||||
- 🔴 **断点键集冻结**:`BREAKPOINT_FIELDS` 27 键逐键冻结(键名、策略标签、键序零变化);随件迁移只换承载文件,不换键面。
|
||||
- 🔴 **RNG 零触碰**:本批零新流、零消费序变化(断点回放 restore 同序取号;悬停域无随机)。
|
||||
- 🔴 **呈现零变化**:悬停反馈三语义(光标/边框/路径预览)行为逐点保持;棋盘 golden 三张对拍差异非零即红。
|
||||
- 🔴 **拆分边界纪律**(判据权威=code-conventions §1.1,卡内执行条款):①拆出单元须有职责语句与单一变化原因(实现报告逐件一行);②集体身份——命不出名字的打包=凑计数袋,禁;③「过阈值」只作发现信号;④拆不出内聚单元→停卡呈报;⑤禁沿阈值轴拆。
|
||||
- 🔴 **禁为机检文本保留无效成员**:禁止为迎合机检消息文本保留或新增无效成员/别名;机检键与卡片契约互斥=停卡呈报。
|
||||
- 🔴 **残留键留债(D5 零豁免裁)**:三键降值后留基线冻结禁恶化;**禁落 architecture 豁免登记**;禁为凑阈值硬拆。
|
||||
|
||||
## 5. 范围边界
|
||||
|
||||
做什么:第 3 节两拆件项(board_hover、breakpoint_store)。
|
||||
|
||||
不做什么:迭代 42 在飞范围零触碰(_paint_cell 拆五段、循环内 new、_enter_node、商店委托壳——并排卡承接);单格/站桩状态件(呈现层状态件批承接);main.gd/battle_orchestrator/tune_sim 五键(零豁免五键各批承接);三残留键的终局清偿(留债,后续窗口再议)。
|
||||
|
||||
## 6. 关联文档同步面
|
||||
|
||||
| 文档 | 关联点 | 同步义务 |
|
||||
|---|---|---|
|
||||
| design/engineering/architecture/architecture.md | 两新件登记行(建件后「实现批建件」改现状);「冒险域拆分」节随动句核对 | 设计权威文档——实现批禁直改;逐条列进 `reports/iter<N>-反哺点-<日期>.md`,用户裁决后归文档批落文 |
|
||||
| game/tests/README.md | 「棋盘悬停反馈」行代表用例列(本批复用既有探针、零新增断言——预计零改动);断点行入口句核对 | 机械面文档——实现批禁写;如需更新由写卡段后续卡修订版同批处理 |
|
||||
| design/gdd/systems/ | 无关联文档——结构整改不改游戏规则与玩家可见行为 | 无修订预期;契约句被触碰=停卡呈报走反哺点通道 |
|
||||
|
||||
## 7. 任务卡 T0..T3
|
||||
|
||||
**T0 读数重锚与对账(0.25–0.5 工作日)**
|
||||
|
||||
- [ ] 以当轮 master 重测 board_view/adventure_runner 三键实测值与第 3 节全部 file:line;漂移处就地改卡并记录;对不上即停卡呈报
|
||||
- [ ] 复核 11+9 函数族现行键面(`tools/gdstyle_baseline.txt` 无其函数级键——逐字搬运零新键;实查确认)
|
||||
|
||||
**T1 board_hover 拆件(0.75–1 工作日)**
|
||||
|
||||
- [ ] 建 `game/presentation/views/board_hover.gd`(RefCounted;构造=引用束注入:cells 容器引用、minesweeper 只读引用、diggable 集合引用+壳层光标写入与 hover_forbidden 注入 Callable)
|
||||
- [ ] 悬停函数族 11 个+成员 `_hover`/`_last_click` 迁出(函数体逐字搬运);三入站口(`_gui_input`/`_on_cell_input`/`click_cell`)留宿主委托;`hover_probe()` 留宿主读件投影(返回语义零变化);`_r0` 留宿主
|
||||
- [ ] 孤立验证:`tools/probe_gate.sh --click`+`--full` 全绿;`tools/render_gate.sh` 棋盘 golden 三张差异 0.00%(非零即停机呈报)
|
||||
|
||||
**T2 breakpoint_store 拆件(1–1.5 工作日)**
|
||||
|
||||
- [ ] 建 `game/core/breakpoint_store.gd`(RefCounted;构造=引用束注入:db、rng、主角账三件、curio/stop/bank/loadout 引用——防 max-parameters 新键)
|
||||
- [ ] 断点域 6 成员+`BREAKPOINT_FIELDS`+函数族 9 个归件(v1.1 R2 整族归件,机制=所有权缝语句分家):纯读侧三函数(`_bp_read`/`_bp_strategy`/`_bp_read_int`)逐字;`_bp_parts`/`_snapshot_breakpoint` body 逐字(宿主输入 state/level_index/master_seed/runner/adventure_counters 逐调传参——件不反向持宿主);四 `_resume_*` 按所有权缝语句分家——件侧语句(主角账三件片段回填、curio 池与特性持有集还原、stop/bank 片段回填、六成员改写)迁入 store,宿主侧语句(summary/levels_total/level_index/_shop_mode/_treasure_unlocked/_attunement/_tree_rules/adventure_counters 重绑定与 `_reset_curio_state`/`_attune_refresh_x_total` 宿主调用)按原语句序吸收进 `resume_adventure` 壳,语句序逐步保形、27 键冻结;宿主保留 `_snapshot_breakpoint` 一行委托壳(CurioStop 的 Callable 目标零改)与 `set_save_manager` 转发件;宿主对六成员的其余读写点改址经件
|
||||
- [ ] `breakpoint_resume_test.gd:185` 改址为 breakpoint_store 常量(判据零变化——第 14 节申报)
|
||||
- [ ] 孤立验证:`--script res://tests/run_all.gd -- --only=breakpoint_resume,save_rng_roundtrip,cross_system_flow` 全绿+`python tools/run_smoke.py`
|
||||
|
||||
**T3 键账对账与收口(0.5 工作日)**
|
||||
|
||||
- [ ] 批末代码域闸全绿(`tools/run_all_gates.sh --code`)
|
||||
- [ ] 三键终值对账(board_view 约30/27、adventure_runner 约22)——留债口径记入实现报告
|
||||
- [ ] 产出物落位卡:实现报告与反哺点清单写齐方算收口
|
||||
|
||||
合计估时约 2.5–3.5 工作日。编队注记:编入待迭代 42 合回;**board_hover 半边硬前置=呈现层状态件批先合回**(该批改型 u.st 写入面后,hover 拆件在新写入面上施工——grilling 复核定级,原「推荐先行」升格);breakpoint_store 半边无此依赖,可独立先行。另:本卡与组合根注册面批共享 ui_input_probe.gd 触面(该批改 main.X 地址面、本批不改探针内 u.face 读面)——同代编排时先后皆可。
|
||||
|
||||
## 8. 验证闸——改动—验收对照表
|
||||
|
||||
域口径:本批改动全为 `game/` 下非 .md 行为载体——批末跑代码域闸;里程碑步(T 段)出口跑一次全套闸,波内修复只做出红最小单元的最窄确认,新增测试先行孤立验证再并入全套。总判据=每行改动以「既有断言面全绿+golden 零差异」证明零行为漂移;全量闸电池=冒烟+系统测试+run_all 全量+probe_gate --click --full+render_gate+static_scan(含 S13 对账)。
|
||||
|
||||
| 行 | 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| V1 | 悬停域拆件 | board_hover.gd 新建;board_view.gd 函数族与 :70-71 成员迁出 | 复用 ui_input_probe 悬停三语义断言(case①到达/②禁入/③路径预览)+ui_click_probe+type_glow_shot_probe;新增断言零条 | 探针 | 合成 InputEventMouseMotion/MouseButton 经 `_gui_input` 入站口;`hover_probe()` 读面 | 探针可见性断言面(hover_probe 返回值、光标形状、格件状态面边框/点迹字段——施工时点在呈现层状态件批合回后,按其改型后投影面口径核对,判据语义零变化)+golden 三张零差异 | 既有:棋盘悬停反馈(三语义光标/目标格边框/路径预览点迹) |
|
||||
| V2 | 断点域拆件 | breakpoint_store.gd 新建;adventure_runner 断点函数族与 6 成员迁出 | 复用 breakpoint_resume_test 全套+save_rng_roundtrip_test+cross_system_flow_test:_feats_breakpoint_roundtrip;新增断言零条;:185 改址(第 14 节申报) | 单元+集成 | AdventureRunner.resume_adventure()/start_adventure() × SaveManagerCore 断点域 | 断点快照往返逐键断言面(27 键冻结——键名/策略/键序零变化) | 既有:断点片段往返与续玩幂等;既有:旧档迁移链与断点续玩零跳号(集成) |
|
||||
|
||||
反向核对:diff 中每个行为改动均有行——本批申报行为改动为零(全部非行为改动=结构整改,判据=零漂移证明)。孤儿断言:无(零新增断言)。
|
||||
|
||||
## 9. 异常分级
|
||||
|
||||
- **L1 自救**:迁移函数编译错、探针调用面改址漏改——就地修复重跑最窄确认。
|
||||
- **L2 记录继续**:实测值与预期区间偏离但同档位——记入实现报告「实现决定记录」。
|
||||
- **L3 停机写报告等用户**:①拆分边界纪律④触发(含 `_r0` 归属认定被实现期证伪);②机检预算互斥——新件实数超第 12 节预算或迁移函数现出超标键=停卡退回写卡段;③golden 对拍差异非零;④S13 键恶化或基线外新键;⑤断言面被下游兜底吸收致判据绑不上。
|
||||
|
||||
## 10. 代拍板白名单
|
||||
|
||||
1. 迁移函数头注指址微调(词表与语义不动)。
|
||||
2. 新件私有 helper 命名微调(职责语义不变)。
|
||||
3. 断言失败消息尾缀〔补件 Vn〕分配与措辞。
|
||||
4. 改址机械改写(preload 顺序、空行排版)。
|
||||
|
||||
## 11. 待裁点
|
||||
|
||||
零待裁点,开工门=U0。(裁决记录:2026-10-29 用户裁——恢复 D2/D4 拆件;D5 五降值键留债、零豁免延伸;`_r0` 留宿主;断点域六成员全迁。2026-10-30 用户裁——T2 机制=R2 整族归件、四 `_resume_*` 所有权缝语句分家、宿主侧语句吸收进壳;呈报=reports/iter45-停机呈报-断点域拆件规格缺口-2026-10-30.md。)
|
||||
|
||||
## 12. 落位与可复用性预检
|
||||
|
||||
- **board_hover.gd(新增)**:复用面核查——悬停预承诺逻辑现行全在 board_view(11 函数族全仓无第二实现,无既有件可复用);不能并入 TilePalette(瓦片装载)、HeroSprite(英雄演出)、CellUnit(格件绘制)——悬停预承诺与三者是不同变化原因。落点唯一:`game/presentation/views/` 新件,board_view `_init` 建为子件(HeroSprite 挂载先例)。调用路径:只被 board_view 持有与调用,输入经宿主入站口委托,禁反向持宿主引用(注入回调单向)。
|
||||
- **breakpoint_store.gd(新增)**:复用面核查——断点拼盘与读侧策略现行在 adventure_runner(`BREAKPOINT_FIELDS` 登记单源唯一);不能并入 save_manager(存档 IO 原语与冒险断点语义是两个变化原因——SlotStore 拆分已立界)、不能并入 MetaStateStore(元进度数据件)。落点唯一:`game/core/` 新件。调用路径:只被 adventure_runner 调用;宿主经件组装快照后写盘,应用层落盘口不变。
|
||||
- **新增函数**:零——全部为既有函数体逐字搬运。零新增数据件、零新增常量表(`BREAKPOINT_FIELDS` 为迁移非新增)。
|
||||
|
||||
## 13. 实现规范预算(gdstyle 默认阈值对账)
|
||||
|
||||
| 新件 | 公开方法 ≤20 | 类变量 ≤15 | 迁移函数对账 |
|
||||
|---|---|---|---|
|
||||
| board_hover.gd | 预算 6(悬停驱动入口) | 预算 2(`_hover`/`_last_click`)+引用束约 7(cells/minesweeper/diggable 引用+光标写入与 hover_forbidden 注入 Callable)=合计约 9 | 11 函数现行均无超标键(基线无其函数级键);`_apply_hover_visuals` 分支 5 |
|
||||
| breakpoint_store.gd | 预算 8(快照/回填/读侧入口族) | 预算 6(拟拆成员)+引用束约 14(db/rng/主角账三件/curio/stop/bank/loadout)=合计约 20?否——引用束为单成员字典注入,实计=6+1 束+件内散标 ≤15(T0 按实数对账,贴顶禁再增) | `_bp_parts` 现行 49 行/9 局部(:583-630 实测)均在默认阈值内;`_resume_*` 四函数无超标键 |
|
||||
|
||||
存量触面一查:board_view 6 键与 adventure_runner 1 键 T0 读数写明「S13 键较登记值只降不升」预期;`_init` 一律引用束注入防 max-parameters 新键。
|
||||
|
||||
## 14. 测试削弱申报
|
||||
|
||||
1. `breakpoint_resume_test.gd:185`——`AdventureRunnerScript.BREAKPOINT_FIELDS` 直读随件迁改址为 breakpoint_store 常量;判据零变化,仅常量承载文件换代。
|
||||
2. 除此之外禁删断言、禁放宽阈值、禁缩小扫描面、禁把真实入口换成下层直调;未申报的削弱由独立验收审计判红。
|
||||
|
||||
## 15. 独立验收审计
|
||||
|
||||
合并前由未参与实现的会话或子代理执行;报告落 `reports/iter<N>-验收审计-<日期>.md`。审计至少做四件事:逐行核对第 8 节对照表(测试存在、真执行、尾缀可 grep、真实入口未绕过改动点);抽查判据绑定面;检查测试削弱(对照第 14 节申报);核对两行「非行为改动」判定的零漂移证明是否在当轮真实跑批中成立。未过不得合并。
|
||||
|
||||
## 16. MC/数值与 RNG 零触碰声明
|
||||
|
||||
本批零数值改动、零数据表改动、零 RNG 流词表改动——断点回放 restore 同序取号、悬停域无随机。MC 对拍不跑。
|
||||
@@ -1,172 +0,0 @@
|
||||
# 需求卡片——呈现层状态件批
|
||||
|
||||
> **版本状态**:v1.0 定稿——零待裁点(2026-10-29 用户裁:单格两文件案、站桩两文件案、探针计数器留宿主、st/mo 命名、潜伏红随批修复)。
|
||||
> **接收方**:待办清单条目「零豁免五键清偿批——S13 余量五键真修四卡(2026-10-29 登记)」(本卡=四卡中的「呈现层状态件批」一卡,承接 board_cell_unit 类变量 30→10 与 standee_body 类变量 19→10 两键)。
|
||||
> **来源**:两份设计定稿全文。**唯一事实源**:`reports/设计-单格绘制状态件-2026-10-29.md`+`reports/设计-站桩状态件-2026-10-29.md`;`design/engineering/architecture/architecture.md` v1.25「模块归属·呈现层」表 cell_base_layer/cell_mark_overlay 行(:169)与 standee_vitals/standee_motion 行(:170)。
|
||||
|
||||
## 1. 目标与完成定义
|
||||
|
||||
这批做什么:把两个呈现层宿主的内部状态件沿职责缝拆成四个独立文件类——单格 `board_cell_unit.gd` 的 `_CellPaintState`(27 成员)按绘制层域轴拆 `cell_base_layer.gd`(12 成员)+`cell_mark_overlay.gd`(13 成员),宿主 `_draw` 退六步时序器、类变量 30→10;站桩 `standee_body.gd` 的 `_StandeeState`(真实 25 成员——基线 19 是 gdstyle 计数截断的欠估读数)按「身份命值/资产演出」缝拆 `standee_vitals.gd`(12 成员)+`standee_motion.gd`(11 成员),三个演出探针计数器留宿主、类变量 19→10。宿主实例命名:单格两件 `base`/`face`;站桩沿用 `st`(指 vitals)+新增 `mo`。附带处置一处潜伏红:ui_input_probe 四处绕过状态件直读格件成员的断言疑似已被迭代 41 状态件化打断,T0 实跑定谳,确红则随批修复。
|
||||
|
||||
什么状态算完:
|
||||
|
||||
1. 四新件在库、两宿主瘦身到位、六个 gdstyle 键账达预期(board_cell_unit 10/standee_body 10——较登记值 30/19 只降不升;四新件 12/13/12/11 全部阈值内零新键)。
|
||||
2. 行为零变化:棋盘 golden 三张(L1 dungeon/L2 underdark/L3 deep_underdark)对拍差异 0.00%;探针冻结成员(glyph/fog_state/plate/glyph_color)与站桩演出时序、三条源码锚逐字不动。
|
||||
3. 潜伏红定谳结论记实现报告;确红则四处改址落地、probe_gate 全绿闭环。
|
||||
4. 批末代码域闸全绿;实现报告与反哺点清单写齐方算收口。
|
||||
|
||||
## 2. 设计事实源
|
||||
|
||||
两份设计定稿(2026-10-29 设计闭合,待办清单条目凭据与本节一致):单格篇 §4 拆分定案(两件案 A2、成员总账 10/12/13、写入路径对账表 §5.1、六步时序器 §6、键账预期 §7)、§1.2 gdstyle 截断缺陷与 §1.3 潜伏红发现、§1.4 探针直读面全清单;站桩篇 §3 方案 C(两独立文件+计数器留宿主)、§4 外部写入方零改动清单、§5 键账预期、§6 行为零变化六点。architecture.md v1.25 两行在册(呈现层表 :169-:170——职责语句、成员数、宿主 30→10/19→10)与「gdstyle 计数截断缺陷登记」节。
|
||||
|
||||
## 3. 现状事实(2026-10-29 主区实查;行号为迭代 42 合回前盘面——T0 必须在迭代 42 合回后按当轮 master 重锚)
|
||||
|
||||
**编队注记**:本卡与迭代 42 有 board_view 触面耦合——迭代 42(在飞,roadmap 迭代 42 行「进行中」)尾波清偿批 T1 把 `_paint_cell` 拆五段(`_paint_cell_base/_ink/_facade/_overlays/_fog`,段间只经 u.st/glyph/digit_col 传值)并抽 `_build_cell_unit`(:246-262),改变 u.st 写入面的函数分布结构(写入语句从单函数分散进段函数),写入路径形态 u.st.X 本身不变。**本卡 T0 必须在迭代 42 合回后执行**;本节行号按当前盘面实查,届时 board_view 全部写入点行号漂移、以 T0 重锚为准。反向编队义务:尾波补件批(board_hover)已裁「u.st 写入面改型后 hover 拆件在新面上施工」——本批先于其 board_hover 半边合回。另:本卡与组合根注册面批共享 ui_input_probe.gd 触面(该批改 main.X 地址面、本批改四处 u.face.* 读面,互不覆盖但同文件)——同代编排时禁并行、先后皆可,编入前置声明互指。
|
||||
|
||||
- **键账**:`tools/gdstyle_baseline.txt` :16 `board_cell_unit.gd|quality/max-class-variables = 30`、:23 `standee_body.gd|quality/max-class-variables = 19`。源码实查:board_cell_unit.gd 全文件 33 个类级 var(宿主 6+`_CellPaintState` 27,:26-122 内嵌类/:125-143 宿主);standee_body.gd 全文件 31 个(宿主 6+`_StandeeState` 25,:23-59 内嵌类/:62-68 宿主)。登记值 30/19 均为 gdstyle 对 inner class「首个带行尾注释属性截断」的欠估(architecture v1.25 已登记该工具缺陷;board_view.gd 无内嵌类、32 逐一全计——平面口径预测即实测)。
|
||||
- **单格写入方**:唯一写方文件 board_view.gd。写入点实查——set_world_font:185(font)、set_cell_area:204(edge)、rebuild:250/251/253/260(cell/edge/bevel/font)、悬停面 :512-534(hl_visible/hl_color 五组写+一清)、路径预览 :549/:554(dot_visible)、`_paint_cell` :601-738(tex_seal:614/618、tex_base:665、bg_sb:666、glyph:667、glyph_color:668/674、plate:675、outline_sides:676/700、facade_south:677/690、proj_band:678/704、tex_facade:679/709、facade_strip:680/708、treasure_mark:713、badge_glyph:719/726、mutation_mark:723/725、glow_group:727、fog_state:734/736、removed_dim:737、终写 queue_redraw:738)、接触带 :780/:787/:804/:805/:810/:816、glow 同步 :768、cell_rect_probe 读 :891(u.st.edge)。
|
||||
- **站桩外部触面**:唯一写状态的外部方 battle_stage_view——slot_row :140/:265、box :198/:208、font :232/:235、set_portrait_texture/register_hero_state :132-138、set_hero_state :313/:316/:388、演出三方法 :333-336;hud_presenter :77/:78/:137/:162/:163(set_hero/set_effects/set_effects_cleared_feedback);fx_probe 对 box 直写三处。测试直读 standee_fx_sweep_test.gd:103(`s1._intent_charge`);源码锚 theme_projection_test.gd:678-683(GOLD_BRIGHT 顺位墨/HERO_BLUE_BRIGHT 与 GOLD_BRIGHT 护甲墨/`_intent_charge = pid in CHARGE_SKILL_IDS` 三条 contains 断言)。
|
||||
- **潜伏红(T0 定谳)**:ui_input_probe.gd 四处绕过 st 直读格件成员——:234-235(case① `u1.hl_visible`/`u1.hl_color`)、:243-244(case② `.hl_color`)、:250(case③ `.dot_visible`)、:374-379(case⑭ `.mutation_mark`)。这四个成员迭代 41 已迁入内嵌类 `_CellPaintState`,宿主 Node2D 上不存在同名属性,外部读预期运行时「Invalid get index」错误。时间线:探针末次全绿 2026-10-28 05:03 早于状态件合入 2026-10-29 01:37,合入后未跑过。设计文档同篇已含改址方案(u.face.*)。
|
||||
- **探针冻结面(零改动义务)**:ui_input_probe.gd:271/:363(u.glyph)、:400-:492(u.fog_state case⑮族);player_copy_sweep_test.gd:138-140(u.plate/u.glyph_color wa8)。plate 绘制侧零消费(禁删禁接线——接线即行为变化)。
|
||||
- **演出探针计数器**:standee_body.gd:57-59(_death_shards/_hit_sparks/_flash_count);唯一写入方宿主函数 :275/:315/:336,唯一读方 fx_probe() :301。
|
||||
- **文件体量**:board_cell_unit.gd 423 行(迭代 41 已拆函数级键、本设计只解决类变量键;拆后宿主约 150 行);standee_body.gd 531 行。
|
||||
|
||||
## 4. 设计契约(违反即返工的红线条款)
|
||||
|
||||
- 🔴 **行为零变化**:绘制调用序与层序零变化——宿主 `_draw` 六步时序器与现行四函数调用树逐命令等价(设计文档单格篇 §6 四点论证:层间序/件内逐字搬运/接触带回退补画序整体保形/浮点推导式零改动);接触带「平色回退+微光并发的英雄格补画」重复绘制路径原样保形;setter 多写多触发序不变(facade_south/badge_glyph/mutation_mark 双写点);站桩六点(tween 路径串、三态机早退序、`_hp_flash_tw` 回色读 `_dead` 同拍、源码锚逐字、成员初始化时序、计数器纯易位)=站桩篇 §6。
|
||||
- 🔴 **golden 三张零差异**:render_gate 棋盘 golden(L1 dungeon/L2 underdark/L3 deep_underdark)对拍差异 0.00%;非零即停机呈报,禁换锚、禁重制基线。
|
||||
- 🔴 **冻结面逐字**:探针冻结成员 glyph/fog_state/plate/glyph_color 宿主保留、名称路径零变化;站桩三条源码锚所在函数留宿主且锚行逐字;battle_stage_view 一行不改(写入面零改动清单=站桩篇 §4)。
|
||||
- 🔴 **拆分边界纪律**(判据权威=code-conventions §1.1,卡内执行条款;实现报告逐件一行职责语句):①拆出单元须有可陈述职责语句与单一变化原因——四件职责语句与宿主保留面语句照设计文档 §4.2/§4.3/§4.4 与站桩篇 §3 逐字承载(基座层绘制域/标识叠加绘制域/身份命值唯一账面/资产挂点与一次性演出;单格宿主=被动绘制壳+迷雾域+微光子件生命周期);②集体身份——命不出名字的打包=凑计数袋,禁;③「过阈值」只作发现信号,拆分动机是职责轴(迭代 41 函数级已沿同一条绘制层域轴,本批升到类级);④拆不出内聚单元→停卡呈报;⑤禁沿阈值轴拆。
|
||||
- 🔴 **禁为机检文本保留无效成员**:禁止为迎合机检消息文本(含计数)保留或新增无效成员/别名;机检键与卡片契约互斥=实现段停卡呈报,不自造第三条路。
|
||||
- 🔴 **gdstyle 截断缺陷声明**:本卡不依赖任何解析行为——四新文件与两宿主全部平面口径(无内嵌类),实数即闸读数;基线登记 30/19 属截断欠估,禁任何利用截断口径的降数手法(重排成员顺序/挪 setter 位置/删行尾注释),禁把 `_portrait_tex` 这类承重槽位当削减目标凑数。
|
||||
- 🔴 **潜伏红处置纪律**:T0 一次 ui_input_probe 实跑定谳——确红=已申报的存量红承接,随批修复(T3 四处改址 u.face.*,断言条件与期望值零变化);禁静默放过、禁在实现报告外私记了结。
|
||||
|
||||
## 5. 范围边界
|
||||
|
||||
做什么:第 3 节两拆件项(单格两域件+宿主上收+board_view 写入面改址;站桩两状态件+宿主转调壳)、潜伏红定谳与四处改址、键账对账收口。
|
||||
|
||||
不做什么:迭代 42 在飞范围零触碰(_paint_cell 拆五段、_build_cell_unit、BoardInstaller、商店委托壳);board_hover/breakpoint_store(尾波补件批承接,且其 board_hover 半边待本批合回后施工);main.gd/battle_orchestrator/tune_sim 其余三键(零豁免五键各卡承接);`_portrait_tex` 冗余归一(站桩篇 §9-3 留债册);基线收账(各批合回后用户发令一次人工 `--refresh --force`,本批不刷新基线)。
|
||||
|
||||
## 6. 关联文档同步面
|
||||
|
||||
| 文档 | 关联点 | 同步义务 |
|
||||
|---|---|---|
|
||||
| design/engineering/architecture/architecture.md | 呈现层表 cell_base_layer/cell_mark_overlay 行与 standee_vitals/standee_motion 行(建件后「实现批建件」改现状登记);「gdstyle 计数截断缺陷登记」节的欠估数字(30/33、19/31——收账归后续人工 refresh 批) | 设计权威文档——实现批禁直改;逐条列进 `reports/iter<N>-反哺点-<日期>.md`,用户裁决后归文档批落文 |
|
||||
| game/tests/README.md | 「棋盘悬停反馈(三语义光标/目标格边框/路径预览点迹)」行——真实入口(ui_input_probe 合成鼠标事件→BoardView._gui_input();读面 hover_probe())与代表用例(ui_input_probe.gd:_ready)预计零变化,批末核对;「地形瓦片套与格面数字可读」「站桩敌人呈现与结算演出落点」「未开格类型微光」「玩家面文案与危险格格面字形」各行代表用例列核对(本批零新增能力、复用既有载体,预计零改动) | 机械面文档——实现批禁写;批末收尾核对表上名字与实际落地一致(改名则回表) |
|
||||
| design/gdd/ | 无关联文档——结构整改不改游戏规则与玩家可见行为 | 无修订预期;契约句被触碰=停卡呈报走反哺点通道 |
|
||||
|
||||
## 7. 文件结构图(卡前)
|
||||
|
||||
| 文件 | 新增/修改 | 职责 | 行为属性 |
|
||||
|---|---|---|---|
|
||||
| game/presentation/views/cell_base_layer.gd | 新增 | 单格基座层绘制域件:12 成员+九绘制函数逐字搬运+九个 D/E 档常量随迁+公开入口 draw_base | 非行为改动(V1) |
|
||||
| game/presentation/views/cell_mark_overlay.gd | 新增 | 单格标识与叠加层绘制域件:13 成员+六函数段随迁+draw_centered_text 单点化+两绘制入口 | 非行为改动(V2) |
|
||||
| game/presentation/views/standee_vitals.gd | 新增 | 站桩身份与命值态件:12 成员+apply_hp(原 _set_hp 整体搬移)+hp_value setter 逐字 | 非行为改动(V3) |
|
||||
| game/presentation/views/standee_motion.gd | 新增 | 站桩资产与演出态件:11 成员+六迁入函数(两处改形点见 T2) | 非行为改动(V3) |
|
||||
| game/presentation/views/board_cell_unit.gd | 修改 | 宿主瘦身:类变量 33→10(edge/cell/glow_group 上收+base/face 两实例)、_draw 退六步时序器、雾/glow/记忆态留宿主、头注改写(≤8 行) | 非行为改动(V1/V2) |
|
||||
| game/presentation/views/board_view.gd | 修改 | 写入面改址约 40 处(u.st.X→u.base./u.face./u.edge/u.glow_group/u.cell,全清单=设计文档单格篇 §5.1/§5.2 对账表;行号 T0 重锚)+cell_rect_probe 一处 | 非行为改动(V1/V2) |
|
||||
| game/presentation/views/standee_body.gd | 修改 | 宿主改造:类变量 31→10(五冻结 var+st+mo+三计数器)、同名转调壳、tween 路径串改指、源码锚行逐字不动 | 非行为改动(V3) |
|
||||
| game/probe/ui_input_probe.gd | 修改 | 四处直读改址 u.face.*(T3,:234-235/:243-244/:250/:374-379) | 非行为改动(V4——判据零变化;T0 确红时兼具存量红修复身份) |
|
||||
|
||||
零新增数据件、零新增常量表(九常量为迁移非新增)、零新增测试件(全部复用既有断言面)。行为改动核对:本批申报行为改动为零——全部改动为逐字搬运、换参形与读路径改址;判据=零漂移证明(golden 零差异+既有断言面全绿+源码锚逐字)。
|
||||
|
||||
## 8. 任务卡 T0..T4
|
||||
|
||||
**T0 重锚与潜伏红定谳(0.25–0.5 工作日)**
|
||||
|
||||
- [ ] 前置确认:迭代 42 已合回 master(`_paint_cell` 五段在盘)——未合回即停,T0 不开工(编队注记)
|
||||
- [ ] 以当轮 master 重测六个键账读数(board_cell_unit 33 声明/30 闸账、standee_body 31 声明/19 闸账——截断口径双读数对照)与第 3 节全部 file:line;board_view 写入点按五段新分布逐点重锚(路径形态核对仍为 u.st.X)、漂移处就地改卡并记录;对不上即停卡呈报
|
||||
- [ ] ui_input_probe 一次实跑定谳潜伏红:红=确证设计文档单格篇 §1.3;绿=证伪设计前提(L3 停机呈报,见第 10 节)——定谳结果记实现报告
|
||||
- [ ] 复核迁移函数零超标键:`tools/gdstyle_baseline.txt` 无 board_cell_unit/standee_body 任何函数级键(实查确认)——九+六函数与六搬移函数逐字/换参搬运零新键
|
||||
|
||||
**T1 单格两域件建件与迁移(1.5–2.5 工作日)**
|
||||
|
||||
- [ ] 建 `game/presentation/views/cell_base_layer.gd`:extends RefCounted、无 class_name、`_init(owner: Node2D)`;12 成员+四 setter 体逐字;九函数(_draw_base_layer/_draw_outline_sides/_draw_south_facade/_draw_north_projection/_draw_e_facade/_draw_contact_or_fallback/_draw_contact_bands/_draw_contact_corner/_draw_bevel)逐字搬运,三处机械改写=`st.X`→裸成员名、`draw_X(...)`→`canvas.draw_X(...)`、`st.edge`→`rect.size.x`;公开入口 `draw_base(canvas: CanvasItem, rect: Rect2)`;九常量随迁(FACADE_HIGHLIGHT_PX/FACADE_NEAR_FRAC/FACADE_FAR_FRAC/FACADE_NEAR_COL/FACADE_FAR_COL/PROJECTION_NEAR_COL/PROJECTION_MID_COL/PROJECTION_EDGE_COL/E_FACADE_FRAC——board_cell_unit.gd:12-23,UiKit.E_FACADE_FOOT_COL 不动)
|
||||
- [ ] 建 `game/presentation/views/cell_mark_overlay.gd`:同形态;13 成员+八 setter 体逐字(含 badge_glyph 的 `_owner._glow_layer` mask 回引);六函数段随迁(_draw_mutation_marks/_draw_glyph_layer/_draw_digit_plate/_draw_glyph/_draw_badge+_draw_overlay_layers 的 dot/hl/removed 三段);公开入口 `draw_marks`/`draw_glyph_layer(canvas, rect, glyph, glyph_color)`(4 参)/`draw_overlay_under`/`draw_removed_dim`/`draw_centered_text(canvas, rect, text, color, font_size)`(5 参,文字渲染单点化)
|
||||
- [ ] 宿主瘦身:board_cell_unit.gd——`base`/`face` 两实例于 `_init` 自建(preload 常量 `_BASE_LAYER`/`_MARK_OVERLAY`,设计文档 §4.5);edge/cell/glow_group 上收宿主(setter 体改直调自有面:edge 的 glow setup+queue_redraw、glow_group 守卫调 `_sync_glow_layer()`);glyph/glyph_color/plate/fog_state/_glow_layer 原位;`_draw` 改六步时序器(base.draw_base→face.draw_marks→face.draw_glyph_layer→face.draw_overlay_under→`_draw_fog_layer` 原位→face.draw_removed_dim,设计文档 §6 逐字);`_sync_glow_layer`/`_draw_fog_memory` 改址(§5.2——记忆态墨数字改调 face.draw_centered_text,同公式同字号);头注改写(两件句+冻结清单+「hl_color/hl_visible/dot_visible/mutation_mark 探针读 u.face.*」句,≤8 行)
|
||||
- [ ] board_view 写入面逐点对账改址:按设计文档单格篇 §5.1 对账表每处核对改后形态(T0 重锚行号为准,约 40 处)——u.base.bg_sb/tex_base/outline_sides(assign 保引用语义)/facade_south/proj_band/tex_facade/facade_strip/contact_bands/contact_corners/contact_col/bevel;u.face.badge_glyph/dot_visible/hl_visible/hl_color/tex_seal/treasure_mark/mutation_mark/removed_dim/font/tex_mutation/tex_glyph/tex_badge;u.edge/u.cell/u.glow_group;u.glyph/u.glyph_color/u.plate/u.fog_state 与终写 u.queue_redraw() 不动;cell_rect_probe `u.st.edge`→`u.edge`
|
||||
- [ ] 孤立验证:`tools/render_gate.sh` golden 三张差异 0.00%(非零即 L3 停机);`--script res://tests/run_all.gd -- --only=player_copy,theme_projection,type_glow,terrain` 全绿;`python tools/run_smoke.py`。probe_gate 各段本卡内暂不计绿——ui_input_probe 段在 T3 改址前处于 T0 已定谳态(存量红或改址等待),T3 闭环
|
||||
|
||||
**T2 站桩两状态件建件与迁移(0.5–1 工作日)**
|
||||
|
||||
- [ ] 建 `game/presentation/views/standee_vitals.gd`:RefCounted、无 class_name;12 成员(_owner/_kind/_display_name/_enemy_id/_armor/_order/_dead/_hp_max/_hp_cur/hp_value/_hp_tween/_hp_flash_tw);`apply_hp(hp)`=原 `_set_hp` 整体搬移(clamp、重启 `_hp_tween`、tween 写 hp_value——路径串 `"st.hp_value"` 零改);`hp_value` setter 逐字(clamp+`_owner.queue_redraw()`);`_hp_flash_tw` 归此件(flash_hit 回色分支读 `_dead` 同域)
|
||||
- [ ] 建 `game/presentation/views/standee_motion.gd`:RefCounted、无 class_name;11 成员(_owner/_portrait_sprite/_portrait_tex/_hero_tex/_hero_state/_state_revert_tw/_intent_glyph/_intent_col/_intent_visible/_intent_scale/_glyph_rot);六迁入函数——`set_portrait_texture(tex, flip, box)`(box 由宿主传入)、`register_hero_state`、`apply_hero_state(state, is_hero)`(原 set_hero_state,唯一改形=`st._kind != "hero"` 早退改参判 `is_hero`,三连早退条件序逐字)、`reset_state()`(原 `_revive` 内「置 RESET 强制绕同态早退」两拍封装)、`play_intent_motion(charge)`(`_intent_charge` 改参传入;tween 路径串改 `"mo._intent_scale"`/`"mo._glyph_rot"`)、`state_probe()`
|
||||
- [ ] 宿主改造:standee_body.gd——`st` 名保留改指 vitals、新增 `mo`;三计数器留宿主(:57-59 原位);同名转调壳(set_portrait_texture/register_hero_state/set_hero_state 三入口 1–2 行转调,签名外形零变);`_draw` 全族与几何函数留宿主、成员前缀改指(st.→mo. 仅资产演出域成员);六个 probe/display_name/enemy_id/is_dead 出口外形零变体内改指(fx_probe 改读宿主计数器);源码锚所在三函数(_draw_hp_bar/_draw_armor_name_line/set_pending)留宿主且 :678-683 锚行逐字不动;`_intent_charge` 与五冻结 var 原位
|
||||
- [ ] battle_stage_view 写入面对账(站桩篇 §4 清单逐点):结论=零改动——slot_row/box/font 直写原位、三同名转调入口承接、演出三方法原位;hud_presenter :77/:78/:137/:162/:163 零改动;实机核对一遍
|
||||
- [ ] 孤立验证:`--script res://tests/run_all.gd -- --only=standee_fx_sweep,theme_projection` 全绿;孤立验证同 T1 口径(probe_gate 推迟 T3 闭环)
|
||||
|
||||
**T3 潜伏红处置(0.25–0.5 工作日)**
|
||||
|
||||
- [ ] ui_input_probe.gd 四处改址::234-235→`u1.face.hl_visible`/`u1.face.hl_color`、:243-244→`.face.hl_color`、:250→`.face.dot_visible`、:374-379→`.face.mutation_mark`——断言条件与期望值零变化,只改读路径
|
||||
- [ ] 孤立验证(本卡闭环点):`tools/probe_gate.sh --click --full` 全绿——ui_input_probe 恢复绿;若 T0 定谳为红,本步同时即存量红修复闭环;`tools/render_gate.sh` golden 三张复跑一次仍 0.00%
|
||||
|
||||
**T4 键账对账与收口(0.5 工作日)**
|
||||
|
||||
- [ ] 批末代码域闸全绿(`tools/run_all_gates.sh --code`——三件保险恒跑+本卡申报套件族+探针+渲染+静态)
|
||||
- [ ] 六文件键账对账:board_cell_unit 10/cell_base_layer 12/cell_mark_overlay 13/standee_body 10/standee_vitals 12/standee_motion 11(平面口径实测);两存量键 30→10、19→10「较登记值只降不升」达成;基线不随批刷新(收账归用户发令人工 refresh)
|
||||
- [ ] 产出物落位卡:`reports/iter<N>-实现报告-<日期>.md`(各卡状态+潜伏红定谳结论+实现决定记录)与 `reports/iter<N>-反哺点-<日期>.md`(第 6 节所列每条有落点)写齐方算收口
|
||||
|
||||
合计约 3–5 工作日。切分预案:T1 超软盒时拆 T1a(基座件+宿主上收)/T1b(叠加件+board_view 改址)各 0.75–1.25 工作日。回归措辞:里程碑步(T 段)出口跑一次全套闸;波内修复只做出红最小单元的最窄确认;新增测试先行孤立验证再并入全套(本批零新增测试)。
|
||||
|
||||
## 9. 验证闸——改动—验收对照表
|
||||
|
||||
域口径:本批改动全为 `game/` 下非 .md 行为载体——批末跑代码域闸(重闸按域选档);总判据=每行改动以「既有断言面全绿+golden 零差异」证明零行为漂移。**静态键账判据按 test-conventions §8.4 出口在本段申报观测面局限、不入对照表**:S13 六文件键账(10/12/13/10/12/11)与两存量键只降不升(30→10、19→10)以 static_scan S13 回执为判据(可 grep 定位)——键清偿是结构判据非运行期断言,故不出现在下表。
|
||||
|
||||
| 行 | 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| V1 | 单格基座层域件 | cell_base_layer.gd 新建(12 成员+九函数+九常量);board_cell_unit.gd 宿主上收 edge/cell/glow_group+六步时序器;board_view.gd 基座域写入点改址(对账表 §5.1 基座行) | render_gate 棋盘 golden 三张(board_L1/L2/L3)+board_shot_probe/type_glow_shot_probe 取证;新增断言零条 | 探针+golden | BoardView.rebuild()→refresh() 真实场景帧(board_shot_probe) | golden 逐像素容差比对(差 ≤16/changed ≤2%)差异 0.00%=绘制命令流逐位;微光子件生命周期取证(glow_group setter 直调时序零漂移) | 既有:地形瓦片套与格面数字可读;既有:未开格类型微光(8 邻作用集/五组色相/零玩法写入) |
|
||||
| V2 | 单格标识叠加域件+冻结面保留 | cell_mark_overlay.gd 新建(13 成员+六函数段+draw_centered_text);board_cell_unit.gd 四冻结成员原位;board_view.gd 标识域写入点改址+cell_rect_probe 一处 | 复用 player_copy_sweep_test.gd:_sweep_board_glyph+wa8(:138-140 plate/glyph_color 直读零改动);ui_input_probe case④b/⑪/⑮(glyph/fog_state 冻结读面);run_all 02 闸选跑+render_gate golden;新增断言零条 | 单元+探针+golden | BoardView.rebuild()→refresh()(player_copy 夹具真实构建);ui_input_probe 合成鼠标事件 | u.plate/u.glyph_color/u.glyph/u.fog_state 直读断言零改动全绿;golden 三张零差异(雾层原位夹在 hl 与 removed 之间) | 既有:玩家面文案与危险格格面字形;既有:地形瓦片套与格面数字可读 |
|
||||
| V3 | 站桩两状态件 | standee_vitals.gd/standee_motion.gd 新建;standee_body.gd 宿主 10 成员+转调壳+tween 路径串改指;battle_stage_view 写入面零改动 | 复用 standee_fx_sweep_test 全套(:103 `_intent_charge` 直读、fx_probe().flash_count、enemy_id 解析)+theme_projection_test 三条源码锚(:678-683 逐字)+probe_gate --full 段(fx_probe/ui_probe:碎裂 5/火花 6/闪白计数/三态切换/意图三档/name_line/portrait/has_world_hp_bar/slot_row)+ui_click_probe tooltip;新增断言零条 | 单元+探针 | StandeeBody 公开方法面(set_data/set_hero/set_pending/mark_dead/flash_hit)与 battle_stage_view.on_step_row_fx 演出链;探针场景真实实例化 | fx_probe()/intent_probe()/hero_state_probe() 出口返回逐键;源码锚 contains 断言逐字命中;tween 属性路径串("st.hp_value"/"mo._intent_scale"/"mo._glyph_rot")由意图弹入与三态断言兜底 | 既有:站桩敌人呈现与结算演出落点;既有:UI 全局主题与按钮五态(含对比度锚) |
|
||||
| V4 | 潜伏红处置与探针改址 | ui_input_probe.gd:234-235/:243-244/:250/:374-379 四处直读改址 u.face.*(判据零变化;T0 确红时兼具存量红修复) | ui_input_probe 全套断言改址后执行且绿(case①②③⑭);probe_gate --click --full 全绿 | 探针 | ui_input_probe 合成鼠标事件→BoardView._gui_input() | 四处断言执行且绿(悬停金框/禁入红框/路径点迹/变异角标,读路径 u.face.*);probe_gate 三硬闸全过=存量红闭环 | 既有:棋盘悬停反馈(三语义光标/目标格边框/路径预览点迹) |
|
||||
|
||||
反向核对:diff 中每个改动均有行——本批申报行为改动为零(结构整改,判据=零漂移证明),V1–V4 四行覆盖全部八个文件行。孤儿断言:无(零新增断言)。
|
||||
|
||||
## 10. 异常分级
|
||||
|
||||
- **L1 自救**:迁移函数编译错、改址漏改、preload 常量名笔误——就地修复重跑最窄确认。
|
||||
- **L2 记录继续**:实测行号与第 3 节偏离但路径形态一致(T0 重锚记录);探针段实测时长同量级漂移。
|
||||
- **L3 停机写报告等用户**:①机检预算互斥——新件实数超第 14 节预算或迁移函数现出超标键=上游缺陷停卡退回写卡段;②golden 对拍差异非零(禁换锚禁重制基线);③潜伏红证伪设计前提——T0 实跑 ui_input_probe 现状绿,即设计文档单格篇 §1.3 的 GDScript 取索引语义判断被证伪(改址四处义务不变,等用户裁决后继续);④S13 键恶化或基线外新键;⑤拆分边界纪律④触发(按职责轴拆不出内聚单元);⑥断言面被下游兜底吸收致判据绑不上(test-conventions §8.4 出口呈报)。
|
||||
|
||||
## 11. 代拍板白名单
|
||||
|
||||
1. 迁移函数与新件头注指址微调(职责语句、冻结清单句与语义不动)。
|
||||
2. 新件私有 helper 命名微调(职责语义不变;公开入口名按第 8 节逐字)。
|
||||
3. 改址机械改写(preload 常量顺序、空行排版、注释随迁改写)。
|
||||
4. 断言失败消息尾缀〔状态件 Vn〕分配与措辞。
|
||||
5. T0 重锚产生的行号漂移卡面注记更新(不改判据与改后形态)。
|
||||
|
||||
## 12. 待裁点
|
||||
|
||||
零待裁点,开工门=U0。(裁决记录:2026-10-29 用户裁——单格两文件案〔淘汰整体一件 A3 与成员削减路 B〕;站桩两文件案+三个演出探针计数器留宿主〔淘汰原地 −4 案〕;实例命名 st 沿用/mo;潜伏红随批修复〔弃「先最小工程批改 u.st.* 再二次改址」时序〕;cell 成员保留〔宿主 10 含 cell——弃删除倾向〕;gdstyle 截断口径登记已由 architecture v1.25 落文收口。)
|
||||
|
||||
## 13. 落位与可复用性预检
|
||||
|
||||
- **cell_base_layer.gd(新增)**:复用面核查——基座层绘制现行全在 board_cell_unit 内嵌类+宿主九函数(全仓唯一实现,无既有件可复用);不能并入 TilePalette(瓦片装载与查表件、架构表明载零绘制面——职责互斥)、不能并入 BoardWorld(世界根/材质挂点)、不能并入 CellUnit 本体的字形迷雾域(变化原因不同)。落点唯一:`game/presentation/views/` 新件,board_cell_unit `_init` 自建持有(每格 Node2D+两 RefCounted,与现状同量级;件内自建不触发 allocation-in-loop 新键——构建器函数体不在循环体内)。交互路径:宿主持有两件引用;件→宿主仅 `_owner.queue_redraw()`/glow mask 回引(与现状 inner class 同形);宿主迷雾记忆态读 `base.tex_base` 公开成员单向(成文于宿主头注)。
|
||||
- **cell_mark_overlay.gd(新增)**:同上排除;迷雾留宿主是三域中唯一不产生跨件回引的落点(设计文档 §4.4——雾夹在两件入口之间、读件 A 纹理与件 B 字体渲染);`draw_centered_text` 单点化供宿主复用(零复制)。
|
||||
- **standee_vitals.gd/standee_motion.gd(新增)**:复用面核查——25 成员现行全在 `_StandeeState`(全仓唯一);不能并入 battle_stage_view(壳层视图,站桩本体是世界件)、不能并入 StatusSlotRow(壳层伴随件)。落点唯一:`game/presentation/views/` 新件,standee_body 持有 st/mo;外部仍只经宿主方法与五冻结 var(box/font/slot_row/has_world_hp_bar/_intent_charge 原位),零新增外部直访面;`_owner` 回引同形、禁反向引用。
|
||||
- **四新件对既有周边件逐一排除**(TilePalette/HeroSprite/CellUnit/BoardWorld,架构文档呈现层表在册件):TilePalette=瓦片装载与查表件、架构表明载零绘制面——四件都不并入;HeroSprite=英雄精灵演出件(落位/位移/帧闪)——与四件变化原因不同;CellUnit 本体(board_cell_unit 宿主)=两格件的持有壳而非合并对象(拆分方向是自宿主出、非并入宿主);BoardWorld=棋盘 Node2D 世界根(材质挂点)——零绘制入参承载。站桩两件另排除 battle_stage_view(壳层视图)与 StatusSlotRow(壳层伴随件)。
|
||||
- **新增函数清单**:apply_hp/set_portrait_texture(3 参形)/apply_hero_state(is_hero 参形)/reset_state/play_intent_motion(charge 参形)/state_probe/draw_base/draw_marks/draw_glyph_layer/draw_overlay_under/draw_removed_dim/draw_centered_text——全部为既有函数体整体搬移或既有函数换参形与改名入口,无新逻辑。新增前已 grep 同名标识符:`apply_hero_state`/`reset_state`/`state_probe`/`draw_base` 等盘上无第二处。
|
||||
|
||||
## 14. 实现规范预算(gdstyle 默认阈值对账)
|
||||
|
||||
| 新件 | 公开方法 ≤20 | 类变量 ≤15 | 迁移函数对账 |
|
||||
|---|---|---|---|
|
||||
| cell_base_layer.gd | 预算 5(draw_base+4 setter) | 12(设计文档 §4.1 实数) | 九函数逐字搬运——基线无其函数级键(T0 实查)、行数/分支/局部/返回不变=零新键 |
|
||||
| cell_mark_overlay.gd | 预算 13(5 绘制入口+8 setter) | 13(同上) | 六函数段同上;draw_glyph_layer 4 参、draw_centered_text 5 参(max-parameters 默认 5=合规上限内) |
|
||||
| standee_vitals.gd | 预算 1(apply_hp)+hp_value setter | 12(设计文档 §5 实数) | apply_hp 整体搬移零键(原 _set_hp 现役无超标键) |
|
||||
| standee_motion.gd | 预算 6(六迁入函数)+2 属性 setter | 11(同上) | 六搬移函数逐字/换参——最大者 apply_hero_state 4 参数 4 分支全在原值内;宿主转调壳 1–2 行零键 |
|
||||
|
||||
存量触面一查:board_cell_unit 键 30→10、standee_body 键 19→10——T0 写明「S13 键较登记值只降不升」预期与达成手段(成员迁出后实数即证);board_view 六键零触碰(改址不动成员数与函数面,32 留债冻结)。宿主 `_init` 一律单参构造注入,防 max-parameters 新键。
|
||||
|
||||
## 15. 测试削弱申报
|
||||
|
||||
1. ui_input_probe.gd 四处直读改址(T3/V4)——断言条件与期望值零变化,仅读路径 u.X→u.face.X;若 T0 确红,同处兼具存量红修复(恢复断言效力)。
|
||||
2. 除此之外禁删断言、禁放宽阈值、禁缩小扫描面、禁把真实入口换成下层直调;golden 三张基线禁重制;未申报的削弱由独立验收审计判红。
|
||||
|
||||
## 16. 独立验收审计
|
||||
|
||||
合并前由未参与实现的会话或子代理执行;报告落 `reports/iter<N>-验收审计-<日期>.md`。审计至少做四件事:逐行核对第 9 节对照表(测试存在、真执行、尾缀可 grep、真实入口未绕过改动点);抽查判据绑定面(golden 零差异在当轮真实跑批成立、源码锚逐字);检查测试削弱(对照第 15 节申报);核对全部行「非行为改动」的零漂移证明。未过不得合并。
|
||||
|
||||
## 17. MC/数值与 RNG 零触碰声明
|
||||
|
||||
本批零数值改动、零数据表改动、零 RNG 流词表改动;站桩演出与呼吸微光时长全经 UiKit.motion 现值、零漂移。MC 对拍不跑。
|
||||
+3
-3
@@ -5,8 +5,8 @@
|
||||
## 当前位(只回答「现在该做什么」;三行内随批次换代,禁止在此扩写成状态快照)
|
||||
|
||||
- **阶段**:M3——Alpha 版本的完整实现(2026-10-09 立规:未明令宣布完成前停留 M3,迭代只排 M3 需求,M4 不排期;根目录 stage.txt 为旧阶段开关仅存档)。
|
||||
- **迭代位**:迭代 1–44 全部已完成——迭代 44(零豁免三卡:组合根注册面+战斗编排归约+测速循环 v1.1)2026-10-30 合回(合并提交 bee73db5,独立验收审计通过,行为零变化),批后收尾闭合(2026-10-31):反哺点六条落文 architecture(四件现状化+构造句/实测值换代+两注销句修正)、gdstyle 基线 refresh 收账(16→5 键:五键清偿消失+iter42 归绿键离账+留债三键按实测重登记 28→23/32→31/50→33,零新增键)、目检两项登记体验验证清单 ㊷、产出物退役(三报告+三卡+三设计文档+grilling 复核)。迭代 45(呈现层状态件+gdstyle 尾波补件两卡)2026-10-31 已合回(合并提交 f817ab2d)未收尾。迭代 42 收尾记录见 git 提交 7ec2af58。
|
||||
- **下一步**:迭代 45 收尾——反哺点七条落文(architecture 六条现状化+run_all_gates 02 关联档多套件词传参工具登记)、产出物五件退役(两报告/反哺点/审计/两停机呈报+两卡+两设计文档)、roadmap 迭代 45 行与当前位换代、worktree 两件清理(iter45+assert-slim-b2,均已合并);随后棋盘格边长口径收口卡(已写卡零待裁点)与换图系双基座七件卡(2026-10-31 已写卡)入编排。待编池:营地交互重做卡⑤(排卡④之后)、卡④(美术设计已闭合=样张过审 2026-10-31+art-bible v3.24 §6.2,待用户发令重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。
|
||||
- **迭代位**:迭代 1–45 全部已完成——迭代 45(呈现层状态件+gdstyle 尾波补件两卡)2026-10-31 合回(合并提交 f817ab2d,独立验收审计通过零缺漏,行为零变化),批后收尾闭合(2026-10-31):反哺点七条处置闭合(architecture 六条落文=breakpoint_store/board_hover/单格两件/站桩两件四行现状化+构造句改述与 7 项引用束/15 贴顶实况+gdstyle 截断缺陷节清偿结果;第 7 条工具观察迁待办新条)、目检三项登记体验验证清单 ㊸、产出物退役九件(两报告/反哺点/审计/两停机呈报+两卡+两设计文档)、worktree 两件清理(iter45+assert-slim-b2)。迭代 44 收尾记录见 git 提交 9eedf896。
|
||||
- **下一步**:两卡入编排(用户经迭代编排段发令)——棋盘格边长口径收口卡(已写卡零待裁点)与换图系双基座七件卡(2026-10-31 已写卡)。待编池:营地交互重做卡⑤(排卡④之后)、卡④(美术设计已闭合=样张过审 2026-10-31+art-bible v3.24 §6.2,待用户发令重立卡)、冒险前资源配比预设(冻结备选)、迭代 30 原卡②③(2026-10-17 已剔出迭代 30 规划、退回待设计,待美术/设计定稿后重新立卡)。
|
||||
|
||||
## 里程碑时间线
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
| 迭代 42 | 已完成(2026-10-29) | 已退役(git 历史可考) | 2026-10-29 | ≈5.375 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 43 | 已完成(2026-10-30) | 已退役(git 历史可考) | 2026-10-29 | ≈6.5 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 44 | 已完成(2026-10-30) | 已退役(git 历史可考) | 2026-10-29 | ≈7.875 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 45 | 待开工 | reports/需求卡片-呈现层状态件批-2026-10-29.md<br>reports/需求卡片-gdstyle尾波补件批-2026-10-29.md | 2026-10-29 | ≈7 个工作日 | — |
|
||||
| 迭代 45 | 已完成(2026-10-31) | 已退役(git 历史可考) | 2026-10-29 | ≈7 个工作日 | 已退役(git 历史可考) |
|
||||
| 迭代 46 | 待开工 | reports/需求卡片-换图系双基座七件批-2026-10-31.md<br>reports/需求卡片-站桩名字行提档与地台色合并批-2026-10-31.md<br>reports/需求卡片-棋盘格边长口径收口批-2026-10-30.md | 2026-10-31 | ≈9.125 个工作日 | — |
|
||||
|
||||
- 迭代 38 收口为带红合并〔用户特批 2026-10-26〕:09 静态扫描 S13 gdstyle 恶化 2 条经批准记入基线存量红(git 提交 c4c69701),卡② 停卡退上游,处方已于 2026-10-26 修订定稿 v1.3(git 提交 b3ea7532),随「gdstyle 存量债全量清偿」条目波 7 待编排。
|
||||
|
||||
@@ -504,3 +504,16 @@
|
||||
|
||||
- **红灯信号**:任一屏/浮层错位、交互无响应或演出读数与改前不一致即报缺陷。
|
||||
- **结论回流**:呈现缺陷归待办清单登记新条目。
|
||||
|
||||
## ㊸ 迭代 45——呈现层状态件+gdstyle 尾波补件两卡实机目检(2026-10-31 随批后收尾登记)
|
||||
|
||||
> 两卡合回(2026-10-31,git 提交 f817ab2d):卡① 呈现层状态件批(单格两绘制域件 cell_base_layer/cell_mark_overlay+站桩两状态件 standee_vitals/standee_motion 建件,宿主 30→10 与 19→10 清偿,探针 u.face 改址,golden 三张 0.00%)+卡② gdstyle 尾波补件批(board_hover 悬停域件+breakpoint_store 断点域件,R2 整族归件,27 键冻结)。两卡均为行为零变化批,独立验收审计通过零缺漏;判读口径全部=「与改前一致」。登记不阻塞(2026-10-12 真人检测立规);机检读数与论证详见实现报告(git 提交 f817ab2d 一线可考)。
|
||||
|
||||
| # | 目检项 | 判据 |
|
||||
|---|---|---|
|
||||
| 1 | 棋盘悬停三语义实机抽验(光标/目标格边框/路径预览点迹——悬停域拆件后) | 三语义呈现与改前一致;探针十八断言已绿,本项为观感复核 |
|
||||
| 2 | 站桩意图三档动画与主角三态切换实机观感 | 演出与改前一致;fx_probe 断言已绿,本项为观感复核 |
|
||||
| 3 | 单格六步时序重排后整帧观感(零预期差异确认项) | golden 三张 0.00% 已证逐位一致,实机整帧无可见差异即确认 |
|
||||
|
||||
- **红灯信号**:悬停三语义缺失或错位、站桩演出异常、整帧出现可见差异即报缺陷。
|
||||
- **结论回流**:呈现缺陷归待办清单登记新条目。
|
||||
@@ -67,13 +67,13 @@
|
||||
|
||||
**状态**:待执行
|
||||
|
||||
#### gdstyle 尾波补件批——悬停域与断点域拆件(2026-10-29 登记,来源=会话提及)
|
||||
#### run_all_gates 02 关联档多套件词传参修复(2026-10-31 登记,来源=批次移交)
|
||||
|
||||
**实况**:尾波卡 v2.0 裁去的 D2/D4 两拆件项经用户再裁恢复(2026-10-29,零豁免延伸+D5 留债)。设计闭合凭据=architecture.md v1.25(呈现层表 board_hover 行/核心层表 breakpoint_store 行/「冒险域拆分」节随动句)。需求卡片:reports/需求卡片-gdstyle尾波补件批-2026-10-29.md(v1.0 定稿零待裁点)。范围:board_view 拆 board_hover(11 函数族+2 成员,`_r0` 留宿主)+adventure_runner 拆 breakpoint_store(6 成员+`BREAKPOINT_FIELDS` 27 键冻结函数族,`resume_adventure` 留宿主薄壳)。键账预期:board_view 类变量 32→约30、公开方法 27 持平、adventure_runner 类变量 28→约22——三键**留债**(键留基线冻结禁恶化、禁落豁免登记)。编队:待迭代 42 合回后编入;与呈现层状态件批同代时其先行(u.st 写入面改型后 hover 拆件在新面上施工)。估时 2.5–3.5 工作日。
|
||||
**实况**:证据=iter45 实现报告 §5 遗留观察(已按吸收即死退役,git 历史可考)——`tools/run_all_gates.sh` 02 关联档以逗号连接多套件词传单个 `--only=a,b` 参数,而 `game/tests/run_all.gd` 选跑解析器不切逗号(多词整串做子串匹配→零命中 quit(2));iter45 施工时以多 `--only=` 旗标形态绕过。合回后 CI 跑全量档不经此路径不受影响,只挡开发期关联档窄跑。修法两案待裁:闸脚本改传多旗标,或解析器补逗号切分。
|
||||
|
||||
**改动面**:游戏代码
|
||||
**改动面**:工具代码
|
||||
|
||||
**状态**:文档设计已闭合+已写卡+已编迭代 45
|
||||
**状态**:待执行
|
||||
|
||||
#### 战斗域结构深拆批——效果发射端口+掷格/受理分件(2026-10-31 重立,来源=批次移交)
|
||||
|
||||
|
||||
Reference in new issue
Block a user