9.8 KiB
工程改动报告——存量断言精简 C 档(2026-10-28)
批性质:工程改动(纯测试维护),代码面独立 worktree 批(assert-slim-b2-20261028)。验证项目覆盖逐条不变,断言静态站点收敛。
输入合同:待办清单「存量断言精简——验证内容不变下的断言收敛」余账②(C 档手写族改表驱动循环)+用户 2026-10-28 会话裁决「六组全批(推荐)」。
对账基准:game/tests/验证集清单.md 冻结册(基点 b9260138,1587 条静态调用点;本批只比对不改写)。
1. 判据线
沿用 A+B 批判据线:同一读数面 + 同一输入集 + 谓词字面等价(C 档是同一族的逐例手写断言改为表驱动循环,每旧例成为循环表的一行数据,标签串保留在数据里可 grep)。
与 A+B 的区别:A+B 是删并(旧站点消失、判据由承接者承担);C 档是形态改造——旧例全部保留为循环的一行,执行条数不变,只有静态 check( 调用点下降。失败定位由「独立断言行」改为「违例明细串」(表内每行仍输出自己的标签,附带期望/实际)。
2. 删并申报表(33 旧站点 → 7 新站点)
「旧序号」=冻结册序号;「旧站点」=冻结册行号(file:line 省略相同路径前缀)。六组逐一列出,处置列写明合并形态。
C1 关卡生成参数负向族(11 → 1)· game/tests/unit/data_config/level_gen_params_test.gd
| 旧序号 | 旧站点 | 旧标签 | 新站点 | 处置 |
|---|---|---|---|---|
| #1221 | _test_negative:72 |
合法三行域校验零错误(夹具自证)〔fv2〕 | :107 |
表行 cases[0](夹具自证行保留在表首) |
| #1222 | _test_negative:75 |
L1 出口=2 被拒(出口 L1 恒 1 已锁)〔fv2〕 | :107 |
表行 cases[1] |
| #1223 | _test_negative:78 |
配比合计 0.5 被拒(四类合计 1 已锁)〔fv2〕 | :107 |
表行 cases[2] |
| #1224 | _test_negative:81 |
层深 5<6 被拒(层深下限已锁)〔fv2〕 | :107 |
表行 cases[3] |
| #1225 | _test_negative:85 |
层深增幅倒挂被拒(递增且增幅变大)〔fv2〕 | :107 |
表行 cases[4] |
| #1226 | _test_negative:88 |
出口 4 越域 [1,3] 被拒〔fv2〕 | :107 |
表行 cases[5] |
| #1227 | _test_negative:92 |
岔口去路数 (2,4) 被拒(恒 2/3 已锁)〔fv2〕 | :107 |
表行 cases[6] |
| #1228 | _test_negative:97 |
字段键集非 ROW_KEYS 闭集被拒〔fv2〕 | :107 |
表行 cases[7] |
| #1229 | _test_negative:100 |
键重复行被拒〔fv2〕 | :107 |
表行 cases[8] |
| #1230 | _test_negative:102 |
战斗保底 -1 被拒(≥0)〔fv2〕 | :107 |
表行 cases[9] |
| #1231 | _test_negative:105 |
空表域校验零错误(合法态)〔fv2〕 | :107 |
表行 cases[10] |
新站点标签模板 域校验:%s(期望%s,实际%s)〔fv2〕:%s 即旧标签原文(表内逐字保留),期望/实际 附违例明细串。
C2 RNG 黄金向量族(8 → 1)· game/tests/unit/data_config/rng_stream_boot_test.gd
| 旧序号 | 旧站点 | 旧标签 | 新站点 | 处置 |
|---|---|---|---|---|
| #1239 | _smoke_initialize:37 |
统一流向量 m=42 scope=0(=旧 board_gen scope0 连续性锚) | :40 |
golden[0](循环标签补注 scope0 锚语义) |
| #1240 | :38 |
统一流向量 m=42 scope=1 | :40 |
golden[1] |
| #1241 | :39 |
统一流向量 m=42 scope=2 | :40 |
golden[2] |
| #1242 | :40 |
统一流向量 m=42 scope=3 | :40 |
golden[3] |
| #1243 | :41 |
统一流向量 m=42 scope=4 | :40 |
golden[4] |
| #1244 | :42 |
统一流向量 m=42 scope=5 | :40 |
golden[5] |
| #1245 | :43 |
统一流向量 m=42 scope=6 | :40 |
golden[6] |
| #1246 | :44 |
统一流向量 m=42 scope=7 | :40 |
golden[7] |
黄金向量八值逐字不变;标签由逐行写死改为 scope=%d 循环变量,grep 锚 统一流向量 m=42 scope= 保留。
C3a 奖励点头部禁词族(3 → 1)· game/tests/unit/presentation/player_copy_sweep_test.gd
| 旧序号 | 旧站点 | 旧标签 | 新站点 | 处置 |
|---|---|---|---|---|
| #1383 | _sweep_narrator:59 |
奖励点头部零「同权重」旧话(u3 清零)〔wa4〕 | :60 |
禁词表行「同权重」 |
| #1384 | :60 |
奖励点头部零「同上限」旧话(u3 清零)〔wa4〕 | :60 |
禁词表行「同上限」 |
| #1385 | :61 |
奖励点头部零「提升池」旧话(u3 清零)〔wa4〕 | :60 |
禁词表行「提升池」 |
标签模板 奖励点头部零「%s」旧话(u3 清零)〔wa4〕,禁词作参数,与旧标签逐字同形。
C3b 图例封印行禁词族(2 → 1)· 同文件
| 旧序号 | 旧站点 | 旧标签 | 新站点 | 处置 |
|---|---|---|---|---|
| #1389 | _sweep_legend:76 |
图例封印行零「插错」(u4 旗族遗留词干清零)〔wa5〕 | :76 |
禁词表行「插错」 |
| #1390 | :77 |
图例封印行零「挖雷」(u4 雷字清零)〔wa5〕 | :76 |
禁词表行「挖雷」 |
标签模板 图例封印行零「%s」〔wa5〕;seal_row 取值表达式(size > 2 守卫)逐字保留在循环体内。
C4 站桩蓄力置位四入参(4 → 1)· game/tests/unit/presentation/standee_fx_sweep_test.gd
| 旧序号 | 旧站点 | 旧标签 | 新站点 | 处置 |
|---|---|---|---|---|
| #1407 | _init:95 |
蓄力技能(heavy)置 _intent_charge=true〔wd2〕 |
:103 |
入参表行 ["damage","heavy",true,…] |
| #1408 | :97 |
非蓄力攻击技(goblin_slash)零置位〔wd2〕 | :103 |
入参表行 ["damage","goblin_slash",false,…] |
| #1409 | :99 |
增益系零置位〔wd2〕 | :103 |
入参表行 ["buff","goblin_rage",false,…] |
| #1410 | :101 |
普攻零表示路径复位 _intent_charge〔wd2〕 |
:103 |
入参表行 ["damage","basic",false,…] |
判定式 s1._intent_charge == 期望 与四旧例同谓词;set_pending 入参与旧例逐项相同。
C5 字体字形集三组(3 → 1)· game/tests/unit/presentation/ui_font_asset_test.gd
| 旧序号 | 旧站点 | 旧标签 | 新站点 | 处置 |
|---|---|---|---|---|
| #1583 | _init:18 |
中文字形在集(攻/雷/旗/封) | :30 |
字形组「攻雷旗封」 |
| #1584 | :20 |
中文字形在集(危——已开危险格字形换代前置,迭代36 u12/wa9) | :30 |
字形组「危」 |
| #1585 | :21 |
ASCII/数字字形在集(A/0/%) | :30 |
字形组「A0%」 |
判定由逐字 has_char 合取改为组内逐字扫描,标签附缺字明细(缺字集为空即绿)。
C6 锻造工作间长剑/轻甲双行(2 → 1)· game/tests/unit/presentation/forge_workbench_test.gd
| 旧序号 | 旧站点 | 旧标签 | 新站点 | 处置 |
|---|---|---|---|---|
| #1336 | _run:63 |
长剑行:购买钮「锻造 20」(0 级位几何价)+选中钮「当前」禁用〔锻造工坊批 V13〕 | :64 |
行表 ["sword","长剑"] |
| #1337 | :66 |
轻甲行:购买钮「锻造 20」+选中钮「当前」禁用〔锻造工坊批 V13〕 | :64 |
行表 ["light","轻甲"] |
谓词取并集申报:旧 #1336 含 not buy_btn.disabled 与 select_btn != null 两子句、#1337 缺这两子句。合并后统一用 #1336 全谓词(只增不减,轻甲行增补 select_btn != null 与 not buy_btn.disabled 两子句)——已在用户裁决时呈报并随「六组全批」批准。标签统一为 %s行:…(0 级位几何价)…,两种行名均保留可 grep。
3. 件核
| 项 | 改前 | 改后 | 判据 |
|---|---|---|---|
| 六套件静态站点 | 33 | 7 | 冻结册逐行比对 |
全清单静态条数(--diff) |
1587 | 1561 | python tools/extract_checks.py --diff game/tests/验证集清单.md:消失 33/新增 7,与上表逐条对应 |
| 运行期条数(六套件) | 17/13/22/18/5/12 | 17/13/22/18/5/12 | 合并前后同值;ui_font 5<6、forge 12<13 的静态差为失败分支站点(装载失败/字体缺失 Kit.check(…, false)),绿跑不执行,改前即如此 |
| 套件全量回归 | — | 65 套件全绿 | unit.log:[run_all] all green (65 suites) |
| 全码域闸 | — | all_green | 回执 commit fd6cf968:domain=code、dirty_game=false;01/02/10 绿;09 存量红指纹 8467b4588a20 零新增;00/03/04/05/11 影响面选闸 SKIP(diff 全在 game/tests/ 测量面) |
| 合并 | — | 87d241c1 |
合并后主区 --editor --quit 退出 0;python tools/run_smoke.py PASS(15 项检查,三硬闸全过) |
运行期条数不变+每个旧标签都在循环数据里逐字保留=验证项目覆盖逐条不变的直接证据;静态条数降 26=本批唯一预期变化。
4. 余账与去向
| 余账 | 处置 |
|---|---|
| 类别②(内部面断言被入口严格承载) | A+B 批实测 0 条,不再找 |
| C 档候选 | 六组全数执行,C 档本波清零;无剩余候选 |
| D 档四处(theme:215/217 × type_glow:148/150、level_shop_economy 现行图 vs 扩面段) | 2026-10-28 用户裁全保留,不属精简账 |
| 恒真与名实不符断言五条 | 判据缺陷另账 → 待办清单新登记「恒真与名实不符断言五条——判据缺陷修正」(feat_vouchers:51/treasure_effects:263/level_shop_economy:593/:696/system_contracts:66-67) |
Kit.check_quiet 静态站点 407 个在提取器口径外 |
→ 待办清单新登记「断言提取器改版——覆盖 Kit.check_quiet 静默通道」 |
5. 纪律自检
- 无删断言、无放宽阈值、无缩小扫描面、无下层直调替换:33 条判据全部保留为循环表行,输入集与判定式逐条对应(C6 为谓词并集,已申报)。
- 无变异法、无撤销类取证;绿由保持断言复跑取得(整套件全绿)。
- 冻结册未动一字,
--diff差异面与申报表逐条对齐。