Files
gplan-2/reports/iter53-实现报告-2026-11-05.md
T

14 KiB
Raw Blame History

迭代 53 实现报告(2026-11-05)

  • 接收方:待办清单条目「超预算图策略升级路径——等比缩放与滚动视口两案待裁」(卡①卷轴视口批)+「damage_controller 按序改写族——内容孤儿机制与退役名注释层」(卡②改写族清退批)。
  • 需求卡片:reports/需求卡片-卷轴视口批-2026-11-05.md(验收档:中)+reports/需求卡片-改写族孤儿机制与退役名清退批-2026-11-05.md(验收档:中)。
  • 独立验收审计:reports/iter53-验收审计-2026-11-05.md(未参与实现的会话执行;两卡均按中档深度)。
  • 执行形态:整迭代单工作区(g-plan2-iter53,两卡均未声明可并行),卡序=卷轴视口 → 改写族清退。

各卡状态

卡 状态 T 卡 凭据摘要
卡①卷轴视口批 完成(T0–T4 全收口+golden 扩项冻结) T0 基线读数在案/T1–T3 实现波提交 c1043902/T4 指针反转 4e87a012/golden 扩项 6394abf7 新探针 26 断言全绿+探针族全绿+冒烟 15/0+S13 基线内 7 新增 0+渲染闸全绿(lmap 双图 changed=0.00%)
卡②改写族清退批 完成(T0–T5 全收口) T0 基线读数在案/T1 b5c21e3a/T2 1bd50304/T3+T4 并笔 ed793e8c 三套件+四套窄测 exit=0+对拍六组逐字节 diff=0+四探针负域全拒+契约 1 三条 grep 全零+40 名注释面清零

卡① 实际改动—验收对照表

需求点 改动(文件:行) 验收测试(落点+尾缀) 层级 真实入口 判据绑定面 结果
R1 浅图整幅居中无裁切 level_map_screen.gd 三段页承载+level_map_viewport.gd _axis_center_offset 居中分支 level_map_viewport_probe.gd:71/74/76〔卷轴批 V1〕 探针 open_choices 真实停点(L1 固定种子直构 runner) 画布≤窗居中 offset 定位+画布矩形 encloses 于视口 绿
R2 停点切换当前节点居中 x=640±2 level_map_viewport.gd reanchor+screen _viewport_anchor/open_choices 接线 level_map_viewport_probe.gd:221〔卷轴批 V2〕 探针 断点停点重建+真实 open_choices 当前节点画布投影=视口中线±2 绿
R3 拖拽平移 screen _on_canvas_motion 拖拽态逐帧 pan_by(含激活帧位移) level_map_viewport_probe.gd:137〔卷轴批 V3〕 探针 push_drag_at 合成沿走 push_input 视线位移=拖拽位移(40px 逐位) 绿
R4 滚轮横滚 screen _wheel_pan_step 映射(下/右=前进向) level_map_viewport_probe.gd:114/116/120〔卷轴批 V4〕 探针 push_wheel_at 合成滚轮沿 单档 ±60 逐位+窗内不钉边界 绿
R5 clamp 包络与首末列可达 level_map_viewport.gd _axis_pan_offset/is_clamped_at_edge level_map_viewport_probe.gd:88/102/158/160/161/167/168〔卷轴批 V5〕 探针 超包络拖拽沿两极 中线恒在夹紧域+两极 edge=true+首末列中心入屏+入口组包围盒锚点 绿
R6 拖拽不触发选路 screen _on_canvas_click 拖拽抬杆不提交 level_map_viewport_probe.gd:200/201/206〔卷轴批 V6〕 探针 拖拽沿/完整点击沿起止候选上方 route_chosen 零发射+屏未关;完整点击仍提交=1 绿
R7 平滑滚动与减动效瞬切 level_map_viewport.gd reanchor(smooth) tween UiKit.motion(0.3)+ArmedTimer.motion_still 跳终态 level_map_viewport_probe.gd:245/249/258〔卷轴批 V7〕 探针 可见屏停点切换+UiKit.motion_scale 置位 平滑有 tween 中间帧(同向在途)+减动效即达 绿
R8 指引件可见性与几何 level_map_viewport.gd _build_guidance/_sync_guidance level_map_viewport_probe.gd:271–287〔卷轴批 V8〕 探针 深图真实停点+浅图复验 渐隐带 70px+chip 240×30 居中可见;浅图隐藏 绿
R9 schema 头注指针反转(非行为) level_gen_params.gd:3-4/:66 头注 静态判据:grep「调参表」残留=0、「参数契约节」指向=2;--check-only 零错 静态 — 全仓无「域并单点=调参表」残留 绿
golden 两 Shot 面(2026-11-05 用户裁) level_map_shot_probe.gd+golden/windows/lmap_entry·lmap_boss+render_gate.sh 对拍段 渲染闸「关卡视口 golden 逐像素」段(changed=0.00% 双绿);重采集确定性=0.00% golden 窗口化真实渲染+固定种子 两 Shot 逐像素 ≤16 差/≤2% 绿

