iter33 卡② 独立验收审计通过(无缺漏,三条不阻塞例外注记:mn6 卡④补专项/mn10 登记粒度微瑕/mn13 契约5中间态合法)

This commit is contained in:
DKChan committed 2026-10-22 23:01:42 +08:00
1 parent 821a2eae82
commit 94f8614316
1 file changed
+84
+84
View File
@@ -189,3 +189,87 @@
### 卡③ 结论(终审)
**通过**——卡③ 选档界面新建批 14 行(sl1–sl14)全部通过(首轮未过记录保留于上,回炉事实=提交 `b673ced`)。独立验收审计合并前置达成。复审全程零 commit、`game/` 零残留、`git status` 仅本报告工作件。
## 卡② 主菜单三入口化批(6 钮 → 3 钮)
> 审计人:未参与卡② 实现的独立会话,只采信盘面证据与自跑实测,不采信任何报告的「已全绿」。
> 被审计对象:worktree `D:\code\g-plan2-iter33card2-menu`,分支 `iter33-card2-menu`,卡② 提交 `3661689a`+`93d0e679`+`5a39b116`+`821a2eae`,基线 `5c2a7bcf`(卡③ 合并态);区间内非本批改动(迭代34 卡④ 合并 `16a7ec80`、锻造工坊死链修 `4bc6b366`/`a10d15c7`)已按提交拓扑剔除,卡② 本体 diff 取 `a10d15c7..HEAD`(20 件:presentation 5+smoke 12+golden+pacing 单测+reports 3)。
> 审计材料:需求卡片 §7.1 对照表 mn1-mn14+§7.2 七条申报+§2 F10 全量位点表、实现报告卡② 节(实际对照表+变异表 A/B+已知中间态)、卡② 本体 diff、闸回执。
> 审计自跑:变异 B 注入→`screen_flow_probe` 红→还原→复绿全程实测(见②);另按改动域复跑最窄面与清点口径 grep(见各节)。
### ① 逐行核对表(mn1–mn14,对实现报告实际对照表逐行复核)
| # | 判定 | 依据(审计自查实录) |
|---|---|---|
| mn1 三钮在位 | 通过 | 断言在盘可 grep:冒烟 V2 三钮非空(`smoke_all.gd:162-163`,〔卡② mn1〕尾缀)+V2d 渲染面可见按钮计数==3(`:292-293`,5a39b116 强化件)。真实入口未绕过:`menu_screen.tscn` 真实实例化经 `UiAssembler.build_start_overlay` 构建后读句柄+渲染面递归枚举。变异 A 已执行(报告变异表 A+提交 5a39b116 提交信息在案)。 |
| mn2 四旧钮彻底撤出 | 通过 | V2d 四旧句柄零命中×4(`smoke_all.gd:297-299` 循环断言)+渲染面计数锚(接回钮在渲染面出现即计数红——句柄缝盲区已由变异 A 暴露并闭合)。句柄面 diff 核实:`menu_screen.gd` 撤 `lvbtn/resumebtn/campbtn/careerbtn` 四字段、增 `entersavebtn`,装配器返回字典同步换代。 |
| mn3 进入存档可达选档 | 通过 | `screen_flow_probe` 选档步在盘:`find_button(_start_overlay, "进入存档")` → `pressed.emit()`(真实按钮信号路径)→ 屏级互斥断言;钮缺失即 `_problems.append("[savesel] mn3 进入存档钮缺失")`(`screen_flow_probe.gd:165-172`,mn3 尾缀可 grep)。**审计实测变异 B 闭合**(见②-1):接线改连 `_camp_pres.open_camp()` → 5 处红含 `[savesel] sl10 屏级互斥失守`——与报告变异表 B 逐字一致。 |
| mn4 设置钮零行为变化 | 通过 | settingsbtn→`_open_settings` 接线 diff 核实零触碰(`main.gd:328`);V3g settings 模态段冒烟生命周期矩阵原样复跑(该分支 diff 零改动=纯复跑,申报形态即「复跑」,无削弱)。 |
| mn5 退出接线正确 | 通过 | quitbtn→`_quit_game` 接线 diff 核实零触碰(`main.gd:329`);对照面在盘:ui_click D1 二轮段「开始菜单有退出游戏钮+设置面无」双断言(`ui_click_probe.gd:288-292`)复跑。 |
| mn6 断点确认主菜单零残留 | 通过(例外见注) | diff 核实两处摘除:`_start_adventure_from_menu` 确认分支整段删除(直启形态)+`_on_confirm_accepted` 分派器 `"new_adventure"` 臂退役(match 机制保留——V5 口径)。ui_struct 既有 confirm 采样在盘复跑(`ui_struct_probe.gd:100-103`)。注:本行撤销证明依赖的 ui_click 断点段原断言已按 §7.2 申报移交卡④(申报内删除)——残留拦截力由 mn2 四钮零命中+mn10 直调直启绿(直启不经确认框)组合承接,属间接面非专项断言;卡④ 落地后须补大门侧专项。 |
| mn7 `_refresh_resume_button` 删除+消费点清零 | 通过 | 净删除 diff 核实:`main.gd` 函数体+五处调用+`camp_flow_context` 载体字段/构造参+`camp_shop_presenter` 三处+`probe_ui_util` 参数+`pacing_queue_test` 一处全清。**F10 表尾清点口径全仓 grep 复核**(口径照卡片):`_refresh_resume_button` 零命中;其余命中逐条归类——`start_overlay`(未退役件,合法在役)、两函数定义(契约 5 保留)、直调位点(全部为批前既有或已登记中间态,见 mn10)、注释引述与 mn2 零命中断言字面量(`smoke_all.gd:297`)——**表外新位点:零**。 |
| mn8 废止断言族有改写承接 | 通过 | 逐族核对 diff:V2 六钮断言→三钮改写+〔mn1〕尾缀;V2d 续玩钮族→三钮在位+四旧零命中+渲染锚承接(卡① sv2 boot 态断言保留);V3g campbtn 直呼→进档开层新路径(`smoke_all.gd:411-449`);V3i 钮断言两行摘除+`_stage_faces` 的 `resume_vis` 键退役(键处理分支同步删)——逐族均有承接断言顶上,非裸删。生命周期其余阶段断言键 diff 核实零删改。 |
| mn9 营地/生涯入口探针段改走新路径 | 通过 | 五件营地段全改 `open_camp_via_savesel` 新路径(ui_probe/ui_struct/screen_flow/shot/ui_click),该助手驱动=选档层新档钮 `pressed.emit()` 真实信号路径(`probe_ui_util.gd:126-137`),非绕过直调;槽模板注入隔离命名空间(真实档红线保持)。生涯段改函数直调——契约 5 中间态(登记见 mn10 注)。 |
| mn10 冒险段探针直调中间态 | 通过(附注) | 契约 5 形态核实:两函数保留仅摘接线。直调位点全仓 grep 逐条对账——**本批新转直调 4 处全部已登记**(screen_flow 冒险步 `:181`、shot 关卡段 `:135`、fx_shot `:36`、t17_defer `:29`,实现报告「已知中间态」逐位点列名);批前既有直调位点(ui_input `:35`、layout `:27`、ui_tune `:96`、smoke ×4 `:338/:465/:620/:650`、pacing_queue `:32`、ui_struct 冒险簇 `:115`、ui_probe `:59`、ui_click 冒险段 `:323`)diff 核实零触碰或仅随 mn7 摘刷钮行。注(登记粒度微瑕,不判缺漏):生涯直调 3 处(ui_struct `:57`/ui_click `:296`/shot `:105`)与 smoke `_resume_from_menu` `:497` 为函数级登记(「已知中间态」明列 `_open_career`/`_resume_from_menu` 两函数保留+mn9 行「生涯=函数直调中间态」),未逐位点列名——实质已登记、粒度粗于冒险段。 |
| mn11 组帽撤除+左列几何不破 | 通过 | diff 核实两枚 overline 整行删除(「── 冒 险 ──」「── 营地与系统 ──」);ui_struct `_audit("start")`(`:31`)+`_start_columns_contract`(`:32`/`:675`)在盘复跑,真实菜单构建后几何审计。组帽撤除处置与 §9 第 1 条一致且追认单留痕(reports/iter33-代拍板追认单卡② 节在盘)。F12 两处注释引述(main.gd:289、career_overlay.gd:3)按卡片「实施本体内可自理」保留。 |
| mn12 menu golden 重制 | 通过 | 提交 `93d0e679` 提交信息完整记载触发原因(主菜单钮集换代)与重制入口(`golden_baseline_refresh --menu` 重采);二进制 diff 仅 `menu_boot.png` 一件(319500→319749 字节);`tools/golden_baseline_refresh.sh` 与 `tools/render_gate.sh` diff 核实零触碰(只跑不改——契约 6);复闸绿以回执 05 渲染闸 green 为准(fx/shot 探针窗口化形态,headless 直跑属预期 harness 形态不另直跑)。 |
| mn13 pacing_queue 套件连带改造 | 通过(例外见注) | diff 核实仅摘 `_refresh_resume_button()` 一行(mn7 连带);`_start_adventure_from_menu` 直调保留。注:卡片 mn13 改动列写「去掉 _refresh_resume_button 与菜单直调依赖」,直调依赖未去掉——但契约 5(红线)+§9.4 白名单明定卡④ 未到位批内冒险段探针维直调合法,实现报告 mn13 行已如实对账「钮依赖行摘除(宿主链驱动保持)」并登记进「已知中间态」(pacing_queue 位点在列)——按契约优先于卡片行文判通过,非隐瞒偏差。 |
| mn14 反哺点清单 | 通过 | `reports/iter33-反哺点-2026-10-21.md` 卡② 节在盘,第 11-16 条全覆盖 §5:生涯.md/camp.md/08/体验验证清单/art-bible :433 excision(禁整行删口径在案)/待办清单+roadmap,各条有现行陈述/应改成/依据。件核不产码,合规。 |
### ② 撤销证明抽查记录(审计自跑实测)
**②-1 变异 B 复现(报告变异表 B,实测全程)**
- 注入:`game/presentation/main.gd:318` `_menu_screen.entersavebtn.pressed.connect(_open_save_select)` → `_menu_screen.entersavebtn.pressed.connect(func() -> void: _camp_pres.open_camp())`(进入存档钮接错层——mn3 行申报的变异本体)。
- `timeout 120 Godot_console.exe --headless --path . res://smoke/screen_flow_probe.tscn` → **FAIL — 5 处问题**:`[savesel] sl10 开层后屏级互斥失守(选档=false)`+⑤冒险内切换两条(营地/冒险同屏)+⑦终局→菜单两条(菜单/营地同屏)——与报告变异表 B「screen_flow 5 处红(sl10 屏级互斥失守+营地/冒险同屏)」一致,**mn3 断言拦截力实测成立**。
- `git checkout -- game/presentation/main.gd` → `git status --porcelain` 空(零残留)→ 复跑 **PASS — 六步主流程+回退路径全绿**。注入→红→还原→复绿闭环。
- 附核:探针全程走 `isolate_save` 隔离面,真实档 `user://save.json` 零触碰(探针纪律在案)。
**②-2 变异 A 处置历史核对(盘面凭据,未重放)**
- 首轮零红证据:报告变异表 A 原文「首轮 ui_struct/冒烟均零红——句柄缝盲区暴露(V2 只查三钮在位、V2d 只查句柄)」。
- 伴生强化实证:提交 `5a39b116` diff 全量=`smoke_all.gd` +10 行零删——`_count_visible_buttons` 递归助手+渲染面计数==3 一条 check,**纯收紧**(只增断言不改旧断言不放宽阈值),提交信息同步记载盲区成因与两变异闭合实况。
- 强化后拦截力推演:接回钮只要可见即计数 >3 必红,与句柄面无关——句柄缝盲区在锚面上不可再穿透。m-A 处置链(零红→补锚→复红)凭据齐、强化纯收紧,判成立。
### ③ 测试削弱检查表(卡② 本体 diff 全部删改逐处 vs 卡片 §7.2 七条申报)
| diff 改动处 | 定性 | vs §7.2 申报 |
|---|---|---|
| `smoke_all.gd` V2d 续玩钮族(旧 :266-290 六断言+boot 态断言改写+`_refresh_resume_button` 调用三处) | 既有断言废止/改写 | **申报内**(§7.2 行 1「钮已撤判据失去对象——废止」)。承接断言在盘:三钮在位+四旧零命中+渲染锚+卡① sv2 boot 态断言保留;卡① V2d-1 改写批内已申报「卡② mn8 再承接」——两代申报链闭合。 |
| `smoke_all.gd` V3g campbtn 直呼(旧 :322/:326/:411-415) | 驱动路径换代 | **申报内**(行 2)。新路径=选档层新档钮真实信号→进档开营地,非直调开层——入口真实性与卡③ Q3 乙落点一致;camp 段后新增选档层闭合/attach 恢复/槽文件清理三步为路径换代伴生机械(非断言削弱)。 |
| `smoke_all.gd` V3i 阶段⑨(旧 :470-478/:565-567) | 钮断言摘除+`resume_vis` 键退役 | **申报内**(行 3)。`_resume_from_menu` 全链断言保留(run_scope 换代+is_inside_tree),只摘钮可见性断言与 `_stage_faces` 键;生命周期其余阶段 diff 核实零删改。 |
| `ui_click_probe.gd` resume_btn0 两断言(旧 :319-324,卡片 :224-228 行号漂移) | 既有断言删除 | **申报内**(行 4 前半——F10 表明列「resumebtn 断言+断点段」双位点)。行号漂移成因=卡③ savesel 段插入使基线行号后移,位点实质对应无疑义。 |
| `ui_click_probe.gd` 断点段②③(旧 :555-616 约 73 行,卡片 :462-518) | 既有断言段删除 | **申报内**(行 4,约 80 行口径吻合)。两头登记核实:卡② 侧=卡片 T2+§7.2+实现报告「已知中间态」明列「卡④ 大门 T5 接收两头登记禁静默删除」;卡④ 接收侧=卡④ 未重立,登记义务随其重立卡兑现(现状为申报明文的待办形态,非静默删除)。段①(战斗收口断点写盘断言)保留在盘。 |
| `shot_probe.gd` career/camp 段(旧 :103-133) | 生涯改直调+营地改新路径 | **申报内**(行 5「归卡④」的卡② 侧处置+行 7)。**七屏链存在性自检未降档**:`:192`「七件存在且非零字节」自检段 diff 零触碰;career 截图段保留(直调驱动)。 |
| `ui_struct_probe.gd` resume 专项(旧 :86/:163-183) | 刷钮行摘除 | **申报内**(行 6)。`_resume_from_menu` 专项链与结构断言保留,仅摘 `_refresh_resume_button()` 调用(mn7 净删除连带)。 |
| 冒险段探针入口路径断言(fx_shot/t17/screen_flow④/shot③) | 降级为函数直调 | **申报内**(行 7)。逐位点登记核实(见①-mn10),无「为凑绿改假路径」形态——直调目标=`_start_adventure_from_menu` 本体,下游断言(关卡画面出现/停点出图/冒险屏互斥)原样保留。 |
| `probe_ui_util.gd` `isolate_save` 签名换代+`open_camp_via_savesel` 新增+ui_click camp 段 swap=false→true | 测试基建换代 | 非断言削弱:refresh_resume 参数随 mn7 退役(参数槽位语义由 swap_save 承接,全部调用点逐一同步换代——diff 逐处核对无错位);swap 翻转为写盘路径与槽文件断言同源化(注释在案),判据面对齐非放松。 |
| `pacing_queue_test.gd` 删 1 行+`ui_probe.gd`/`ui_struct_probe.gd` 营地/生涯段改写 | 申报内改写 | 见①-mn7/mn9/mn10 对应行,申报面内。 |
**其余既有断言零删改核验**:卡② 本体 diff 逐 hunk 清点——ui_probe 秘宝匣 12 行断言原样在盘(`:48-49`);smoke 生命周期其余阶段断言键零删改;三探针既有段(sl1-sl9、设置面段、D1 段、ui_struct 各 `_audit` 面)零触碰;golden 两工具零触碰。**除 §7.2 申报面外,未发现任何删断言、放宽阈值、缩小扫描面或真实入口换下层直调**。
### ④ 回执核验(`game/tests/.gates/receipt.json`)
- `commit`=`821a2eae82664ab51fe00c6b6e639f55b60a0660`=HEAD(`821a2eae`)✓
- `all_green`=**true** ✓;`domain`=**"full"** ✓(本批同触 game/ 与文档面,全量档选档正确)
- 闸序:01 冒烟全量/02 单元套件/03 探针 --click/04 探针 --full/05 渲染闸(fx_shot/shot 两窗口化探针的绿以本闸记录为准,headless 直跑挂起属预期 harness 形态未直跑)/06-10 各文档闸全 green;11 回放确定性对拍 SKIP(SKIP 件非红);`quick_mode`=false;回执时间戳(2026-10-22T22:49:41+08:00)晚于末提交(22:41:58)=修后重闸实测。
- 读数对照:实现报告冒烟 1213/0(+12 与 V2/V2d/渲染锚新增量吻合);单元 40 套件(+2 系迭代34 并行批合入非本批新增——diff 核实 `level_map_*_test` 两件属 16a7ec80)。
### ⑤ V5 专项(断点确认零残留)
- 全仓 grep「开新冒险将覆盖旧断点」:`game/` **零命中**;命中仅两处非码面——`待办清单.md:648`(2026-10-18 卫生批历史登记条,记述批前缺陷实况)+`reports/需求卡片-…md` F4 行(申报本体)。弹窗文案随消费方退役已不在任何生产代码。
- 分派器机制保留核实:`_on_confirm_accepted` match 机制在盘(卡④ 第三消费方接入面),`"delete_slot"` 臂在役(卡③ 删档确认);`"new_adventure"` 臂整段退役(diff 在案)——代码与实现报告「机制保留、消费方退役」口径一致。
- `rng_service.new_adventure`/`adventure_runner` 等同名散点为 RNG 会话入口,与确认消费方无关(grep 逐条判别非残留)。
- 主菜单写档路径清零佐证:mn2 四钮零命中(无入口)+`_start_adventure_from_menu` 直启形态(无确认链)+`open_camp_via_savesel` 写盘只落隔离槽文件——主菜单无任何写档路径(契约 4)。
### 卡② 结论
**通过**——卡② 主菜单三入口化批 14 行(mn1–mn14)全部通过(mn6/mn10/mn13 三行附例外注记,均有申报或契约依据,非缺漏)。变异 B 审计实测闭合(注入→5 红→还原→复绿),变异 A 处置链凭据齐且强化纯收紧;§7.2 七条申报外的既有断言零删改;回执 commit/all_green/domain 三项全对上。独立验收审计合并前置达成。
**例外注记汇总(不阻塞合并,随卡④ 落地消解)**:
1. mn6:断点确认残留的拦截力现由 mn2+mn10 组合间接承接,卡④ 大门落地时应补大门侧专项残留断言(该断言原属卡④ 接收清单,两头登记在案)。
2. mn10:生涯直调 3 处与 smoke `_resume_from_menu` 1 处为函数级登记、未逐位点列名——登记粒度微瑕,实质已登记。
3. mn13:卡片「去掉菜单直调依赖」字面未兑现,按契约 5/§9.4 判中间态合法,报告已如实对账。
审计全程零 commit;变异注入经 `git checkout` 精确还原,`game/` 零残留(`git status` 仅本报告工作件)。