Files
aetherbound-guild/docs/plans/M59_PROBE_INK_CHECKS.md
T

5.5 KiB
Raw Blame History

M59 探针墨迹与文案宽度检查(M58-I11)

Owner 于 2026-09-13 授权先做 M58-I11(M58 计划记录的建议项),再进入 DEV-1R。本里程碑只做测试基建:把"标签墨迹 vs 兄弟图标、vs 承载面、 vs 槽宽"的机器检查加进 Market 视觉探针,并补上最长线上文案 fixture, 让 M58-C 那类缺陷在 gate 就 fail,而不是到 owner 眼前。

玩家可见停止点

没有页面变化。 停止点是一条更严格的探针:

  • m52_market_visual_probe.gd 在每次捕获前运行墨迹检查,任一违反即 不打印成功 marker 并以非 0 退出;
  • 新增"最长线上文案"fixture(中英各一),在 760×360、844×390、 1280×720 下走同一检查与截图;
  • 检查器自带负例自检(故意构造重叠/超宽),证明它真的会失败。

顺序步骤

  1. M59-A — 检查器与最长文案 fixture。 COMPLETE (2026-09-13)。
    • 新增共享检查器 runtime/tools/ui_ink_check.gd(测试基建,不进运行时): 遍历视图内每个 Label,断言 (a) Font.get_string_size(text) ≤ 标签矩形宽(省略号截断即失败); (b) 标签的墨迹盒与同模块内图标/徽章矩形不相交; (c) 标签矩形不越出其所属模块矩形。 提供 self_test() 负例(构造重叠与超宽,必须报违例)。
    • 探针 fixture 增加最长线上文案用例:职业名、特性名、详情行、价格、 金币数、岗位计数全部取线上最长形态(中英各一份),驱动同一检查。
    • 修复检查器发现的问题:fixture 问题在 fixture 修;产品问题若属于 M58 材质族(墨迹盒/槽宽/分带)直接修,否则记入 issue register 不扩步。
  2. M59-B — 源绑定验证与交接。 COMPLETE (2026-09-13)。 源绑定 m59-ink-checks attempt 20260913T130719Z-53678:自检 ABG_M59_INK_SELF_TEST_OK violations=3、ABG_M59_INK_CHECK_OK scanned=12 violations=0、ABG_M52_MARKET_VISUAL_PROBE_OK 各恰好一次, strict 诊断 0,36 张截图(3 尺寸 × 2 语言 × normal/longest × static/dynamic/final)。
    • fresh-archive m52-market-probe + 新 marker 恰好一次、strict 诊断 0;
    • 负例自检通过、最长文案 fixture 截图逐张检查(中英、三尺寸);
    • 更新本计划、CURRENT_CHECKPOINT.md、M58_MARKET_READ_SURFACE_DEFECTS.md 与 ABG_REMAINING_WORK_AND_GATES.md 的对应条目。

验收检查

  • 成功 marker ABG_M52_MARKET_VISUAL_PROBE_OK 恰好一次,且新增 ABG_M59_INK_CHECK_OK checks=<n> 恰好一次;负例自检 ABG_M59_INK_SELF_TEST_OK 恰好一次。
  • 探针在注入违规(测试内自检)时不打印成功 marker;strict 诊断 0。
  • 证据含最长文案 fixture 的静态/动态/最终截图(3 尺寸 × 2 语言)。
  • 产品代码(runtime/ui/**、runtime/entry/**、域/经济/Save/内容) 在本里程碑内除"检查器发现的 M58 材质族缺陷"外不得改动。

冻结范围

页面视觉、玩法、经济、内容、Save、路由、音频、打包、设备、发布全部冻结; 不改 page_chrome.gd / market_chrome.gd / *_module.gd 的任何几何契约, 除非检查器证明了 M58 已记录类别(墨迹越面、压图标、超槽截断)的残留缺陷。

提交边界

  • 计划激活提交(本文件 + checkpoint)。
  • M59-A 聚焦提交:检查器 + fixture + 探针接线。
  • M59-B 聚焦提交:源绑定证据与文档更新。

检查器发现并修复的残留缺陷(M58 材质族,2026-09-13)

机器检查一次抓到 6 处真实缺陷(普通与最长 fixture 都有命中),全部属于 M58 已记录类别,已在 M59-A 内修复:

位置 实测 修复
账本动作牌 ActionLabel 标签矩形左缘 927.9 vs 图标右缘 961.8(重叠 34px) 标签锚点 0.26–0.95(图标 0.05–0.23 之外)
资源徽章 StatusLabel 金币 999 127px / slot 107.5px 徽章值改 micro(22)
底栏 ButtonLabel(en) RETURN CONTRACT 251px / slot 134.9px 恢复历史短文案 BACK/RETURN
账本头 LedgerHeader(en) CANDIDATE DETAILS 296px / slot 285.7px 头带槽加宽到 0.08–0.92
账本成本行 AvailabilityLabel(en) AVAILABLE 107px / slot 92.5px(-4 内缩后 1px 溢出) 状态 0.19–0.56 无内缩、金额 0.58–1.0
卡片名牌/特性牌(最长文案) Gannet Faircurrent 180px、Turncoat Buckle 165px 文字槽内缩到材质内框(名牌 0.14–0.86、缎带 0.15–0.85),卡片字号降至 8×(账本保持 micro)

其中最后一项暴露了 M58-C 同类的更深约束:标签矩形必须等于材质的可见 内框,而不是模块整幅——否则端帽/饰边会盖住首尾字,机器检查也测不到。

Issue Register

  • M59-I01 RESOLVED at activation: 允许检查器使用 Font.get_string_size 作为墨迹宽度权威;东亚字形按字体度量计,不做像素级扫描(与 M58-C 的 实测流程一致,误差用一个安全余量吸收)。
  • M59-I02 RESOLVED in M59-A: 最长线上文案超槽的三处(徽章、底栏 en、 卡片名牌/特性)都按 M58 材质族记录在案并修复;没有把越界问题留到后续。
  • M59-I03 OPEN: 检查器目前只覆盖 Market 视图(标签—图标、标签—模块、 槽宽/行高)。其它页面迁移时必须用同一检查器跑一遍;把检查器接入 page_chrome.gd 组件级契约(在组件里声明"内框")是后续候选。