非行为改动行:无(R9 之外全部行为面;.uid 边车随新件入库)。

卡② 实际改动—验收对照表

# 需求点 改动(文件:行) 验收测试(落点+尾缀) 层级 真实入口 判据绑定面 结果
R1 摘四段不可达改写分支 damage_controller.gd(原 :297-302/:305-309/:310-314/:316-323/:350-353/:367-372/:623 全摘+spike_ready 键摘) damage_controller_test.gd(exit=0);roll_multiplier_test.gd(exit=0);round_flow_skill_pool_test.gd(exit=0);dump_battle 六组改前改后逐字节比对 diff=0 单元+集成 BattleOrchestrator.begin_battle() 全链 step_row 流逐位=改前基线(L{1,2}×S{42,779401,779501});静态=契约 1 三条 grep 全零+摘后 spike_ready 零残留。观测面局限申报:零现役注册行使分支不可达,禁注入表行取证(卡 §8 申报在案) 绿
R2 EFFECT_KINDS 摘 spike effect_engine.gd:30 effect_kind_retired_test.gd:89「effect_kind_retired_test/③词表闭面:kind=spike 出域拒绝」 单元(负面,独立进程) ConfigDB.load_tables() → validate_trigger_row do.kind=spike 行被拒+error 诊断在案+退出码 1(负面期望码) 绿
R3 DO_KEYS 摘 trade_hit/trade_atk effect_engine.gd:82 effect_kind_retired_test.gd:92「effect_kind_retired_test/④do 键闭面:trade_hit 出域拒绝」 单元(负面,独立进程) 同上 带 trade_hit 键 do 字典被拒+退出码 1 绿
R4 注释面退役名清零(13 文件) T3 35 处注释改写(对照卡 3.3 表逐处) 静态判据:40 名全扫仅剩卡 §5 留底 3 行(treasure_items_test:31/33/35 StubDB 夹具名);宿主套件逐位不变(四套窄测 exit=0) 静态(闸件扫描) 宿主套件回归(改写面不进运行期) 注释面命中 0+套件绿 绿
R5 减半明细行去退役件名 reward_grant.gd:226(标签→「挖掘惩罚减半(%d→%d)」+effect_id→nest_halve) meta_progression_forge_test.gd:694/697/699/700(断言串随动,非空+等值+不含旧词强度不降) 集成(信号采集) 锻造锋线满级特效 → begin_battle → mine_hit 减半路径 → step_row display_name==「挖掘惩罚减半(6→3)」+power 减半数值与发射次数逐字不变+grep nest_counter=0 绿
R6 空集拒绝 reason 去退役件名 reward_grant.gd:189(→「中立移除:…」) 静态判据:grep 爆破工兵包 reward_grant.gd=0;table_structure_guard_test.gd exit=0 静态+单元 通道校验面(零现役行不可达) grep 零命中+通道校验绿。观测面局限申报:reason 不可达,禁造行取证 绿
R7 反弹明细标签去退役件名 grant_segment.gd:166(标签→「反弹伤害」+归因串→attune_nest_halve;channel=="reflect" 判据与开单参数字典逐字不动) 静态判据:grep 惊巢反制 game/=0、attune_nest_counter=0;round_flow_skill_pool_test.gd exit=0 静态+集成 mine_hit 订阅施加链(reflect 行族零表行,今天不可达) grep 零命中+发射面零变化回归。观测面局限申报:禁造行取证 绿
R8 sim 恒 false 匹配删除 level_autoplay.gd(原 :415 注释+:421 contains(雷区图谱) 条件删,highlight==seal_hit 单判据保留) 静态判据:grep 雷区图谱 game/=0;sim 驱动链套件绿(四套窄测含 autoplay 消费面 exit=0) 静态+单元 autoplay 驱动链(测量面) grep 零命中+套件绿。观测面局限申报:恒 false 条件不可达 绿

