fix(agent): 已选规格面板变形后证明被误判丢失 #228

Open
opened 2026-09-05 17:54:22 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:缺陷(#224 回归)
  • 所属 Epic:#32
  • 所属 MVP / 版本:采购 Agent
  • 阶段:进行中

依赖与并行

  • 前置工单:#224 v2、#227;基于 b829a20
  • 是否允许与前置工单并行:是
  • 原因:#227 修复地址保存后的页面恢复;本单发生在地址动作之前的最终规格复核。

子项目影响

  • 仅影响:android
  • 是否跨子项目:否
  • 是否修改共享接口或契约:否
  • 验证:PurchaseRehearsalExecutorTest、PurchaseLiveAutomationTest、Android 全量测试与 APK 构建

原始需求

  • 来源:用户对话
  • 提出时间:2026-09-05
  • 摘要:最新版 Agent 执行 CG93,PDD 规格面板肉眼已选中灰色和 2XL,但最终规格复核失败,诊断为 dimension=color, reason=relocation_panel_closed, panel=unknown, proof=false, relocationSwipes=0。用户确认按分析建议建单修复。

当前事实与根因

  • panel=unknown 表示解析器在选完规格后的新页面形态未把当前页面分类为已知规格面板,不等价于物理面板一定关闭。
  • #224 v2 已在本次 executor 内保存精确选中证明,但 proofPresent 同时要求证明生成时的 panelType 与最终页面 panelType 完全相同。页面转为 UNKNOWN 后,诊断显示 proof=false,无法区分“未记录证明”和“证明因面板类型变化不可用”。
  • 最终重定位又以 specPanelOpen=false 立即返回 relocation_panel_closed,没有滑动或后续安全确认机会。
  • 失败位于最终规格复核,早于地址修改和创建订单门禁。

目标与已确认方案

  1. 分离 proofRecorded 与当前页面直接验证状态;精确证明仍仅由本次 attempt 中服务端下发的完整目标在唯一候选上确认选中后生成,不持久化、不跨 attempt。
  2. 最终当前页面没有错误、没有其他候选明确 selected/checked、没有错误已选汇总时,允许本次精确证明跨 NORMAL_* → UNKNOWN 等面板分类变化桥接可见性缺口;不得接受相近值或缺少证明。
  3. 规格复核通过不等于允许下单。进入订单确认前若解析器仍为 UNKNOWN,只有颜色和尺码所需证明均已记录、当前仍为 PDD,且存在唯一安全规格“确定/确认”目标时,才允许点击一次;随后必须用新快照确认进入订单确认页。
  4. 唯一确认目标缺失/歧义、页面异常、显式规格冲突或确认后未进入订单页均明确失败。
  5. 诊断同时输出 proofRecorded 与 proofUsable,不再用单一 proof=false 掩盖原因。

预计修改:

  • android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseRehearsalExecutor.kt
  • android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt
  • 对应 Android 单元测试
  • android/app/build.gradle.kts

做什么 / 不做什么

  • 做:修复本次 attempt 证明跨面板分类变化的使用、唯一安全确认及诊断;升版、构建、安装。
  • 不做:不改服务端映射、规则、数据库、接口或任务状态;不自动重试 CG93、不修改真实地址、不创建订单、不付款。

设计与原型门禁

  • 修改类型:恢复 #224 已确认的本次 attempt 内存选中状态行为
  • 设计证据:CG93 结构化错误与 #224 v2 当前控制流
  • 状态:已确认;用户于 2026-09-05 要求按建议建单修复
  • 无需 UI 原型:无界面、导航或组件变化。

文档影响

  • 不影响长期文档,原因:不改变 API、业务规则或安全边界,仅修复 #224 本次 attempt 内存证明在 PDD 页面形态变化时的实现偏差。

交付文档影响

  • 无交付文档影响,原因:入口、配置、部署和运维方式不变。

任务记录

  • 单次事实来源:本工单正文与评论
  • 默认不创建任务快照

验收标准

  • 灰色与 2XL 等完整精确规格在本次 attempt 已确认后,面板分类转为 UNKNOWN 且无冲突时不会再误报证明缺失。
  • 所需规格证明齐全且唯一安全确认目标存在时,只点击一次规格确认并以新页面验证进入订单确认页。
  • 任一规格证明缺失、错误汇总、其他候选选中、确认目标缺失/歧义或页面异常时明确失败。
  • 不仅凭证明点击创建订单;地址、规格、数量、价格、唯一提交目标及服务端不可逆门禁保持不变。
  • 诊断区分 proofRecorded 与 proofUsable。
  • 定向和完整 Android 测试通过,Debug APK 构建并覆盖安装目标设备;不自动执行 live 任务。

风险和回退

采购自动化属于高风险流程。本单仅修复规格复核与规格确认动作,不新增提交订单动作;用户已明确授权实施。自动化和安装不得触发真实任务,付款永久禁止。回退本单 Android 提交即可恢复旧逻辑。

工具说明

当前环境无 Gitea MCP 工单工具,按仓库规则回退项目配置的 Gitea API;凭据仅从忽略的 gitea.env 读取。

## 基本信息 - 类型:缺陷(#224 回归) - 所属 Epic:#32 - 所属 MVP / 版本:采购 Agent - 阶段:进行中 ## 依赖与并行 - 前置工单:#224 v2、#227;基于 `b829a20` - 是否允许与前置工单并行:是 - 原因:#227 修复地址保存后的页面恢复;本单发生在地址动作之前的最终规格复核。 ## 子项目影响 - 仅影响:android - 是否跨子项目:否 - 是否修改共享接口或契约:否 - 验证:`PurchaseRehearsalExecutorTest`、`PurchaseLiveAutomationTest`、Android 全量测试与 APK 构建 ## 原始需求 - 来源:用户对话 - 提出时间:2026-09-05 - 摘要:最新版 Agent 执行 CG93,PDD 规格面板肉眼已选中灰色和 2XL,但最终规格复核失败,诊断为 `dimension=color, reason=relocation_panel_closed, panel=unknown, proof=false, relocationSwipes=0`。用户确认按分析建议建单修复。 ## 当前事实与根因 - `panel=unknown` 表示解析器在选完规格后的新页面形态未把当前页面分类为已知规格面板,不等价于物理面板一定关闭。 - #224 v2 已在本次 executor 内保存精确选中证明,但 `proofPresent` 同时要求证明生成时的 `panelType` 与最终页面 `panelType` 完全相同。页面转为 `UNKNOWN` 后,诊断显示 `proof=false`,无法区分“未记录证明”和“证明因面板类型变化不可用”。 - 最终重定位又以 `specPanelOpen=false` 立即返回 `relocation_panel_closed`,没有滑动或后续安全确认机会。 - 失败位于最终规格复核,早于地址修改和创建订单门禁。 ## 目标与已确认方案 1. 分离 `proofRecorded` 与当前页面直接验证状态;精确证明仍仅由本次 attempt 中服务端下发的完整目标在唯一候选上确认选中后生成,不持久化、不跨 attempt。 2. 最终当前页面没有错误、没有其他候选明确 selected/checked、没有错误已选汇总时,允许本次精确证明跨 `NORMAL_* → UNKNOWN` 等面板分类变化桥接可见性缺口;不得接受相近值或缺少证明。 3. 规格复核通过不等于允许下单。进入订单确认前若解析器仍为 `UNKNOWN`,只有颜色和尺码所需证明均已记录、当前仍为 PDD,且存在唯一安全规格“确定/确认”目标时,才允许点击一次;随后必须用新快照确认进入订单确认页。 4. 唯一确认目标缺失/歧义、页面异常、显式规格冲突或确认后未进入订单页均明确失败。 5. 诊断同时输出 `proofRecorded` 与 `proofUsable`,不再用单一 `proof=false` 掩盖原因。 预计修改: - `android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseRehearsalExecutor.kt` - `android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt` - 对应 Android 单元测试 - `android/app/build.gradle.kts` ## 做什么 / 不做什么 - 做:修复本次 attempt 证明跨面板分类变化的使用、唯一安全确认及诊断;升版、构建、安装。 - 不做:不改服务端映射、规则、数据库、接口或任务状态;不自动重试 CG93、不修改真实地址、不创建订单、不付款。 ## 设计与原型门禁 - 修改类型:恢复 #224 已确认的本次 attempt 内存选中状态行为 - 设计证据:CG93 结构化错误与 #224 v2 当前控制流 - 状态:已确认;用户于 2026-09-05 要求按建议建单修复 - 无需 UI 原型:无界面、导航或组件变化。 ## 文档影响 - [x] 不影响长期文档,原因:不改变 API、业务规则或安全边界,仅修复 #224 本次 attempt 内存证明在 PDD 页面形态变化时的实现偏差。 ## 交付文档影响 - [x] 无交付文档影响,原因:入口、配置、部署和运维方式不变。 ## 任务记录 - 单次事实来源:本工单正文与评论 - [x] 默认不创建任务快照 ## 验收标准 - [ ] 灰色与 2XL 等完整精确规格在本次 attempt 已确认后,面板分类转为 `UNKNOWN` 且无冲突时不会再误报证明缺失。 - [ ] 所需规格证明齐全且唯一安全确认目标存在时,只点击一次规格确认并以新页面验证进入订单确认页。 - [ ] 任一规格证明缺失、错误汇总、其他候选选中、确认目标缺失/歧义或页面异常时明确失败。 - [ ] 不仅凭证明点击创建订单;地址、规格、数量、价格、唯一提交目标及服务端不可逆门禁保持不变。 - [ ] 诊断区分 `proofRecorded` 与 `proofUsable`。 - [ ] 定向和完整 Android 测试通过,Debug APK 构建并覆盖安装目标设备;不自动执行 live 任务。 ## 风险和回退 采购自动化属于高风险流程。本单仅修复规格复核与规格确认动作,不新增提交订单动作;用户已明确授权实施。自动化和安装不得触发真实任务,付款永久禁止。回退本单 Android 提交即可恢复旧逻辑。 ## 工具说明 当前环境无 Gitea MCP 工单工具,按仓库规则回退项目配置的 Gitea API;凭据仅从忽略的 `gitea.env` 读取。
Author
Owner

实施完成,待验收

分支 fix/228-selection-proof-panel-transition,提交并推送:5ee3b62 fix(agent): retain exact specs across panel transitions (#228)。

修复结果

  • 本次 executor/attempt 内的精确规格证明继续只在服务端下发完整目标于唯一候选上确认选中后生成,不持久化、不跨 attempt。
  • 最终规格复核把“已记录证明”和“当前可用证明”拆开;面板分类转为 UNKNOWN 时,只要仍是 PDD、页面存在且没有错误汇总或其他候选明确选中冲突,可用本次证明桥接颜色/尺码不可见缺口。
  • 失败诊断由单一 proof 改为 proofRecorded 与 proofUsable,可区分未记录和因页面条件不可用。
  • 正式采购进入订单确认前仍有独立门禁:只有所需颜色/尺码证明全部存在,当前 PDD 未分类页面同时有价格、唯一数字数量控件和唯一安全“确定/确认”目标时,才点击一次规格确认;随后必须用新快照确认订单确认页。
  • 普通 PDD 弹窗即使有“确定”,没有价格和唯一数量证据也不会被点击。
  • 地址、最终规格/数量/价格、唯一提交目标、服务端一次性不可逆门禁和永久禁止付款均未放宽。
  • Agent 升为 0.9.50 (63)。

验证

  • 定向 PurchaseRehearsalExecutorTest + PurchaseLiveAutomationTest:通过。
  • 新增覆盖:精确颜色/尺码证明生成后面板转 UNKNOWN 仍可完成最终规格复核;证明齐全且强结构证据成立时只确认一次并进入订单页;无证明或普通未知弹窗继续失败且零点击。
  • scripts/verify.ps1 -Component android:Debug/Release 全部单元测试通过,Debug APK 构建成功。
  • python dev_scripts/harness.py check --strict、git diff --check:通过。
  • 远端分支已核对到 5ee3b6290689f89724e0918ebd030ff96e8b7e31。

APK 与设备

  • Debug APK:6,283,497 bytes;SHA-256 8375cbd8d8f7c096080260ec1d32bce80f562026a572e0fc051dace925dfd9f6。
  • 已覆盖安装到 192.168.0.173:41751,回读 0.9.50 (63);GoAuto 无障碍服务仍启用。

安全与未验证

  • 安装前手机前台为 PDD;仅执行覆盖安装,没有操作 PDD 页面。
  • 未自动重试 CG93、未修改地址、未点击真实规格确认或提交订单、未付款。
  • CG93 原错误发生在最终规格复核,早于地址修改和创建订单门禁。
  • 真机需由用户手动重试验收;成功通过全部门禁后可能创建新的待付款订单,但不会支付。

文档

本单修复 #224 本次 attempt 内存证明的实现偏差,不改变 API、长期业务规则或安全边界;按工单约定跳过 Wiki 更新与同步。

工作区原有 docs/12-syb-erp-interface.md、server/config/settings.yml 与未跟踪文件未纳入提交。

## 实施完成,待验收 分支 `fix/228-selection-proof-panel-transition`,提交并推送:`5ee3b62 fix(agent): retain exact specs across panel transitions (#228)`。 ### 修复结果 - 本次 executor/attempt 内的精确规格证明继续只在服务端下发完整目标于唯一候选上确认选中后生成,不持久化、不跨 attempt。 - 最终规格复核把“已记录证明”和“当前可用证明”拆开;面板分类转为 `UNKNOWN` 时,只要仍是 PDD、页面存在且没有错误汇总或其他候选明确选中冲突,可用本次证明桥接颜色/尺码不可见缺口。 - 失败诊断由单一 `proof` 改为 `proofRecorded` 与 `proofUsable`,可区分未记录和因页面条件不可用。 - 正式采购进入订单确认前仍有独立门禁:只有所需颜色/尺码证明全部存在,当前 PDD 未分类页面同时有价格、唯一数字数量控件和唯一安全“确定/确认”目标时,才点击一次规格确认;随后必须用新快照确认订单确认页。 - 普通 PDD 弹窗即使有“确定”,没有价格和唯一数量证据也不会被点击。 - 地址、最终规格/数量/价格、唯一提交目标、服务端一次性不可逆门禁和永久禁止付款均未放宽。 - Agent 升为 `0.9.50 (63)`。 ### 验证 - 定向 `PurchaseRehearsalExecutorTest` + `PurchaseLiveAutomationTest`:通过。 - 新增覆盖:精确颜色/尺码证明生成后面板转 `UNKNOWN` 仍可完成最终规格复核;证明齐全且强结构证据成立时只确认一次并进入订单页;无证明或普通未知弹窗继续失败且零点击。 - `scripts/verify.ps1 -Component android`:Debug/Release 全部单元测试通过,Debug APK 构建成功。 - `python dev_scripts/harness.py check --strict`、`git diff --check`:通过。 - 远端分支已核对到 `5ee3b6290689f89724e0918ebd030ff96e8b7e31`。 ### APK 与设备 - Debug APK:6,283,497 bytes;SHA-256 `8375cbd8d8f7c096080260ec1d32bce80f562026a572e0fc051dace925dfd9f6`。 - 已覆盖安装到 `192.168.0.173:41751`,回读 `0.9.50 (63)`;GoAuto 无障碍服务仍启用。 ### 安全与未验证 - 安装前手机前台为 PDD;仅执行覆盖安装,没有操作 PDD 页面。 - 未自动重试 CG93、未修改地址、未点击真实规格确认或提交订单、未付款。 - CG93 原错误发生在最终规格复核,早于地址修改和创建订单门禁。 - 真机需由用户手动重试验收;成功通过全部门禁后可能创建新的待付款订单,但不会支付。 ### 文档 本单修复 #224 本次 attempt 内存证明的实现偏差,不改变 API、长期业务规则或安全边界;按工单约定跳过 Wiki 更新与同步。 工作区原有 `docs/12-syb-erp-interface.md`、`server/config/settings.yml` 与未跟踪文件未纳入提交。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#228