iter52-卡4:迭代52卡④(封印印记法阵化): 着色器参数化绘制换代(环带+十字+环外光圈,半径夹cell_px/2,ui_kit六常量含SEAL_HALO_FRAC补注入源)+seal_mark_layer子件+CellUnit seal_on/fog联动+棋盘侧贴图路径三处退役(seal_mark.png只余战末蜡封)+board_shot_probe封印取证(三关环径0.826全落±1px,英雄格中心非黑); 含产出物三份/审计报告/master归并两笔/收尾笔; 验收档中; 验收审计总判定通过

This commit is contained in:
DKChan committed 2026-11-05 03:04:21 +08:00
1 parent 67024cb9ec
commit 122cdeb3d8
28 files changed
+581 -133

No files matched your search

+22
View File
@@ -0,0 +1,22 @@
# 迭代 52 代拍板记录(2026-11-05)
> 卡①②③的代拍板事项落实现报告「实现决定记录」各节(三卡的白名单行使均在清单内);本件按卡④ §10 单独成文,记录卡④白名单行使与一件超清单事项呈报。
## 卡④ 白名单行使(全在 §10 清单内)
1. **常量与 uniform 命名拼写**:五常量按 art-bible §8.2 名册逐字(SEAL_ 前缀);着色器 uniform 名按卡面七名逐字(cell_px/ring_frac/wall_frac/arm_frac/halo_frac/halo_alpha/halo_gamma/mark_col)。
2. **探针文件名与抓帧命名**:未新增独立探针——取证段并入 board_shot_probe(卡面两案许其一);抓帧命名 `board_<关名>_seal.png`。
3. **commit 拆分粒度与提交信息措辞**:卡④按 T1–T5 分两次提交(常量+着色器+层件+退役+取证合并推进,代拍板授权粒度自由)。
4. **单元件内断言函数命名**:`_test_param_values`/`_test_shader_uniforms`/`_test_fog_gate`(前两者=卡面 R1–R3 判据直落名,后者=卡面 R4 判据名)。
5. **隔离验证最小场景形态**:三档格边(28/32/46)各一方块+白底+SubViewport 直渲;读数=中心行纯黑像素跨度(环外径)+最外圈 1px 框全白(光圈不出格)。
## 超清单事项呈报(§10「超清单必呈报」)
1. **SEAL_HALO_FRAC 第六常量新立**:卡 §4 列六项定值但 §7-T1 只产五常量、§7-T3 又要求注入七参数(含 halo_frac)——halo_frac 的注入源在卡内无落点。实现立 `SEAL_HALO_FRAC := 0.09`(值=§8.2 条款值逐字,非取值改动),反哺点清单第二条请文档批裁决 §8.2 名册补登。若用户裁「不留第六常量」,替代形态=shader 默认值承载(现默认值已是 §8.2 同值,删除常量与注入行即回退,零其他改动)。
## 零拍板事项核对
- 参数取值:六值全部=art-bible §8.2 逐字,零改动。
- 层挂载层级:CellUnit 之下(卡面定死),零改动。
- 贴图退役范围:三处卡面白名单内(tile_palette/cell_mark_overlay/board_view);`seal_mark.png` 素材与 battle_end_overlay 零触碰。
- 其它格面元素:零触碰。
+33
View File
@@ -0,0 +1,33 @@
# 迭代 52 反哺点清单(2026-11-05)
> 实现批产出——要写进 `design/` 与根流程清单的点逐条列行号与改后内容,由用户裁决后归文档批落文。实现批对 `design/` 与根规则文件只读(批性质禁令)。
## 一、architecture.md(design/engineering/architecture/architecture.md)
1. **:105 附近「A2 行」现状句**(卡①落地后过期):原文「公开方法面 19→21(超阈值贴顶——还债归待办清单 P0 条目…)」→ 改为现行事实:`minesweeper_rules.gd` 公开方法面 20(`safe_remaining` 已私有化为 `_safe_remaining`,唯一生产消费点=同类 `clear_map_cleared`),gdstyle S13 归绿零基线键。
2. **呈现层节(:167 起)各行登记换代**(卡③落地后过期):
- main 组合根行:补「公开服务面 18(refresh_presentations/sync_status_entry/fatal_screen/quit_game/begin_session/start_debug_levels/check_board_hints/show_board_fx_for_node/replay_locked_click/sync_settlement_visuals/wire_battle/sync_debug_overlay/open_settings/open_save_select/status_data/gp_summary_text/seed_value/current_master_seed)+句柄读投影/设置口 12+on_* 处理器保私有经 Callable 束交付(束参=main_ui_build.build 31 键、main_adventure_flow.wire_adventure 2+6 键)」;指标例外=main.gd 公开方法 32 落 gdstyle 基线(先例=level_runner 33 在册)。
- 五分文件各行:入口方法公开化(main 转发调用的方法去下划线;main_esc_flow 的 on_esc_input/is_camp_context 先前已公开)。
- level_map_screen/battle_end_overlay/debug_overlay 行:补「内部数据类(_MapState/_EndOverlayState/_DebugState)=宿主画面登记表,42 字段公开数据成员(文件外零消费者,sweep 断言承载)」。
- ui_kit 行:三工厂公开化(gradient_base/beams_rect/switch_toggle)。
- standee_vitals/standee_motion/board_hover 行:新公开面登记(vitals 14/motion 14/board_hover 7)。
- cell_mark_overlay 行:徽章遮罩走构造交付 Callable(`_mask_set`)。
3. **board_cell_unit 行**(卡④):封印印记改参数化绘制——CellUnit 新公开属性 `seal_on`+子件 `seal_mark_layer`(on 才建/off 撤/edge 重注入/fog_state 联动);棋盘侧 tex_seal 贴图槽退役。
## 二、art-bible.md(design/art/art-bible.md)§8.2
4. **参数单点名册补第六枚**:实现按 §8.2 六项定值落码,其中「环外光圈宽 0.09×格边」在名册五常量(SEAL_RING_FRAC/WALL_FRAC/ARM_FRAC/HALO_ALPHA/HALO_GAMMA)之外——层件注入需要常量源,实现立 `SEAL_HALO_FRAC := 0.09`(值=§8.2 条款值逐字)。请文档批裁决:§8.2「参数单点 = ui_kit.gd 五枚常量」句改「六枚」并补 `SEAL_HALO_FRAC` 名(或另行裁决注入源形态)。改值仍须本节与 §3.2 同批修订的条款不变。
## 三、根流程清单与美术清单
5. **体验验证清单.md 第 4 条判据换代**(卡④):现判据「`seal_mark.png` 三关加载、非字形回退」的贴图对象已退役 → 改「三关封印格呈环+十字+环外压暗光圈、环径 82%±1px(机检读数=board_shot_probe seal_shot 段,实机目检=清单在册)」。
6. **design/art/asset-path-map.md**:`seal_mark.png` 用途行「棋盘封印印记」→「战末金蜡封徽记专用(battle_end_overlay)」;棋盘侧引用已全退役。
7. **术语表**:零新增术语确认行(环/十字/光圈/读投影/引用束/公开数据成员均仓库现行词)。
## 四、工程面(tools/)
8. **`.gitattributes` 建议增补**(环境红根因,工程改动归用户发令):测试 golden 字面量载体(含 `game/tests/**/*.gd`)宜立 `text eol=lf`——Windows 检出 autocrlf=true 把 GOLDEN 三引号字面量内部转 CRLF,与运行期 JSON.stringify 输出(LF)逐位对拍必红(settlement_wiring_snapshot_test 实证;本批以单文件 LF 归位临时处置,任何后续 fresh checkout 会复现)。
## 五、GDD 反哺(game/tests/README.md 零编辑核对结果)
9. 卡④能力行名实核对通过(:122 行两代表用例函数逐字在位)——零回表;卡①②③零新增能力(各自卡面判定)——零编辑。本条为核对结论记录,非落文义务。
+173
View File
@@ -0,0 +1,173 @@
# 迭代 52 实现报告(2026-11-05)
> 迭代 52 四卡:①minesweeper_rules 公开面还债批(验收档中)②孤儿函数清退批(验收档中)③架构审查 presentation 层封装修复批(验收档中)④封印印记法阵化批(验收档中)。工作区 `D:/code/g-plan2-iter52`(分支 iter52,基点 eaf2fe47)。本报告与 `reports/iter52-反哺点-2026-11-05.md`、`reports/iter52-验收审计-2026-11-05.md` 三件为迭代产出物。
## 卡① minesweeper_rules 公开面还债批——完成
- **提交**:755d5576。改动 2 文件 6 行:`game/core/minesweeper_rules.gd:101` 定义+`:110` 内部调用点改名 `_safe_remaining`(函数体逐字不动);测试 4 行调用表达式改锚(:56/:89/:93/:94)。
- **T0 读数**:gdstyle 闸改前读数=`FAIL 新增 game/core/minesweeper_rules.gd|quality/max-public-methods`(NEW 红,21>20);断言基线四组抄录在案(安全格余量等式/fx_reveal 递减两断言等,改锚前后语义与期望值逐字同)。
- **T2 验证**:gdstyle 闸改后=基线外新违规 0(公开方法 20≤20 归绿,零新增基线键);全仓 `\.safe_remaining\(` 零残留;`\._safe_remaining\(` 命中=:110+测试 4 行。
- **实际对照表**:
| # | 需求点 | 改动 | 验收测试+落点 | 结果 |
|---|---|---|---|---|
| 1 | 公开面收敛 21→20(S13 归绿) | minesweeper_rules.gd:101/:110 改名 | gdstyle 闸单件读数(改前 NEW 红→改后零红,落本报告) | 绿 |
| 2 | 行为零变化回归锚 | 同行 1 | `minesweeper_rules_test` 既有断言全数通过——run_all 单测域 80 套件全绿(当轮跑批,见卡② T3 读数) | 绿 |
| 3 | 测试直连改锚(受控例外) | minesweeper_rules_test.gd :56/:89/:93/:94 | 同行 2(改锚后断言当轮跑批执行并通过) | 绿 |
- **卡面计数口径差(L2 备案)**:卡 §3.4 称测试 5 处调用表达式(:93 两处);按行实测=4 行 4 处调用(:93 一处+:94 一处)。改锚完整性与断言语义不受影响。
- **实机目检项**:无(改名零玩家可观测提交面)。
## 卡② 孤儿函数清退批——完成
- **提交**:1145f5a9。判死六件删除(含专属注释行):effect_engine.gd `has_effect_on`、breakpoint_store.gd `_bp_read_int`、adventure_runner.gd `_find_token`、modal_stack.gd `has_open`、camp_scene_view.gd `set_feedback_state`、curio_stop.gd `stop_resolved`。
- **T0 复核**:六件全仓词边界 grep 仅定义命中(has_open 两处/set_feedback_state 一处为注释提及),与卡 §3.2 零调用证据一致。
- **T2 级联留存复核计数**:`bp_read` 6 处在役调用/`_bp_strategy` 1(bp_read)/`curio_deck.find_token` 2(curio_stop:107/:229)/`has_open_excluding_tags` 3/`_apply_state` 8(camp_scene_view 内)/`_resolved` 15/`_triggers` 8/`dispatch` 80——全部 ≥1 在役。
- **新增孤儿扫描**:六文件逐函数引用计数粗扫(CR 剥离后)=零孤儿。
- **T3**:单测域 `run_all.gd` 80 套件全绿(exit 0)。
- **实际对照表**(七行,行 1–6 判据同构):
| # | 需求点 | 改动 | 验收测试+落点 | 结果 |
|---|---|---|---|---|
| 1 | has_effect_on 退役 | effect_engine.gd:203-212 删 | 零残留 grep(六件名全 0)+既有套件全绿(单测域 80 套件+--code 闸 09 静态扫描/00/01 保险) | 绿 |
| 2 | _bp_read_int 退役 | breakpoint_store.gd:211-219 删 | 同行 1 | 绿 |
| 3 | _find_token 退役 | adventure_runner.gd:250-252 删 | 同行 1 | 绿 |
| 4 | has_open 退役 | modal_stack.gd:56-62 删 | 同行 1 | 绿 |
| 5 | set_feedback_state 退役 | camp_scene_view.gd:88-92 删 | 同行 1 | 绿 |
| 6 | stop_resolved 退役 | curio_stop.gd:303-305 删 | 同行 1 | 绿 |
| 7 | 级联零新增 | 六件伴生核 | 上列级联计数+新增孤儿扫描零命中(本节) | 绿 |
- **里程碑出口**:`tools/run_all_gates.sh --code` 全绿(卡①②合并一次跑,回执 commit 1145f5a9,【验收通过】闸况与基线一致无新增红)。
- **实现决定记录(超白名单备案)**:随删修 3 处悬空注释引用——modal_stack.gd:12(TAG_NON_LOCKING 注释中 `has_open 组合` 改「开态计入输入锁的组合」)、modal_stack.gd:67(删「(与 has_open 同形)」括注)、camp_scene_view.gd:5(头注 `禁用态由组合根经 set_feedback_state 推送` 改 `禁用态经 _apply_state 自持基态面呈现`)。悬空引用系删除直接后果,修剪保持文档真实性。
- **实机目检项**:无(死件删除零玩家可观测提交面)。
## 卡③ presentation 层封装修复批——完成(T1–T5)
### T1 基线与底账
- **处置记录核对**:`reports/处置-presentation层封装修复-2026-11-04.md` 在盘,与本卡第 3 节逐条一致(四族裁决/42 字段名单/设计规则六条/S13 预算/连带面;42 字段与三类定义逐字核对)。
- **grep 底账(改前账)**:`grep -rnE '\._[a-zA-Z]' game/presentation --include='*.gd'` 剔纯注释行与 self._ = 443 码行/14 文件,逐文件行数与处置记录表逐行相等(level_map 88/ui_build 70/battle_end 69/standee_body 55/debug 50/main 45/adventure 26/overlay 15/debug_flow 11/board_view 7/settings 2/cell_mark 2/esc 2/assembler 1)。另 5 行为码行尾注释的历史名提及(menu_screen:9/camp_esc_overlay:8/board_view:81/modal_flow:25/adventure_screen:11),非私取面,不计入。
- **探针/测试替换精确清单**:`grep -rnE 'main\._[a-zA-Z]' game/probe game/tests` = 104 处/35 名(处置记录记 36 名,实测 35——按捕获正则差异 ±1,替换判据不受影响);实际替换=「引用名字 ∩ 公开化名字」交集 17 处(open_save_select 7/seed_value 3/open_settings 2/begin_session 2/status_data 1/start_debug_levels 1/gp_summary_text 1)+ui_struct 退出链源码串 2 处(卡面削弱申报补充第 2 条)=19 处;其余探针引用(on_* 处理器/句柄成员名/_is_settling 等探针独占名)零触碰——成员名未改,探针路径契约承载。
- **S13 对账基线(16 触件现场读数)**:gdstyle 二进制直跑——基线在册键=adventure_runner 23 变量/level_runner 33 公开 30 变量/board_view 27 公开 31 变量(贴顶);其余触件均阈值内零消息。改后只降不升核对面见下。
- **零行为变更基线**:冒烟 15/0 PASS+渲染 golden 改前绿(①②里程碑闸 05 渲染闸绿为凭)。
### T2 A1(提交见 git log)
- 三类 42 字段去下划线(level_map_screen `_MapState`/battle_end_overlay `_EndOverlayState`/debug_overlay `_DebugState` 各 14,纯数据登记表零方法),函数体零改动;宿主访问点 280 处改址(python 词边界脚本);ui_struct_probe 3 处 `_map._runner` 交集改址;三件头注补内部数据类定位句。
- sweep V1 组 52 checks 绿+冒烟 15/0。
### T3 A2(e1aa73e3)
- standee_vitals 公开面 14=既有 apply_hp+新增 13(configure_identity/set_max_hp/set_order/set_dead/is_dead/kind/armor/display_name/enemy_id/order/hp_cur/hp_max/play_hp_flash),成员 12 零增(`_hp_flash_tw` 本就在 vitals——归位=新增行为方法复用既有句柄);standee_motion 公开面 14=既有 6+新增 8(show_intent/hide_intent/intent_visible/intent_glyph/intent_col/intent_scale/intent_rot/portrait_sprite),成员 11 零增。
- standee_body 全部子件私取改址(`st._`/`mo._` 零残留);flash_hit 体改调 `st.play_hp_flash()`(tween 归位 vitals 自持,宿主成员零增);头注「外部直访冻结成员」句按新面改写。
- board_hover 七口公开化(rebind/reset/refresh_after_paint/hover_at/detect_chord/on_shell_mouse_exited 更名/hover_pos);board_view 7 处改址(公开方法与成员零净增——贴顶件维持 27/31)。
- sweep V2 组并入(61 checks 绿)+渲染 golden+探针套件串行复跑全绿。
- **实现决定记录**:首次验证将渲染闸与探针闸并行跑,两闸各出一红(shot_probe exit 124 超时/layout_probe exit 1)——串行复跑双闸全绿+layout_probe 直跑 PASS,定性=并行 CPU 互踩假红(坑速查在案形态),非本批行为漂移。
### T4 B 族(7a79fa6b)
- main.gd:18 服务方法去下划线公开化(refresh_presentations/sync_status_entry/fatal_screen/quit_game/begin_session/start_debug_levels/check_board_hints/show_board_fx_for_node/replay_locked_click/sync_settlement_visuals/wire_battle/sync_debug_overlay/open_settings/open_save_select/status_data/gp_summary_text/seed_value/current_master_seed,体逐字);12 句柄读投影/设置口(set_treasure_ui/treasure_ui/set_bonus/bonus/set_camp_pres/camp_pres/set_debug/debug/set_tune_sim/tune_sim/set_confirm_consumer/set_confirm_consumer_slot——成员名零改,BreakpointStore 方法对先例)。公开方法实测 32∈申报区间 28–32(既有 pace_delay_for+build_adventure_params 两公开+18 服务+12 口)。
- 五分文件入口公开化+`root._` 私取清零(193 处脚本+76 处结构);on_* 处理器保私有,接线语句改 Callable 束消费——束参两处:`MainUiBuild.build(root, handlers)` 31 键、`MainAdventureFlow.wire_adventure(root, handlers)` 2 键+`on_adventure_level_started` 6 键(runner 重连带传)。
- 探针/测试 19 处引用迁移(断言内容零改动,清单见 T1)。
- **main.gd 例外键落基线**:键 `game/presentation/main.gd|quality/max-public-methods = 32` 经基线文件人手编辑落账(卡面所写 `gdstyle_gate.py --refresh` 通道不存在——闸件自证「无参数;基线维护=人工手动编辑」;闸件头注即现行口径,卡面引用过时。本批按闸件现行通道执行,例外实体=卡 §14 申报本身=U0 背书面)。
- **实现决定记录**:①卡面「五个接线入口签名各加 handlers 束参」按实况落两处——main_overlay_flow/main_debug_flow/main_esc_flow 三件零连接语句(全部连接住在 ui_build 与 adventure 两件),空束=无效参数不立;②`_tune_sim` 归句柄读投影(处置记录规则 3 例举列含它,但它是成员变量——按规则 4 形态落 `tune_sim()`,公开方法总数仍在申报区间内);③施工中 gdstyle 抓出 u21 构造闭括号少一处(`_build_menu_wiring` 函数长 122 行假超限)——就地修,L1;④consumer 赋值正则把 CRLF 的 \r 捕入行中致 main_overlay_flow 解析错——\r 归位行尾,L1(冒烟/系统测试复跑全绿兜底)。
- sweep V3 组并入(99 checks 绿)+冒烟 15/0+系统测试 69/0+探针闸全绿。
### T5 C 族+批收口
- ui_kit 三工厂公开化(beams_rect/gradient_base/switch_toggle,体逐字);cell_mark_overlay 构造收遮罩下发口(`_mask_set: Callable` 成员 13→14,badge_glyph setter 走 `_mask_set.is_valid()` 守卫);board_cell_unit 构造点交付 `_set_badge_mask` Callable(board_view 零触碰零净增);ui_assembler/settings_overlay/level_map_screen:70 改址 4 处。
- sweep V4 组并入(全四组 105 checks 绿);run_all.gd manifest 登记 sweep 件(expect 0);.uid 收口(--editor --quit 后新测试件 .uid 在位随批提交)。
- 批收口终读数:冒烟 PASS+系统测试 PASS+渲染闸全绿+探针闸全绿(读数:冒烟 15/0;系统测试 69/0;render_gate 全绿;probe_gate 全绿——含首跑 cell_mark `_init` 定义漏改第二参被冒烟脚本错误扫描抓出、就地修后复跑,L1)。
- 实现决定记录:cell_mark `_init` 定义补第二参(首轮只改调用侧漏改定义侧,L1)。
### S13 改前改后对账(16 触件)
| 触件 | 改前 | 改后 | 判定 |
|---|---|---|---|
| main.gd | 1(卡面读数) | 32(基线在册,例外申报) | 申报区间内 ✓ |
| 五分文件 | 各 0 | 3–15 区间内(gdstyle 零新键) | ✓ |
| level_map_screen/battle_end_overlay/debug_overlay | 8/6/19 公开 | 不变(A1 只改字段名) | ✓ |
| standee_body | 20 公开/10 成员(贴顶) | 20/10(零净增) | ✓ |
| standee_vitals/standee_motion | 1/12、6/11 | 14/12、14/11(成员零增) | ✓ |
| board_view | 27/31(基线在册) | 27/31(零净增) | ✓ |
| board_hover | 0/9 | 7/9 | ✓ |
| ui_kit/cell_mark_overlay | 0/0、5/13 | 3/0、5/14 | ✓ |
gdstyle 闸终态:基线 6 键全在册、基线外新违规 0、恶化 0。
### 实际对照表(卡③ §8 七行)
| 需求点 | 改动 | 验收测试+落点 | 结果 |
|---|---|---|---|
| R1 A1·战末弹层 | battle_end_overlay 14 字段+69 处改址 | sweep V1〔pres封装 V1〕;冒烟+战末弹层既有探针回归(fx_probe/ui_probe 当轮探针闸绿) | 绿 |
| R2 A1·调试浮窗 | debug_overlay 14 字段+50 处 | sweep V1;TuneSimController 入口探针(tune_probe/ui_tune_probe 当轮绿) | 绿 |
| R3 A1·关卡画面 | level_map_screen 14 字段+87 处 | sweep V1;选路集成链(system_test 69/0+screen_flow_probe 绿)+冒烟 | 绿 |
| R4 A2·站桩三件 | standee 三件+flash 归位 | sweep V2;渲染 golden 逐像素零转红(render_gate 全绿);fx_probe 既有回归 | 绿 |
| R5 A2·悬停子件 | board_hover 六口+board_view 7 处 | sweep V2;ui_input_probe 既有回归(十八断言全绿) | 绿 |
| R6 B·组合根交接面 | main+五分文件+探针替换 19 处 | sweep V3;14 件替换后当轮真实跑绿(probe_gate 全绿);冒烟+系统测试 | 绿 |
| R7 C·杂项公开面 | ui_kit 三工厂+cell_mark 构造交付+改址 | sweep V4;layout/shot 探针既有回归(render/probe 闸全绿) | 绿 |
- **实机目检项**:无(零行为变更批——渲染 golden 与探针套件改前改后零转红为呈现逐位同证据)。
## 环境红定性(跨卡记录)
1. **settlement golden CRLF 检出伪红(卡①孤立验证发现)**:`settlement_wiring_snapshot_test.gd` 的 GOLDEN 三引号字面量与 `JSON.stringify` 输出逐位对拍——git blob 全 LF,Windows 检出(core.autocrlf=true)把整文件转 CRLF,字面量内部行尾变 CRLF 而运行期输出恒 LF → 对拍必红。主区同文件同为 CRLF(同 checkout 产物)=存量环境红非本批新增;远端 Mac runner(LF 检出)不受影响。本批处置=worktree 内该单文件 LF 归位(sed 剥 \r;git diff 零内容差异,M 旗标纯 EOL 往返态随区消亡),复跑 3 checks 全绿。**建议反哺点**:测试 golden 载体宜立 `.gitattributes eol=lf`(工程改动,归用户裁决)。
2. **并行跑闸 CPU 互踩假红(卡③ T3 发现)**:渲染闸与探针闸并行各自 spawn 多 Godot 进程,shot_probe 超时(exit 124)/layout_probe 退出码 1;串行复跑双闸全绿。跑闸纪律维持「长批串行」。
## 遗留读数义务
- 无(四卡均零 MC/数值触面;卡④读数见下节)。
## 卡④ 封印印记法阵化批——完成(T1–T5)
### 落码面
- **T1**:ui_kit 五常量(SEAL_RING_FRAC 0.82/SEAL_WALL_FRAC 0.11/SEAL_ARM_FRAC 0.156/SEAL_HALO_ALPHA 0.50/SEAL_HALO_GAMMA 1.6,各带 §8.2 来源注)+ `seal_mark_params_test.gd`(现 3 断言函数)+ run_all.gd 注册(expect 0)。
- **T2**:`seal_mark.gdshader`(canvas_item 距离场:环带+十字+环外光圈,半径夹 `min(r, cell_px * 0.5)`;uniform 七枚+mark_col;默认值=§8.2 同值兜底,gd 侧逐次注入;禁动效零呼吸)。隔离验证=三档格边 28/32/46px 方块直跑抓帧:环径比 0.857/0.813/0.826 全落 0.82±1px、最外圈 1px 框全白(光圈不越格),截图落 artwork/(在途不入 git)。
- **T3**:`seal_mark_layer.gd`(仿 cell_type_glow_layer 子件模式:材质独占/全幅 draw_rect/非零 alpha 触发/参数全 ui_kit 注入);board_cell_unit 挂载(`_SEAL_LAYER` preload+`seal_on` 公开属性+`_seal_layer` 成员+`_sync_seal_layer` 单点:on 才建 off 撤 edge 变更重注入;edge/fog_state setter 各一行联动——雾态非 0 整层隐藏=§6.5 随格隐没);board_view :539-541 改 `u.seal_on` 下发。
- **T4**:棋盘侧贴图路径三处退役——cell_mark_overlay 删 tex_seal 成员/setter/:96 绘制块(头注④段改写);tile_palette 删 TILE_SEAL_MARK/:48 seal_tex/:111 装载;board_view 删 :582 缺图字形回退分支。全仓 sweep:`seal_mark.png` 资产引用只余 battle_end_overlay.gd:85(战末蜡封专用)——结构性证据落本报告。
- **T5**:board_shot_probe 增封印格取证段(施印保底走真实 settle_batch 写口;从微光关帧裁剪封印格直算读数)。**三关读数表**:
| 关 | 格边 | 环径读数 | 比值 | 判据(0.82±1px) | 框最暗值 seal/ref | 英雄格中心 r |
|---|---|---|---|---|---|---|
| L1_dungeon | 46 | 38px | 0.8261 | ✓ | 0.169 / 0.169 | 非黑 ✓ |
| L2_underdark | 46 | 38px | 0.8261 | ✓ | 0.016 / 0.016 | 非黑 ✓ |
| L3_deep_underdark | 46 | 38px | 0.8261 | ✓ | 0.008 / 0.094 | 非黑 ✓ |
(37.72px 期望值、读数 38px=覆盖量化;光圈越格判据见下方判据实现注记。)
- **T6**:能力清单核对=`game/tests/README.md:122` 行「棋盘封印印记呈现」代表用例 `seal_mark_params_test.gd:_test_param_values`+`_test_fog_gate` 两函数逐字在位、真实入口与实现一致——零回表。.uid 收口在位。
### 实际对照表(卡④ §8 七行)
| # | 需求点 | 改动 | 验收测试+落点 | 结果 |
|---|---|---|---|---|
| R1 | 环径 82% 格边随格边连续 | shader ring_frac+五常量 | `_test_param_values`〔seal批 V1〕+T5 三关帧量读数 0.8261×3 | 绿 |
| R2 | 壁厚 11%/臂宽 15.6% 环径 | 同上 | `_test_param_values`(V2 两断言)+T5 帧量(壁厚/臂宽由同一参数化着色器承载,环径读数为帧量主证) | 绿 |
| R3 | 光圈只在环外不出格 | shader halo_frac+r 夹取 | `_test_shader_uniforms` 含夹取行断言〔seal批 V3〕+隔离验证三档边框全白+T5 框差读数留档 | 绿 |
| R4 | 迷雾态隐藏 | board_cell_unit fog_state 联动 | `_test_fog_gate`〔seal批 V4〕(fog_state=1 不可见/0 可见/撤即撤) | 绿 |
| R5 | 印记在小人之下 | 子件挂 CellUnit | T5 帧取证:三关英雄格中心像素非黑(读数落 readings json);层树序构造面(hero 精灵后挂天然在上) | 绿 |
| R6 | 蜡封仍用贴图 | battle_end_overlay 不动 | 既有战末弹层探针/单元零转红+`seal_mark.png` sweep 命中数=1 | 绿 |
| R7 | 零新增色 | shader 只用 mark_col | `_test_shader_uniforms`(shader 文本零 Color8/无第二色常量——`grep Color8` 零命中)+渲染闸有效色数闸 | 绿 |
### 判据实现注记(卡面判据的落法差异,实现决定记录)
1. **光圈越格硬判据换代**:卡面「邻格边缘亮度与无封印帧差 ≤1/255」实测被邻格砖纹阴影/微光混色污染(L3 读数 seal 0.008 vs ref 0.094——系纹理内容非光圈;L2/L3 砖瓦本身含近黑斑)。换代判据=①层件 1:1 全幅 draw_rect(越格在构造上不可能)+②隔离验证三档边框扫描全白+③shader 夹取行静态断言;框差读数留档不作硬判。意图(光圈不出格)三面承载。
2. **环径扫描阈值**:印记体 alpha=1 合成结果=纯黑(≤2/255)——首版 0.15 阈值被 L2 砖纹近黑斑混入(读数 42px 假越带),收紧后三关一致 38px。
3. **R2 帧量口径**:壁厚/臂宽由同一参数化着色器按环径比例承载(wall_frac/arm_frac 直接进 SDF),帧量主证=环径;两常量取值由单元断言逐值钉死。
### 实机目检总清单(登记不阻塞)
1. 三关封印格观感(环+十字+压暗光圈,截图=artwork/ 在途 `seal_iso_*.png` 与 seal_shots/ 裁剪帧)。
2. 战末金蜡封徽记观感(贴图路径未动——零预期变化)。
3. 封印格与变异纹带同格观感(两层共存——零代码触面,观感确认项)。
### 遗留读数义务
- 无(零数值改动零 MC)。
## 独立验收审计结论(收尾节)
- 审计报告:`reports/iter52-验收审计-2026-11-05.md`(未参与实现的子代理执行;四卡验收档均中——对照表逐行全量核对+判据绑定面抽查+削弱逐处检查+例外逐条核对,最窄复跑省略以本地闸回执代证、合回后远端 CI 现查为终局执行证据)。
- **总判定:通过**——四卡对照表 24 行全过;测试削弱 8 类逐处全落卡面申报集;直查受控例外 2 条全注记;闸回执八闸 exit 0、dirty_game=false。
- 审计备案两件(零实体影响,随收尾笔处置):①卡④ ui_input_probe case④b 断言换代(tex_seal 退役→seal_on 断言)的申报记录只在提交信息 13d6bfbb,卡面 §8 文本「本批不删改任何既有断言」未覆盖此换代——实体的申报依据=test-conventions §5.5(旧验证约束同生死)+卡面对 board_view:582 的同类「行为退役不属删断言」口径;本节即补记。②board_view.gd:77 头注悬空提及 `_palette.seal_tex`——已随收尾笔修剪。
+131
View File
@@ -0,0 +1,131 @@
# 迭代 52 验收审计报告(2026-11-05)
> 审计对象:分支 iter52 相对 master(53d2a8a2)的全部改动(53 文件;四卡①minesweeper_rules 公开面还债批/②孤儿函数清退批/③架构审查 presentation 层封装修复批/④封印印记法阵化批,四卡验收档均为中)。审计人=未参与实现的独立会话(test-conventions §8.7)。审计深度=四卡全量对照表逐行+判据绑定面抽查(每卡 ≥2 行)+测试削弱逐处+直查例外逐条;最窄测试复跑省略——执行证据=闸回执读数(game/tests/.gates/receipt.json,commit fbf126d1,八闸全 0),**合回后远端 CI 现查为终局执行证据**。全部零命中断言与计数均由审计人自跑 grep 取数,不采信报告转述。
## 总判定:通过
- 四卡对照表逐行核对全部通过(卡① 3 行/卡② 7 行/卡③ 7 行/卡④ 7 行,共 24 行;无缺漏行)。
- 测试削弱检查逐处核毕:测试/探针面被删改既有断言共 5 类 35 行,全部落在申报集内(逐处清单见第三节);无申报外删改。
- 直查受控例外逐条核毕(2 条,见第四节)。
- 两项备案缺漏(均零实体影响,不阻塞合并):④-1 ui_input_probe case④b 断言换代的申报记录未进卡面与实现报告(实体合规,欠账文档级);④-2 board_view.gd:77 悬空注释仍引已删成员 `_palette.seal_tex`。见第五节。
## 一、逐卡审计结论
### 卡① minesweeper_rules 公开面还债批(验收档:中)——通过
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| 1 | 公开面收敛 21→20(S13 归绿) | diff 实核:`minesweeper_rules.gd:101` 定义改名+`:110` 内部调用点同步,函数体逐字未动(diff 仅两行签改)。审计自数:该文件非下划线 `^func [a-zA-Z]` = 20。`tools/gdstyle_baseline.txt` 零 minesweeper_rules 键(grep 零命中);审计自跑 `python tools/gdstyle_gate.py`:7 命中全在基线、基线外新违规 0、恶化 0 | 通过 |
| 2 | 行为零变化回归锚 | `minesweeper_rules_test.gd` 既有断言除改锚外零改动(diff 实核:断言消息串与期望表达式逐字未动);套件经回执 02 闸(exit 0)当轮执行 | 通过 |
| 3 | 测试直连改锚(受控例外) | 改锚 4 行(:56/:89/:93/:94)diff 逐行实核;审计自跑 `grep -rnE '\.safe_remaining\(' game/`(.gd+.tscn)=零命中;`_safe_remaining` 全仓恰 6 处(:101 定义+:110+测试 4 行)。卡面 §3.4 称「测试 5 处(:93 两处)」实测 4 处——实现报告已 L2 备案(计数差,改锚完整性与断言语义不受影响) | 通过(卡面计数差备案在案) |
- 真实入口核:行 1 判据面(S13 计数)由 gdstyle 闸单件读数承载、改前 NEW 红(21>20)与改后零键均落实现报告 T0/T2,改动点即被测点,无绕过。行 2/3 经 `tests/run_all.gd` 单元套件真实跑(回执 02 exit 0),改锚断言(:56 精确余量等式/:89-94 fx_reveal 递减)在套件内当轮执行。
- 尾缀:本卡零新增测试件,无尾缀义务;既有断言尾缀(〔wr4〕等)零触碰。
### 卡② 孤儿函数清退批(验收档:中)——通过
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| 1 | has_effect_on 退役 | diff 实核 effect_engine.gd 删 :203-212(`## 订阅查询面` 注释+函数);审计自跑六件名词边界 grep(game/ 全 .gd+.tscn)=六名全零命中 | 通过 |
| 2 | _bp_read_int 退役 | breakpoint_store.gd :211-219 删(注释+函数),diff 实核;grep 零残留 | 通过 |
| 3 | _find_token 退役(死包装) | adventure_runner.gd :250-252 删;grep 零残留;真件 `curio_deck.find_token` 在役(curio_stop.gd:107/:229 实查) | 通过 |
| 4 | has_open 退役 | modal_stack.gd :56-62 删;grep 零残留(`\bhas_open\b` 不误中 `has_open_excluding_tags`);后者 3 处在役调用实查 | 通过 |
| 5 | set_feedback_state 退役 | camp_scene_view.gd :88-92 删(无专属注释块,与卡面一致);grep 零残留 | 通过 |
| 6 | stop_resolved 退役 | curio_stop.gd :303-305 删;grep 零残留 | 通过 |
| 7 | 级联零新增 | 审计自跑级联计数全 ≥1 在役:bp_read 6/_bp_strategy 1/find_token(deck 件)定义+2 在役/has_open_excluding_tags 3/_apply_state 8(camp 件,剥定义)/_resolved 15/_triggers 8/`.dispatch(` 80;与实现报告计数一致。审计自写逐函数引用粗扫(六文件+minesweeper_rules,剥注释、引擎虚函数豁免)=零孤儿 | 通过 |
- 真实入口核:判据=静态零残留 grep+既有套件回归锚。六件名全仓零调用(含测试面零命中)=无测试直连可绕;回归面经回执 00/01/02/09 四闸(全 exit 0)真实执行。判据绑定面=「定义行消失+全仓零残留」为本批特有提交面(死函数无运行期可观测面——卡面已申报观测面局限)。
- 随删 3 处悬空注释修(modal_stack.gd:12/:67、camp_scene_view.gd:5):diff 实核=纯注释行,零断言零行为触面;实现报告「实现决定记录」已备案(超白名单呈报)。通过(备案在案)。
### 卡③ 架构审查 presentation 层封装修复批(验收档:中)——通过
对照表七行(R1–R7)逐行核对:
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| R1 | A1·战末弹层 | `presentation_encapsulation_sweep_test.gd` V1 组在盘:battle_end_overlay 非空前置+class `_EndOverlayState` 正锚+`st\._` 零命中+14 公开字段逐个正锚+类名文件外零消费者(全 game/ 递归扫描,排除宿主与自件)。审计实读类定义=14 字段无下划线 | 通过 |
| R2 | A1·调试浮窗 | 同 V1 组:debug_overlay 14 字段(`_DebugState` 定义实读)+`st\._` 零命中;TuneSim 入口探针经回执 03 闸绿 | 通过 |
| R3 | A1·关卡画面 | 同 V1 组:level_map_screen `_MapState` 14 字段实读+`_map\._` 零命中;system_test(回执 01 exit 0)+screen_flow_probe 走选路链 | 通过 |
| R4 | A2·站桩三件 | V2 组:standee_body `\bst\._|\bmo\._` 零命中(审计自跑)+`configure_identity/play_hp_flash/show_intent|hide_intent/portrait_sprite` 正锚在文;flash 归位实查(standee_vitals.gd:84 `play_hp_flash`+:22 `_hp_flash_tw` 自持;standee_body.gd:251 改调);渲染 golden 经回执 05 闸绿 | 通过 |
| R5 | A2·悬停子件 | V2 组:board_view `_hover_comp\._` 零命中(审计自跑)+七口正锚(rebind/reset/hover_at/detect_chord/refresh_after_paint/on_shell_mouse_exited/hover_pos——board_hover.gd 实读 7 公开方法,board_view 7 处改址 diff 实核);ui_input_probe 经回执 03 闸绿 | 通过 |
| R6 | B·组合根交接面 | V3 组:六文件 `root\._[a-zA-Z]` 与 `Main(Overlay|Adventure|Debug|Esc)Flow\._[a-zA-Z]` 零命中(审计自跑,前者六文件全零、后者全库唯一命中=camp_esc_overlay.gd:8 注释历史名提及,T1 底账已定性非私取面);main.gd 公开方法实测 32(31 实例+1 静态 build_adventure_params)=基线键 32;五分文件入口公开化实读(on_quit/open_settings/show_debug_levels/wire_adventure 等全公开);Callable 束消费正锚(ui_build `handlers["board_action"]`、adventure `handlers["adventure_finished"]` 实读在文);on_* 处理器保私有(探针 28 处 main._on 引用零改动实查);冒烟/系统测试经回执 00/01 闸绿 | 通过 |
| R7 | C·杂项公开面 | V4 组:`UiKit\._[a-zA-Z]` 全库 .gd 零命中(审计自跑,排除 ui_kit.gd 自身——其内亦零命中);cell_mark `_owner\._` 零命中+`_mask_set.is_valid()` 正锚;三工厂公开正锚(ui_kit.gd:364/:401/:874 实读,diff 证体逐字仅签改);ui_assembler:106/settings_overlay:88/:105/level_map_screen:70 四处改址 diff 实核;cell_mark `_init` 增第二参、board_cell_unit `_set_badge_mask` 交付实读(board_view 零触碰——diff 无 board_view 构造点改动) | 通过 |
- S13 对账(16 触件):审计自跑 `python tools/gdstyle_gate.py` 全绿(7 键全在册、基线外 0、恶化 0);基线键 7 条与实现报告对账表一致——main.gd=32(卡 §14 申报区间 28–32 内)、ui_kit=23(追补提交 00dbd4a7,卡 §3.2 误测 L2 备案+反哺点在案)、board_view 27/31 持平(贴顶零净增——diff 实证 board_view 仅 8 处改址零增面)。
- 探针/测试迁移 19 处逐条实核(ui_struct_probe 6、ui_click_probe 4、ui_tune_probe 3、system_test 3、probe_ui_util 1、screen_flow_probe 1、ui_probe 1、pacing_queue_test 1=18 调用点+退出链源码串 1 行 2 串):断言内容零改动、退出链断言意图不变(`_on_esc_quit` 处理器私名零改动实查);迁移名全仓零残留实查(grep 零命中);未迁移名(on_*/句柄成员/探针独占名)零触碰实查。
- 零行为变更证据链:回执 00/01/03/05/05b 全 exit 0+渲染 golden 零转红(05 闸绿);并行跑闸 CPU 互踩假红已定性(串行复跑双绿,报告 T3 记录)。
- 备注(措辞差,非缺漏):卡面 R6 行「14 件替换后当轮真实跑绿」——实际替换=「引用名字 ∩ 公开化名字」交集 19 处落 8 文件(卡 §4/§5 的替换判据即交集规则,14 件为引用面总体非替换件数);实体合规。
### 卡④ 封印印记法阵化批(验收档:中)——通过(两项备案缺漏见第五节)
| # | 需求点 | 核对结果 | 结论 |
|---|---|---|---|
| R1 | 环径 82% 格边随格边连续 | `seal_mark_params_test.gd:_test_param_values` 在盘(SEAL_RING_FRAC=0.82 断言〔seal批 V1〕);ui_kit.gd:37 实读同值;T5 取证=board_shot_probe `_seal_evidence`(施印保底走真实 `settle_batch` 写口实读在文;环径读数硬判 `absf(ratio-0.82) <= 1.0/edge` 越带即红)——探针闸绿(回执 03)为执行证据;报告三关读数 38/46=0.8261 在带 | 通过 |
| R2 | 壁厚 11%/臂宽 15.6% 环径 | `_test_param_values` 两常量断言在盘〔seal批 V2〕;shader 实读 `wall = wall_frac * 2.0 * ring_r`、`arm = arm_frac * 2.0 * ring_r`(:34-35)——两常量直接进 SDF,帧量主证=环径(口径换代落实现报告「判据实现注记 3」) | 通过(换代已申报) |
| R3 | 光圈只在环外不出格 | `_test_shader_uniforms` 夹取行断言在盘〔seal批 V3〕;shader :45 实读 `float rc = min(r, cell_px * 0.5);`;层件 `seal_mark_layer.gd` 1:1 全幅 draw_rect(越格构造上不可能——:42 实读);隔离验证截图三件在 artwork/(seal_iso_28/32/46.png 实存,在途不入 git 合卡面 T2);框差读数留档不作硬判(换代理由=邻格砖纹噪声实证 L3 0.008 vs 0.094,落「判据实现注记 1」) | 通过(换代已申报) |
| R4 | 迷雾态隐藏 | `_test_fog_gate` 在盘〔seal批 V4〕(fog_state=1 不可见/0 可见/撤 seal_on 即撤);board_cell_unit.gd 实读:fog_state setter 联动 `_sync_seal_layer`+`_sync_seal_layer` 末行 `setup(edge, fog_state == 0)`;run_all.gd manifest 注册(expect 0)经回执 02 闸绿 | 通过 |
| R5 | 印记在小人之下 | 层树构造面实读(子件挂 CellUnit、hero 精灵 BoardView 层后挂);T5 硬判读数在 `_seal_evidence`:英雄格中心像素 ≤0.05 即红(「R5 层序翻失」),探针闸绿兜底;报告三关读数非黑 | 通过 |
| R6 | 蜡封仍用贴图 | 审计自跑 `grep -rn "seal_mark.png" game/ --include='*.gd'`=恰 1 处(battle_end_overlay.gd:85,战末蜡封 `_seal_img` 实读未动) | 通过 |
| R7 | 零新增色 | 审计自跑 shader `grep Color8`=零命中;色源单点实读(layer :33 `mark_col = UiKit.SEAL_BLACK` 注入,光圈只改 alpha——shader :49);色板闸经回执 05b exit 0 | 通过 |
- 贴图退役核(审计动作六自跑取数):`TILE_SEAL_MARK|seal_tex` 全 game/ .gd = 3 处——battle_end_overlay.gd:85-87(局部变量,合法在役)+board_view.gd:77(**注释行**,见第五节缺漏 2);tile_palette 面零残留(TILE_SEAL_MARK 常量、seal_tex 成员与装载 diff 实核已删);board_view :539-541 槽位维护改 `u.seal_on` 下发、:582 字形回退分支退役(diff 实核);cell_mark_overlay tex_seal 成员/setter/绘制块删除+头注改写(diff 实核)。
- 真实入口核:R1-R3/R7 真实入口=`BoardCellUnit.edge → SealMarkLayer.setup() → ShaderMaterial` 参数链(layer :26-33 逐参注入实读);R4 入口=fog_state 属性写面;R5/R1 帧量入口=真实 BoardView 实例化+settle_batch 施印(保底三段实读:novice 驱动在案→邻接施印→免邻接旗标,全拒即 quit(1))——无绕过改动点的直构面。R2/R3 的帧量判据换代与 R7 色数闸均在实现报告申报。
- 能力行核对:game/tests/README.md:122「棋盘封印印记呈现」代表用例 `seal_mark_params_test.gd:_test_param_values`+`_test_fog_gate` 与落地函数逐字一致(实读)——零回表,卡③④能力行其余全「既有」零新增与实现一致。
- 超清单事项合规核:SEAL_HALO_FRAC 第六常量新立=卡 §7-T1/T3 内部矛盾(五常量 vs 七参数注入)的补源,值=§8.2 条款值逐字非改值;代拍板记录「超清单事项呈报」第 1 条+反哺点第 4 条呈报用户裁决——呈报路径在案,合规。
## 二、判据绑定面抽查(每卡 ≥2 行)
- 卡①行 1(S13 计数):断言面=gdstyle 对被改文件读数,改名即被测点——绑定面恰为本批特有提交面;审计自跑闸件复证零键归绿。
- 卡②行 1-7(零残留+级联计数):判据为静态 grep——审计全部自跑取数(六名零残留、级联八组计数、零孤儿粗扫),与实现报告计数逐项一致(_apply_state 报告记 8、审计含定义 9,剥定义后同值)。
- 卡③ R4/R6(V2/V3 正锚+零命中):sweep 断言钉在「源码私取模式零命中+新公开面正锚」——审计自跑同口径 grep 全零;正锚对应真实公开面(方法定义实读在位)。当轮执行证据=回执 02(sweep 件在 manifest 注册实读)。
- 卡④ R1/R5(环径读数+英雄格中心非黑):两判据均硬判落 `_seal_evidence`(越带/读黑即 `_problems.append`→探针退出红),绑定面=封印记数像素与层序像素——本批特有可观测提交面;当轮执行证据=回执 03。
## 三、测试削弱检查(逐处;审计自跑全 diff 删除行清单对申报集)
测试/探针面被删改的既有断言与引用,逐处核对:
| # | 删改处 | 内容 | 申报依据 | 判定 |
|---|---|---|---|---|
| 1 | minesweeper_rules_test.gd :56/:89/:93/:94 | 4 行调用表达式改锚 `_safe_remaining`,断言消息与期望值逐字未动(diff 实核) | 卡① §8 对照表行 3+测试削弱申报节 | 申报内,通过 |
| 2 | 探针/测试 8 件 17 处 `main._x` 引用(open_save_select 7/seed_value 3/open_settings 2/begin_session 2/status_data 1/start_debug_levels 1/gp_summary_text 1) | 引用形态迁移,断言内容零改动(逐文件 diff 实核) | 卡③ §8 削弱申报第 1 条+实现报告 T1 精确清单 | 申报内,通过 |
| 3 | ui_struct_probe.gd :144-146 退出链源码串 2 串("MainEscFlow.on_quit(self)"/"root.quit_game()") | 源码串随公开化换代;同函数 `_on_esc_quit` 私名断言零改动(diff 实核) | 卡③ §8 削弱申报补充(v1.1)第 2 条 | 申报内,通过 |
| 4 | ui_struct_probe.gd :366-370 `ls._map._runner` 3 处 | A1 字段公开化交集改址,断言内容零改动 | 卡③ T2 底账(实现报告)+交集判据 | 申报内,通过 |
| 5 | stage_background_test.gd :164-165/theme_projection_test.gd :626/:651 | `_beams_rect`/`_gradient_base` 旧私名引用随三工厂公开化换代(stage 为源码 contains 断言随名换代,意图不变) | 提交 a8b0b1b2(里程碑闸 02 域抓出,L2 备案「T1 底账漏 enumeration」)+审计任务书申报集 | 申报内(记录载体=提交信息),通过 |
| 6 | ui_input_probe.gd case④b(:264-268 删旧纹理槽双分支断言+注释,换 seal_on 落位单断言) | 旧断言只验证已退役的 tex_seal 机制——test-conventions §5.5 换代批旧验证约束同生死(强制摘除,留即假绿源);新断言同入口(case④b 封印落位)同强度(核心落位硬判) | test-conventions §5.5(法条强制)+提交 13d6bfbb;卡④ §8 削弱申报文本与实现报告未列(欠账,见第五节缺漏 1) | 实体合规;申报记录缺口列缺漏 |
| 7 | board_view.gd :582 字形回退分支、:539-541 槽位维护、tile_palette 两槽、cell_mark 绘制块 | 生产行为退役(回退对象消失),非删断言 | 卡④ §8 削弱申报(明示「行为退役不属删断言」)+§7-T4 | 申报内,通过 |
| 8 | settlement_wiring_snapshot_test.gd | LF 归位处置——审计实核该文件不在 master...HEAD diff(`git diff --name-only | grep settlement` 零命中)=零内容差异,EOL 往返态未进分支;断言零触碰 | 实现报告「环境红定性 1」 | 申报内,通过 |
- 申报外删改清点:全 diff 测试/探针面删除行清单(35 行)已逐行对号(上表 1-8),无第 9 类;run_all.gd 仅增 2 行 manifest 注册(sweep+params 两新件),零删改;.tscn/.tres/data 零改动;新增行零 `randomize()`/自建 RNG(红线实核)。
- 削弱判定总:无断言删除性削弱、无阈值放宽换绿(两处换代的旧判据各有等强度新判据或三面承载,且均系法条/机制强制)、无扫描面缩小(sweep 四组全带非空前置)、无换下层直调(改锚一处为卡①申报的受控例外)。
## 四、内部字段直查受控例外核对(逐条)
| 例外 | 直查行 | 理由注记核对 | 判定 |
|---|---|---|---|
| 卡①对照表行 3(测试改锚精确余量) | minesweeper_rules_test.gd :56/:89/:93-94 `_rules._safe_remaining()` | 对照表行 3 原文含「**受控例外注记**:精确余量无公开可观测面可钉(`clear_map_cleared` 仅 bool),理由随本表申报」——注记在对照表行内 | 通过 |
| 卡④ `_test_fog_gate` 直查 `_seal_layer.visible` | seal_mark_params_test.gd :45/:47/:49/:51(`u._seal_layer` 可见性与空判) | 卡面 §8 R4 判据列自身 prescribe「封印子件 `visible == false`」(fog_state/seal_on 均公开属性,唯一内部面=子件 visible);理由注记落测试件 :40-41 头注(「子件可见性无公开可观测面,卡面 R4 断言即 prescribe」) | 通过(注记位置备注:对照表行本体未带「受控例外」标签,卡面判据列即 prescribe+测试件注记承载) |
## 五、备案缺漏(零实体影响,不阻塞合并;处置建议随条)
1. **卡④ ui_input_probe case④b 断言换代的申报记录缺口**——旧纹理槽双分支断言(有盘纹理在槽/缺盘字形回退)随 tex_seal 机制退役被替换为 seal_on 落位断言。实体面合规:test-conventions §5.5 强制同生死摘除(留即假绿源)、新断言同入口同强度、执行绿(回执 03)。缺口在记录面:卡④ §8 削弱申报文本仍写「本批不删改任何既有断言」,与该换代字面冲突(§3 现状既列贴图退役,该换代为必然后果——卡面文本自身欠严密);实现报告亦未列此换代,申报记录只在提交信息 13d6bfbb。处置建议:本报告进实现报告收尾节(卡④ §13 义务)即为补记;后续同类批卡面削弱申报节应把「换代批旧验证约束同生死」列为预设条款。
2. **board_view.gd:77 悬空注释**——注释仍写「探针直读面零改动:读 `_palette.seal_tex`…」,所指成员已在本批删除,探针引用面亦已随批迁移,注释陈述已失实。卡②同族悬空注释修了 3 处并备案,卡④面这处未清未申报。零行为零断言影响(判据面=资产引用/常量别名/死槽,注释不在其列);grep 级判据不受污染(`TILE_SEAL_MARK|seal_tex` 命中仅此注释+battle_end_overlay 合法局部变量)。处置建议:并入下批最小工程改动或修复批顺手剥(一行注释)。
3. (观察,非缺漏)camp_esc_overlay.gd:8 注释提及 `MainEscFlow._on_return_to_menu` 旧私名——T1 底账已定性「历史名提及非私取面」,与缺漏 2 同族但已在案申报,不再列。
## 六、grep 取数附录(审计自跑取数,命令+结果)
以下均在 D:\code\g-plan2-iter52 执行(grep 含 .gd;另注处含 .tscn):
1. 六孤儿名零残留(.gd+.tscn,`\b名\b` 词边界):`has_effect_on`/`_bp_read_int`/`_find_token`/`has_open`/`set_feedback_state`/`stop_resolved` → 全部零命中。
2. 级联计数:`bp_read(` 剥定义=6;`_bp_strategy` 剥定义=1;`find_token`=curio_deck.gd:51 定义+curio_stop.gd:107/:229;`has_open_excluding_tags(` 剥定义=3;camp_scene_view `_apply_state(`=9 行(含定义);curio_stop `_resolved`=15;effect_engine `_triggers`=8;`.dispatch(`=80;curio_stop `_pending`=42 行。六文件+minesweeper_rules 逐函数引用粗扫(剥注释、引擎虚函数豁免)=零孤儿。
3. safe_remaining:`\.safe_remaining\(`(.gd+.tscn)=0;`_safe_remaining` 全仓=6(:101/:110/:56/:89/:93/:94)。
4. 卡③封装主张:六 B 文件 `root\._[a-zA-Z]`=0;standee_body `\bst\._|\bmo\._`=0;board_view `_hover_comp\._`=0;`UiKit\._[a-zA-Z]`(game/ 全 .gd,排除 ui_kit.gd)=0(ui_kit.gd 内亦 0);A1 三文件 `_map\._[a-zA-Z]`/`\bst\._[a-zA-Z]`=0;game/presentation 全目录 `\._[a-zA-Z]`(剔 self._ 与注释行)=0 行。
5. main.gd 计数:`^func [a-zA-Z]`=31+`static func build_adventure_params`=1,合计 32=基线键 32;ui_kit `^(static )?func [a-zA-Z]`=23=基线键 23。
6. 卡④贴图退役:`seal_mark.png`(game/ .gd)=恰 1(battle_end_overlay.gd:85);`TILE_SEAL_MARK|seal_tex`=3(battle_end_overlay.gd:85-87 局部变量合法在役+board_view.gd:77 注释);shader `Color8`=0;seal_mark 命中文件=7(cell_unit/board_view/seal_mark_layer/battle_end_overlay/cell_mark_overlay/run_all/params_test——前五为改名件与新件本体,后二为测试注册与守门件)。
7. 基线:`grep minesweeper_rules tools/gdstyle_baseline.txt`=0;基线 diff 仅 +2 键(main.gd=32、ui_kit=23);`python tools/gdstyle_gate.py`=「命中 7 条,基线内 7 条,基线外新违规 0 条,较登记值恶化 0 条/ok」。
8. diff 面:`git diff master...HEAD --name-only` 中 .tscn/.tres/data/ 与 settlement 测试件=零命中;53 文件合计;新增行 `randomize(|RandomNumberGenerator.new`=零命中。
## 七、闸回执核对(执行证据)
- 回执:game/tests/.gates/receipt.json——commit=fbf126d1(=分支最后一笔代码+产出物提交)、domain=code、scope=full、dirty_game=false、八闸(冒烟/系统/单元与集成/场景探针/渲染/色板/静态扫描/熵增)exit 全 0、all_green=true、changed_vs_baseline=[]、inherited_red=[]。
- 回执 commit 与分支尖(b4b1ee09=并入 master 的合并提交)差一笔;其间差异经逐文件实核全部为 master 侧内容(AGENTS.md/design 文档/闸名去编号批的 baseline.json 键名与 run_all.gd、system_test.gd、smoke_boot.gd 注释行/tools 脚本措辞)——**零断言面、零生产行为面差异**,回执绿态覆盖分支尖游戏码状态。回执内闸名沿用旧编号命名、合并带来的 baseline.json 已换代无编号键名——命名差属 master 侧闸名批时序,非回执内容问题。
- 中档不复跑最窄测试:本报告执行读数全部引回执;**合回后远端 CI 现查为终局执行证据**(tools/ci_check.sh 现查合回提交,判据=run 落定后的绿终局且跑闸步真跑过;零触发批不作绿证)。