非行为改动行:T3 注释面 35 处(由 R4 行覆盖);契约 3 约束下 :226/:166 仅标签与归因串文本变动、取值/位序/载荷键逐字未动(R1 对拍 diff=0 为其逐位证据)。

读数义务对账(卡内 T 卡产出)

  • 卡①T0:S13 基线无 level_map_screen 键(记「无键、按工具默认」);ui_struct_probe PASS 全屏结构断言零红;screen_flow_probe PASS;冒烟 15 项 0 失败。
  • 卡①T4 复跑:S13 基线内 7 条、新增 0(_on_canvas_input 重构触发的 max-branches 新违规已拆 _on_canvas_motion/_on_canvas_click/_wheel_pan_step 归零);ui_struct_probe/screen_flow_probe 复跑绿(探针族全绿内含)。
  • 卡②T0:契约 1 三条 grep——game/data/tables/ 内 spike/armor_rewrite/discount_shift/trade_hit/trade_atk 全零(对照记录=feats.tres:855 clamp_bonus 现役一行);tree_rules 面零;effect_kinds 面 cell_removal 表面零(仅 schema 在册:treasure_item_table.gd:20/:26,本批不摘通道)。S13 四文件无登记键(damage_controller/effect_engine/reward_grant/level_autoplay 均按工具默认)。改前对拍基线六组落盘(L{1,2}×S{42,779401,779501})。改前断言串=「惊巢反制——危险格挖掘惩罚减半(6→3)」(:693/:698-701 现行文本抄录在案)。
  • 卡②T5:改后对拍六组 diff=0;40 名全扫终读数=3 行留底夹具;R5–R8 静态 grep 全零;负域套件 exit=1(期望码)四探针全拒。
  • 存量触面 S13 对照:damage_controller(分支数/函数长度随摘除下降,无新增键);effect_engine(常量字面量变短,方法数/成员数不变);reward_grant/level_autoplay(删文本与恒 false 条件)——S13 终读数=基线内 7、新增 0、恶化 0。

实机目检总清单(登记不阻塞)

目检项 来源卡 承载
深度 13+ 图拖拽可达首末列、推进跟随方向感、chip 不碍选路 卡① 窗口化实跑截图已冻结(golden/windows/lmap_entry·lmap_boss);真人试玩复核登记体验验证清单(归批后收尾)
结算明细行减半标签「挖掘惩罚减半(6→3)」一眼可读、无退役件名突兀感 卡② 实现报告登记;真人目检归体验验证清单(归批后收尾)

