20 KiB
迭代 53 验收审计(2026-11-05)
- 审计员:独立会话子代理——未参与本迭代任何实现、设计或写卡工作,只读证据做审计。
- 审计对象:迭代 53 两张需求卡片——卡①卷轴视口批(
reports/需求卡片-卷轴视口批-2026-11-05.md)+卡②改写族孤儿机制与退役名清退批(reports/需求卡片-改写族孤儿机制与退役名清退批-2026-11-05.md)+卡① golden 扩项(2026-11-05 用户裁两 Shot 面)。 - 实现报告:
reports/iter53-实现报告-2026-11-05.md(两卡「实际改动—验收对照表」为逐行核对基准)。 - 验收档与实际执行深度:两卡均申报「中」档;本次按 test-conventions §8.7 中档执行——对照表逐行全量核对(两卡 R 行逐行)、判据绑定面抽查(超出下限)、测试削弱检查逐处、直查例外核对逐条、判据出处抽查 6 处。最窄测试复跑=省略,该格写「合回后 CI 现查补记」(合并尚未发生——本审计为合并前置闸,远端 CI 现查读数待合回落地后按
tools/ci_check.sh <合并提交>补记;静态 grep/文件核对类检查由审计员当场重跑,不属省略面)。 - 基线提交:
709d9a85..8b4399ad(iter53 分支;7 笔实现笔 c1043902/4e87a012/b5c21e3a/1bd50304/ed793e8c/6394abf7/78e08234 + 1 笔并 master 8b4399ad)。工作树存在本机 Godot 导入元数据漂移(若干*.png.import未提交改动),不属提交面审计对象。 - 审计动作面:
git diff 709d9a85..HEAD全量过目(37 文件);测试/探针/闸件改动逐 hunk 核对;契约 1 五词 grep、40 名退役名全扫、契约 5 残留 grep 由审计员当场重跑。
卡① 卷轴视口批(验收档:中|执行深度:中档)
对照表逐行核对(全量)
| 行 | 结论 | 依据(文件:行) |
|---|---|---|
| R1 浅图整幅居中无裁切 | 通过 | 断言在案且尾缀可 grep:game/probe/level_map_viewport_probe.gd:71/74/76〔卷轴批 V1〕;承载改造落地 level_map_viewport.gd:30-36(setup/clip_contents)+level_map_screen.gd:134-145(CenterContainer→视口件);真实入口=open_choices 真实停点(探针 :62-64,L1 固定种子直构 runner,start_level_external 注入)。运行读数=实现者「绿」在案;合回后 CI 现查补记 |
| R2 停点切换当前节点居中 x=640±2 | 通过 | 断言 level_map_viewport_probe.gd:221〔卷轴批 V2〕;断言钉屏空间投影(当前节点屏幕 x 对视口中心 ±2)——比卡面所写 viewport_center_canvas_pos() 调用更外层的真实观测,与 level-map.md:101/:154 判据①「居屏中线 x=640±2」同义,非削弱(观察 4);真实入口=断点停点重建+真实 open_choices(探针 :216-217)→ screen reanchor 接线 level_map_screen.gd:312-315+锚点提供方 :483-516。合回后 CI 现查补记 |
| R3 拖拽平移 | 通过 | 断言 level_map_viewport_probe.gd:137〔卷轴批 V3〕;真实输入沿=ProbeUiUtil.push_drag_at(game/probe/probe_ui_util.gd:146-166,press→motion×4→release 全经 push_input)打真实画布 _gui_input(level_map_screen.gd:381-403 拖拽态逐帧 pan_by)——未绕过改动点(探针全文零 pan_by 直调,grep 证);判据=视线位移=拖拽位移 40px 逐位。合回后 CI 现查补记 |
| R4 滚轮横滚 | 通过 | 断言 level_map_viewport_probe.gd:114/116/120〔卷轴批 V4〕;push_wheel_at(probe_ui_util.gd:168-176)经 push_input;映射 _wheel_pan_step(level_map_screen.gd:426-433,下/右=+60 前进向,代拍板白名单 5 授权)。合回后 CI 现查补记 |
| R5 clamp 包络与首末列可达 | 通过 | 断言 level_map_viewport_probe.gd:88/102/158/160/161/167/168〔卷轴批 V5〕;判据绑定 viewport_center_canvas_pos() 夹紧域(level_map_viewport.gd:76-77/:97-100/:111-114)+is_clamped_at_edge() 两极翻转(:81-86)+极值列入屏(:161-169,等价 spec 判据④);真实入口=超包络拖拽沿两极。合回后 CI 现查补记 |
| R6 拖拽不触发选路 | 通过 | 断言 level_map_viewport_probe.gd:200/201/206〔卷轴批 V6〕;拖拽沿确从候选节点上方起沿(:193 gpos=候选屏幕投影,:197 push_drag_at(self, gpos, …) 起点即候选);判据绑 route_chosen 发射面零计数(screen route_chosen.emit :465)+屏未关+阈值另一侧完整点击提交=1(:203-206,点击沿 press+release 成对经 push_input)。合回后 CI 现查补记 |
| R7 平滑滚动与减动效瞬切 | 通过 | 断言 level_map_viewport_probe.gd:245/249/258〔卷轴批 V7〕;tween 单段缓动 TRANS_CUBIC-EASE_OUT UiKit.motion(0.3)(level_map_viewport.gd:57-59);减动效走 ArmedTimer.motion_still()(armed_timer.gd:16-17=motion_scale<1)跳终态——探针置 UiKit.motion_scale=0.5 即设置面单点(settings_overlay.gd:96 同驱),判据同向在途+即达。合回后 CI 现查补记 |
| R8 指引件可见性与几何 | 通过 | 断言 level_map_viewport_probe.gd:272-278+浅图隐藏 :289〔卷轴批 V8〕;几何常量 FADE_BAND_W=70(level_map_viewport.gd:10)、CHIP_SIZE 240×30(:11)直挂 spec 判据②③;可见性=_sync_guidance 画布超窗判据(:181-191)。合回后 CI 现查补记 |
| R9 schema 头注指针反转(非行为) | 通过(静态重跑) | level_gen_params.gd:3-4+:70 反转落地;审计员重跑 grep:该文件「调参表」残留=0、「参数契约节」指向=2、--check-only 读数实现者在案。全仓唯一「调参表」残留=variation_table.gd:41(地形变异 v1.2 owner,不同文件不同域,不属本卡清退面) |
| golden 两 Shot 面(用户裁) | 通过 | game/probe/level_map_shot_probe.gd(PASS 签名 :36+落盘 fail-fast :89-91)+game/tests/golden/windows/lmap_entry.png/lmap_boss.png 已入库(6394abf7,Bin 215164/211513 字节)+tools/render_gate.sh:168-197 对拍段(PASS 签名+双图非零工件锚定+平台缺基线 SKIP 不判红)+tools/golden_baseline_refresh.sh --lmap 模式(:59-85,素材齐盘守卫)+game/tests/golden/README.md 台账随动;mac 缺基线义务已呈报(实现报告遗留 2+反哺点 6)。运行读数(changed=0.00% 双绿)=实现者在案;合回后 CI 现查补记 |
卡①补充核对:26 断言计数属实(探针 26 处 _check+尾缀〔卷轴批 V1..V8〕27 行含 1 处缺位告警);tools/probe_gate.sh:137-141 注册新探针;ui_struct_probe 本批零改动(未触其结构断言面,卡①削弱申报该项落空=无事);实现报告实现决定 1-7(拖拽态落屏侧/open_choices 平滑判据/提交沿移抬杆/代拍板白名单定值/resize 即席重锚/_fit_canvas 同帧/mouse_exited 清跟踪器)均有代码承载且不越卡 §12 白名单;7 笔实现笔无一触碰 design//两份根清单/game/tests/README.md(逐笔 name-only 核对)。
判据绑定面抽查(本卡抽 4 行,超中档下限 2 行)
- R6(如上)——
route_chosen零发射+屏未关+完整点击仍提交,三面钉在「拖拽不提交/点击提交」的特有提交面上。 - R2(如上)——当前节点屏空间投影=视口中线 ±2。
- R5(如上)——夹紧域+两极 edge 翻转+极值列入屏。
- R3(如上)——拖拽位移与视线位移逐位一致,且全程走引擎输入管线。
直查例外核对(逐条)
| 直查行 | 申报状态 | 结论 |
|---|---|---|
level_map_viewport_probe.gd:67 vp.get_child(0)(取视口画布子件) |
探针内注释已给理由(「画布=视口首子件——setup 注入序」,:61),对照表/实现报告未单列申报口径 | 缺漏(建议级,见末节 D2)——断言对象即承载结构本身,无公开可观测面可钉,风险零 |
level_map_viewport_probe.gd:266-268/:287-288 按名取 FadeL/FadeR/PanHint |
同上——探针内注释在案,对照表未单列 | 缺漏(建议级,并入 D2)——R8 断言对象即指引子件结构本身 |
| screen 侧私有成员 | 新探针未直读任何 screen 私有成员(_drag_active/_drag_press_pos 零探针触达);既有「探针直读冻结」惯例面(level_map_screen.gd:39/:57-64)未扩 |
通过 |
卡② 改写族孤儿机制与退役名清退批(验收档:中|执行深度:中档)
对照表逐行核对(全量)
| # | 结论 | 依据(文件:行) |
|---|---|---|
| R1 摘四段不可达改写分支 | 通过(静态面重跑一致;运行读数合回后 CI 现查补记) | diff 逐段核对:damage_controller.gd 命中侧交换/免掷覆盖/spike 置位/移档调用/增伤侧/spike 倍乘/_discount_shift_up 整函数全摘;_ctx_rewrites 返回键集={roll_read,threshold,crit,discount,clamp_hits}(:301-303)、_hero_attack_ctx 摘 spike_ready(:278-281)——与卡 T1 收窄键集逐字一致;armor_roll 发射点保留不接收返回值(:289-290,卡 3.6 口径);spike_ready/ar_hits/shift 残留 grep=0(审计员重跑)。六组逐字节对拍 diff=0 与三套件 exit=0=实现者读数在案;dump_battle 六组参数面(seed 42 默认+参数覆盖,dump_battle.gd:13/:21)核对成立 |
| R2 EFFECT_KINDS 摘 spike | 通过 | effect_engine.gd:30 词表摘名;断言 effect_kind_retired_test.gd:89「③词表闭面:kind=spike 出域拒绝」在案,沿既有 _assert_rejected/_inject 骨架(卡 T2 明示沿用);注入形态偏差(do.kind=spike,非卡 T2 括注 kind=modify_ticket+mode=spike)=实现决定 8 申报在案且经审计员核实——validate_trigger_row(effect_engine.gd:382-396)确无 mode 值域检查,括注形态无拒绝通道,实现口径与断言名/R2 判据绑定面(词表出域)一致。运行读数(负域套件 exit=1 四探针全拒)合回后 CI 现查补记 |
| R3 DO_KEYS 摘 trade_hit/trade_atk | 通过 | effect_engine.gd:80-82 摘两键;断言 effect_kind_retired_test.gd:92「④do 键闭面:trade_hit 出域拒绝」在案。运行读数合回后 CI 现查补记 |
| R4 注释面退役名清零 | 通过(40 名全扫审计员重跑) | 审计员自解析 design/content-archive/道具退役素材库.md 两表 40 名(41 减现役淬毒刃纹)重扫 game/ 全域 .gd/.tres/.md/.tscn:命中仅 3 行=treasure_items_test.gd:31/33/35 StubDB 夹具名——与卡 §5 留底申报逐行一致;契约 2 抽 4 处(grant_segment.gd:232「完美布防→封印全中倍率」、damage_controller.gd:109「猎巢人→nest_count 订阅消费面」、reward_grant.gd:130「掘进蓄能→付费积点账本」、grant_segment.gd:359「雷区图谱→标中雷追加」)——职责陈述(做什么/按什么序/取值从哪来)逐处保留,只换名;宿主套件绿=实现者读数,合回后 CI 现查补记 |
| R5 减半明细行去退役件名 | 通过 | reward_grant.gd:226 标签→「挖掘惩罚减半(%d→%d)」+effect_id→nest_halve;断言随动 meta_progression_forge_test.gd:694/697/699-700,强度三件(nc_hit 非空+等值「挖掘惩罚减半(6→3)」+零「挖雷」)与改前逐项对齐(基线 709d9a85:693-701 核对);grep nest_counter=0(审计员重跑)。合回后 CI 现查补记 |
| R6 空集拒绝 reason 去退役件名 | 通过(静态重跑) | reward_grant.gd:189 reason 前缀→「中立移除:…」,{"ok": false} 形态未动(diff 核对);grep 爆破工兵包 game/=0(审计员重跑);观测面局限申报(reason 不可达、禁造行)在卡 §8/对照表一致在案 |
| R7 反弹明细标签去退役件名 | 通过(静态重跑) | grant_segment.gd:165-166 标签→「反弹伤害」+归因串→attune_nest_halve;契约 3 逐字核对成立:channel=="reflect" 判据、开单参数字典(channel/base_value/target_rule/ri/origin_cell)、reward_grant.submit 调用全未动(diff 对照基线 709d9a85:164-170);grep 惊巢反制/attune_nest_counter=0(审计员重跑)。运行读数合回后 CI 现查补记 |
| R8 sim 恒 false 匹配删除 | 通过(静态重跑) | level_autoplay.gd:414-418 highlight=="seal_hit" 单判据保留、contains(雷区图谱) 条件与 :415 注释随删;grep 雷区图谱 game/=0(审计员重跑)。套件绿=实现者读数,合回后 CI 现查补记 |
卡②补充核对(契约逐条):契约 1 三条 grep 审计员重跑全零——tables 五词 0、tree_rules 面 0、cell_removal 表面 0 仅 schema 在册(treasure_item_table.gd:20/:26);feats.tres:855 clamp_bonus 现役一行对照记录与实现报告 T0 一致,表内现存 mode 值(queue/round/battle/clamp_bonus/refresh)零退役四模式。契约 5 禁留空壳——spike_ready/ar_hits/shift/_discount_shift_up 残留 grep 全零(审计员重跑)。契约 6 实现批禁写文档——7 笔实现笔 name-only 核对零触 design//待办清单/体验验证清单/game/tests/README.md。契约 7 零新增数值——diff 内零 .tres 表值改动。反哺点清单 7 条落点齐(含「明细标签是否入表」裁决点+增益状态/伤害与护甲零命中备案)。
判据绑定面抽查(本卡抽 3 行)
- R2/R3(如上)——负域探针钉「退役词/键注入行→load_tables 拒绝+error 诊断≥1+进程退出码 1」;归属由夹具结构保证(copy_tables 全量现役表+唯一异常探针行)。观察 5:卡面写的「error 载荷含 effect_kinds 出域文案」未做逐字断言——沿用卡 T2 明示的既有骨架语义,非削弱。
- R5(如上)——step_row display_name 等值断言+非空+零旧词,判据绑减半路径特有发射面。
- R1 静态面(如上)——收窄键集逐字核对+摘除残留 grep,钉在「分支消亡」这一改动特有提交面。
测试削弱检查(逐处,两卡合并过目)
git diff 709d9a85..HEAD -- game/tests/ game/probe/ 全量 hunk 过目,共 5 文件:
effect_kind_retired_test.gd:纯新增(两探针常量+两次_assert_rejected调用+PASS 文案随动);既有探针①②与 quit 语义零改动;run_all.gd:195在册条目 expect=1/negative=true 未动。无削弱。meta_progression_forge_test.gd:恰 4 处期望串随 R5 换代(:694 匹配串/:697 描述/:699-700 等值串)+2 行注释(卡 3.3 表申报面)——断言强度逐项不降(非空+等值+不含旧词全保留),与卡 §8 削弱申报逐字吻合。无申报外削弱。variant_placement_test.gd:1 行注释(偏运硬币→订阅行,卡 3.3 表 :239 申报面),断言零改动。无削弱。ui_input_probe.gd:+16 行=case⑫断言段(图上命中提交沿)+case⑱ 雾段(雾下点击零提交)各补 release 沿——实现报告决定 3 申报在案;判据语义核对:雾段=零提交不变(且改为完整点击沿后更强)、命中段=提交沿随新语义移至抬杆(单 press 沿在新语义下不再是提交沿,不适配则必红——必要适配非放宽)。呈报笔误:申报写「case⑫⑰⑧」,实际落点两处、无 ⑰(case⑰ 未开格类型微光走_push_click既有成对沿,无需适配)(建议级 D3)。ui_struct_probe.gd:零改动——卡①「适配须保持语义」条款无事可核,非缺漏。
无申报外的断言删除、阈值放宽、扫描面缩小、换下层直调。
判据出处抽查(6 处,超下限 4 处)
| 断言预期值 | 规格出处 | 独立可写出性 |
|---|---|---|
| 居中 ±2(探针 R2 :221) | level-map.md:101「屏中线 x=640±2」/:154 判据①/:269 | 能——规格句直接给出 640±2 |
| 渐隐带 70px(探针 R8 :273-274) | level-map.md:104/:154 判据②「屏缘两侧各 70px 渐隐带」 | 能 |
| chip 240×30(探针 R8 :275-276) | level-map.md:104/:154 判据③「240×30、圆角 6」 | 能 |
| 「挖掘惩罚减半(6→3)」(forge 测试 :699-700) | 卡② §8 R5 判据明文+reward_grant.gd:226 契约 3 边界;6→3 可由测试构造独立推出(heal 行 power=6×halve 50% ceil=3) | 能——预期值在卡内先行锁定,非镜像实现 |
| 拖拽阈值 8px(DRAG_THRESHOLD,level_map_screen.gd:34) | 卡① §12 白名单 2「8px 附近 provisional 区间内定值」授权;spec :103 明示阈值实现期定值 | 能——授权面在卡,值属 provisional 自主面 |
| golden 两 Shot 面 | 2026-11-05 用户裁决(实现报告决定 9 在案):只对拍关卡最开始+Boss 节点 | 能——裁决记录在实现报告与 golden/README 台账双在案 |
六处均非「预期值只在实现里出现」的同义反复。
附加核对
- 能力行名实(game/tests/README.md:162-164 三行)::162 跟随行(_probe_follow_anchor/_probe_smooth_scroll_reduced_motion)与 :164 指引行(_probe_guidance_chrome)名实一致;:163 平移行的
_probe_clamp_bounds与落地名_probe_clamp_bounds_and_columns不一致(建议级 D1——卡① §5「批末收尾核对表上名与落地一致(改名则回表)」未回表,反哺点清单亦未收录;实现批禁写 README,正确通道=回写卡段/反哺点)。 - 负面套件在册:
game/tests/run_all.gd:195effect_kind_retired_test expect=1/negative=true 登记在位,卡② T2 未动在册条目——一致。 - S13 基线读数:
tools/gdstyle_baseline.txt恰 7 条且无本批触面键(level_map_screen/damage_controller/effect_engine/reward_grant/level_autoplay 均无键)——与实现报告 T0/T4 读数一致。 - 闸件缺陷呈报核实(实现报告遗留 1):
tools/gate_platform.sh:37kf="$(mktemp …)"即建文件+:48[ -f "$kf" ]恒真→恒 124,呈报描述与代码相符;probe_gate.sh:97kf="$TMP/killed.$RANDOM"(先赋路径不预建)为正确写法参照——呈报属实;该缺陷修法归工程批,本审计不裁定(不在验收对象内,已入反哺点 5)。
缺漏与观察清单
阻断级:无。
建议级(不阻断合并,归批后收尾/文档批):
- D1:能力清单
game/tests/README.md:163代表用例名_probe_clamp_bounds≠ 落地名_probe_clamp_bounds_and_columns(卡① §5 名实核对义务未回表;反哺点清单漏收)。 - D2:新探针对宿主内部结构的直查(
level_map_viewport_probe.gd:67get_child(0)+:266-268/:287-288 按名取指引子件)未按 test-conventions §8.7 第 4 条在对照表逐条申报口径;探针内注释已给理由(断言对象=承载结构本身,无公开观测面),screen 侧既有「探针直读冻结」惯例未被动用、新私有成员零直读,风险零。 - D3:实现报告/提交信息写「ui_input_probe case⑫⑰⑧ 补 release 沿」,实际落点为 case⑫断言段+case⑱雾段两处、无 ⑰——呈报笔误,判据语义已核保持。
观察(记录在案,不构成缺漏):
- O1:R2 判据绑定面用屏空间投影而非卡面所写
viewport_center_canvas_pos()调用——更外层真实观测,与 spec 判据①同义,非削弱;连带game/tests/README.md:162读面句与实况有轻微出入。 - O2:卡② R2/R3 负域探针未逐字断言错误文案(沿用卡 T2 明示骨架语义;归属由夹具唯一异常行结构保证)。
- O3:卡① T1 写「探针宿主沿组合根真实屏」、卡 §8 对照表写「场景探针实例化本屏」——卡内两处口径不一,实现取对照表口径且在对照表真实入口格如实呈现;
push_input真实输入管线口径照守(禁合成投喂的实质红线未破)。 - O4:探针宿主直构 runner(start_level_external)属 test-conventions §5.4 自动化测试直构口径,探针头注已申报。
审计结论
通过(可合并;合并落地后按中档梯度以 tools/ci_check.sh <合并提交> 现查读数补记「最窄复跑」格——零触发或不可判不作绿证)。
- 卡①卷轴视口批(验收档:中):对照表 10 行全通过;绑定面抽查 4 行钉面成立;削弱零申报外;判据出处 4+ 处独立可写出;缺漏 3 项均建议级(D1 能力行名实回表、D2 直查申报口径补记、D3 呈报笔误)。
- 卡②改写族清退批(验收档:中):对照表 8 行全通过;契约 1/2/3/5/6/7 审计员重跑/逐处核对全部成立;削弱恰为申报内 4 处期望串且强度不降;40 名扫描与卡 §5 留底逐行一致;无阻断项。
- golden 扩项:两 Shot 面用户裁决在案、基线入库、闸件对拍段与台账齐;mac 冻结义务已呈报(反哺点 6)。