Files
gplan-2/design/qa/ui-struct-probe-exit-report-2026-10-05.md
T

6.4 KiB
Raw Blame History

ui-struct-probe mini-loop · 出口报告(2026-10-05)

任务书:.zcode/plans/ui-struct-probe-miniloop-plan-2026-10-05.md(goal 开工令=/goal 完成 plan 全部工作——按 iter13 先例「本 prompt 即批准」,四拍板点 P1-P4 全取推荐案,代裁追认单见 §三)。

一、交付对账(计划书 T0-T6)

步骤 交付 状态
T0 探针骨架 game/smoke/ui_struct_probe.gd/.tscn——逐屏实例化 10 屏(start/settings/camp/confirm/debug/level_map/battle_hud/battle_end/bonus_pick/shop):菜单簇真驱动(组合根真实路径开关)+冒险簇真流推进(开冒险→地图选路态→选战斗节点→战斗 HUD)+兑付屏真实 open 面合成最小数据 ✅
T1 断言族 ①overlap 同屏操作钮两两不相交 ②equal_width 同父容器按钮等宽(差>1px 红)③offscreen 完全出视口红 ④zero_size 红 ⑤start 专项双列不相交(start_box/start_right 命名锚);ScrollContainer 内容系可滚动设计内豁免;WL 豁免表机制(现零豁免) ✅
T2 叠放修复 ui_assembler.gd 右列挂回 HBox 第二列(原 pad.add_child(right) 误挂 MarginContainer 与左列同矩形叠放——M2 双列失效根因);装配件命名 start_box/start_right 为探针锚 ✅
T3 按钮宽度纪律 ui_kit.button(text, min_w=216)——最小宽度基准+SIZE_FILL(VBox 列内拉满列宽等宽;HBox 行内不抢余宽);行板/角标/图标钮豁免 9 处(camp 5+shop 2+ap_bar 2+调试角标/诊断转储 2) ✅
T4 red-green 循环 六轮收敛(实录 §二),终局 PASS 全屏结构断言零红;负向验证=临时还原叠放 bug 探针必红(§四) ✅
T5 闸收口 probe_gate 全绿(含新段)+冒烟 772/0+run_all 14/15(唯一红=基线在册)+doc 三闸零新增(§五) ✅
T6 报告与改排 本报告+07 §⑪改排注记/§⑮分工注记/新增 §⑯复验项+台账 360 ✅

二、red-green 循环实录(六轮)

  1. R1 解析错:GDScript Variant 元素类型推断两处(var k := b.get_parent()/var gr := c.get_global_rect())——显式类型标注修复。
  2. R2 全屏 (0,0) 假红:modal 屏(settings/camp/confirm/debug)首次 visible 后容器排序不自动传播——size 已算而 position 停 0(4.7 行为,加帧无效实证)。修=采样前对屏根子树全部 Container 强制 queue_sort()。
  3. R3 camp offscreen 群:ScrollContainer 内容坐标系超出=可滚动设计内——offscreen/zero_size 断言豁免 scroll 子树(_in_scroll)。
  4. R4 debug 出屏两件:考证=_sim_btn/分隔条在浮窗 ScrollContainer 内容区(滚动超出合法),浮窗固定骨架(关闭钮 y=690)不出屏——随 R3 豁免消灯,非缺陷。
  5. R5 camp 底条爆宽 1616px(真缺陷):T3 首版 EXPAND_FILL 把营地行板钮拉到 435-622 宽→行板 524→横向禁滚 ScrollContainer 传播内容 min→营地面板撑到 1632px 全线出屏。修=工厂改 SIZE_FILL(EXPAND_FILL 会把行撑爆——注释在案)+行板紧凑钮 9 处豁免 min 0。
  6. R6 全绿:PASS 全屏结构断言零红;battle_hud 驱动修复(入口/兑付停点走 level_screen.open_choices 直传不写 _pending_candidates——候选改从 _cand_ids × runner.node_id_of(nodes()) 取)。

抓到的真缺陷两件:M2 双列叠放(用户实机目检发现+本批修复+探针回归闸);营地屏 1632px 爆宽(探针首次发现,T3 连带破坏,随豁免消解)。机检盲区结论:原 ui_layout_probe 为 53 行纯打印 dump 零断言,历次「layout 全绿」仅表示未崩——结构面此前无任何机检覆盖。

三、代裁追认单(goal 开工令按推荐案执行,4 项)

# 拍板点 执行形态
P1 按钮宽度形态 推荐案落地=同容器等宽+min 基准 216+SIZE_FILL;行板/角标/图标钮豁免(计划书 T3 豁免清单条款)
P2 探针载体 新建 ui_struct_probe;旧 ui_layout_probe 保留诊断打印用途不改名不退役
P3 编号归属 独立 mini-loop(bug=mini-loop 惯例),roadmap 不占迭代卡;台账号 360
P4 与渲染像素五闸关系 本批零触碰像素闸;五闸补跑仍挂 07⑮ 表现批周期闸;07⑮ 补分工注记(结构探针互补不替代)

四、断言有效性负向验证

临时还原 T2(右列改回误挂 pad)复跑探针——立刻红:[start][columns] 左列 (56,56)+(937,688) 与右列同矩形相交(双列叠放回归——M2 缺陷闸),随即还原复绿。探针非恒真,缺陷闸成立。

五、闸读数(worktree ui-struct-probe-20261005,HEAD 8944dca 基线)

闸 读数 判读
ui_struct_probe PASS 全屏结构断言零红 本批新增,已注册 probe_gate 默认必跑段
probe_gate --click 全绿(ui_input 十六断言+ui_struct+click 问题=0+残留 0) ✅
冒烟 772 项 0 失败(与基线 772 同——本批零冒烟断言增量) ✅
run_all 14/15 绿;唯一 FAIL=reward_overlay_test(master 既有在册红——秘宝批/技能池批台账同款,非本批新增) ✅
doc 死链 4=基线 4(06×2+奇物.md×2——本批未触碰文件)零新增 ✅
doc 术语 5=基线 5(主区对照)零新增 ✅
gdd_lint 53 vs 基线 50:+3 全为本批 07 登记注记(与历史批 §⑫-⑮ 登记注记同款形态);07「表格占比 8%」FAIL=基线既有(主区对照同败) ✅
负向验证 叠放还原→探针红→还原→绿 ✅

六、遗留与移交

  1. 主区合并后复跑:merge 后主区冒烟+probe_gate 复跑(合并惯例)。
  2. 实机复验(07⑯):标题屏双列+按钮等宽+营地不出屏,约 2 分钟,归用户。
  3. 07⑪ 统一验证窗口仍开:贫矿脉六项体感目检待用户时点。
  4. 渲染像素五闸(golden_compare/shot_probe/fx_probe/ui_layout_probe/board_shot)补跑义务不变,挂 07⑮ 表现批周期闸。
  5. 宽度基准 216 为 provisional:菜单/弹窗/结算操作钮现值;若其他屏出现紧凑域挤压,按「豁免传 0」扩展,禁回调全局基准。
  6. 探针采样机制注记:modal 屏首次 visible 后需强制 queue_sort(Godot 4.7 容器排序不自动传播)——后继新探针如采 modal 屏矩形须复用 _force_layout 手法(坑在册)。