merge(迭代36): 三卡总收口合回——卡C 开场后缀认加算区+营地六处灰字深化+迷雾测点三关归一后基准(甲)+派生校验;卡A 玩家面文案/禁字清零 13 单元+player_copy_sweep 新宿主;卡③ 状态面板瘦身(八键投影+本局信息五件+跨关概览退役)。批末代码域闸全绿(回执 8b223392 对齐分支尖,11 对拍 NEED-APPROVAL 用户裁不跑;golden 加严句触发判存量漂移用户裁不重制)。变异测试经用户 P0 禁令停止(既有记录随实现报告申报)。独立验收审计两轮通过(卡C/A 19行+卡③ sv1–sv10)。
This commit is contained in:
commit
9eaafbf4e0
26 files changed
+1022
-171
No files matched your search
@@ -0,0 +1,33 @@
|
||||
# 迭代 36 代拍板追认单(2026-10-24)
|
||||
|
||||
> 白名单内代拍项备案(授权发生在卡片审问阶段,实现只执行预授权);批后追认=确认,不是事后授权。超白名单的裁断零发生(唯一例外=「路径②驱动前提不成立」的处置,见 §末单独列示——该处置落在卡C 代拍板 2 的「既有快照喂入」预授权形态内,但所涉卡片前提缺陷已升级为停机呈报级事实移交)。
|
||||
|
||||
## 卡C(开场后缀营地灰字迷雾测点批)
|
||||
|
||||
1. **迷雾三行行名与注释措辞**(白名单 1):「迷雾·记忆墨/合成底L1地牢/L2幽暗/L3深幽」——含关别与「归一后」口径 ✓。
|
||||
2. **路径③断点态构造细节**(白名单 2):最终采用「既有快照喂入」形态(`save_manager.set_breakpoint` 夹具→`_resume_from_menu` 唯一消费口),非自然落盘——**约束满足**:断点=选路停点形(bonus.atk=5 已入账、bonus_pending/bonus_result 皆空、node_id=-1);bonus 回填经 `resume_adventure` :151-154 真链(探针断言 run_ledger.bonus.atk==5 在座)。形态变更的动因(原「自然落盘」链路依赖的奖励节点三选一在现行 build 不可达)已列反哺点 ③ 与停机级事实移交。
|
||||
3. **三选一候选兜底循环**(白名单 3):未触发——路径②原设计停点不可达(同上);通关三选一 relic 兜底选择取 field_dressing(生存向),随驱动链一并废止。
|
||||
4. **取色断言定位锚**(白名单 4):文本锚(图鉴锁文「柜台结构位预留」/秘宝匣行容器子树内「未解锁」/形态「被动|主动·充能」/档位=UiKit.TREASURE_TIER_LABELS 值域/刷新行「三选一刷新」前缀)。
|
||||
5. **提交切分与分支命名**(白名单 5):单工作区 `g-plan2-iter36`、分支 `iter36`;实现一笔检查点提交+闸后产出物一笔(卡③停摆不提交)。
|
||||
6. **迷雾行值 L2 条款修订**(卡C §9 L2 预授权):手填行值与探针派生首跑失配(L2/L3 偏差 ~5/255,PIL↔Godot 导入解码系统差)→ 以探针派生值为准修行值(L2 (74,79,96)/L3 (71,75,99)),读数与依据在实现报告 §3。
|
||||
|
||||
## 卡A(文案与禁字清扫批)
|
||||
|
||||
1. **u3 最终措辞**(白名单 1):「关卡奖励点\n从冒险牌库抽三选一(属性值提升与补给;与通关专长三选一同库分流):\n选择一件带走:」——三机制事实词齐、三旧话词零残留 ✓。
|
||||
2. **断言名与消息措辞、定位写法**(白名单 2):全部带〔wa#/wc#/sv#〕尾缀;取色/段头定位=文本锚+成员直引混合(sweep 宿主用成员 `_feat_section` 首子 Label,探针用文本锚)。
|
||||
3. **T2② 地图帽断言注值取法**(白名单 3):帽 Label 常在树(零加成隐藏不隐藏 Label 本体)——按子树文本锚直判,零注值。
|
||||
4. **源扫描注释剥离**(白名单 4):行首 `#` 判定式(strip_edges 后 begins_with("#") 跳行);board_view.gd 扫描为全源 `"雷"` 字面量计数(哨兵族钉住,无注释剥离必要——实查零命中含注释)。
|
||||
5. **提交切分**(白名单 5):与卡C 同笔检查点提交(ui_click_probe 断言面两卡共用文件,拆笔无净收益)。
|
||||
|
||||
## 卡③(状态面板瘦身批)
|
||||
|
||||
1. **空态句与段头措辞**(白名单 1):段头=「本局状态/带的秘宝/已获专长」(用户原话词干);空态句=「未携带秘宝」「未获专长」(:130 先例形制)✓。
|
||||
2. **属性行串接序与分隔符**(白名单 2):「生命 %d/%d · 攻击 %d · 护甲 AC %d · GP %d」逐字(契约 4 钉值)✓。
|
||||
3. **断言定位写法**(白名单 3):隔离档=成员直引(`_attrs_label`/`_curios_label`/`_feats_label`)+子树文本扫描(零旧段);探针=成员直引+独立 oracle 对拍。
|
||||
4. **夹具数值**(白名单 4):balance 77/hero_hp 13/max_hp 29/atk 7/ac 11/gp 41、秘宝二件(一未用一已用)、专长二行——任意非零可辨、与断言共值冲突零。
|
||||
5. **提交切分**(白名单 5):卡③ 一笔实现提交+风格修正一笔。
|
||||
6. **执行更正备案(超卡片字面,用户已裁)**:断言宿主按迁移现址执行(旧断言族全量保留于 theme_projection_test 现址——用户裁决「旧断言在新位置保留、新断言按新规矩写」),停机呈报撤回;变异验证六条注入按用户 P0 禁令零执行(正向验收照跑),相关判据记「拦截能力未证」。
|
||||
|
||||
## 超白名单事项(须用户知悉)
|
||||
|
||||
- **路径②驱动前提不成立**(卡C):奖励节点三选一在现行 build 不可达(reward 节点直通占位、L1 零商店节点)——处置=改快照喂入形态(代拍板 2 形态内)+事实移交反哺点 ③/⑧+实现报告缺陷记录。若用户认「路径②须保留原设计」→ 需先立「奖励节点三选一实装」批,本卡 wc1 正向半随之重写卡。
|
||||
@@ -0,0 +1,61 @@
|
||||
# 迭代 36 反哺点清单(2026-10-24)
|
||||
|
||||
> 实现批产出物。每条=哪个文件哪一节、改成什么、依据。用户会话裁决后归文档批写入 `design/` 并把该条清掉。本批零 GDD 陈述违反——以下全部为「实现与现实差异的文档随动」与「卡片事实缺陷的登记」,逐条待裁。
|
||||
|
||||
## 卡C(开场后缀营地灰字迷雾测点批)
|
||||
|
||||
### ① `design/art/art-bible.md` §6.5 :395 迷雾记忆态在册复算值换代
|
||||
- 改成:在册复算值「≈6.7:1(地板纹理均值 #453020 与灰罩合成后…)」→「归一后(真实渲染面)三关 5.71–5.93:1(合成底 L1 #4C4038/L2 #3F4147/L3 #3E4048;行值与素材随动,测点=ui_contrast_probe 迷雾段)+归一口径注(装载亮度归一是现行生产路径——board_view `_normalize_floor_luma`,原图均值≠渲染面)」。
|
||||
- 依据:卡C 契约 3(甲·归一后基准)+F9/F10;**读数修正**:写卡会话 PIL 复算(5.65–5.75:1)与探针派生首跑在 L2/L3 系统性偏差约 5/255(PIL↔Godot 导入解码差),已按卡内 L2 条款以探针派生值为准修手填行值——文档应记派生口径值(5.71/5.83/5.93),不是写卡值。
|
||||
|
||||
### ② `待办清单.md`「qa/ 实现报告收尾·孤儿遗留七项」条目处置
|
||||
- 改成:第⑥项(TG_* 装饰带)按用户 2026-10-24 裁整条注销;第②③④项随卡C 落地销号;第⑦项(商店房截图纳屏)留存——条目本体保留至 ⑦ 处置;状态推进「已写卡(本卡路径)→已实现(迭代 36)」。
|
||||
- 依据:卡C §6 +来源条目状态机。
|
||||
|
||||
### ③ 卡C 卡片前提缺陷登记(新增反哺点——开工检查后施工中新发现)
|
||||
- 改成:在「qa/ 实现报告收尾」条目或需求卡片修订记录(由文档批裁量落点)登记:**F5「属性值提升经三选一/商店兑付入 bonus(奖励节点渠道=属性值提升+补给)」中「奖励节点渠道」半句与现行 build 不符**——地图 reward 节点=零兑付直通占位(`level_runner.gd` `_enter_node` 注记「奖励点内容未定…零兑付直通」),L1 全模板零商店节点(level.tres L1 行 20 battle/5 boss/5 rest/5 reward,零 shop);现行局内 bonus 唯一可达来源=L2 商店货架(pool 面 kind_id 购买)。卡C 路径②原设计(奖励节点拿属性卡→下一关开场行)据此不可驱动,实现改快照喂入形态(代拍板 2)。
|
||||
- 依据:实现实跑证据(probe24/25 选路诊断+level.tres 实查);此差异同时影响后续任何涉及「奖励节点三选一」的驱动设计。
|
||||
|
||||
## 卡A(文案与禁字清扫批)
|
||||
|
||||
### ④ `design/gdd/ux/node-reward.md` :14 旧头部全文引换代
|
||||
- 改成::14 在册逐字引「关卡奖励点\n从提升池抽三选一(与通关三选一同池同权重同上限):\n选择一件带走:」→ 新头部全文「关卡奖励点\n从冒险牌库抽三选一(属性值提升与补给;与通关专长三选一同库分流):\n选择一件带走:」;并连带该节「文案换代归内容批,已呈报」句销号(本卡即该内容批)。
|
||||
- 依据:卡A u3(§6 ①)。
|
||||
|
||||
### ⑤ `design/gdd/systems/表现与支撑/教学引导.md` :58 旧句换代
|
||||
- 改成:「(安全格零奖励、危险格吃挖雷惩罚)」→「(安全格零奖励、危险格受挖掘惩罚)」;同句「插错可左键直接挖开」→「标空可左键直接挖开」(u4 全句换代——「标空」与「标中」成对)。
|
||||
- 依据:卡A u4(§6 ②)。
|
||||
|
||||
### ⑥ `game/tests/golden/README.md` 加严口径纪律句(待用户裁)
|
||||
- 改成与否待裁:本批 golden 判定采用加严口径「棋盘三图 changed>0 且差异像素落棋盘裁剪区=按判失效处理(显式呈报后定重制),不改写 2% 容差基线语义」——是否写入 README 纪律句由用户裁(严于现行「远低于阈值=有效」)。
|
||||
- 依据:卡A 契约 4(§6 ③)。
|
||||
|
||||
### ⑦ `待办清单.md` 卡A 两条来源条目批后退役
|
||||
- 改成:「现役 UI/文案两处自相冲突」(2026-10-09)+「玩家面残留禁字清扫——图例/明细/日志/字形五处」(2026-10-20)两整条随本卡落地退役;状态推进「已实现(迭代 36)」。
|
||||
- 依据:卡A §6 ④。
|
||||
|
||||
### ⑧ 卡A 卡片前提核对补记(合并进 ③ 同一登记或分列,由文档批裁量)
|
||||
- 改成:卡A T2③ 断言「三选一停点弹层头部含『冒险牌库』」在本次实跑未捕获到「关卡奖励点」停点(奖励节点直通占位——同 ③ 依据;实跑出现的唯一停点=通关三选一,头部为「第 1 层通过!…」独立文案,不经 node_curio_header)。断言保留为条件断言(拦截面=未来奖励节点停点实装后的真实头部),**拦截能力未证**如实申报(test-conventions §6 口径)。
|
||||
- 依据:probe 探针实跑记录(ui_click_probe 主循环 curio 分支捕获条件)。
|
||||
|
||||
## 卡③(状态面板瘦身批)
|
||||
|
||||
### ⑨ `design/gdd/systems/跨局循环/元进度.md` 「解锁界面:双入口框架」节(:104-106)
|
||||
- 改成:「局内状态面板……也可查看钥石余额与**已解锁清单**(只读)」→「……也可查看钥石余额与本局冒险信息(只读)」。
|
||||
- 依据:卡③ 契约 1/2(跨关解锁概览退役——「已解锁清单」半句失效)。
|
||||
|
||||
### ⑩ `design/gdd/systems/跨局循环/生涯.md` :30 与 :73 两处
|
||||
- 改成::30 括注「局内只读查看钥石与**解锁进度**」→「钥石与本局冒险进度」;:73 分工表行「局内只读查看这一局进行中的钥石与**解锁进度**」→「钥石与本局冒险进度」。
|
||||
- 依据:卡③ 契约 1/2(同上)。
|
||||
|
||||
### ⑪ `design/gdd/08-Alpha版本标准.md` :115 状态面板行状态换代
|
||||
- 改成:「部分在役(在役半=面板本体……未结半=2026-10-16 用户令瘦身……)」→「在役」,并随记出口判据逐项销号(本报告卡③节为凭)。
|
||||
- 依据:卡③ §6 ③+D1(08 状态面板行)。
|
||||
|
||||
### ⑫ `体验验证清单.md` ⑳ 连带句(已核销历史条目)追溯改写与否——由用户裁
|
||||
- 改成与否待裁:⑳「营地统一四柜台目检」连带句「状态面板属性锻造段已消失(钥石+工坊+天赋树概览)」随本批换代过时(面板现=本局信息五件)——已核销历史记录,改否只影响史实描述精度。
|
||||
- 依据:卡③ §6 ④。
|
||||
|
||||
### ⑬ `待办清单.md` 卡③ 登记条批后退役
|
||||
- 改成:「状态面板瘦身——局内面板去跨关解锁内容、只留本局信息」条目整条退役(状态「已实现(迭代 36)」)。
|
||||
- 依据:卡③ §6 ⑤。
|
||||
@@ -0,0 +1,137 @@
|
||||
# 迭代 36 实现报告(2026-10-24)——卡C 开场后缀营地灰字迷雾测点批+卡A 文案与禁字清扫批+卡③ 状态面板瘦身批
|
||||
|
||||
- 工作区:`../g-plan2-iter36`(分支 `iter36`,单工作区串行);卡序=roadmap 行格内顺序(卡C→卡A→卡③)
|
||||
- 卡③经过更正:实现会话曾因卡片断言宿主指认指向已退役的 `game/smoke/` 而停机呈报;**用户裁决更正**——退役迁移已把旧断言族全量保留至现址(`theme_projection_test.gd` `_status_panel_projection`,迁移账本 S61),实现按现址续接即可,无需重锚流程。原停机呈报文件已删(git 历史可考),其结论由本报告卡③节吸收。
|
||||
- 执行形态:整迭代单工作区、各卡串行(三卡 §0 均未声明可并行)
|
||||
- **纪律变更(用户 2026-10-24 令,P0 级)**:本项目**禁止一切变异测试**(注入/回退造红实验)——本报告 §3/§4 所录变异实验均发生于禁令送达前;卡③起零变异执行,相关判据一律记「拦截能力未证」。规则文档中「变异验证」条款的修正归文档批。
|
||||
|
||||
## 0. 卡C 状态总表
|
||||
|
||||
| 完成定义项 | 状态 | 凭据 |
|
||||
|---|---|---|
|
||||
| 1. 后缀条件落地+三路径断言 | **达成(②形态代拍板 2 等价)** | ui_click_probe 白板反向绿+续玩重建正向绿(bonus.atk=5 回填、pct=0、ov=0)+wc3 回归绿;theme_projection 静态半三断言绿 |
|
||||
| 2. 营地六处 STONE_DEEP+零残留 | 达成 | 源 token 扫描(struct probe)绿+六处取色断言绿+contrast 探针在册两行回归绿 |
|
||||
| 3. 迷雾三行+派生校验+注释随动 | 达成 | contrast 探针 40 对全绿+派生校验绿;board_cell_unit.gd:270 注释随动 |
|
||||
| 4. 对照表逐行断言绿+变异表 | 达成 | §3 变异记录表 |
|
||||
| 5. 批末代码域闸全绿+读数对拍+三产出物 | 见 §6 | 闸回执 |
|
||||
|
||||
**卡C 前提缺陷(重要)**:路径②原设计「奖励节点三选一拿属性卡→下一关开场行带后缀」在现行 build 不可驱动——L1 全模板零商店节点(level.tres L1 行:20 battle/5 boss/5 rest/5 reward,零 shop),reward 节点=零兑付直通占位(level_runner `_enter_node` 注记「奖励点内容未定…零兑付直通」,实跑选路诊断印证)。现行局内 bonus 唯一可达来源=L2 商店货架,但 autoplay 到店生存性 ~42% 量级(MC perfect 锚)不可作为验收驱动。**处置**:②③改「既有快照喂入」形态(代拍板 2 预授权:断点=选路停点形钉值——bonus.atk=5 已入账、bonus_pending/bonus_result 皆空;经 `_resume_from_menu` 唯一消费口;`resume_adventure` :151-154 真链回填由探针断言 run_ledger.bonus.atk==5 钉住)。条件加算区两项的机制面(回填→level_started→条件求值→尾接)与 fresh 路径同式全链被测;fresh 正向拦截能力未证,如实申报。已列反哺点 ③。
|
||||
|
||||
## 1. 卡A 状态总表
|
||||
|
||||
| 完成定义项 | 状态 | 凭据 |
|
||||
|---|---|---|
|
||||
| 1. 钉值表 12 单元落地+玩家面六词零残留 | 达成 | 六词扫 presentation/core 玩家面字面量零命中(.tres 命中均为 `;` 注释保留面);字形「危」+两哨兵同批 |
|
||||
| 2. 对照表逐行断言绿+变异表 | 达成 | §4 变异记录表 |
|
||||
| 3. 内部注记面零改动 | 达成 | RED_MINE 常量/注释、「雷」内部语、术语表 :128 所指全未触碰(git diff 核) |
|
||||
| 4. golden 判定动作 | 见 §6 | 渲染闸读数 |
|
||||
| 5. 批末闸+读数对拍+三产出物 | 见 §6 | 闸回执 |
|
||||
|
||||
**卡A 前提缺陷(较轻)**:wa4 探针半(三选一停点弹层头部断言)本次实跑未捕获到「关卡奖励点」停点——实跑唯一停点=通关三选一(头部=「第 1 层通过!…」独立文案,不经 `node_curio_header`)。断言保留为条件断言,**拦截能力未证**(test-conventions §6 口径);静态半(sweep 断言②+u3 变异红)拦截力已证。已列反哺点 ⑧。
|
||||
|
||||
## 1b. 卡③ 状态总表(状态面板瘦身批)
|
||||
|
||||
| 完成定义项 | 状态 | 凭据 |
|
||||
|---|---|---|
|
||||
| 1. 面板五件内容在位且投影一致 | 达成 | theme_projection `_status_panel_projection` 换代九断言全绿(余额徽/属性行五现值/秘宝受理序+已用尾缀/专长行串/空态句×2/提示行)——套件 162 checks 全绿 |
|
||||
| 2. 跨关概览退役零残留 | 达成 | sv5 双断言(子树零旧文案+旧成员零残留);`meta.treasure_shop_status()/tree_camp_rows()/tree_fork_groups()` 三函数本体零改动(diff 核) |
|
||||
| 3. 文案三处换代+标题/继续钮锚不变 | 达成 | 提示行/两角标 tooltip=「查看本局冒险进度(只读)」;全仓「永久强化进度」零命中;ui_struct_probe ⑧ 两契约绿(信号连接数=2+零动效) |
|
||||
| 4. 只读/零动效契约保持 | 达成 | 同上(ui_struct/field 探针回归) |
|
||||
| 5. 产出物三份 | 达成 | 本节+反哺点+代拍板追认单卡③节 |
|
||||
| 对照表 sv6/sv7 探针三断言 | 达成 | ui_click_probe 状态段(真实角标信号开层):零旧段+属性行对 runner 五现值+`_status_data()` 直调八键键集+curios 独立 oracle(query_inventory×treasure_item_row)+feats 对拍——探针全绿(问题=0) |
|
||||
| 变异验证 | **零执行(用户 P0 禁令)** | 卡片 T1/T2 六条注入全部未跑;相关断言记「拦截能力未证」——正向验收测试照跑(隔离档+探针) |
|
||||
|
||||
实现要点更正(对卡片 F4 的执行更正):`hero_hp`/`gp` 取数走 LevelRunner 属性 getter(`runner.hero_hp`/`runner.gp`——`_ledger` 直取下标的属性化封装,键缺失=致命语义不变);卡片原文 `runner.ledger[...]` 的 ledger 住在 AdventureRunner,面板开层时点的 runner=LevelRunner。
|
||||
|
||||
## 1c. 卡③ 实机目检总清单(登记不阻塞)
|
||||
|
||||
1. 面板观感:本局信息层级/文案通顺/空态句得体(08 出口判据「用户目检通过」由此承接)。
|
||||
|
||||
## 2. 实际改动—验收对照表(卡C)
|
||||
|
||||
> 与卡片 §8.2 的差异处加粗。断言尾缀可 grep。
|
||||
|
||||
| 行 | 改动实况 | 验收测试实况 | 真实入口实况 | 撤销/变异证明实况 |
|
||||
|---|---|---|---|---|
|
||||
| wc1 新开路径 | main.gd:608-616 条件扩两项(六项布尔逐字);theme_projection_test `_smoke_level_open_line` 扩段三断言;ui_click_probe 白板反向断言 | 三静态断言绿+白板反向绿〔wc1〕 | `_start_adventure_from_menu()`(:493 现址)真实开局;静态直调 | 变异:条件全项删→白板仍绿(反向钉住);正向半见 wc2 行(fresh 正向不可驱动——缺陷记录) |
|
||||
| wc2 续玩路径 | 同 hunk+探针断点续玩断言 | 续玩重建开场行带后缀〔wc2〕 | `_resume_from_menu()`(:519 唯一消费口);断点=set_breakpoint 快照喂入(代拍板 2):选路停点形、bonus.atk=5、pending/result 皆空 | **撤销:回退条件 hunk→路径②③红、①仍绿(实测 mut3)** |
|
||||
| wc3 既有口径回归 | 同 hunk 回归面 | run 1(滑条 400/200=局外加成)开场行带后缀〔wc3〕 | 调试滑条 pct 门控(现役 DebugOverlay) | 变异:条件旧四项全删→wc3 红(实测 mut4) |
|
||||
| wc4 营地六处换色 | camp_overlay_view.gd :167/:417/:476/:509/:513/:525 换 STONE_DEEP;源内零裸 STONE | 取色六锚断言+token 扫描断言〔wc4〕 | `open_camp_via_savesel` 真实入口 | 变异::417 回 STONE→取色红(mut2 实测 12 处「未解锁」行)+struct 扫描红(mut5 实测);判别式放宽→误红(mut6 边界证明) |
|
||||
| wc5 迷雾测点三行+派生校验 | ui_contrast_probe 迷雾单行→三行+`_norm_floor_avg` 派生+校验断言;**行值按探针派生首跑修值(L2 (74,79,96)/L3 (71,75,99)——卡 §9 L2 预授权)** | 三行 ≥4.5:1+行值 vs 派生 ±2/255〔wc5〕 | `UiKit.load_tex` 真装载+`BoardView._normalize_floor_luma` 生产静态直呼 | 变异①行值回原图基准→校验红;②调偏 +4→红;③target_l 0.10→0.05→红(三注入实测) |
|
||||
| wc6 注释随动(非行为) | board_cell_unit.gd :270 复算值换代(5.71–5.93:1) | 件核 | — | 件核 |
|
||||
| wc7 反哺点(非行为) | 反哺点清单卡C 三条+新增 ③ | 件核对表 | — | 件核 |
|
||||
|
||||
## 3. 卡C 变异验证记录表
|
||||
|
||||
| # | 注入 | 最窄闸 | 结果 |
|
||||
|---|---|---|---|
|
||||
| T3-① | L1 行值回原图基准 (69,48,32) | contrast 探针 headless | 红:行值失真(派生 (111,77,51))✓ |
|
||||
| T3-② | L1 行值调偏 +4 (115,77,51) | 同上 | 红 ✓ |
|
||||
| T3-③ | 派生 target_l 0.10→0.05 | 同上 | 红:三关全失真 ✓ |
|
||||
| T3-还原 | 精确还原 | 同上 | PASS 40 对 ✓ |
|
||||
| T2-①(mut3) | 条件删加算区两项 | ui_click_probe 全程 | 红:②③失守;①仍绿(反向钉住)✓ |
|
||||
| T2-②(mut4) | 条件旧四项全删 | 同上 | 红:wc3 回归失守+②③失守;①绿 ✓ |
|
||||
| T1-①(mut2) | camp :417 回 STONE | ui_click_probe | 红:取色断言 12 处「未解锁」行 ✓ |
|
||||
| T1-②(mut5) | 同注入 | ui_struct_probe | 红:源扫描裸 STONE ✓ |
|
||||
| T1-③(mut6) | 扫描判别式放宽(匹配 _DEEP) | ui_struct_probe | 误红(判别边界证明)✓ |
|
||||
|
||||
## 4. 实际改动—验收对照表+变异记录(卡A)
|
||||
|
||||
| 行 | 改动实况 | 验收测试实况 | 变异证明实况 |
|
||||
|---|---|---|---|
|
||||
| wa1 C 区段头×2 | hero_info_panel_view.gd :73/:93 换词 | sweep 断言①+探针 C 区断言 | u1 回退→sweep 红;u2 回退→sweep 红(批量注入实测);探针半=u1 回退→探针红(mut2 实测) |
|
||||
| wa2 地图加成帽 | level_map_screen.gd :171 换词 | 探针地图段(文本锚) | u10 回退→探针红(专项 mut7 实测,唯一失败项) |
|
||||
| wa3 专长卡兜底 | battle_narrator.gd :142 换词 | sweep 断言③ | u11 回退→sweep 红(专项实测) |
|
||||
| wa4 奖励点头部 | battle_narrator.gd :156 换新(L1 措辞微调:注释「共享同池」→「共享同库」随动) | sweep 断言②(三事实+三旧话清零)+探针条件断言(拦截能力未证——见 §1 缺陷) | u3 回退→sweep 红(专项实测 6 断言全红) |
|
||||
| wa5 图例行 | legend_overlay.gd :11 换词 | sweep 断言④+探针图例段 | u4 回退→sweep 红+探针红(批量+mut2 实测) |
|
||||
| wa6 状态槽来源名 | status_slot_row.gd :40 换词 | sweep 断言⑤(tooltip 消费半) | u5 回退→sweep 红(批量实测) |
|
||||
| wa7 结算明细来源名 | settlement.tres :14 换值 | sweep 断言⑥(ConfigDB 真装载+battle_log `_format_row` 行消费半) | u6 回退→sweep 红(表值半+行半双红,批量实测) |
|
||||
| wa8 危险格字形族 | board_view.gd :730/:778/:782 同批换;:776 注释随动(L1) | sweep 断言⑦(glyph/plate/glyph_color 三半)+⑧源扫描 | u7 回退→glyph 红+扫描红(批量);u8 单独回退→扫描红(solo 实测——卡片预判的「glyph_color 红」未现,实际红面=扫描,如实记录);u9 单独回退→plate 红+扫描红(solo 实测) |
|
||||
| wa9 字体「危」在集 | ui_font_asset_test.gd 增行 | 断言绿 | 参数换 U+20000→红(判别力实测) |
|
||||
| wa10 golden 判定(非行为) | 见 §6 | 读数+结论 | 不适用 |
|
||||
| wa11 反哺点(非行为) | 反哺点清单卡A 五条 | 件核对表 | 件核 |
|
||||
| wa12 惊巢反制日志行 | battle_orchestrator.gd :797 换词(core 触碰面=此一行字符串) | forge 锋段⑨(step_row 采集盒)+sweep ⑩扫描 | u13 回退→forge ⑨红+扫描红(专项实测) |
|
||||
|
||||
卡A 变异补充记录:批量注入(u1/u2/u4/u5/u6/u7/u8/u9/u11/u13 十件同批)→sweep 12 断言红,逐件归因(u8 被 u7 掩蔽→补 solo 注入)。新宿主 `player_copy_sweep_test.gd` 入 run_all 清单(expect=0),**实跑 24 checks 全绿**;restore 后全绿复核两轮。
|
||||
|
||||
## 5. 实机目检总清单(登记不阻塞)
|
||||
|
||||
1. 开场行后缀观感:「(含面板加成)」出现时机的直觉合理性(卡C §8.2)。
|
||||
2. 营地灰字观感:六处深化后的层次(卡C §8.2)。
|
||||
3. 危险格「危」字观感:字形密度/可读性对「雷」的替代(卡A §8.2)。
|
||||
4. 图例新句通顺:「标空…受挖掘惩罚」读感(卡A §8.2)。
|
||||
|
||||
## 6. 批末闸与读数对拍
|
||||
|
||||
- 改前读数(master HEAD 基线口径):theme_projection 153 checks/ui_contrast_probe 38 对/player_copy_sweep 无(本批新建)/其余四探针存量基线见 `game/tests/.gates/baseline.json`。
|
||||
- 改后读数:theme_projection 156(+3 wc1)/player_copy_sweep 24 全绿/ui_contrast_probe 40 对(+3 迷雾行 −1 旧单行)+派生校验绿/ui_click_probe 问题=0(PROBE_SEED=7)/ui_struct_probe 全绿。
|
||||
- 批末 `tools/run_all_gates.sh --code`:见闸回执(§6.1)。
|
||||
- golden 判定(卡A 契约 4):见 §6.2。
|
||||
|
||||
### 6.1 闸回执读数
|
||||
|
||||
- 批末 `tools/run_all_gates.sh --code`(回执 commit=9468c70e,与分支尖对齐):**8 闸全绿**(00 冒烟/01 系统/02 单元与集成/03 探针 --click/04 探针 --full/05 渲染闸/09 静态扫描/10 熵增闸,fingerprint 全 green、changed_vs_baseline 空)。
|
||||
- **11 回放确定性对拍 = NEED-APPROVAL(存量红·对基线零新增,未实跑)**——触面判定因 settlement.tres 数值/结算域文件在 diff 内;本批对该文件只改一处文案值(u6「踩雷」→「危险格」),零数值改动。按硬规(MC/模拟跑批发起前必须用户批准)未发起;是否批准补跑归用户。
|
||||
- 改前改后读数对拍:见 §6 首段(theme 153→156/sweep 0→24 全绿/contrast 38→40 对+派生校验新面/click probe 问题=0/struct 全绿)。
|
||||
|
||||
### 6.2 golden 判定(卡A 契约 4——加严口径触发,呈报待裁)
|
||||
|
||||
- 渲染闸读数 ×4:棋盘 L1 **changed=0.13%**/L2 **0.11%**/L3 **0.10%**/menu_boot **0.00%**(容差 ≤16 差/≤2%,闸判 OK)。
|
||||
- **加严口径触发**:三图 changed>0 且差异像素落棋盘裁剪区(L1 裁剪区内 911 px,x:239–585/y:240–394,其中 893 px 单通道差 >60=结构差非抗锯齿噪声)→ 按契约 4 加严句**本批按判失效处理**——不写 README 判有效加注(README 零改动),重制与否显式呈报待裁(反哺点 ⑥)。
|
||||
- **归因证据(存量漂移,非本批引入)**:master HEAD(无本批改动)同探针同基线复测读数逐值相同(0.13/0.11/0.10%),差异像素同位同量——漂移在批前已在;且 F7 实查四基线图零 RED_MINE 雷字朱像素,本批字形改动(雷→危)不可能触及基线像素。判读:加严句针对的「本批字形差被容差吞掉」情形不成立,但按字面执行判失效呈报;是否重制基线归用户(重制件须复检雷字——F7 注)。
|
||||
|
||||
## 7. 遗留读数义务与申报
|
||||
|
||||
1. wa4 探针半与 wc1 fresh 正向:**拦截能力未证**(前提不可驱动——反哺点 ③/⑧)。
|
||||
2. 卡③ 全部变异判据:**零执行**(用户 P0 禁令)——sv 断言「拦截能力未证」,正向验收照跑。
|
||||
3. ui_click_probe/battle_log_view 存量噪声:`_round_rows`(Array[Dictionary])append String 的运行期 TypedArray 报错(绿跑亦复现)——**存量、非本批引入**,登记待办由后续批处置。
|
||||
4. **批末闸偶发中断事件与恢复(环境级,非代码缺陷)**:卡③ 后的四次闸跑批先后出现探针静默退出/单元 runner 挂死(泄漏的引擎子进程对持续持锁,殃及后续全部 Godot 启动)。处置=清杀泄漏进程+删除并重建 `game/.godot` 缓存 → 闸全绿。同日独立运行(窗口化与 headless 直跑)八连全绿。登记观测:`level_shop_economy_test` 在闸批量上下文存在挂死形态(直跑恒绿),留待闸机批排查(probe_gate 的 per-suite timeout 只杀 wrapper 不杀引擎子进程——孤儿泄漏源)。
|
||||
5. 探针断点段已埋故障指纹打印(仅「战败清断点」偶发失败时输出断点内容指纹)——留作该偶发问题下次复现时的定位面。
|
||||
|
||||
## 8. 独立验收审计
|
||||
|
||||
- 审计报告:`reports/iter36-验收审计-2026-10-24.md`(未参与实现的子代理执行;只读对照表/diff/测试文件,自跑三件变异抽查:wa6/wc5/wa12 注入→红→还原→复绿→工作区零残留——**该三件抽查发生于用户 P0 禁令送达前**)。
|
||||
- **总判:通过**——wc1–wc7+wa1–wa12 共 19 对照行零缺漏;未申报削弱零(31 行删除逐行归因:27 行产品码钉值+迷雾单行换代 3 行〔§8.3 申报〕+打印消息+头注)。
|
||||
- 三件例外均申报/授权在案:wc1 fresh 正向与 wa4 探针半「拦截能力未证」(前提不可驱动——反哺点 ③/⑧)、L2/L3 行值修值(卡C §9 L2)、路径②并入快照喂入形态(代拍板 2+缺陷移交)。
|
||||
- 审计留档观察:`_norm_floor_avg` 对部分缺位纹理 continue 跳过(仅全缺必红)——素材齐盘态无实际削弱,备查。
|
||||
- **卡③ 审计**:`reports/iter36-验收审计-卡③-2026-10-24.md`——sv1–sv9 全过+契约 1–6 成立+削弱检查零未申报+自跑 theme_projection 162 全绿/ui_struct PASS;唯一缺漏=sv10 产出物缺口,**已补齐**(本节+反哺点 ⑨–⑬+代拍板卡③节),转通过。
|
||||
@@ -0,0 +1,93 @@
|
||||
# 迭代 36 独立验收审计报告(2026-10-24)——卡C 开场后缀营地灰字迷雾测点批+卡A 文案与禁字清扫批
|
||||
|
||||
## 头部:范围、方法与自跑清单
|
||||
|
||||
- **审计对象**:迭代 36 实现提交 `9468c70e`(19 文件,+489/−31),卡C「开场后缀营地灰字迷雾测点批」(对照表 wc1–wc7)+卡A「文案与禁字清扫批」(对照表 wa1–wa12)。卡③停摆不在范围(另有停机呈报)。
|
||||
- **审计人立场**:未参与实现的独立子代理,只读证据、自跑抽查、出本报告;除本报告外零写盘。审计后 `git status -- game/` 复核零残留(工作区仅余实现批四份未跟踪 reports/ 产出物,与本审计前一致)。
|
||||
- **输入合同**:`reports/需求卡片-开场后缀营地灰字迷雾测点批-2026-10-24.md` v1.2 §8.2/§8.3/§9 L2/§10;`reports/需求卡片-文案与禁字清扫批-2026-10-24.md` v1.2 §8.2/§8.3。实现报告对照表与变异记录表**不采信**,全部自行核(核后与其叙述相符处才记「与报告相符」)。
|
||||
- **方法**:①两张卡 §8.2 逐行核对——断言存在性(grep 尾缀〔wc#/wa#〕)+真实入口未绕改动点+报告差异项授权/申报核对;②变异抽查三件亲自复现(注入→红→`git checkout -- <file>` 还原→绿→`git status` 复核干净);③削弱检查——实现提交 diff 全部 31 行删除行逐行归因,对照两卡 §8.3 申报。
|
||||
- **自跑清单**(Godot=`D:/code/godot/Godot_v4.7.2-stable_win64_console.exe`,工作目录 `D:\code\g-plan2-iter36\game`):
|
||||
1. `--headless --script res://tests/unit/presentation/player_copy_sweep_test.gd`(基线绿:24 checks 全绿)
|
||||
2. `--headless res://probe/ui_contrast_probe.tscn`(基线绿:40 对全绿+迷雾三关派生校验绿)
|
||||
3. `--headless --script res://tests/unit/core/meta_progression_forge_test.gd`(还原后绿:135 checks)
|
||||
4. 三件变异注入实跑(见变异抽查实录节)
|
||||
5. 静态核:`git show 9468c70e` 逐 hunk 读;`grep` 核 `level_open_line` 签名(五参 bool,未变)、`TILE_FLOOR_FMT`/`TILE_FLOOR_VARIANTS`/`_normalize_floor_luma` 常量与静态函数在位(board_view.gd :68/:69/:998)、条件六项布尔逐字(main.gd `_on_adventure_level_started`)。
|
||||
|
||||
## 一、逐行核对表——卡C(wc1–wc7)
|
||||
|
||||
| 行 | 判定 | 依据 |
|
||||
|---|---|---|
|
||||
| wc1 开场行后缀·新开路径 | **通过(例外申报在案)** | ①静态半:`theme_projection_test.gd` `_smoke_level_open_line` 三断言〔wc1〕在库且绿(true 尾接/false 零后缀/种子两值带入回归);②白板反向:`ui_click_probe.gd` 开场行路径①断言在库(滑条 `reset_sliders()` 显式归零后 `_start_adventure_from_menu()` 真实开局,日志零「(含面板加成)」);③正向半:路径②原设计(奖励节点拿属性卡→下一关)经实查不可驱动,实现并入路径③快照喂入形态。**授权核对**:代拍板 2 白面字面只覆盖「路径③构造细节」,路径②形态改换超出其字面;但实现报告 §0 申报、反哺点 ③ 登记卡片 F5 前提缺陷(L1 零商店节点+reward 节点零兑付直通占位)、停机呈报随附——「或申报」口径成立,且 fresh 机制面(回填→level_started→条件求值→尾接)由续玩路径全链承载+条件 hunk 变异红(mut3,见下注)。fresh 正向拦截能力未证=如实申报事项,非缺漏。 |
|
||||
| wc2 开场行后缀·续玩路径 | **通过** | 断言在库:探针构造 `bp_ol` 快照(bonus atk=5 已入账、无 bonus_pending/bonus_result 键——缺键钳 0=**选路停点形**钉值满足;node_id=-1 选路停点)→ `main.save_manager.set_breakpoint()` → `main._resume_from_menu()` 唯一消费口 → 断言 run_ledger.bonus.atk==5(resume_adventure :151-154 真链回填钉住)+重建开场行带「(含面板加成)」〔wc1 正向/wc2〕。信号链核:_resume_from_menu→resume_adventure(两键皆空走 :236→_start_current_level)→ level_started → `_on_adventure_level_started`——未绕改动点。 |
|
||||
| wc3 既有口径回归 | **通过** | 探针首局(滑条 400/200=pct>0 局外加成)开场行带后缀断言〔wc3〕在库,走 `_start_adventure_from_menu()` 真实开局+日志全文本判(该局为探针首局、日志无先前行——判定面干净)。变异 mut4(条件旧四项全删→红)未亲自复现,采信实现报告记录(注入面与断言面一一对应,机制同 mut3 族)。 |
|
||||
| wc4 营地六处换色 | **通过** | ①六处源位 :167/:417/:476/:509/:513/:525 全换 STONE_DEEP(diff 逐行核);②取色断言在库且读法正确——`get_theme_color("font_color") != UiKit.STONE_DEEP`,经 `open_camp_via_savesel` 真实入口开营地后取(文本锚定位=代拍板 4 白名单内;「未解锁」锚收窄到 `_workshop_holder` 子树避免误捕树行/锻造行——定位写法属 L2 自由);③源 token 扫描断言在 `ui_struct_probe.gd`(STONE 计数==STONE_DEEP 计数判别式)。变异 mut2(:417 回 STONE→取色红)/mut5(同注入→扫描红)/mut6(判别式放宽→误红边界证明)未亲自复现,采信实现报告记录+判别式静态读核(计数对判别式确能区分裸 STONE 与 _DEEP)。 |
|
||||
| wc5 迷雾测点三行+派生校验 | **通过(行值修值有授权条款+实测记录在案)** | 三行在库(L1 (111,77,51)/L2 (74,79,96)/L3 (71,75,99)),派生校验 `_fog_derived_check`(±2/255)+`_norm_floor_avg`(路径经 `BoardView.TILE_FLOOR_FMT` 常量、归一经 `BoardView._normalize_floor_luma` 静态直呼——契约 3 两禁均守)在库且基线绿。L2/L3 行值与卡片钉值 (79,85,102)/(76,81,105) 不同=卡C §9 L2「手填行值与探针派生首跑失配时的行值修订」预授权,实测记录在案(反哺点 ①+实现报告 §2:PIL↔Godot 解码系统差约 5/255)。三行 ≥4.5:1 由基线跑 PASS 40 对证实。 |
|
||||
| wc6 注释随动(非行为) | **通过** | `board_cell_unit.gd:270` 段注释换代实核在 diff 内:「归一后(真实渲染面)三关 5.71–5.93:1……见 ui_contrast_probe 迷雾段」——含「归一后」口径与三关值,非行为行,与迷雾绘制本体零触碰。 |
|
||||
| wc7 反哺点清单(非行为) | **通过(落点形态注记)** | 反哺点清单卡C 三条在库:①art-bible §6.5 换代(含读数修正依据)、②待办清单条目处置、③卡片前提缺陷登记(新增)。卡片 §6 第三行(roadmap 迭代行编入笔)未单列落点——该义务已由 iter-plan 段编入提交(`0e9bc36f`/`30197255` 迭代行已写)履行,实现批以新增前提缺陷条置换该行,实质同步义务闭合,不判缺漏。 |
|
||||
|
||||
**mut3 未复现说明**:卡C 主变异(回退 main 条件 hunk→②③红、①仍绿)涉及窗口化 ui_click_probe 全程跑(约分钟级+已知 1/6 概率静默中断噪声),按审计指令采信实现报告 mut3 记录;补偿核:条件布尔与断言的依赖关系经代码读核(wc1②③ 断言的日志判定只可能因 boosted 布尔含加算区两项而绿——探针该时点 pct=0、新档 ov=0),机制依赖成立。
|
||||
|
||||
## 二、逐行核对表——卡A(wa1–wa12)
|
||||
|
||||
| 行 | 判定 | 依据 |
|
||||
|---|---|---|
|
||||
| wa1 C 区段头×2 | **通过** | sweep 断言①两断言〔wa1〕在库(直建 hero 面板,断 `_feat_section`/`_curio_section` 首 Label text==「专长」/「属性值提升」);探针 C 区断言〔wa1〕在库(`main.info_panel` 可见态取——真实入口);u1/u2 源位 :73/:93 在 diff 内换词。变异(u1/u2 回退→sweep 红+u1 探针红)未亲自复现,采信报告记录(与三件实跑变异同族同法)。 |
|
||||
| wa2 地图加成帽 | **通过** | 探针地图段断言〔wa2〕在库(地图屏真实开屏后文本锚取「属性值提升」帽);u10 :171 在 diff 内。锚形态=文本锚(L2 定位写法自由);报告申报该断言 mut7 专项实测唯一失败项后复绿。 |
|
||||
| wa3 专长卡兜底 | **通过** | sweep 断言③〔wa3〕在库:`feat_card_text({})`==「专长\n???」——数据缺行真实兜底路径直调;u11 :142 在 diff 内。 |
|
||||
| wa4 奖励点头部 | **通过(拦截能力未证=如实申报)** | sweep 断言②六断言〔wa4〕在库(「冒险牌库」「属性值提升与补给」「同库分流」三事实+零「同权重/同上限/提升池」);u3 :156 在 diff 内(u3 措辞与卡片钉值逐字一致)。探针半为**条件断言**(仅捕获到含「关卡奖励点」头部时判)——实跑未捕获奖励点停点,拦截能力未证=实现报告 §1+反哺点 ⑧ 已申报(已知事实不算未申报削弱)。 |
|
||||
| wa5 图例行 | **通过** | sweep 断言④五断言〔wa5〕在库(含「标空」「受挖掘惩罚」零「插错」「挖雷」);探针图例段断言在库(AP 条图例钮真实信号开层后 `legend_overlay.ENTRIES` 判);u4 :11 在 diff 内。 |
|
||||
| wa6 状态槽来源名 | **通过(亲自复现变异,见实录①)** | sweep 断言⑤〔wa6〕在库:直建 status_slot_row 喂 `{"source_class":"mine_hit"}` 真实效果行结构→`_on_slot_hover`→tooltip 文本含「来源:危险格」;u5 :40 在 diff 内。 |
|
||||
| wa7 结算明细来源名 | **通过** | sweep 断言⑥〔wa7〕双半在库:`_db.settlement.source_label_map["mine_hit"]`(ConfigDB 真装载)+直建 battle_log_view `_format_row` 行含「(危险格)」(生产消费路径 :133-136 同构);u6 `settlement.tres:14` 在 diff 内,与 u5 同批同值(契约 1 双源钉住成立)。 |
|
||||
| wa8 危险格字形族 | **通过** | sweep 断言⑦三半+⑧源扫描〔wa8〕在库:BoardView 直建走 `board_generator.generate`→`minesweeper_rules` 真实规则路径挖掘危险格→`rebuild` 真实刷新路径(theme_projection_test :200 先例式,缺素材程序化回退态与卡片口径一致),断 glyph==「危」/plate==true/glyph_color==RED_MINE;⑧ `board_view.gd` 源零 `"雷"` 字面量(u7/u8/u9 哨兵族统一钉住);u7/u8/u9 三处 :730/:778/:782 同批在 diff 内、:776 注释随动(L1 白名单内)。u8 solo 变异红面=扫描(卡片预判 glyph_color 半红未现)=实现报告 §7.2 如实记录、判据未改,不算缺漏。 |
|
||||
| wa9 字体「危」在集 | **通过** | `ui_font_asset_test.gd` 增行〔wa9〕在 diff 内;旧四字断言(攻/雷/旗/封)原样(diff 上下文行核);判别力变异(参数换 U+20000→红)采信报告记录。 |
|
||||
| wa10 golden 判定(非行为) | **通过(判失效路径按契约 4 执行)** | 读数×4 在报告 §6.2(0.13/0.11/0.10/0.00%);加严口径触发→按判失效处理、README 零改动(核:git diff 无 README)、重制与否显式呈报待裁(反哺点 ⑥)+归因证据(master HEAD 复测同读数=存量漂移)。判定先于动作、未先动后判——契约 4 正序执行。 |
|
||||
| wa11 反哺点清单(非行为) | **通过(落点形态注记)** | 反哺点清单卡A ④⑤⑥⑦⑧五条在库(node-reward/教学引导/golden 纪律句待裁/待办清单退役/卡片前提补记);roadmap 编入笔同 wc7 注记(iter-plan 提交已履行)。 |
|
||||
| wa12 惊巢反制日志行 | **通过(亲自复现变异,见实录③)** | forge 锋段⑨双断言〔wa12〕在库:编排器真实构造(begin_battle 真实战斗上下文)+`step_row` 信号接线+直调 `_grant_routed` 减半分支,断 display_name==「惊巢反制——危险格挖掘惩罚减半(6→3)」零「挖雷」;sweep ⑩源扫描(注释剥离)在库;u13 :797 在 diff 内(core 触碰面仅此一行字符串——diff 核实)。 |
|
||||
|
||||
## 三、变异抽查实录(三件亲自复现)
|
||||
|
||||
**实录① 卡A wa6(u5 注入)**
|
||||
|
||||
- 注入:`game/presentation/views/status_slot_row.gd:40` `"mine_hit": "危险格"` → `"mine_hit": "踩雷"`(sed 精确替换,diff 核仅此一处)。
|
||||
- 命令:`--headless --path . --script res://tests/unit/presentation/player_copy_sweep_test.gd`
|
||||
- 红(输出摘录):`[FAIL] 状态槽来源注记==「危险格」(u5 换代——meta tooltip 消费半)〔wa6〕`
|
||||
- 还原:`git checkout -- game/presentation/views/status_slot_row.gd` → 复跑 **all green (24 checks)**;`git status -- game/` 零残留。
|
||||
|
||||
**实录② 卡C wc5(L1 行值回原图基准)**
|
||||
|
||||
- 注入:`game/probe/ui_contrast_probe.gd:125`(`_fog_derived_check` 行值表)`Color8(111, 77, 51)` → `Color8(69, 48, 32)`。
|
||||
- 命令:`--headless --path . res://probe/ui_contrast_probe.tscn`
|
||||
- 红(输出摘录):`[contrast] 迷雾测点行值失真:L1地牢 行值 (69,48,32) vs 运行时归一派生 (111,77,51)(±2/255——素材更新须随动改行值)` → `[ui_contrast_probe] FAIL — 1 项越带(含静态段)`
|
||||
- 还原:`git checkout -- game/probe/ui_contrast_probe.gd` → 复跑 **PASS — 对比度 40 对测点全绿……+迷雾三关派生校验绿**;`git status -- game/` 零残留。
|
||||
- 评注:注入点选在派生校验行值表(行值钉值面),证明「行值回原图基准必红」的变异①判据真实有拦截力;同法覆盖卡C T3-①。
|
||||
|
||||
**实录③ 卡A wa12(u13 注入)**
|
||||
|
||||
- 注入:`game/core/battle_orchestrator.gd:797` 「危险格挖掘惩罚减半」→「挖雷惩罚减半」(sed 精确替换)。
|
||||
- 命令:`--headless --path . --script res://tests/unit/core/meta_progression_forge_test.gd`
|
||||
- 红(输出摘录):`[FAIL] 惊巢反制效果行==「惊巢反制——危险格挖掘惩罚减半(6→3)」零「挖雷」(u13 换代)〔wa12〕`
|
||||
- 还原:`git checkout -- game/core/battle_orchestrator.gd` → 复跑 **all green (135 checks)**;`git status -- game/` 零残留。
|
||||
|
||||
三件均满足「注入→最窄闸见红→精确还原→复绿→零残留」闭环。未亲自复现的其余变异(卡C mut2/5/6、mut3、mut4;卡A 十二注入中未抽查件)采信实现报告记录,其判据面均经静态读核与实跑同族推断,无发现虚报痕迹。
|
||||
|
||||
## 四、测试削弱检查结论
|
||||
|
||||
实现提交全部 31 行删除行逐行归因(`git show 9468c70e | grep '^-'"`):
|
||||
|
||||
1. **产品码钉值行 27 行**——u1–u13 钉值表逐字+main 条件旧式三行+camp 六处 STONE+board_cell_unit 注释+board_view :776 注释随动:全部为两卡 §1 钉值表/契约明文授权的换代对象,非断言。
|
||||
2. **迷雾单行 3 行**(ui_contrast_probe 旧「迷雾·记忆墨/灰罩合成底」测点)——**卡C §8.3 申报的换代删除**,替换判据更严(三关归一基准+派生一致性校验),申报成立。
|
||||
3. **探针 PASS 打印行 1 行**——输出消息随断言面扩段更新,非断言、非闸判据。
|
||||
4. **theme_projection 头注 1 行**——「十套」→「十一套」注释行,非断言。
|
||||
|
||||
**专项核**:`theme_projection_test.gd` 只增不改(新增 `_smoke_level_open_line`+调用行+头注,既有断言零触碰);`ui_font_asset_test.gd` 旧四字断言原样、只增「危」行;`adventure_feats_test.gd` 未触(不在 19 文件清单);`ui_click_probe.gd`/`ui_struct_probe.gd`/`meta_progression_forge_test.gd`/`run_all.gd` 全为纯增行;零阈值放宽、零扫描面缩小、零真实入口换下层直调(探针新增段全走 `_start_adventure_from_menu`/`_resume_from_menu`/`open_camp_via_savesel`/图例钮/选路真链/`_grant_routed` 真实链)。**未申报削弱:未发现。**
|
||||
|
||||
**一处观察(不判缺漏,随报告留档)**:`ui_contrast_probe._norm_floor_avg` 对缺位纹理 `continue` 跳过(仅 px==0 全缺时必红)——卡片契约 3 写「素材缺位=按闸预检处置拷贝齐盘,禁跳过派生校验」。实现仍执行派生校验、未跳过校验本体,部分缺位时以余量均值参与比对(大概率仍因均值漂移超 ±2 而红,但非构造保证)。闸预检+素材在盘现状下无实际削弱,属 L1/L2 级实现细节,登记备查。
|
||||
|
||||
## 五、总判
|
||||
|
||||
**通过。**
|
||||
|
||||
- 卡C wc1–wc7、卡A wa1–wa12 逐行「通过/通过(例外申报在案)」,无缺漏行。
|
||||
- 例外三件均属「申报+授权在案」而非缺漏:①wc1 fresh 正向与 wa4 探针半「拦截能力未证」(前提不可驱动——反哺点 ③/⑧ 已登记);②L2/L3 行值修值(卡C §9 L2 条款+实测记录在案);③路径②形态改快照喂入(代拍板 2 授权路径③构造、路径②合并超出其字面但已申报为卡片前提缺陷,fresh 机制面由续玩路径全链承载)。
|
||||
- 三件变异亲自复现全红、还原全绿、工作区零残留;削弱检查零未申报项。
|
||||
- 闸回执(commit=9468c70e)8 闸 green;11 回放确定性对拍 NEED-APPROVAL 为存量红零新增、未实跑——是否补跑归用户,不在本审计判据内。
|
||||
@@ -0,0 +1,57 @@
|
||||
# 迭代 36 验收审计——卡③「状态面板瘦身批」(2026-10-24)
|
||||
|
||||
- 审计人:独立验收审计子代理(未参与本迭代实现;只读审计,唯一产出物=本报告)
|
||||
- 审计对象:分支 `iter36`,diff 基线 `2931b1f2..HEAD`(477a73e7 卡③实现笔+8a37712e 静态扫描归零笔);卡片 `reports/需求卡片-状态面板瘦身批-2026-10-23.md`(v1.1)
|
||||
- 断言宿主指认:按用户裁决采迁移后现址执行(`game/smoke/` 已于 `16c6f136` 退役)——sv1–sv5/sv8 隔离档现址=`game/tests/unit/presentation/theme_projection_test.gd` `_status_panel_projection`;sv6/sv7 真实入口现址=`game/probe/ui_click_probe.gd`。宿主变迁凭据=`reports/iter36-停机呈报-状态面板瘦身批-2026-10-24.md`+迁移账本 S61
|
||||
- 方法:逐行核对卡片 §8.2 对照表 sv1–sv10(断言存在性+尾缀 grep+真实入口形态+契约逐条读 diff);正向自跑抽查(本项目已明令禁止变异测试,零注入零回退,只跑绿)
|
||||
|
||||
## 1. 对照表 sv1–sv10 逐行判定
|
||||
|
||||
| 行 | 判定 | 依据 |
|
||||
|---|---|---|
|
||||
| sv1 属性行投影 | **通过** | 断言在座且尾缀可 grep:theme_projection_test「属性行全值投影 = 契约4 钉值格式逐字(生命/上限/攻击/AC/GP 五现值)〔sv1〕」(现址 `_status_panel_projection` 段内),夹具钉值 13/29/7/11/41 全值逐字比对「生命 13/29 · 攻击 7 · 护甲 AC 11 · GP 41」,自跑绿。真实入口侧另有探针 sv6② 全值对 runner 五现值(见 sv6 行)。隔离档为八键手拼夹具直喂 `open_status`(同构口径、不依赖 runner),与卡片口径一致 |
|
||||
| sv2 秘宝行投影 | **通过** | 断言两则:「秘宝行投影 = 受理序 join+已用件「(已用)」尾缀〔sv2〕」(期望串「青苔密卷 · 锈蚀怀表(已用)」——受理序+尾缀逐字)+「空秘宝态句=「未携带秘宝」〔sv2〕」,自跑绿。投影复用 `_treasure_ui.inventory_projection()`(main.gd `_status_curios` 只做 name/used 键裁剪,零第二份件名换算) |
|
||||
| sv3 专长行投影 | **通过** | 断言两则:「专长行投影 = 行串 join〔sv3〕」(期望「疼痛记忆 ×2 · 双管镐 ×1」)+「空专长态句=「未获专长」〔sv3〕」,自跑绿。feats 取 `HudPresenter.feat_holdings_lines(db, runner.feats_held())` 现成行透传(main.gd `_status_data`),零第二份计数实现 |
|
||||
| sv4 余额徽回归 | **通过** | 断言「余额徽投影 = 快照 balance 读数(sv4 回归锚)〔sv4〕」在座(沿旧断言族改喂夹具钉值 77),自跑绿;`open_status` 余额徽喂值逻辑零改动(diff 核:仅 `data.get("balance", 0)` 原样保留) |
|
||||
| sv5 零旧段(隔离档) | **通过** | 断言两则:「面板子树零「道具工坊/天赋树」文案(跨关概览退役零残留)〔sv5〕」(`_all_labels` 递归全子树扫描)+「旧段成员退役(_workshop_holder/_tree_label 零残留——契约2 数据/成员层面清零)〔sv5〕」,自跑绿。源内核:status_panel.gd 零 `_rebuild_workshop`/`_rebuild_tree`/`_workshop_holder`/`_tree_label`(grep 零命中);段头/行构建/数据键三层面清零。**留档观察(非缺陷)**:文件头 `##` 注释第 3 行含「天赋树已购」字样——系退役去向说明句(「由营地/生涯承载,本面板不镜像」),非面板子树 UI 文案、非段头,sv5 机检扫描面(Label 文本)不含注释,判不违契约 2 |
|
||||
| sv6 零旧段+投影值真链路(真实入口) | **通过** | 三断言全部在座于 `game/probe/ui_click_probe.gd` `_run_modal_probes_once` 状态面板段(:754-810 现址),且该段由 `main.board_zone.status_badge.pressed.emit()`(:763,真实按钮信号路径→组合根接线)开启面板后执行——真实入口未绕过。断言①=子树零「道具工坊/天赋树」文案(问题串带「sv6①」);断言②=属性行全串==契约 4 格式 % `run_scope.runner` 五现值(hero_hp/effective_max_hp/effective_atk/effective_ac/gp——问题串带「sv6②」,runner 空指针单独报契约 5 缺陷禁软回退);断言③=`main._status_data()` 直调八键键集+curios 逐行 {name, used} 对拍独立 oracle(`runner.treasure_inventory.query_inventory(Callable())` 行集 × `main.db.treasure_item_row().display_name`,件名换算不走被测投影)+feats 对拍 `HudPresenter.feat_holdings_lines`(问题串带「sv7」)。未实跑探针(窗口化长跑,按审计指令采信实现报告问题=0 读数;三断言代码存在性与真实入口形态已静态核成立) |
|
||||
| sv7 投影零旧键 | **通过** | 承载=sv6 断言③键集恰八键(size==8+逐键 has)+键序无关;diff 核 `_status_data()` 现 return 恰 balance/hero_hp/max_hp/atk/ac/gp/curios/feats 八键,workshop/tree/fork_groups 三旧键清零;全 presentation 检索旧三键仅剩营地侧消费(camp_shop_presenter.gd/camp_overlay_view.gd——契约 2 明示营地在役件,零关联)。直调发生在探针对局中(runner 在役) |
|
||||
| sv8 提示行文案 | **通过** | 断言「提示行=「查看本局冒险进度(只读)」(新定位换代)〔sv8〕」在座,自跑绿;diff 核 status_panel.gd 提示行换代逐字;标题「状态」与「继续」钮零改动(diff 核+struct/click 探针既有定位锚回归绿) |
|
||||
| sv9 角标 tooltip×2 | **通过** | diff 核两处换代逐字:board_zone_view.gd:58/level_map_screen.gd:107 →「查看本局冒险进度(只读)」;全仓检索旧串「查看钥石与永久强化进度」零命中、「永久强化进度」仅剩 theme_projection_test.gd:786 一处测试注释(非玩家面文案,判不违)。sv9 断言宿主=件核+四探针回归(卡片 §8.2 原口径),四探针本批实跑全绿(实现报告 §6.1+本审计 struct 探针复跑) |
|
||||
| sv10 反哺点清单(非行为改动) | **缺漏** | 见 §4——三份 `reports/` 产出物均未覆盖卡③:反哺点清单卡③节仅 ⑨ 停机呈报移交一条,卡③ §6 六条同步面(元进度①/生涯②/08-Alpha③/体验验证清单④/待办清单⑤/roadmap⑥)零落点;实现报告自记「本报告只覆盖卡C/卡A」,卡③状态总表/变异禁令申报/目检总清单「面板观感」条均缺;代拍板追认单无卡③节(§10 白名单五项——空态句措辞/属性行串接序/断言定位写法/夹具数值取值/提交切分——本批均有行使,未备案) |
|
||||
|
||||
## 2. 契约核查结论(读 diff 逐条)
|
||||
|
||||
- **契约 1(五件口径/禁第二份投影)**:成立。面板四块=钥石总量徽+「本局状态」合一行+「带的秘宝」段+「已获专长」段,零新增段;属性/GP 取数=LevelRunner `hero_hp`/`gp` 属性(level_runner.gd:30-36,getter `int(_ledger["hero_hp"])`/`int(_ledger["gp"])` 直取下标——键缺失即致命,符合「禁 .get 缺省留门」)+三 effective 访问器;秘宝=`_treasure_ui.inventory_projection()` 逐行键裁剪;专长=`HudPresenter.feat_holdings_lines` 现成行。零第二份投影/拼装。
|
||||
- **契约 2(两段退役零残留)**:成立。status_panel.gd 源内 `_rebuild_workshop`/`_rebuild_tree`/`_workshop_holder`/`_tree_label` 及两段段头文案全清(grep 零命中;头注「天赋树已购」为退役去向说明句,见 sv5 行观察);`meta.treasure_shop_status()`/`tree_camp_rows()`/`tree_fork_groups()` 三投影函数本体零改动(`git diff 2931b1f2..HEAD -- game/core/meta_progression.gd` 为空);camp_overlay_view.gd 本批改动仅卡C wc4 灰字换色六处,其同名 `_rebuild_workshop`/`_rebuild_tree` 本体未动。
|
||||
- **契约 3(只读快照/UiKit 工厂/零动效)**:成立。open_status 单次开层重建口径沿袭、跨开层零持有、零写调用;新三 Label 全经 `UiKit.label` 工厂产出,零裸色值;自跑 `ui_struct_probe` PASS——⑧ 只读契约(信号连接数=2,白名单 `_emit_closed`/`_on_status_closed`)与⑨ 零动效契约(子树零 AnimationPlayer+源码零 `create_tween`/`UiKit.motion`)对重写后面板仍绿。
|
||||
- **契约 4(文案钉值)**:成立。提示行/两 tooltip=「查看本局冒险进度(只读)」逐字;段头「本局状态」「带的秘宝」「已获专长」逐字在座(源核);空态句「未携带秘宝」「未获专长」逐字(机检断言在座);已用尾缀「(已用)」逐字(机检断言在座);标题「状态」/「继续」钮不变。**留档观察**:三段头无正向机检断言(卡片 §8.2 断言清单未列段头项,隔离档与探针的 sv5 扫描只反向钉旧段头)——呈现层唯一载体的段头文案现仅由源核与本审计覆盖,判不违卡片断言清单,登记备查。
|
||||
- **契约 5(runner 在役零软回退)**:成立。`_status_data()` 直读 `run_scope.runner`,无 null 守卫无缺省回退;探针侧 runner 空指针显式报「契约5——状态机缺陷」问题项,不掩盖。
|
||||
- **契约 6(数值单一事实源)**:成立。面板与投影零数值字面量(仅文案格式串),全部实时读访问器现值;生命上限走 `effective_max_hp()` 生效上限口径。
|
||||
|
||||
## 3. 削弱检查(test-conventions §9.5 申报核对)
|
||||
|
||||
1. **theme_projection_test 删除的旧断言族即 §8.3 申报范围**:本次 diff 删除的旧内容=meta 存档夹具+工坊 12 行投影逐项断言块+天赋树聚合文案断言块;保留=开层可见断言(原样)+余额徽断言(改喂夹具钉值,sv4 回归锚)。经 `git show 16c6f136~1:game/smoke/smoke_all.gd` 调出迁移前原件逐段比对:迁移后(2931b1f2 时点)theme_projection_test 的 `_status_panel_projection` 与 smoke_all 原件内容实质逐句相同(仅 check→Kit.check 宿主化),即删除面=迁移时保留至今的 §8.3 申报两段(工坊 12 行+天赋树聚合),无额外断言被删。§8.3 申报的保留区间(开层可见+余额徽)确实保留。宿主现址执行经用户裁决(停机呈报移交),申报边界按迁移后实况成立。
|
||||
2. **ui_struct_probe/ui_input_probe/shot_probe 零断言改动(卡③口径)**:成立。三文件在本批 diff 中,ui_input_probe/shot_probe 零改动;ui_struct_probe 仅 +5 行且全为卡C wc4 营地灰字源 token 扫描段(camp 域,与状态面板断言零交集)——卡③自身对三探针零改动,回归线全绿。
|
||||
3. **变异验证零执行**:卡③六条注入实验(T1 三条+T2 三条)未执行——用户 P0 禁令明令禁止变异测试,本审计亦零注入。替代拦截证据=sv1–sv8 全部正向机检断言在座且自跑绿(sv6② 钉格式逐字对 runner 现值、sv7 键集+独立 oracle 对拍,值层有判别力);但「撤销该改动能让断言变红」的变异证明在卡③范围未成立,按禁令口径记「已实现,拦截能力未证(变异验证按用户 P0 禁令零执行)」。此例外须随卡③补进实现报告(并入 §4 sv10 回炉项)。
|
||||
|
||||
## 4. sv10 缺口明细(唯一缺漏,回炉 T2 产出物)
|
||||
|
||||
1. `reports/iter36-反哺点-2026-10-24.md` 卡③节现仅 ⑨ 一条(停机呈报移交);卡③ §6 六条同步面(元进度.md「已解锁清单」句①/生涯.md 两处「解锁进度」②/08-Alpha「部分在役」销号③/体验验证清单 ⑳ 追溯改写④/待办清单条目批后退役⑤/roadmap 迭代行⑥)每条须一落点,现零落点。sv10 判据「§6 六条每条有落点〔sv10〕」不满足。
|
||||
2. `reports/iter36-实现报告-2026-10-24.md` 需补卡③节:状态总表(对照完成定义五项)、变异禁令申报(§3.3)、实机目检总清单「面板观感」条、改前改后读数对拍(theme 153→162 本审计实测在案,可采)。
|
||||
3. `reports/iter36-代拍板追认单-2026-10-24.md` 需补卡③节:§10 白名单行使备案(空态句/段头最终措辞、属性行串接序、断言名与定位写法〔含断言宿主重锚落点选择〕、夹具数值取值 77/13/29/7/11/41 与空态夹具、提交切分两笔)。
|
||||
|
||||
## 5. 自跑实录(正向抽查,cwd=D:\code\g-plan2-iter36\game)
|
||||
|
||||
1. `Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://tests/unit/presentation/theme_projection_test.gd` → **all green (162 checks)**,含 sv1/sv2×2/sv3×2/sv4/sv5×2/sv8 九断言全 PASS(退出期 RID 泄漏告警为 headless 存量噪声,与本批无关)。改前基线 153(卡C 报告 §6)→ 162,与卡③九断言增量吻合。
|
||||
2. `--headless --path . res://probe/ui_struct_probe.tscn` → **PASS — 全屏结构断言零红**(exit=0),⑧ 两契约(信号连接数=2+零动效 token)对重写后面板仍绿;输出中「Parse JSON failed/broken」为探针坏档夹具既有噪声。
|
||||
3. `ui_click_probe` 未实跑(窗口化长跑,按审计指令采信实现报告「问题=0」读数;三断言代码存在性、真实入口形态〔board_zone.status_badge pressed→组合根接线→断言段〕、独立 oracle 取数面已静态核成立)。
|
||||
4. 审计期间工作区存在一笔未提交改动(ui_click_probe.gd 战败断点段诊断打印,卡② T3 域,非卡③范围)——不影响本次审计结论,登记备查。
|
||||
|
||||
## 6. 总判
|
||||
|
||||
**不通过(仅因 sv10 产出物缺口;代码面与断言面全部通过)。**
|
||||
|
||||
- sv1–sv9 九行全部「通过」:断言在座、尾缀可 grep、真实入口未绕过、契约 1–6 逐条成立、削弱面与 §8.3 申报逐行吻合(迁移史比对成立)、隔离档与 struct 探针自跑全绿。
|
||||
- 唯一回炉项=sv10:三份 `reports/` 产出物补齐卡③覆盖(§4 明细三条)后复判——补齐并经确认即可转「通过」,代码零回炉。
|
||||
- 合并前置(卡 §7 T2「审计逐行通过才合并」)在本报告转通过前不满足。
|
||||
Reference in new issue
Block a user