31 KiB
需求卡片:架构审查 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/tests104 处逐条标注「替换/保留」(判据=名字 ∈ 公开化名单),清单落实现报告 - 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 三处同型归位);绘制路径读投影逐个 getterintent_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 段)出口跑一次全套闸;卡内修复只做出红最小单元的最窄确认;新增测试先行孤立验证再并入全套。
测试削弱申报(允许改/删的旧断言全清单;未申报的删改由独立验收审计判红):
- 探针/测试 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 族=公用设施身份归位。单一变化原因=封装边界(跨对象私取清零),非阈值驱动。禁凑计数袋。