@@ -0,0 +1,240 @@
# 需求卡片:架构审查 presentation 层封装修复批(2026-11-04)
来源:待办清单「架构审查余项——闸面缺口、豁免存废、零测试点名与架构文档漂移」条目 presentation 层私取面部分(**唯一事实源**: reports/处置-presentation层封装修复-2026-11-04.md——处置记录与本卡并行成文,本卡开工时 T1 首步核其已落盘且与本卡第 3 节逐条一致,冲突即 L3 停卡。设计闭合凭据=2026-11-04 设计讨论会话用户逐项裁决〔改法A=三个内部数据类字段公开化;方案一=四族一批做完〕+审计报告 presentation 普查+code-conventions §1.6)。验收档:**中**(零行为变更批——做错的后果玩家可见但不损持久状态:存档/RNG/结算/数值零触碰)。状态:已写卡(v1.1, 2026-11-04 grilling 复核折入——T2/T5 时序修正+main.gd 例外区间实数化+flash 归位形态修正+T3 签名定稿+削弱申报追加)。改动面:游戏代码(含随逻辑改的测试代码)。
## 1. 目标与完成定义
**这批做什么 ** :把 presentation 层 14 文件 443 行跨对象下划线私取按四族修法全部落码——封装收口、零行为变更:
| 族 | 处置对象 | 现状 | 终态 |
|---|---|---|---|
| A1 | 三个内部数据类(level_map_screen `_MapState` / battle_end_overlay `_EndOverlayState` / debug_overlay `_DebugState` ) | 宿主直读写内类私有字段 206 行/42 字段 | 42 字段去下划线转公开数据成员,宿主访问点随改;文件外零消费者落 sweep 断言 |
| A2 | 拆件子件(standee_vitals/standee_motion/board_hover)及其宿主(standee_body/board_view) | 宿主直读写子件私有成员 62 行 | 身份数据构造/配置期一次交付;行为归位子件公开方法;读走公开读法;board_hover 6 成员公开化 |
| B | 组合根 main ↔ 五个分文件 | 双向私取 169 行/80 名字(成对单行转发梯) | 分文件入口公开化;接线改收 Callable 束;main 服务方法公开化+句柄读投影/设置口;main on_* 处理器保私有(探针零波及);main.gd 指标例外申报 |
| C | UiKit 私有工厂被外调;cell_mark_overlay 摸宿主 _glow_layer | 6 行 | UiKit 三方法公开化;cell_mark 走构造交付(board_view 零净增) |
**什么状态算完 ** :四族每处改动落码、都有第 8 节对照表配对的验收断言当轮真实跑批通过;结构性证据=presentation 私取 sweep 恒零(扫描面非空前置+新公开面正锚);零行为变更证据=探针套件与渲染 golden 全程零转红+冒烟/单元既有套件零转红+探针/测试替换后当轮真实跑绿;代码域闸全绿(冒烟+单元+探针+渲染/静态);两份 reports/ 产出物(实现报告+反哺点清单)写齐。
## 2. 设计事实源
- **处置记录(输入合同,逐条一致)**:`reports/处置-presentation层封装修复-2026-11-04.md` ——四族裁决、字段/名字清单、设计规则六条、S13 预算核查、探针连带面。本卡第 3 节现状与第 7 节落法是其机械承载;T1 复核两件一致(冲突=上游缺陷,L3 停卡)。
- **审计背景**: `reports/审计-全库架构审查-2026-10-29.md` §5.1 扩面普查(presentation 私取面;行号已换代,以本卡第 3 节实查为准)。
- **法律**: `design/engineering/code-conventions.md` §1.6(拆分交接定义+封装边界——本批修复依据)。
- **架构锚点**: `design/engineering/architecture/architecture.md` 呈现层节(:167 起——main 组合根、五分文件、ui_registry、views 各行);:124( BoardInstaller 引用束注入先例——B 族 Callable 接线束依据)。
## 3. 现状事实(2026-11-04 worktree archpres-card 实查,基点 61995733,开工自行复核)
### 3.1 私取面盘点
口径=`grep -rnE '\._[a-zA-Z]' game/presentation --include='*.gd'` 剔除注释行与 `self._` : **443 行/14 文件**(T1 以同 grep 重跑落底账)。逐文件行数与归族、A1 三类 42 字段名单、A2 逐字段归属、B 族 80 名处置规则、C 族 4 名——**全部以处置记录第二、三节为准**(逐条一致义务,本节不复制)。关键锚点:
- A1: level_map_screen.gd:37(内类)/ :59(实例)/ :100( `_map._level_label = …` 形态样例);battle_end_overlay.gd:15/:32; debug_overlay.gd:16/:33。
- A2: standee_body.gd:39-40(生成期直写)/ :82-85(配置直写)/ :173/:262( _dead 直写)/ :254-258( _hp_flash_tw 宿主 tween 误放子件)/ :419( _hp_cur 只读);board_view.gd:146/:249/:260/:309/:464/:479/:828( hover 六成员)。
- B: main_adventure_flow.gd:12( `connect(root._on_adventure_finished)` )↔ main.gd:234(一行转发 `MainAdventureFlow._on_adventure_finished(self, summary)` )——成对转发梯样例;main_ui_build.gd:64( `root._treasure_ui = …` 直写句柄);main.gd:180-495( 45 行转发面)。
- C: level_map_screen.gd:69+ ui_assembler.gd:106+ settings_overlay.gd:88/:105( UiKit 私有工厂);cell_mark_overlay.gd:13-14( `_owner._glow_layer` )。
### 3.2 写 T 卡依据的其他现状
- **S13 现值(2026-11-04 实测)**: main.gd 公开方法 1/成员 15(默认顶);五分文件公开 0;standee_body 公开 20(顶)/成员 10; board_view 公开 27/成员 31(两键在册基线,**贴顶禁再增**);standee_vitals 1/12; standee_motion 6/11; board_hover 0/9; ui_kit 0/0; cell_mark_overlay 5/13;三 A1 宿主 8-7/ 6-5/ 19-4。基线在册 5 键见 tools/gdstyle_baseline.txt。
- **探针/测试连带**: `main._` 引用 104 处/36 名/14 文件(ui_probe、system_test.gd、ui_input_probe、shot_probe、layout_probe、ui_tune_probe、ui_struct_probe、screen_flow_probe、t17_defer_probe、ui_click_probe、fx_shot_probe、probe_ui_util、unit/presentation/pacing_queue_test、unit/core/breakpoint_resume_test)。规则 B2 保 on_* 处理器名 → 替换面=「引用名字 ∩ 公开化名字」,T1 落精确清单。
- **mo 既有公开方法先例**: standee_body.gd:300 `mo.apply_hero_state(state, …)` 在役——A2 归位沿同型。
## 4. 设计契约(违反即返工红线)
- 🔴 **逐条一致 ** :本卡与处置记录逐条一致;冲突=上游缺陷停卡退写卡段(L3)。
- 🔴 **零行为变更 ** :呈现逐位同(渲染 golden 零转红)、RNG 消费序零触碰、数值表零触碰、信号顺序逐位同;玩家可观测面零变化。
- 🔴 **公开形态三规则 ** (用户的「先判该不该、再定形态」框架落法):①公开**数据成员**仅限 A1 三类 42 名(登记表定位);②A2 子件字段保持私有,一律走构造/配置交付、行为方法、读投影;③main 句柄成员保持私有,走读投影/设置方法对——**任何族禁「顺手把字段改公开」替代设计**。
- 🔴 **main on_* 处理器保私有 ** :探针/测试 104 处引用面零改名;分文件经 Callable 束取得处理器。
- 🔴 **禁留壳 ** :去下划线公开化后禁留旧私有名别名/转发壳;main 侧既有单行转发层**保留**(非新增——探针 main.X 路径契约承载,反哺点登记进架构)。
- 🔴 **贴顶件零净增 ** : board_view(27/31 基线在册)公开方法与成员零净增;standee_body 公开方法零增(成员 10→11 仅 _hp_flash_tw 归位);main.gd 成员零增。
- 🔴 **S13/S9 ** :全部新增公开方法签名注解完整(S9 R3);main.gd 例外键按第 14 节申报落基线,实现段禁自行豁免。
- 🔴 **测试纪律 ** :禁变异类测试、禁撤销类取证;禁删断言/放宽阈值换绿(第 8 节申报清单之外零删改)。
## 5. 范围边界
**收件 ** =第 1 节表四族全部(含调用点改址、探针/测试交集名字替换、新增 sweep 测试件、main.gd 例外键落基线)。
**不收件 ** (去向已指认):
- core 层五处封装修复——reports/需求卡片-架构审查5.1封装修复批-2026-11-03.md(另批,文件面零交叠无避让义务)。
- 探针/测试的测量面直构惯例与受控例外——零清扫(仅「引用名字 ∩ 公开化名字」交集随批替换)。
- 架构结构零改动:组合根与五分文件的职责划分、信号接线所有权(连接语句留在分文件)、三数据类的内类形态全部不动;ui_registry/ModalFlow 零触碰。
- 闸件(static_scan.sh 等)零改动;MC/模拟零跑(无数值改动);`game/tests/README.md` 零编辑(零行为变更=能力清单零新增)。
## 6. 关联文档同步面
实现批禁写 `design/` 整个目录与根规则文件;下表每条落文义务进 `reports/iter<N>-反哺点-<日期>.md` ,由用户裁决后归文档批落文:
| 文档 | 关联点(本批实现会改变它的哪条陈述) | 同步义务(反哺点清单逐条承载) |
|---|---|---|
| design/engineering/architecture/architecture.md | 呈现层节:main 组合根行+公开服务/句柄面新增登记;五分文件行+公开入口面;level_map_screen/battle_end_overlay/debug_overlay 行+内部数据类定位句(字段公开的登记表);ui_kit 行+三工厂公开化;standee_vitals/standee_motion/board_hover 行+新公开面 | 反哺点清单逐条列行号与改后登记内容——**机械面文档禁直改** |
| 术语表 | 无新术语(读投影/引用束/公开数据成员均仓库现行词) | 确认行「零新增术语」 |
| game/tests/README.md | 零行为变更=能力清单零新增(判断依据见第 8 节) | 批末核对「表上名字与对照表引用一致」,零编辑 |
(机检口径:本表同步义务格无一条写「随批」。)
## 7. 任务卡 T1..T5
### 卡前·文件结构图
全部行为面=非行为改动(零行为变更批),行标【非行为】+对照表 R 行号;测试件为随逻辑改的测试代码。
```
A1 三件
game/presentation/views/level_map_screen.gd 【非行为 R1】_MapState 14 字段公开化+87 处改址+:69 UiKit 公开名+头注
game/presentation/views/battle_end_overlay.gd 【非行为 R1】_EndOverlayState 14 字段公开化+69 处改址+头注
game/presentation/views/debug_overlay.gd 【非行为 R1】_DebugState 14 字段公开化+50 处改址+头注
A2 五件
game/presentation/views/standee_vitals.gd 【非行为 R2】构造/配置交付口+死亡/复位行为方法+读投影(成员 12 零增)
game/presentation/views/standee_motion.gd 【非行为 R2】意图显示/隐藏/复位行为方法+绘制状态读口+挂载口(成员 11 零增)
game/presentation/views/standee_body.gd 【非行为 R2】55 处改址+头注(成员零增——flash 行为归位 vitals 自持 tween)
game/presentation/views/board_hover.gd 【非行为 R2】+6 公开面(重绑口/复位/刷新/悬停/chord/连接目标/读口)
game/presentation/views/board_view.gd 【非行为 R2】7 处改址(公开方法与成员零净增——贴顶件)
B 七件
game/presentation/main.gd 【非行为 R3】45 行转发改调公开入口+接线调用点交付 Callable 束+服务公开化+句柄读投影/设置口(例外键申报见第 14 节)
game/presentation/main_ui_build.gd 【非行为 R3】70 处改址(服务/句柄走 main 公开口)
game/presentation/main_adventure_flow.gd 【非行为 R3】入口公开化+29 处改址+接线语句消费 Callable 束
game/presentation/main_overlay_flow.gd 【非行为 R3】入口公开化+15 处改址
game/presentation/main_debug_flow.gd 【非行为 R3】入口公开化+11 处改址
game/presentation/main_esc_flow.gd 【非行为 R3】入口公开化+2 处改址
C 四件
game/presentation/views/ui_kit.gd 【非行为 R4】_gradient_base/_beams_rect/_switch_toggle 公开化(体逐字)
game/presentation/views/cell_mark_overlay.gd 【非行为 R4】构造收遮罩下发口(成员 13→14)+2 处改址
game/presentation/ui_assembler.gd 【非行为 R4】1 处改址
game/presentation/views/settings_overlay.gd 【非行为 R4】2 处改址
测试件(随逻辑改)
tests/unit/presentation/presentation_encapsulation_sweep_test.gd 【非行为 R1–R4·新增】四族结构性扫描(非空前置+零命中+正锚)
game/probe 12 件+game/tests 2 件引用替换 【非行为 R3】main._ 交集名字随批替换(当轮真实跑绿)
文档件
game/tests/README.md 写卡段判断=零编辑(第 8 节判断依据)
```
**T1 基线与底账 ** (估时 0.25 工作日;区间 0.25– 0.5)
取用:无。产出:四族 grep 底账+探针替换精确清单+S13 对账基线+零行为变更基线读数。
- [ ] 核对处置记录 `reports/处置-presentation层封装修复-2026-11-04.md` 已落盘且与本卡第 3 节逐条一致(冲突=L3 停卡)
- [ ] grep 底账落实现报告(改前账,T5 sweep 的对照面):第 3.1 节同口径 grep 全量命中行清单(14 文件逐文件行号)
- [ ] 探针/测试替换精确清单:`grep -rnE 'main\._[a-zA-Z]' game/probe game/tests` 104 处逐条标注「替换/保留」(判据=名字 ∈ 公开化名单),清单落实现报告
- [ ] S13 对账基线:第 3.2 节 16 触件现场读数登记;main.gd 例外键实数(规则 3+4 名单逐一数出)核与第 14 节申报区间一致
- [ ] 零行为变更基线:冒烟 `python tools/run_smoke.py` 全绿读数+渲染 golden 现值(改前即基线)落实现报告
**T2 A1 三类字段公开化 ** (估时 0.5 工作日;区间 0.25– 0.75)
取用:T1 底账。产出:A1 族 206 行清零。
- [ ] level_map_screen.gd:处置记录 §三 A1 表 14 字段去下划线(体零改动),87 处 `_map._x` → `_map.x` ;头注补一句内部数据类定位(:69 UiKit 调用改址随 T5 同批生效)
- [ ] battle_end_overlay.gd:同型 14 字段+69 处;debug_overlay.gd:同型 14 字段+50 处
- [ ] sweep 测试件骨架与 A1 断言组先行落盘(presentation_encapsulation_sweep_test.gd:三文件非空+class 正锚+`_map\._|st\._` 模式零命中+公开字段正锚+`_MapState|_EndOverlayState|_DebugState` 文件外零消费者断言〔pres封装 V1〕)
- [ ] 孤立验证:sweep A1 组+冒烟——出红只跑红件最小单元
**T3 A2 standee 与 board_hover ** (估时 1.0 工作日;区间 0.75–1.5)
取用:T1 底账、处置记录 §三 A2 逐字段归属表。产出:A2 族 62 行清零。
- [ ] standee_vitals.gd 公开面 14(既有 apply_hp+新增 13,成员 12 零增):`configure_identity(kind: String, display_name: String, enemy_id: String, armor: String)` 、`set_max_hp(v: float)` 、`set_order(i: int)` 、`set_dead(v: bool)` 、读投影 `is_dead()/kind()/armor()/display_name()/enemy_id()/order()/hp_cur()/hp_max()` ——宿主 :39/:82-85/:96/:131/:173/:262 写点与 :48/:53/:66-69/:91/:98/:138/:171/:246-248/:277/:340-342/:419/:465-482 读点逐一对口
- [ ] standee_motion.gd 公开面 14(既有 6+新增 8,成员 11 零增):`show_intent(glyph: String, col: Color)` 、`hide_intent()` ( :140/:145/:181 三处同型归位);绘制路径读投影逐个 getter `intent_visible()/intent_glyph()/intent_col()/intent_scale()/intent_rot()/portrait_sprite()` (_draw 每帧调用,免逐帧字典分配——性能预算依据);_hero_state 生成期走既有 apply_hero_state;非绘制路径沿用现役 state_probe() 字典形态
- [ ] standee_body.gd: 55 处改址(逐字段按归属表;flash_hit() 体改调 `st.play_hp_flash()` , tween 逻辑整体归位 vitals——宿主成员零增);头注「外部直访冻结成员」句按新面改写
- [ ] board_hover.gd: +6 公开面(rebind(minesweeper)/reset()/refresh_after_paint()/hover_at(pos)/detect_chord(c)/on_shell_mouse_exited 更名公开化/hover_pos() 读口——七处消费逐一对口);board_view.gd 7 处改址
- [ ] sweep A2 断言组(standee_body `\bst\._|\bmo\._` 零命中+board_view `_hover_comp\._` 零命中+新公开面正锚〔pres封装 V2〕)
- [ ] 孤立验证:sweep A2 组+渲染 golden+战斗探针——出红只跑红件最小单元
**T4 B 族正式交接面 ** (估时 2.0 工作日;区间 1.5–2.5)
取用:T1 探针替换清单、处置记录 §三 B 设计规则六条与 80 名清单。产出:B 族 169 行清零+探针替换跑绿。
- [ ] 五分文件入口公开化(main 转发调用的方法去下划线,名表=处置记录 80 名清单分文件侧;体逐字);main.gd 45 行转发改调公开入口
- [ ] 接线语句改 Callable 束:五个接线入口签名各加 handlers 束参(键=用途名),main 调用点自建束传入(`"adventure_finished": _on_adventure_finished` 型,main 内自引);分文件 connect 语句消费束值——`root._on_xxx` 引用清零
- [ ] main.gd 服务方法公开化(处置记录 §三 B 规则 3 名单,体逐字);句柄成员补公开读投影/设置方法对(规则 4 名单,方法体一行转发,成员零增)
- [ ] 五分文件 124 处 root._ 改址(服务走公开方法、句柄走读投影/设置口、处理器经束)
- [ ] 探针/测试替换:按 T1 精确清单逐条替换(引用形态迁移,断言内容零改动)
- [ ] main.gd 例外键实数核 对与第 14 节申报一致;S13 键对账
- [ ] sweep B 断言组(六文件 `root\._|main\._|MainOverlayFlow\._|MainAdventureFlow\._|MainDebugFlow\._|MainEscFlow\._` 零命中+新公开面正锚〔pres封装 V3〕)
- [ ] 孤立验证:sweep B 组+探针替换件当轮真实跑+冒烟+系统测试——出红只跑红件最小单元
**T5 C 族+批收口 ** (估时 0.375 工作日;区间 0.25– 0.5)
取用:全部前卡。产出:C 族清零+结构性恒零证据+批收口两件。
- [ ] ui_kit.gd 三工厂公开化(体逐字);cell_mark_overlay 构造收遮罩下发口(board_view 构造点随改,board_view 面零净增)+2 处改址;ui_assembler/settings_overlay 改址;level_map_screen :69 `UiKit.gradient_base` 改址(与本步 ui_kit 公开化同批生效)
- [ ] sweep C 断言组(ui_kit 私有工厂全库零外调+cell_mark `_owner\._` 零命中+正锚〔pres封装 V4〕);run_all.gd manifest 追加 1 行(sweep, expect 0)
- [ ] 全量 sweep 复核+冒烟+渲染 golden+探针套件终读数(零行为变更证据链闭合)
- [ ] **实现报告 ** `reports/iter<N>-实现报告-<日期>.md` :各卡状态+S13 键改前改后对账(T1 基线逐件核+main.gd 例外键落基线记录)+探针替换清单执行账+实现决定记录
- [ ] **反哺点清单 ** `reports/iter<N>-反哺点-<日期>.md` :第 6 节同步面逐条落点(architecture.md 呈现层各行登记内容、术语确认行)
- [ ] 批末核对:game/tests/README.md 零编辑核对;独立验收审计(第 8 节末)未过不合并;.uid 收口=`--editor --quit` 一次后确认新测试件 .uid 随批提交
### 估时汇总
T1 0.25| T2 0.5| T3 1.0| T4 2.0| T5 0.375。区间合计 3.5– 5.25 工作日;**精确汇总 4.125 工作日**(切分预案:若 T4 超 2.5 工日,把 T5 切出为独立半日卡顺延,其余不动)。
## 8. 验证闸(改动—验收对照表)
测试方式两分法:下表全部走**调试接口验证**(sweep 源扫描+既有套件+探针真实跑);**正常流程体验验证**=零项(零行为变更批,实机观感逐位同改前)。判据绑被测改动特有的可观测提交面(源码私取模式零命中带非空前置与正锚/探针可见性与信号面零漂移)。
| 需求点 | 改动(文件:行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|---|---|---|---|---|---|---|
| R1 A1·战末弹层 | battle_end_overlay 14 字段+69 处改址 | sweep A1 组〔pres封装 V1〕;冒烟+战末弹层既有探针回归 | 探针 | `BattleEndOverlay.open_victory()` (战末弹层真实开合链) | 私取模式零命中+公开字段正锚+文件外零消费者;弹层可见性与载荷零漂移 | 既有:站桩敌人呈现与结算演出落点 |
| R2 A1·调试浮窗 | debug_overlay 14 字段+50 处改址 | sweep A1 组〔pres封装 V1〕;调参相关探针既有回归 | 探针 | `TuneSimController.run()` (调试浮窗批量模拟入口) | 同 R1 判据面;浮窗呈现与批量模拟读数零漂移 | 既有:调参测速批量模拟(逐帧步进与统计读数) |
| R3 A1·关卡画面 | level_map_screen 14 字段+87 处改址 | sweep A1 组〔pres封装 V1〕;冒烟+选路集成既有回归 | 集成+探针 | 选路集成链(起关→选路→断点重生成)+冒烟全链 | 私取模式零命中+公开字段正锚;选路链零漂移 | 既有:起关/选路/断点重生成同图(集成) |
| R4 A2·站桩三件 | standee 三件改址+_hp_flash_tw 归位 | sweep A2 组〔pres封装 V2〕;渲染 golden 逐像素零转红;站桩探针既有回归 | 探针+golden | `BattleStageView` 真实实例化(站桩渲染链) | 站桩呈现逐位同;子件私取模式零命中+新公开面正锚 | 既有:站桩敌人呈现与结算演出落点 |
| R5 A2·悬停子件 | board_hover 六公开面+board_view 7 处改址 | sweep A2 组〔pres封装 V2〕;ui_input_probe 既有回归 | 探针 | `ui_input_probe` 合成鼠标事件→`BoardView._gui_input()` | 悬停三语义零漂移;子件私取零命中+六公开面正锚 | 既有:棋盘悬停反馈(三语义光标/目标格边框/路径预览点迹) |
| R6 B·组合根交接面 | main+五分文件+探针/测试替换 | sweep B 组〔pres封装 V3〕;14 件替换后当轮真实跑绿;冒烟+系统测试 | 集成+探针 | `ui_click_probe` 大门两分支段(main 处理器→分文件→营地态全链)+探针套件其余件 | 六文件私取模式零命中+新公开面正锚;探针断言零删改引用改址后全绿 | 既有:营地大门两分支确认与断点续玩接线 |
| R7 C·杂项公开面 | ui_kit 三工厂+level_map :69+ cell_mark 构造交付+改址 | sweep C 组〔pres封装 V4〕;layout/shot 探针既有回归 | 单元+探针 | 界面装配真实链(ui_kit 工厂消费面) | 私有工厂零外调+cell_mark 私取零命中+呈现零漂移 | 既有:站桩呈现定值与素材绑定 |
**零行为改动面的证据义务 ** :本卡全部行为面为非行为改动(零行为变更批)——不设「行为改动」行;每行零变更证明=渲染 golden 零转红+探针套件零转红+冒烟/单元零转红+sweep 恒零。能力行全部「既有」、零新增——判断依据:玩家可观测能力面零变化,无新能力可登记,`game/tests/README.md` 零编辑(批末核对义务在 T5)。
**闸口径 ** :重闸=`tools/run_all_gates.sh` 按本批改动域选档(改动含 game/ 下非 .md 行为载体 → `--code` );所选域全绿才合并。卡内不写死闸件名单。回归措辞:里程碑卡(T 段)出口跑一次全套闸;卡内修复只做出红最小单元的最窄确认;新增测试先行孤立验证再并入全套。
**测试削弱申报 ** (允许改/删的旧断言全清单;未申报的删改由独立验收审计判红):
1. 探针/测试 14 件中与公开化名字交集的 `main._x` 引用 → 改公开名(清单=T1 精确清单)——随被测改动同步的引用形态迁移,断言内容零改动,无一条删除断言或放宽阈值。
**测试削弱申报补充(v1.1) ** : 2. ui_struct_probe.gd:144-146 退出调用链源码串断言两处("MainEscFlow._on_quit(self)"→"MainEscFlow.on_quit(self)"、"root._quit_game()"→"root.quit_game()")——随公开化改址的引用形态迁移,断言意图(调用链完整)不变;同函数 :141 `get_method() == "_on_esc_quit"` 断言零改动(处理器保私有)。
**独立验收审计 ** :入口=批末 T5 后、合并前;报告=`reports/iter<N>-验收审计-<日期>.md` ;由没参与实现的会话或子代理执行,核对:对照表逐行断言真实存在且当轮跑批通过、零行为变更证据链在案(golden/探针/冒烟改前改后零转红读数)、测试削弱申报 1 条之外零删改、第 13 节无效成员零残留、S13 键对账(含 main.gd 例外键申报一致)。未过不合并。
## 9. 异常分级
- **L1 自救**:改址遗漏一处编译级报错、字段名笔误、注释错字——就地改,记录进实现报告。
- **L2 记录继续**:行号 ±5 行内漂移(grep 符号锚定位后继续);探针失败经排查属既有缺陷且与本批无因果——登记跳过并报用户。
- **L3 停机写报告等用户**:①卡面与处置记录冲突、或处置记录未落盘/与本卡第 3 节不一致(上游缺陷,退写卡段);②零行为变更契约被破(golden/探针/套件任何非预期漂移=停卡,禁就地调和);③S13 预算互斥——任一触件实测键超第 14 节预期(含 main.gd 实数超申报区间、board_view/standee_body 贴顶件需增面)=上游缺陷停卡退写卡段,禁实现段自拆或砍面;④实现中发现处置记录 80 名清单之外的第 81 个私取名字或未登记消费面(语义不明,禁代裁);⑤机检键与卡片契约互斥=停卡呈报,不得自造第三条路。
## 10. 代拍板白名单
- 测试内部夹具命名与组织(sweep 正则具体写法、断言消息措辞——判据面不变,尾缀〔pres封装 Vn〕保留)。
- 注释与头注改写措辞(模块介绍职责不变)。
- A2 读投影/行为方法的命名风格(`xxx()` 读投影与 `apply_xxx` 动词族内一致化——签名面按第 7 节 T3 定死的职责句,不改归属)。
- Callable 束的键名(用途名)与断言/报错文案。
- 逐卡内「孤立验证→出红最小单元→并入全套」的执行顺序细节。
超清单的决断记入实现报告「实现决定记录」节。
## 11. 待裁点
**零待裁点,开工门=U0 ** ——四族修法、三个内部数据类定位(改法A)、一批做完(方案一)、B 族设计规则六条、main.gd 指标例外申报方向均已在 2026-11-04 设计讨论会话由用户裁决;字段/名字清单、方法签名、T 卡分解、验收断言由本卡写卡期实查定死(第 3/7 节)。本卡未新增任何备选案。
## 12. 落位与可复用性预检
**新增文件(1 件,测试件) ** :
- tests/unit/presentation/presentation_encapsulation_sweep_test.gd——为什么不能复用 core 的 encapsulation_sweep_test:四族结构性零命中是本批特有扫描面(A1 三类+A2 子件+B 六文件+C 杂项,与 5.1 卡的 core 七文件集完全不同面);player_copy_sweep_test 扫 presentation 文案面——**复用其源 token 扫描手法但不并件**(并件让两批扫描面与尾缀语义混乱——5.1 卡 :257 同款论证)。落点 tests/unit/presentation(被扫对象全在 presentation);grep 同名零命中。
**新增函数/成员(逐条唯一性核查义务,grep 同名全库实核) ** :
- A1:仅字段改名公开化,零新增函数/成员(grep 确认公开名与既有成员名无冲突)。
- A2: standee_vitals/motion 新公开方法(构造交付口/行为方法/读投影)——grep 方法名全库零第二处;命名与既有动词族同型(apply_hero_state/mo 现役方法族先例);board_hover 六公开面 grep 唯一;`_hp_flash_tw` 归位 standee_body(成员迁移非新增语义)。
- B:main.gd 服务公开化为既有方法去下划线(禁别名);句柄读投影/设置方法对命名 grep 零同名(BreakpointStore set_/get 同族先例);Callable 束键名 grep 零冲突。
- C:ui_kit 三方法去下划线公开化(体逐字,禁留旧名);cell_mark 构造参数(成员 13→14)。
**复用既有(不新增) ** : Callable 束交付形态=BoardInstaller/5.1 卡束先例;读投影形态=has_write_target/active_path 先例;句柄方法对=BreakpointStore 13 方法先例;源扫描测试=player_copy_sweep_test 手法;manifest 登记=run_all.gd 既有条目族。零新增生产文件(全部落既有件)。
**分层与交互面 ** :本批零跨层新增路径——presentation 内部往来改公开面,对 core/data 的调用面零触碰(settle_batch 等组合根写口现役形态不变);Core 零 UI 红线零触碰;数值单一事实源零触碰;RngService 红线零触碰(零新增随机源)。
## 13. 禁为机检文本保留无效成员
本卡为重构类卡,全卡适用(code-conventions §1.1 ⑤同款):禁止为迎合机检消息文本(含计数、sweep 正则、grep 面)保留或新增无效成员/别名/转发壳;A1 字段公开化后禁留私有旧名;B 族去下划线后禁留旧私有名;main 侧既有单行转发层为登记的探针契约承载(非无效成员,反哺点登记),除此之外禁新立转发层;sweep 正则与签名冲突时停卡呈报,不得自造第三条路。
## 14. 实现规范预算
新增 .gd 仅 1 个测试件(SceneTree 测试脚本,全类型标注、零公开生产面)。生产代码全落既有件,按「存量触面一查」对账(S13 默认阈值:公开方法 ≤20/类变量 ≤15/分支 ≤8/返回 ≤6):
- **指标例外申报(main.gd)**:键=`game/presentation/main.gd|quality/max-public-methods` ,现值 1,预期 28–32(构成=既有 1+服务公开化 17+句柄读写口 12;T1 实数核);理由=组合根服务面(分文件消费的公开口集中于此),架构先例=level_runner.gd 公开方法 33 在册基线、adventure_runner.gd 类变量 23 在册基线;落法=实现批 `python tools/gdstyle_gate.py --refresh` (人工专用通道,随批重生成)。
- **贴顶件约束**: board_view 27/31(基线在册)**零净增**(本批对 board_view 的全部动作=7 处改址+构造点传参);standee_body 公开方法 20 贴顶零增(成员零增——flash 归位 vitals 自持);debug_overlay 公开方法 19——A1 只改字段名不动方法,零变化。
- **类变量净增件**: cell_mark_overlay 13→14(构造交付的遮罩口引用);其余触件零增(A1 改名不增数;vitals/motion 成员零增)。
- **公开方法净增件**:五分文件 0→3– 15; board_hover 0→6; standee_vitals 1→预算内、standee_motion 6→预算内(均 ≤20);ui_kit 0→3; main.gd 见例外申报。
- **迁移函数对账**:本批公开化方法全部「体逐字去下划线」,无跨文件迁移体;唯一迁移=_hp_flash_tw 归位(standee_body 内自用逻辑随迁,非跨件函数迁移);若 T1 读数发现源函数 branches/returns 超默认登记值,随迁即拆函数(拆分不改语义,与第 13 节区分)。
- **存量触面 S13 预期**:16 触件 S13 键较 T1 现场基线**只降不升**(board_view 两基线键持平为达标);降不达=检查是否夹带超预算面,L3 ③兜底。
## 15. 拆分边界纪律
见第 4 节红线(判据权威=code-conventions §1.1):本批**零新拆件**——全部落架构在册既有件(组合根 main、五分文件、三数据类、standee 三件、board_hover/board_view、ui_kit、cell_mark),只做往来形态换代。逐件职责语句不变:A1 三类=宿主画面文件的登记表(数据类定位,用户裁);A2 子件=各自职责域件(身份命值态/资产演出态/悬停呈现域件——architecture.md 在册),行为归位=误放宿主的操作回归所有者;B 族=组合根委托层公开契约化(接线所有权不动);C 族=公用设施身份归位。单一变化原因=封装边界(跨对象私取清零),非阈值驱动。禁凑计数袋。