审计(通关口径换代): 独立验收审计通过——对照表 17 行全过(A 表 12 条逐字一致+V1-V7 存在且真实执行+真实入口无旁路)/撤销证明抽三条复现全闭合(a1 wr1 红+ a8 sl2 红+ a12 V7 红且 wr3 同跑绿=双红独立钉住实证)/削弱检查零发现(条件表达式恰 wr1-3 三处+清单机器对账 1583→1591 恰删 1 增 9)/S11 豁免单 20 行全落位非豁免残留零;例外三件有依据(尾缀避词/防歧义映射/run_all 一次环境瞬时经双重覆盖);闸后仅追加本文档件,回执 ed49a7a5 仍有效
This commit is contained in:
1 parent
ed49a7a552
commit
5744738612
1 file changed
+76
@@ -0,0 +1,76 @@
|
||||
# 验收审计报告:通关口径换代批(提前实施卡批 · termsweep-game-20261026)
|
||||
|
||||
- 审计对象:分支 termsweep-game-20261026 尖 ed49a7a5(基线 master 0b501743),全量 diff 52 文件
|
||||
- 审计人:独立验收审计员(未参与实现;test-conventions §8.7 流程)
|
||||
- 审计输入:需求卡片 v1.1(git show ed49a7a5~1)、实现报告、逐文件 diff、worktree 内实测复跑
|
||||
- 审计日期:2026-10-26(合回前)
|
||||
- **总结论:通过**(对照表 17 行全过;撤销证明抽三条复现全闭合;削弱检查机器对账零超申报;例外三件均有依据,不构成缺漏)
|
||||
|
||||
## 一 · 对照表逐行核对(实现报告 §二)
|
||||
|
||||
实测命令均于 worktree game/ 下执行(console 版 headless)。逐行结论:
|
||||
|
||||
| 行 | 核对内容 | 结论 | 依据(实测) |
|
||||
|---|---|---|---|
|
||||
| a1 | battle_narrator.gd:50=「关卡完成!」;wr1 断言在 battle_narrator_test:41;套件 17 checks 全绿;直调 battle_end_text 真实入口 | 通过 | sed :50 实读;diff hunk 行号推证 :41 为条件行;套件实跑 `[battle_narrator_test] all green (17 checks)` |
|
||||
| a2/a3 | :90/:92 两分支新文案与 A 表逐字一致;V1 两断言(〔口径换代 V1〕尾缀)grep 可得(battle_narrator_test:90/:93);实跑绿 | 通过 | sed :90/:92 实读;grep 尾缀命中;17 checks 内含 V1 两条 PASS |
|
||||
| a4 | :156 渠道句;V2(:96)绿 | 通过 | 同上 |
|
||||
| a5 | :166 完成关数行+:159 注释同步;V3(:100)绿且带负断言 `not summary.contains("通关")` | 通过 | 同上;V3 输出实值「冒险失败 · 未打穿\n完成 1 关 · 止步第 2 层 …」PASS |
|
||||
| a6/a7 | career_overlay.gd:42「冒险成功局数」/:43「各关完成次数」;V4(theme_projection_test:871/:873 含正断言+零残留负断言)经 open_career 实例化+树内 label 收集 | 通过 | sed :42/:43 实读;theme_projection_test 166 checks 全绿(V4 两断言 PASS) |
|
||||
| a8 | save_select_overlay.gd:87「冒险成功 %d 局 · 冒险 %d 局」;wr2=ui_struct_probe:436 条件同结构换串;探针 PASS | 通过 | sed :87 实读;diff 确认条件结构 `sum1 == null or sum1.text != "…"` 仅换期望串;`[ui_struct_probe] PASS — 全屏结构断言零红`(exit 0) |
|
||||
| a9 | ui_kit.gd:403 TREASURE_REQ_LABELS["adventure_cleared"]=="冒险成功";V5(theme_projection_test:874)直读真实常量 | 通过 | sed :403 实读;V5 PASS |
|
||||
| a10 | camp_overlay_view.gd:545「完成 %d 关」;V6(theme_projection_test:818)经 open_camp 最小档实例化全量重建路径 | 通过 | sed :545 实读;V6 PASS,实测输出「最近冒险:完成 · 完成 2 关 · 钥石 +5 · 种子 42」 |
|
||||
| a11 | hud_presenter.gd:191「关卡完成率」;wr3=ui_tune_probe:75 同结构换串;探针真实模拟输出含「关卡完成率 100%(10/10)」 | 通过 | sed :191 实读;探针 exit 0、报告输出实值核得 |
|
||||
| a12 | hud_presenter.gd:194「关卡完成剩余 HP 均」;V7(ui_tune_probe:79)真实输出核得「关卡完成剩余 HP 均 16.2 · 进 Boss HP 均 20.4」 | 通过 | 同上 |
|
||||
| q2 | 13 文件 60 处随动:标签 38 处进验证集清单(1583→1591 条=38 换代+8 新增);探针 13 处;`extract_checks --diff` 零差异 | 通过 | 清单标签列基线对比:removed 38 / added 46(38 换代+V 组 8);`python tools/extract_checks.py --diff` 输出「PASS——标签/cond/计数三对齐,零差异」exit 0;各受影响套件全绿(见 §三) |
|
||||
| q3 | C 面 61 条=注释同位替换,零运行时语义 | 通过 | 机器核对:core/data/sim 全部 +/- 行去注释段后代码部分逐字节相同(含 README 外全部 .gd/.tres);README 行纯文本换代 |
|
||||
| q4 | S11 豁免单 7→20;S11 直跑绿 | 通过 | static_scan.sh 现有 21 条 `next` 豁免行=20 唯一 file:line(enemy.tres:653 在两段 awk 重复计一次)=既有 7+新增 13;头注「20 处」已更;`bash game/tests/static_scan.sh` → `[static_scan] S11 ok(扫描面 237 个文件,词表 23 词)` exit 0 |
|
||||
| q5 | 体验验证清单恰 3 行(:107/:193/:198),:258 历史读数行未动 | 通过 | diff 实查三 hunk 位置吻合;批末回执 08 doc_term → 0 green |
|
||||
| wr判①②③ | S11 零命中/「冒险终结」零输出/清单对账退出码 0 | 通过 | 三项均实测(①见 q4 行;②grep 零命中;③见 q2 行) |
|
||||
|
||||
尾缀 grep 汇总:〔口径换代 V〕共 9 处=battle_narrator_test:90/:93/:96/:100(V1×2/V2/V3)+theme_projection_test:818/:871/:873/:874(V6/V4×2/V5)+ui_tune_probe:79(V7)。
|
||||
|
||||
真实入口核查:V1–V3 直调 BattleNarrator 静态装配器(curio_pick_header/node_curio_header/adventure_summary_text——产品字串唯一产生点,无旁路);V4/V5/V6 经 open_career/UiKit 常量/open_camp 实例化;V7/wr3 走批量模拟真实输出;wr2/sl2 走场景实例化喂入数据。diff 内未发现换下层直调或 mock 顶替。
|
||||
|
||||
## 二 · 撤销证明抽查复现(三条,全部临时改动已精确复原)
|
||||
|
||||
| # | 复现操作 | 结果 | 与实现报告记录比对 |
|
||||
|---|---|---|---|
|
||||
| a1 | battle_narrator.gd:50 临时改回「关卡通关!」→跑 battle_narrator_test | 红:`[FAIL] 关卡收束态恒为「关卡完成!」(实际「关卡通关!」)`→复原后 17 checks 全绿 | 逐字吻合记录表 a1 行 |
|
||||
| a8 | save_select_overlay.gd:87 临时改回「通关 %d 局 · 冒险 %d 局」→跑 ui_struct_probe | 红(exit 1):`[savesel] 槽1 摘要读数失守(got=通关 2 局 · 冒险 7 局 应=冒险成功 2 局 · 冒险 7 局)〔sl2〕`→复原后 PASS | 逐字吻合记录表 a8 行「got=通关 2 局」 |
|
||||
| a12 | hud_presenter.gd:194 临时改回「通关剩余 HP 均」→跑 ui_tune_probe | 红(exit 1):`模拟输出缺关卡完成剩余 HP 行〔口径换代 V7〕`;**wr3(关卡完成率)同跑仍绿**→复原后 PASS | 吻合记录表 a12 行,并实证「wr3+V7 双红独立钉住」声明 |
|
||||
|
||||
复原精度:三次复原后 `git diff` 零 hunk(a1/a8 首轮复原因编辑器换行符差异出现 autocrlf 幻影 M 态,已由 `git checkout --` 精确还原,见 §五.3)。
|
||||
|
||||
## 三 · 测试削弱检查
|
||||
|
||||
机器对账(验证集清单 cond 列基线 0b501743 vs 尖 ed49a7a5 多重集对比):
|
||||
|
||||
- cond 表达式删除=**恰 1 条**:`level == "关卡通关!"`(wr1 换代,同结构等强度换串,非削弱);
|
||||
- cond 新增=9 条:wr1 新串+V1–V6 八条(清单内 1583→1591)+V7(探针面,不入清单——与卡片 B5 事实一致);
|
||||
- 数值阈值/比较结构:零改动;扫描面:ui_struct_probe sl3 禁项 needle 列表 `["断点","种子","继续","停点"," 关"]` 未动(:446 仅注释改写);ui_click 7 处仅注释/print 文本。
|
||||
|
||||
diff 逐文件复核(13 测试文件+3 探针全部 hunk 过目):条件表达式改动仅 wr1(battle_narrator_test:41)/wr2(ui_struct_probe:436)/wr3(ui_tune_probe:75)三处,其余全部为 Kit.check 首参标签文本或注释——**与申报完全一致,零超范围**。V3/V4/V6 负断言(`not contains("通关")`)属净收紧。
|
||||
|
||||
结论:零断言删除、零阈值放宽、零扫描面缩小、零换下层直调;V 断言净增 9 条。
|
||||
|
||||
## 四 · 附加核对
|
||||
|
||||
1. **S11 豁免单 ↔ grep 残留一一对应**:`grep -rn "通关" game/`(四扩展名)现命中 20 行,全部落位——豁免单新增 13 行(.tres 12+level_autoplay.gd:560)各恰命中一次=14 行;其余 6 行=被检字形态(验证集清单 .md 三行负断言 cond 文本〔S11 层① 自指豁免〕+battle_narrator_test:101/theme_projection_test:819/:873 代码行负断言〔非注释面不取〕+theme_projection_test:866 注释「零「通关」残留」〔层①〕)。非豁免残留=零。既有豁免 7 行本批零误伤(enemy.tres:653 等不再含本批词面,属其他退役词)。豁免行的「去豁免即红」结构性成立:上述 14 命中行现仍含退役词,豁免即 S11 红的充分条件在位(q4 撤销证明未复跑,据此采信)。
|
||||
2. **A 表 12 条逐字核对**:卡片 §1 q1 表 a1–a12 的新文案与 worktree 实码(§一行列位置)逐字一致,含 a2/a3 的全角括号与空格、a5 的 `\n` 后首词去「通关」、a8 的「冒险成功 %d 局 · 冒险 %d 局」、a9 的常量值「冒险成功」、a11/a12 的读数前缀——全部吻合。
|
||||
3. **C 面零行为改动机器核验**:core 六件/schema 两件/sim 四件/七张表全部改动行,去注释段后代码部分与基线逐字节相同。
|
||||
4. **批末回执**:`game/tests/.gates/receipt.json`=commit ed49a7a5、domain full、00–10 闸全 green;11 号 MC 对拍 NEED-APPROVAL skip——与「零数值改动=零 MC」红线一致。
|
||||
5. **随批三件套**:实现报告/代拍板追认单/反哺点清单均在 reports/ 在位;卡片与待办条目已删(git 可考)。
|
||||
|
||||
## 五 · 例外与观察(均不构成缺漏)
|
||||
|
||||
1. **V 尾缀「口径换代 Vn」≠卡片原文「通关换代 Vn」**——例外成立,依据充分:断言尾缀进验证集清单 .md 整行扫描面,「通关换代」含退役词必自撞 S11;实现报告 §五.2 已记录根因与改法,且后续批次命名避退役词。卡片 §8 表用的旧尾缀名在清单里不可检索属预期形态,审计按「口径换代 V」检索全数命中。
|
||||
2. **game/README.md:15 落「非末关的关卡完成发大奖励」**——卡片 q3 README 行写作「非末关卡完成」,实施取「非末关的关卡完成」。依据:同卡 q3 换法映射表通行规则+§13 grilling 应修④(防「末关卡」连读歧义)优先于行内简写,且属代拍板白名单 1(标签/注释面两可选词)。判例外采纳,非越权。
|
||||
3. **审计会话 run_all.gd 一次异常**:统一入口跑至 49/61 套件后外层宿主进程静默退出(exit 1,无套件红)。处置:13 个受影响套件中 11 个在该次运行内 PASS,其余 2 个(battle_narrator/theme_projection)+4 个重载件(adventure_feats 138/level_shop_economy 186/meta_progression_forge 135/save_manager_domain 101)+runner 未及的 6 个尾件(hud_presenter/player_copy_sweep/minesweeper_rules/config_db_resolver/config_db_cross_validator/type_glow)全部单独实跑绿——61/61 全数覆盖;批末回执 02 闸在同 commit 全绿。判环境瞬时异常(本机资源态),非本批缺陷;留档备查。
|
||||
4. **探针不进验证集清单**(B5)——V7 与 wr2/wr3 的机器对账面缺位于清单属机制常态,本次以 diff 逐 hunk+探针实跑输出双重核对补齐。
|
||||
|
||||
## 六 · 审计过程文件声明
|
||||
|
||||
审计全程只读,唯一写入=本报告;撤销证明的三次临时改动均已精确复原(收尾 `git status` 于 game/ 与全仓(除本报告外)零改动——见下方回执行)。
|
||||
|
||||
- 收尾 git status:仅 `?? reports/iter-supplement-通关换代-验收审计-2026-10-26.md` 一个新文件,零修改零删除。
|
||||
Reference in new issue
Block a user