实现决定记录(超白名单/超卡片明列面逐条备案)

  1. 拖拽态成员落屏侧(卡①§11 把 _drag_active/_drag_accum 枚举进视口件成员,§6 职责边界却写明视口件「只管裁切/offset/clamp/跟随」、拖拽判定留画布)——取 §6 职责边界优先:拖拽判定状态随输入处理落 screen(_drag_active/_drag_press_pos),视口件成员 6 个(≤8 达标)、公开方法 5 个(≤20 达标)。撤销方式=成员迁视口件+canvas 经方法驱动(纯结构搬移)。
  2. open_choices 平滑判据=有无当前节点(卡①§6 写「reanchor(false) 首锚」、T2 写「停点切换/回图接 reanchor(true)」,open_choices 同时承载两路径)——合并读法:入口停点(current_node_id<0)即达=首锚,其余停点/兑付回图平滑=跟随。R2/R7 断言均经此路径。
  3. 提交沿移至抬杆(原提交在按下沿;布局决策 5 阈值区分语义下按下时无法预知是否成拖拽,R6 要求拖拽沿零发射)——完整点击(按下→未超阈值抬杆)提交、拖拽抬杆不提交;ui_input_probe case⑫/⑱ 补 release 沿适配(验收审计 D3 订正:原呈报误写⑰,实际落点两处)(判据语义「图上真实点击提交选路」不变,输入形态更完整)。
  4. 滚轮步进 60px、渐隐带色 BG_ROOT 不透明端 0.9、chip 底 HP_BAR_BACK/描边 STONE/文字 WARM、缓动 TRANS_CUBIC+EASE_OUT——卡 §12 白名单 4/5/3 授权面内定值。
  5. 视口件 NOTIFICATION_RESIZED 即席重锚——首开布局晚于 open_choices 锚定(隐藏子树容器排序首可见帧才传播,4.7 行为;实证=探针首跑 y 锚偏 88px),resize 即席 reanchor(false) 收敛;同时是窗口尺寸变化的正确行为。
  6. _fit_canvas 画布尺寸同帧收敛(canvas.size = _content_size 显式置)——视口锚点数学与 _layout 同源读画布尺寸,容器延迟收敛不等锚点。
  7. mouse_exited 清拖距跟踪器——按下即武装的跟踪器在丢失 release 沿(alt-tab 等)后残留会把后续 motion 误判为拖拽激活(ui_input_probe case⑰⑧ press-only 实证);非拖拽态离画布即解除。
  8. 卡②探针①注入 do.kind="spike"(卡 T2 括注 kind=modify_ticket+mode=spike 形态)——括注形态无拒绝通道(validate_trigger_row 无 mode 值域检查,mode 属载荷字段非词表),按断言名「词表闭面:kind=spike 出域拒绝」与 R2 判据绑定面(effect_kinds 出域文案)的机制注入 kind 形态。
  9. golden 两 Shot 面口径(卡①现状事实写「本批不触渲染闸对拍」、批纪律 iter 4.4+test-conventions §8.2 要求扩项)——呈裁用户,2026-11-05 裁「只处理最初始的和最终的:关卡最开始+关卡 Boss 节点,中间过程不对拍」,按两 Shot 面扩项冻结。
  10. 卡② T3 与 T4 并笔提交——卡 §10 白名单授权面。

遗留读数义务与发现呈报

  1. 闸件缺陷呈报(工程批):tools/gate_platform.sh 的 gate_run_timeout 用 mktemp 造超时标志文件——mktemp 即建文件,末尾 [ -f "$kf" ] 在 Windows(Git Bash)恒真→恒返回 124。被各闸「判定锚工件而非退出码」口径掩住(菜单/棋盘 golden 段与本批 lmap 段均工件锚定,不受影响);tools/golden_baseline_refresh.sh 的 7 分钟等待症状(guard 子Shell sleep 420 未被 kill 短路)同根。修法=改 kf="$TMP/..." ; rm -f "$kf"(run_suite 同款,probe_gate.sh 已是正确写法)。本批不代修(闸件改动归工程批)。
  2. mac 端关卡视口基线冻结义务:golden/mac/ 缺 lmap_entry/lmap_boss——渲染闸缺基线记 SKIP 不判红(windows 已锚即盯),mac 冻结归 mac 侧跑 golden_baseline_refresh.sh --lmap。
  3. 效果通道与事件词的零现役普查——已在待办清单在册(卡② §5 去向),本批不扩。
  4. 卡① level-map.md 同步面:实现未发现 spec 缺口(布局决策 5 行为四条+像素级判据+AC 全部有绿读数承载),零反哺。