From 5f5e7a0029565d10cf9e1097d9053c4595c80814 Mon Sep 17 00:00:00 2001 From: DKChan <524912269@qq.com> Date: Mon, 2 Nov 2026 07:30:34 +0800 Subject: [PATCH] =?UTF-8?q?iter49-=E6=94=B6=E5=B0=BE=EF=BC=9Aiter49?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=8A=A5=E5=91=8A+=E5=8F=8D=E5=93=BA?= =?UTF-8?q?=E7=82=B9=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reports/iter49-反哺点-2026-11-02.md | 32 ++++++ reports/iter49-实现报告-2026-11-02.md | 101 ++++++++++++++++++ reports/iter49-验收审计-2026-11-02.md | 146 ++++++++++++++++++++++++++ 3 files changed, 279 insertions(+) create mode 100644 reports/iter49-反哺点-2026-11-02.md create mode 100644 reports/iter49-实现报告-2026-11-02.md create mode 100644 reports/iter49-验收审计-2026-11-02.md diff --git a/reports/iter49-反哺点-2026-11-02.md b/reports/iter49-反哺点-2026-11-02.md new file mode 100644 index 00000000..2f637e86 --- /dev/null +++ b/reports/iter49-反哺点-2026-11-02.md @@ -0,0 +1,32 @@ +# 迭代 49 反哺点清单(2026-11-02) + +> 实现批产出物:要写进 `design/` 与根流程清单的点逐条列落点(哪个文件哪一节、改成什么、依据是什么),由用户裁决后经文档批(doc-design 技能)写入并清条。实现批禁写 `design/` 与根规则文件。 + +## A. 卡①效果端口与掷格分件 + +| # | 落点 | 改成什么 | 依据 | +|---|---|---|---| +| A1 | `design/engineering/architecture/architecture.md`「战斗编排域拆件定稿」节轴戊两条+功能层 B4 行/BattleFxHost 行/damage_controller 行/action_economy 行/reward_economy 行 | 「实现批建件」待建注记换代为已建件现状:EffectPort(`game/core/effect_port.gd`,六 Callable 路由、bind_port 组装期转注、闭面五键 biz_fact、未绑零扰动缺省)与 RewardRoller(`game/core/reward_roller.gd`,roll 批束四键 mapping/power_roll/clear_identity/clear_power、选行算子 `_weighted_pick_row` 返表行、fatal 经构造 Callable 链);B4 公开面 weighted_pick 退役(返行选行算子迁掷格件)、roll_board 装配序(守卫→复位→委托→收纳→ready)、类变量实数(economy 11、damage 12、action 10、fx_host 15、orchestrator 15) | 本批提交 848723b5 实况 | +| A2 | `design/gdd/术语表.md` | 「效果端口件」「掷格件」两机制名是否登记由文档批裁决(首现定义在 architecture 轴戊条款) | 卡① §6 同步面声明 | +| A3 | `tools/static_scan.sh` S8 清单头注 | 「共 10 文件」计数句与实列(14 文件)失符——入批前存量漂移,随批订正 | 本批件核发现(实现报告 §七) | + +## B. 卡②模态句柄分域 + +| # | 落点 | 改成什么 | 依据 | +|---|---|---|---| +| B1 | `design/engineering/architecture/architecture.md` ui_registry 行(v1.30 行号漂移,以内容锚「三域句柄容器」定位) | 换代为「三域句柄容器+模态编排件直驻」:screens/battle/modals+flow(ModalFlow 自 UiModals 升格 UiRegistry 直驻)+register_layer 迁驻注册面;类变量实数 UiRegistry 3→4、UiModals 14→3(run/menu/camp 三子容器纯字段) | 本批提交 bc5dd4ec 实况 | +| B2 | 同上 UiCampModals 行 | 「ui_modals 平铺面收窄」现状化为平铺面清零(分域纪律册级化——12 平铺句柄全数迁 run/menu 两子容器) | 同上 | +| B3 | 同上 ModalFlow 行(「实例随 UiModals 容器构造即建」句) | 换代为「随 UiRegistry 构造建立」(构造时点等价——注册面构造点先于装配) | 同上 | + +## C. 卡③营地五界面真窗口化 + +| # | 落点 | 改成什么 | 依据 | +|---|---|---|---| +| C1 | `design/gdd/ux/camp.md`「叠层与开合」节 | 补实装注记:五窗统一居中定尺寸窗壳起点 720×640 已落码(窗几何单点=CampSubViewBase.WINDOW_SIZE、窗板石板皮、遮罩复用模态遮罩件现值 0.6);样张目检校准意见回填终值(观感校准=普通设计决策) | 本批提交 1f0a8bd3 实况+camp.md v2.5 定稿值 | +| C2 | `design/gdd/08-Alpha版本标准.md`「三·界面」营地行 | 在役陈述补窗壳形态注记(营地五功能页=居中定尺寸功能窗口、场景根留底、窗内滚动) | 卡③ §6 同步面 | +| C3 | `体验验证清单.md` | 登记目检项三条:①五窗观感与场景可见度样张判定(720×640 起点/遮罩 0.6 观感校准)②窗内滚动手感(天赋树长列表/生涯页)③(迭代 48 批后无新增卡①卡②目检项——行为零变化) | 实现报告 §六(真人检测只登记不阻塞) | +| C4 | `design/gdd/systems/跨局循环/生涯.md` :72 | 核查结论记档:现行「营地场景图+五功能窗口形态」陈述与本批一致,零冲突零义务 | 卡③ §6 零义务条(仅记录) | + +## D. 退役提醒(吸收即死) + +本清单各条经文档批写入后逐条清除;本文件与实现报告、三张需求卡片按「证据只留最新」在批后收尾(batch-closure)退役。 diff --git a/reports/iter49-实现报告-2026-11-02.md b/reports/iter49-实现报告-2026-11-02.md new file mode 100644 index 00000000..8e1144c1 --- /dev/null +++ b/reports/iter49-实现报告-2026-11-02.md @@ -0,0 +1,101 @@ +# 迭代 49 实现报告(2026-11-02) + +> 批性质=代码实现批(三卡:效果端口与掷格分件+模态句柄分域+营地五界面真窗口化)。工作区 `g-plan2-iter49`(分支 `iter49`),定义面(roadmap/待办清单/三卡 v1.1)已在 HEAD 预入库、零搬运提交。卡序=核心域先行(端口分件→句柄分域→窗口化),整迭代单工作区串行。 + +## 一、各卡状态 + +| 卡 | 终态提交 | 状态 | 里程碑步闸 | +|---|---|---|---| +| ①效果端口与掷格分件 | 848723b5 | 完成(T0–T4 全落) | `--code` 全绿(红件修复后复验) | +| ②模态句柄分域 | 53c1536c | 完成(T0–T2 全落) | `--code` 全绿(S10 头注修正后复验) | +| ③营地五界面真窗口化 | 1f0a8bd3+2d325d3e(件核) | 完成(T0–T3 全落) | `--code` 全绿(7 闸全绿) | + +## 二、S13 读数对照(改前 → 改后,卡① §14 预算全数达成) + +| 文件 | 类变量 | 公开方法 | 判定 | +|---|---|---|---| +| battle_orchestrator.gd | 15 → 15 | 14 → 14 | 持平(硬预期)✓ | +| battle_fx_host.gd | 14 → 15 | 12 → 16 | 贴顶 ≤15 ✓(+facts_inject 一成员+四法) | +| damage_controller.gd | 15 → 12 | 9 → 9 | 只降 ✓(set_fx 退役/bind_port 增补相抵) | +| action_economy.gd | 11 → 10(plain 口径;raw 15 含 4 属性访问器) | 15 → 15 | 只降 ✓ | +| reward_economy.gd | 15 → 11 | 12 → 9 | 只降 ✓(掷格五成员十二函数三常量迁出+roller 增补) | +| ui_modals.gd(卡②) | 14 → 3 | 1 → 0 | 只降 ✓(转纯字段容器) | +| ui_registry.gd(卡②) | 3 → 4 | 2 → 3 | 上限内不产新键 ✓ | +| 新件三查 | effect_port 6/6、reward_roller 2/6、ui_run_modals 0/6、ui_menu_modals 0/6 | — | 全默认阈值内 ✓;gdstyle 基线外新违规 0(roll 局部变量 12→10 内联收敛后) | + +## 三、实际改动—验收对照表 + +### 卡①(断言尾缀〔效果端口与掷格分件批 V1/V2/V3〕,载体 `game/tests/unit/battle_settlement/effect_port_test.gd`) + +| 需求点 | 验收断言(文件:行) | 真实入口 | 结果 | +|---|---|---|---| +| R1 端口单实例与真实发射路由 | effect_port_test.gd:66(端口同一性——内部字段直查受控例外:端口同一性无公开查询面,对照表行 1 注明);:69-79(attack_commit 经真实回合命中可观测:蓄力层预置 3→攻击行在流→层账 3→0 全处理→delta 读数非零) | `BattleOrchestrator.begin_battle()` 装配链+真实停手回合(settle_batch 同步五段) | 绿(15/15) | +| R2 业务类零引擎直连 | effect_port_test.gd:89-95(两业务文件全文零 `EffectEngine`/`EffectContext` token,扫描面非空前置在案) | 测试直读源码(源码契约锚惯例) | 绿 | +| R3 伤害域事实面闭集 | effect_port_test.gd:107-137(阳性:hp_ratio 载荷 when→承伤减量恰 1;阴性:battle_index 不答→零减量;合成行 effect 段逐字抄现役铁壁 shield 行、订阅面换代独占) | `DamageController.flush_submit()` board_flat_hero 真实单据流 | 绿 | +| R4 端口接线时序与入站路由等价 | 既有套件照跑:refresh_feats_test/effect_words_t1_test/adventure_feats_test(原判据零改) | 真实玩法路径 | 绿 | +| R5 掷格件建件与摇号等价 | 既有 board_gen_reward_test 照跑(全 API);round_flow EV 锚+事件流逐位回放 134 检查 | `begin_battle()` install 链 roll_board 恰一次 | 绿 | +| R6 economy 收纳与键账只降不升 | T3 读数对账(15→11/12→9,见 §二)+既有受理面套件照跑 | 既有受理 API | 绿 | +| R7 装板域与编排域改址 | 既有 variant_placement_test 照跑(白盒指址换代 18 行 22 处、判据零删改) | 装板摇号链 | 绿 | +| R8 行为零变化总证 | round_flow_skill_pool_test 134 检查全绿(EV 锚+逐位回放 ×2 关) | 全战斗回放 | 绿 | +| R9 闸清单随动 | static_scan.sh S7_B1_SET/S8_FILES 各增两新件、B4 符号清单 weighted_pick 行删除;run_all.gd manifest 登记;代码域闸全绿 | 静态扫描域闸 | 绿 | + +### 卡②(断言尾缀〔句柄分域批 V1〕,载体 `game/probe/ui_struct_probe.gd` _modal_registry_contract 段尾 :606-625) + +| 需求点 | 验收断言(文件:行) | 真实入口 | 结果 | +|---|---|---|---| +| R1 局内冒险域六件抽容器 | ui_struct_probe.gd:610-613(run 六件经 `modals.run.*` 逐件非 null) | 真实实例化主场景 `_ready` 装配→registry 合同段 | 绿 | +| R2 菜单与跨语境域六件抽容器 | ui_struct_probe.gd:614-616(menu 六件逐件非 null) | 同上 | 绿 | +| R3 平铺面清零+编排口升格+登记口迁驻 | ui_struct_probe.gd:617-625(V1b 12 件 get() 逐件 null+V1c `ui.flow` 在座且 modals 无 flow);S13 静态判据 14→3/3→4(gdstyle 闸) | 同上 | 绿 | +| R4 全仓寻址换代行为零变化 | 既有断言群改址照跑:smoke 15 检查/system_test 69 检查/探针族全绿/presentation 17 套件(原判据零改,theme_projection :719 期望串两侧一致换代已申报) | 真实开机路径→真实输入/信号路径 | 绿 | +| R5 登记册合同序不破 | ui_struct_probe ①②③④段(装配生命批 V1)改址照跑绿 | 同上 | 绿 | +| R6 诊断转储接线断言字面换代 | theme_projection_test.gd:719 照跑绿(V6 段) | run_all presentation 套件 | 绿 | + +全仓旧形零残留:`grep -rnE "modals\.flow|modals\.(12 平铺名)" --include=*.gd game` 零命中(唯一命中=ui_struct_probe.gd:624 V1c 断言消息字面,非寻址代码)。 + +### 卡③(断言尾缀〔窗口化批 V1–V8〕,载体 `game/probe/screen_flow_probe.gd` _step_camp_window_shell :298-455) + +| 需求点 | 验收断言(文件:行) | 真实入口 | 结果 | +|---|---|---|---| +| 四窗统一窗壳 720×640 起点居中 | screen_flow_probe.gd:342(V1 四窗窗板 global_rect ≈(280,80,720,640) 容差 0.01) | 选档层进档→场景点选 `object_pressed` 真实信号路由 | 绿 | +| 窗明显小于屏+场景根留底 | :345-349(V2 camp.scene.visible+四边距 ≥80px) | 同上 | 绿 | +| 遮罩 0.6 回归 | :352-357(V3 遮罩 ColorRect alpha≈0.6+全屏) | 同上 | 绿 | +| 各窗关闭钮回归 | :324-331 与 :432-439(V4 四窗「返回营地」/生涯「返回」真实 pressed→窗隐+场景根留底) | 窗内真实 Button 信号 | 绿 | +| 五窗互斥单开回归 | :362-381(V5a 逐窗五窗计数==1+V5b 树窗开态推真实鼠标点零点穿) | 同上+push_input | 绿 | +| ESC 优先序回归 | :388-399(V6 生涯窗开态 Esc 先关窗、浮窗不唤起) | push_input 真实 Esc 键 | 绿 | +| 内容超高窗内滚动 | :405-428(V7 加长行册喂入后窗板 rect 仍等值+内容实高>滚动视口) | `object_pressed(&"dummy")`+`refresh_camp` 真实投喂 | 绿 | +| 生涯页同壳同形态 | :433-451(V8 生涯窗板同几何+「返回」在位+纵向 EXPAND_FILL 滚动面);theme_projection_test 全件照跑绿 | 笔记本点选路由;单元侧 `open_career()` | 绿 | + +shot_probe 窄验:exit 0;shot_career.png 通用判据读数 std=70.2(阈 ≥8)、唯一色数 157(阈 ≥40)、尺寸 1280×800——生涯窗壳形态下双达标,读数记档盯 CI。 + +## 四、实现决定记录(超白名单事项) + +1. **int(null) 构造拒(卡①)**:卡内断言「int(null)=0/bool(null)=false」在本引擎(4.7.2)不成立——`int()` 拒 null 构造(SCRIPT ERROR: Nonexistent 'int' constructor)。三调用点(open_ticket dig_streak 载荷键/rider_tier_bonus/rider_tier_crit 读)改 `or 0`/`or false` 空值合并:合法值域(非负 int/bool)上与「缺省 0/false」逐位等价。撤销方式=还原为直包 int()/bool()(会红)。代价:无(缺省语义逐位同,V1-V3 与全量闸为主证)。 +2. **V8 字符串 Callable 硬零闸(卡①)**:effect_port 组建初版用 `Callable(self, "…")` 六枚——source_guard_test V8(产品码字符串 Callable 零命中,迭代 27 换装闸)红。改方法直引用形态(`"emit_cb": fx_emit_biz`),与 bundle emit_cb/facts_cb 既有接线同型。撤销方式=无(直引用即既有形态)。 +3. **roll() 局部变量预算(卡①)**:迁移后 roll() 12 局部(max 10,gdstyle 基线外新键)——清图选行与区间行查表两处临时内联,randi_range 求值位置不动、取号序与取号次数零变化(round_flow 逐位回放主证)。撤销方式=还原临时变量(会撞闸)。代价:行查表达式三连读(同一 dict 两次下标,无行为差)。 +4. **定尺寸窗禁单行撑宽的标签适配(卡③)**:career hint 与行值标签实测单行 min 宽(hint ≈766px/「各关完成次数」值 742px)把窗板撑到 798——补 `AUTOWRAP_WORD_SMART`+横向 EXPAND_FILL(短值视觉零变,长值窗内换行)。属窗几何契约(720×640 不随内容涨)的伴随适配,非内容重排。撤销方式=去 autowrap(V8 立红)。 +5. **V6/V8 测序前置清窗(卡③测试侧)**:模态栈语义=open 隐上方层+close 恢复——信号直发轮转给 board 层留遮挡账,钮关树窗把 board 复原出双窗态;真实 UI 中生涯入口只在无窗态可达(遮罩挡场景点选,V5b 钉死)。V6/V8 前置改经真实钮逐窗清账(_close_all_windows),不测不可达态。撤销方式=无(测试时序修正,非判据改)。 +6. 其余全部按卡执行(端口注入 Callable 束/bind_port 时点/闭面五键/选行算子返表行/窗板石板皮/WINDOW_SIZE 单点等)——零超卡裁断。 + +## 五、T0 复核结论(卡① F1-F14) + +11 条全符;三处纯引用漂移(不改设计前提,未停卡):F5 掷格面行号成簇漂移+phase/is_mapped 引用互换(成员清单与计数全证实);F11 卡内枚举漏列 feats.tres:633 dig_stop 订阅行 when fact=ap_left——ap_left 由 dig_stop 载荷携带(:178),payload 同名优先解析,事实回调不触,统一闭面零观测差结论经本会话逐行复核成立;F13 gdstyle 基线 5 键实际 :8-12。 + +## 六、实机目检总清单(真人检测只登记不阻塞) + +1. 营地五窗观感与场景可见度样张判定(窗 720×640 起点/遮罩 0.6 观感校准意见)。 +2. 窗内滚动手感(天赋树长列表/生涯页)。 +3. 模态开合走查由既有探针族覆盖(卡②登记句;零新增目检项)。 + +登记面=体验验证清单(归文档批随反哺入册),不阻塞合并。 + +## 七、遗留读数义务与观测面局限 + +- shot_career 通用判据读数(std=70.2/色数 157)随 CI 渲染闸复验盯守。 +- 卡③合同表零改动(红线 1)判据为静态:LAYER_CONTRACT 数据块 diff 零行变更由独立验收审计核对(观测面局限申报,非撤销类取证)。 +- static_scan.sh S8 清单注释「共 10 文件」为入批前存量漂移(实列 13→今 14),未属本批申报面,未顺手改。 + +## 八、产出物与审计 + +- 反哺点清单:`reports/iter49-反哺点-2026-11-02.md`(architecture/camp.md/08-Alpha/术语表/体验验证清单)。 +- 独立验收审计:`reports/iter49-验收审计-2026-11-02.md`(未参与实现的子代理执行;未过不得合并)。 +- 能力清单核对:三卡能力行名与实际落地测试名一致(effect_port_test 三函数实名/ui_struct_probe._modal_registry_contract 实名/screen_flow_probe._step_camp_window_shell 实名)——零回表。 diff --git a/reports/iter49-验收审计-2026-11-02.md b/reports/iter49-验收审计-2026-11-02.md new file mode 100644 index 00000000..84e4039a --- /dev/null +++ b/reports/iter49-验收审计-2026-11-02.md @@ -0,0 +1,146 @@ +# 迭代 49 独立验收审计(2026-11-02) + +> **接收方**:iter49 合并门(合回前独立验收审计——test-conventions §8.7;未过不得合并)。 +> **审计员**:未参与实现的独立子代理(迭代 loop 内启动)。只读审计+最窄抽查跑批,除本报告外零改任何文件。 +> **审计输入**:三卡 v1.1「验证闸(改动—验收对照表)」节、`reports/iter49-实现报告-2026-11-02.md` 实际对照表、分支 diff(`git diff master...iter49`,HEAD=52d87309,48 文件 +1553/−878)、测试文件实况、闸回执 `game/tests/.gates/receipt.json`。 + +## 结论先行 + +**通过=可合并。** 缺漏 0;例外 1(卡① 断言消息批名尾缀形态,依据在案,详见 §一卡① 末行与 §七)。 + +--- + +## 一、逐行核对(三卡对照表 ↔ 实现报告 ↔ 测试实况) + +### 卡① 效果端口与掷格分件批(载体 `game/tests/unit/battle_settlement/effect_port_test.gd`,129 行实读) + +| 对照表行 | 测试实况 | 真实入口核验 | 状态 | +|---|---|---|---| +| R1 端口单实例与真实发射路由 | `_smoke_effect_port_wiring`(:55-83)在库;端口同一性断言 :66;attack_commit 命中链 :68-83(蓄力层预置→攻击行在流→层账 3→0→同种子对照跑 delta≥1) | `BattleOrchestrator.new(_db, rng)`+`begin_battle`+`settle_batch([{"action":"stop"}])` 真实装配链与停手回合——**非裸 EffectEngine 直调**;文件内 EffectEngine 直调仅两处夹具预置/读数(:68/:74,注释注明与 refresh_feats_test V8 同法的调试注入,发射路径全经端口) | 通过 | +| R2 业务类零引擎直连 | `_test_business_classes_engine_free`(:88-94)源码锚直读两业务文件,扫描面非空前置在案(:92) | 测试直读源码(源码契约锚惯例) | 通过 | +| R3 伤害域事实面闭集 | `_test_biz_fact_face_closed`(:99-129)阳性 hp_ratio 载荷 when→承伤减量恰 1(:122);阴性 battle_index→零减量(:129);合成行 effect 段逐字抄现役铁壁行、rebuild 独占订阅面(:104-116) | `DamageController.open_ticket`+`flush_submit` board_flat_hero 真实单据流 | 通过 | +| R4 接线时序与路由等价 | 既有 refresh_feats_test/effect_words_t1_test/adventure_feats_test 照跑,原判据零改(diff 核清) | 真实玩法路径(CI gate 02 全绿) | 通过 | +| R5 掷格件建件与摇号等价 | board_gen_reward_test 照跑(全受理 API) | `begin_battle` install 链 roll_board 恰一次(CI gate 02) | 通过 | +| R6 economy 收纳与键账只降不升 | S13 读数对照在报告 §二(15→11/12→9)+受理面套件照跑 | 既有受理 API(CI gate 09 静态+gate 02 行为) | 通过 | +| R7 装板域与编排域改址 | variant_placement_test 指址换代 18 行 22 处、判据文本与阈值逐字保留(diff 逐行核) | 装板摇号链 | 通过 | +| R8 行为零变化总证 | round_flow_skill_pool_test 134 检查全绿(EV 锚+逐位回放 ×2 关) | 全战斗回放(CI gate 02) | 通过 | +| R9 闸清单随动 | static_scan.sh S7_B1_SET 与 S8_FILES 各增 effect_port.gd+reward_roller.gd、B4 符号清单删 weighted_pick 行;run_all.gd:199 manifest 登记 effect_port_test(expect 0)——diff 逐行核清 | 静态扫描域闸(CI gate 09 green) | 通过 | +| 断言尾缀 | 全 15 条断言消息带 V1/V2/V3 编号前缀;批名全称〔效果端口与掷格分件批 Vn〕未入消息字面——全称在文件头注(:1)与 run_all.gd manifest 注释在案 | — | 例外及依据:卡① §11 代拍板白名单第 8 条明文「断言消息文案——非契约面」,尾缀括注落消息文案内属卡内授权裁量;grep 定位面成立(按 V 号+文件名定位断言、按批名定位批次)。与卡②卡③全称尾缀形态不齐,随本报告知悉合并门;如需严格统一归一行字面修复批,不阻本批合并 | + +### 卡② 模态句柄分域批(载体 `game/probe/ui_struct_probe.gd` `_modal_registry_contract` 段尾) + +| 对照表行 | 测试实况 | 真实入口核验 | 状态 | +|---|---|---|---| +| R1 局内冒险域六件 | V1a(:608-612)run 六件经 `modals.run.*` 逐件非 null | main.tscn 真实实例化 `_ready` 装配→:33 无条件调 `_modal_registry_contract(main)` | 通过 | +| R2 菜单与跨语境域六件 | V1a(:613-615)menu 六件逐件非 null | 同上 | 通过 | +| R3 平铺清零+flow 升格+登记口迁驻 | V1b(:616-619)12 件 `get()` 逐件 null;V1c(:620-624)`ui.flow` 在座且 `modals.get("flow")` 为 null;S13 静态判据(CI gate 09) | 同上 | 通过 | +| R4 全仓寻址换代行为零变化 | 既有断言群改址照跑:smoke(CI 00)/system_test(CI 01)/探针族(CI 03)全绿;本审计自跑 ui_struct_probe+screen_flow_probe 双 PASS | **真实开机路径**(main.tscn 实例化+真实输入/信号) | 通过 | +| R5 登记册合同序不破 | ①②③④段〔装配生命批 V1〕(:561-605)改址照跑——实况寻址已为 `modals.run.*`/`modals.menu.*` 二段式,判据零改 | 同上 | 通过 | +| R6 诊断接线字面换代 | theme_projection_test:719 期望串换代与申报逐字一致(diff 核) | run_all presentation 套件(CI 02) | 通过 | +| 旧形零残留(完成定义 #3) | 全仓 `grep -rnE "modals\.flow|modals\.(12 平铺名)" --include=*.gd game` 唯一命中=ui_struct_probe.gd:624 断言消息字面(非寻址代码)——与报告 §三 陈述一致 | — | 通过 | + +尾缀〔句柄分域批 V1〕grep 到(:612/:615/:619/:622/:624)。 + +### 卡③ 营地五界面真窗口化批(载体 `game/probe/screen_flow_probe.gd` `_step_camp_window_shell`) + +| 对照表行 | 测试实况 | 真实入口核验 | 状态 | +|---|---|---|---| +| 四窗统一窗壳 720×640 起点居中 | V1(:336-342)窗板 `get_global_rect()` ≈(280,80,720,640) 容差 0.01 | `ProbeUiUtil.open_camp_via_savesel` 真实选档钮进档+`object_pressed.emit(k)` 真实信号路由(:303-332) | 通过 | +| 窗明显小于屏+场景根留底 | V2(:344-348)`camp.scene.visible`+窗板四边距视口边 ≥80px | 同上 | 通过 | +| 遮罩 0.6 回归 | V3(:350-356)首子节点 ColorRect alpha≈0.6+全屏尺寸容差判等(禁裸 == 落实) | 同上 | 通过 | +| 各窗关闭钮回归 | V4(:320-329 轮转间+:445-451 生涯+:457-467 清窗)真实 Button `pressed.emit()`→窗隐且场景根留底 | 窗内真实钮信号 | 通过 | +| 五窗互斥单开回归 | V5a(:357-363)五窗集 visible 计数==1;V5b(:364-381)`get_hotspot_rect(&"forge")` 公开读面+`push_input` 真实鼠标点→零点穿零新窗 | 同上+真实输入事件 | 通过 | +| ESC 优先序回归 | V6(:385-396)`push_input` 真实 Esc 键→生涯窗隐、浮窗不唤起 | 真实键盘事件 | 通过 | +| 内容超高窗内滚动 | V7(:397-419)真实投影口 `refresh_camp` 喂 30 行合成行→窗板 rect 仍等值+内容实高>滚动视口 | `object_pressed(&"dummy")`+真实数据投喂 | 通过 | +| 生涯页同壳同形态 | V8(:422-444)窗板同几何+「返回」钮在位+纵向 EXPAND_FILL 滚动面;theme_projection_test 全件照跑(CI 02) | 笔记本 `object_pressed(&"notebook")` 路由;单元侧 `open_career()` | 通过 | +| 契约 1/8/9 落码 | `WINDOW_SIZE := Vector2(720, 640)` 单点常量(camp_sub_view_base.gd:11,career 经类常量引用——grep 全库禁二处字面值成立);窗板 `panel_skinned(Vector4(14,12,14,12))` 石板皮;生涯内容板 BG_BRIGHT+顶行墨 INK_TITLE 订正(camp_sub_view_base.gd/career_overlay.gd diff 逐行核) | — | 通过 | +| 合同表零改动(红线 1) | `git diff master...iter49 -- game/presentation/ui_registry.gd`:**LAYER_CONTRACT 数据块零行变更**(diff 仅头注、flow 字段、register_layer 迁驻、node() 十二键、apply_layer_contract 三调用点) | — | 通过 | + +尾缀〔窗口化批 V1–V8〕grep 到(V1 :305/336/342;V2 :345/348;V3 :352/356;V4 :324/329/451/464;V5 :363/369/381;V6 :389/394/396;V7 :401/415/419;V8 :426/430/435/437/444)。 + +--- + +## 二、抽查跑批读数(本审计自跑,工作目录 D:\code\g-plan2-iter49\game,不采信报告「已全绿」) + +**a) effect_port_test**:`…console.exe --headless --path . --script res://tests/unit/battle_settlement/effect_port_test.gd` + +``` +[PASS] V1 端口单实例(两业务类持同一 EffectPort) +[PASS] V1 delta 读数非零(蓄力层加算进入主角攻击基值) +[PASS] V2 全文零引擎直连 token(EffectEngine/EffectContext):res://core/damage_controller.gd +[PASS] V2 全文零引擎直连 token(EffectEngine/EffectContext):res://core/action_economy.gd +[PASS] V3 阳性对照:hp_ratio 载荷 when 通过——承伤减量恰 1(10→9) +[PASS] V3 阴性对照:battle_index 不答——零减量(10→10,事实面未扩) +[effect_port_test] all green (15 checks) +EXIT=0 +``` + +15 检查全 PASS、退出 0——与期望一致。 + +**b) screen_flow_probe**:`…console.exe --headless --path . res://probe/screen_flow_probe.tscn` + +``` +[screen_flow_probe] PASS — 六步主流程+回退路径全绿(屏级互斥:任意时刻 ≤1 屏可见) +EXIT=0 +SCRIPT ERROR 计数=0(全日志 grep) +``` + +winshell 段执行证明:该段在 `_ready` 固定序列 :31 无条件 await(Esc 段之后、选档段之前);探针机制=problems 空才打 PASS、非空打 FAIL 并逐行打印——winshell 段任一断言失败或前置早退都会以〔窗口化批 Vn〕标记行现形。PASS+退出 0+零 SCRIPT ERROR ⇒ V1–V8 全部真实执行且零红。 + +**c) ui_struct_probe**:`…console.exe --headless --path . res://probe/ui_struct_probe.tscn` + +``` +[ui_struct_probe] PASS — 全屏结构断言零红 +EXIT=0 +SCRIPT ERROR 计数=0 +``` + +`_modal_registry_contract` 于 :33 无条件调用;同机制证 V1a/V1b/V1c 三判据全执行零红。 + +**CI 回执**(`game/tests/.gates/receipt.json`):commit_short=1f0a8bd3、timestamp=2026-11-02T07:23:41+08:00、domain=code、scope=full、quick_mode=false、`all_green=true`——00 冒烟/01 系统测试/02 单元与集成/03 场景探针/05 渲染闸/09 静态扫描/10 熵增闸 七闸全 exit 0 green。 + +--- + +## 三、测试削弱核对(申报 ↔ diff 逐行) + +| 文件 | 卡申报 | diff 实况 | 状态 | +|---|---|---|---| +| variant_placement_test.gd | 卡① 只申报白盒指址换代(判据零删改零放宽) | 18 行增删全为 `eco.*`→`eco.roller.*`/`woc._reward_economy.*`→`…roller.*`,判据文本与阈值逐字同(含 wr10② Callable 同一性比较、wr10③ 权重面),实测 18 行 22 处与报告登记一致(卡载「约 17 行 21 处」为写卡估数、T0 实数登记条款覆盖) | 通过 | +| theme_projection_test.gd | 卡② 申报 :719 期望串+寻址字面 | 唯一改动=:719 期望串 `ui.modals.debug_overlay.`→`ui.modals.menu.debug_overlay.`,判据语义不变 | 通过 | +| system_test.gd/smoke_boot.gd/pacing_queue_test.gd | 卡② 申报寻址字面换代 | 全部为 `modals.X`→`modals.run./menu.X` 二段式,check 文本逐字同 | 通过 | +| 探针 12 件(fx_shot/layout/probe_ui_util/screen_flow/shot/t17_defer/ui_click/ui_input/ui_probe/ui_struct/ui_tune) | 卡② 申报寻址换代+ui_struct 新段;卡③ 申报 screen_flow 纯增段 | 全探针 diff 删除行中断言类仅 5 行,逐行有 1:1 新增对应(判据文本同、仅址字面换);新增段为纯增面 | 通过 | +| 卡③ 其余测试面 | 申报零删改零放宽 | 未发现任何删断言/放宽阈值/缩小扫描面/换下层直调 | 通过 | + +**未申报削弱:零。** 全 diff 删除行另核:reward_economy 侧退役的 4 assert+1 fatal 守卫全数逐字承接于 reward_roller.gd(:119/:150/:184/:194/:200,weighted_pick 改名选行算子为卡① 白名单 #5 授权),零守卫丢失。 + +--- + +## 四、内部字段直查受控例外与单点核对 + +- effect_port_test.gd:62-66 端口同一性直查 `orch_c.fx_host().damage._port`/`orch_c.action_economy._port`——行旁注释载理由(端口同一性无公开查询面);卡① 对照表行 1 与实现报告卡① R1 行均注明同一理由。**例外成立**。 +- 单向接线:effect_port.gd 零 BattleFxHost 对象引用(仅头注纪律声明两处,非代码引用);battle_fx_host.gd :54-63 端口组建后 bind_port 转注两业务类、端口不落 host 成员——与卡契约 4 一致。 +- damage_controller.gd/action_economy.gd 全文零 `EffectEngine`/`EffectContext` token(grep 0 命中;V2 断言当轮 PASS 双证)。 +- 卡③ 合同表零改动:见 §一卡③ 末行——LAYER_CONTRACT 数据块 diff 零行变更。 + +--- + +## 五、实现决定记录复核(报告 §四 五项,均有等价论证与撤销方式) + +| 决定 | 复核 | 状态 | +|---|---|---| +| 1 int(null) 构造拒→`or 0`/`or false` | 卡内 `int(…)/bool(…)` 包裹写法在本引擎(4.7.2)不可行;合法值域(非负 int/bool)上与缺省 0/false 逐位等价;V1-V3+全量闸承载 | 通过(已备案) | +| 2 字符串 Callable→方法直引用 | source_guard_test V8 闸约束(产品码字符串 Callable 零命中);与既有 bundle 接线同型 | 通过 | +| 3 roll() 局部变量内联收敛 | gdstyle 预算约束;取号序与次数零变化由 round_flow 逐位回放主证 | 通过 | +| 4 career 标签 autowrap+横向 EXPAND_FILL | 窗几何契约(720×640 不随内容涨)的伴随适配;V8 钉窗板 rect 兜底 | 通过 | +| 5 V6/V8 前置经真实钮清窗 | 测试时序修正(真实 UI 不可达态不测);V6/V8 断言本体与判据零改 | 通过 | + +其余按卡执行(报告 §四 第 6 项「零超卡裁断」与本审计 diff 核对结论一致)。 + +--- + +## 六、总结论 + +**通过=可合并。** + +- 缺漏:**0**。 +- 例外:**1**——卡① 断言消息未带批名全称尾缀〔效果端口与掷格分件批 Vn〕(V1/V2/V3 编号前缀 15/15 全带;批名全称在文件头注与 run_all.gd manifest 在案)。依据=卡① §11 白名单第 8 条「断言消息文案——非契约面」;验收实质(测试存在/真实入口/当轮执行全绿/判据绑定面/零削弱)全部成立,不阻合并。合并门如需三卡尾缀形态严格统一,归一行字面修复批另行走批,不属本批缺漏。