AGC 固定试玩把祖先 pointer-events:none 误判为按钮禁用,导致有效控件连续验收失败 #547

Closed
opened 2026-09-30 15:53:36 +08:00 by lhk229 · 0 comments
Member

问题与影响

固定试玩把按钮任一祖先的 pointer-events:none 当成按钮自身被禁用。覆盖层设置 none、交互子元素恢复 auto 是有效布局;浏览器命中按钮,宿主仍拒绝点击。现场游戏经过多轮修改,构建和视觉通过,玩法始终停在开始按钮检查。

现场证据

项目 情绪花灵安抚记-r17:五次 generic-v1 试玩的 desktop/mobile 均报「固定试玩控件 start 处于 disabled 状态」。

  • .agent/conversations/tool-calls.jsonl 第 44、49、53、62、84 行;第 49 行卡片虽残留 running,对应错误与验证报告已落盘。
  • 首个报告:.agent/runtime/direct-validation-evidence/c2f1d5d28188d7d72ce354d4f7b7f29be40118b4bf197d474f861de41b3b4ff2/11/validation.json 第 180、264 行。
  • 最后报告:同一 evidence 根下 cbdcca3f4eaff24ffc93fcc2fb62a45e376da6eaf69930ba13a3de103369e684/14/validation.json 第 208、292 行。
  • game/style.css:38 的 #hud 为 pointer-events:none;:169-170 的 #btn-start 为 auto;game/index.html:39 的按钮没有 disabled。
  • 最终 tool-calls.jsonl:87 为 build/visual 通过、gameplay 失败、ready=false。

独立复现与代码

将当前生产探针原文放入独立 Firefox headless 页面:

<div style="pointer-events:none;padding:40px">
  <button style="pointer-events:auto;padding:20px">开始</button>
</div>

实测 elementFromPoint 命中按钮、按钮自身计算样式为 auto,但探针输出 visible=true, disabled=true。这是探针分类的独立复现,没有把程序化点击冒充完整游戏真实输入验收。

browser/playtest/mod.rs:424 遍历全部祖先并累加 pointerBlocked;同文件第 453–457 行将其并入 disabled,第 718–719 行直接拒绝动作。ce9802be-r16 也有同类布局,但没有历史试玩记录,不声称该项目实际失败过。

修改边界与验收

  • 子元素为 auto、实际命中该按钮时,不因祖先 none 被误判禁用;desktop/mobile 都执行真实输入并观察状态变化。
  • 按钮自身不可点击、disabled、aria-disabled、inert、隐藏或被遮挡时仍拒绝;不改成无条件 JS 点击。
  • 采用最小页面覆盖祖先 none/子元素 auto 的回归,并核对现场游戏开始流程。
  • 不通过强迫所有游戏删除覆盖层穿透样式来绕过宿主问题。

核查范围

2026-09-30 对九份项目导出做只读审计,代码基线 3540c5660fd294b70e054810b5384a2855908df5。本 Issue 仅登记问题,尚未实施修复。未重放项目付费操作,不提交原始会话、凭据或本地私密绝对路径。已排除 #529、#525、#518;偶发 Provider/网络错误不作为新增缺陷。

## 问题与影响 固定试玩把按钮任一祖先的 `pointer-events:none` 当成按钮自身被禁用。覆盖层设置 `none`、交互子元素恢复 `auto` 是有效布局;浏览器命中按钮,宿主仍拒绝点击。现场游戏经过多轮修改,构建和视觉通过,玩法始终停在开始按钮检查。 ## 现场证据 项目 `情绪花灵安抚记-r17`:五次 `generic-v1` 试玩的 desktop/mobile 均报「固定试玩控件 start 处于 disabled 状态」。 - `.agent/conversations/tool-calls.jsonl` 第 44、49、53、62、84 行;第 49 行卡片虽残留 running,对应错误与验证报告已落盘。 - 首个报告:`.agent/runtime/direct-validation-evidence/c2f1d5d28188d7d72ce354d4f7b7f29be40118b4bf197d474f861de41b3b4ff2/11/validation.json` 第 180、264 行。 - 最后报告:同一 evidence 根下 `cbdcca3f4eaff24ffc93fcc2fb62a45e376da6eaf69930ba13a3de103369e684/14/validation.json` 第 208、292 行。 - `game/style.css:38` 的 `#hud` 为 `pointer-events:none`;`:169-170` 的 `#btn-start` 为 `auto`;`game/index.html:39` 的按钮没有 disabled。 - 最终 `tool-calls.jsonl:87` 为 build/visual 通过、gameplay 失败、ready=false。 ## 独立复现与代码 将当前生产探针原文放入独立 Firefox headless 页面: ```html <div style="pointer-events:none;padding:40px"> <button style="pointer-events:auto;padding:20px">开始</button> </div> ``` 实测 `elementFromPoint` 命中按钮、按钮自身计算样式为 auto,但探针输出 `visible=true, disabled=true`。这是探针分类的独立复现,没有把程序化点击冒充完整游戏真实输入验收。 [`browser/playtest/mod.rs:424`](https://git.genarrative.world/git/GenarrativeAI/Genarrative/src/commit/3540c5660fd294b70e054810b5384a2855908df5/apps/ai-game-creator-shell/src-tauri/src/browser/playtest/mod.rs#L424) 遍历全部祖先并累加 `pointerBlocked`;同文件第 453–457 行将其并入 disabled,第 718–719 行直接拒绝动作。`ce9802be-r16` 也有同类布局,但没有历史试玩记录,不声称该项目实际失败过。 ## 修改边界与验收 - [ ] 子元素为 auto、实际命中该按钮时,不因祖先 none 被误判禁用;desktop/mobile 都执行真实输入并观察状态变化。 - [ ] 按钮自身不可点击、disabled、aria-disabled、inert、隐藏或被遮挡时仍拒绝;不改成无条件 JS 点击。 - [ ] 采用最小页面覆盖祖先 none/子元素 auto 的回归,并核对现场游戏开始流程。 - [ ] 不通过强迫所有游戏删除覆盖层穿透样式来绕过宿主问题。 ## 核查范围 2026-09-30 对九份项目导出做只读审计,代码基线 `3540c5660fd294b70e054810b5384a2855908df5`。本 Issue 仅登记问题,尚未实施修复。未重放项目付费操作,不提交原始会话、凭据或本地私密绝对路径。已排除 #529、#525、#518;偶发 Provider/网络错误不作为新增缺陷。
lhk229 added the
Priority
High
2
Kind/Bug
labels 2026-09-30 15:53:36 +08:00
lhk229 self-assigned this 2026-10-02 11:33:30 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GenarrativeAI/Genarrative#547