fix(agent): 地址保存返回规格面板时错误执行返回 #227

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

基本信息

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

依赖与并行

  • 前置工单:#152 已验收;基于 #226 提交 9320e55
  • 是否允许与前置工单并行:是
  • 原因:#226 修复手动重试商品页进入;本单只修复地址保存后的面板恢复。

子项目影响

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

原始需求

  • 来源:用户对话
  • 提出时间:2026-09-05
  • 摘要:最新版 Agent 重试 CG91,地址修改并保存后已回到规格面板,却报“地址保存后无法返回订单页面,未创建订单”。用户重申预期为保存地址后回到规格面板,继续既有最终复核和下单流程,并要求关联已验收 #152 建回归缺陷修复。

当前事实与根因

  • editAndVerifyAddress 在地址编辑器消失后,要求同一快照同时满足唯一地址后缀与唯一提交按钮。
  • 当前 PDD 保存地址后会回到已存在的采购规格/确认面板,但其视口可能只显示规格,地址证据不在当前可见区域。
  • 当前代码把“当前视口尚未满足最终证据”误当成“没有返回订单页”,立即执行一次系统 Back;该动作会退出或改变已经正确返回的规格面板,随后等待超时并产生本次错误。
  • 错误发生在 updateShippingAddress 返回前,尚未调用一次性创建订单门禁。

目标与方案

  1. 保存后先确认已离开地址编辑态。
  2. 若当前已经是唯一、受支持的 PDD 采购规格/确认面板,不按系统返回;只在该唯一面板内执行有限向下滑动并逐次读取新快照,重新定位地址后缀和唯一提交目标。
  3. 找齐最终地址证据后返回 ShippingAddressProof,后续沿用既有最终规格、数量、价格、地址和唯一提交目标复核,再进入一次性创建订单门禁。
  4. 当前确为地址过渡/选择页而非采购面板时,保留 #152 已验收的一次安全 Back 恢复。
  5. 面板缺失、多个滚动容器、到边仍无地址/提交证据、登录/风控/验证码等情况均明确失败;不得盲目点击下单。

预计修改:

  • android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt
  • android/app/src/test/java/cn/ilapage/goauto/agent/PurchaseLiveAutomationTest.kt
  • android/app/build.gradle.kts

做什么 / 不做什么

  • 做:修复保存后规格面板恢复、有限滚动和稳定终止;补充成功及到边失败回归;升版、构建、安装。
  • 不做:不改服务端、数据库、规则或接口;不放宽最终地址/规格/数量/价格/提交目标门禁;不自动重试 CG91、不修改真实地址、不创建订单、不付款。

设计与原型门禁

  • 修改类型:恢复 #152 已验收行为的 Bug
  • 设计证据:CG91 真机复现与当前控制流
  • 状态:已确认;用户于 2026-09-05 明确要求关联 #152 建单修复
  • 无需 UI 原型:无界面、导航或组件变化。

文档影响

  • 不影响长期文档,原因:恢复 #152 已确认的“保存后返回采购面板并在最终下单前严格复核”行为,不改变 API、业务规则或安全边界。

交付文档影响

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

任务记录

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

验收标准

  • 地址保存后返回唯一采购规格/确认面板时不执行系统 Back。
  • 地址位于当前视口之外时,只在唯一面板内有限滑动并重新定位,成功后继续既有最终复核流程。
  • 真实地址过渡页仍最多执行一次安全 Back。
  • 面板歧义或到边无证据时明确失败且不创建订单。
  • 最终地址后缀、规格、数量、价格与唯一提交目标门禁不放宽。
  • 定向及完整 Android 测试通过,Debug APK 构建并覆盖安装目标设备;不自动执行 live 任务。

风险和回退

采购自动化属于高风险流程。本单只增加地址保存后的安全页面恢复,不新增下单动作;用户已明确授权实施。自动化测试不得点击真实提交订单,真机仅安装,不触发 CG91。回退本单 Android 提交即可恢复旧逻辑,付款永久禁止。

工具说明

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

## 基本信息 - 类型:缺陷(#152 回归) - 所属 Epic:#32 - 所属 MVP / 版本:采购 Agent - 阶段:进行中 ## 依赖与并行 - 前置工单:#152 已验收;基于 #226 提交 `9320e55` - 是否允许与前置工单并行:是 - 原因:#226 修复手动重试商品页进入;本单只修复地址保存后的面板恢复。 ## 子项目影响 - 仅影响:android - 是否跨子项目:否 - 是否修改共享接口或契约:否 - 验证:`PurchaseLiveAutomationTest`、Android 全量单测与 APK 构建 ## 原始需求 - 来源:用户对话 - 提出时间:2026-09-05 - 摘要:最新版 Agent 重试 CG91,地址修改并保存后已回到规格面板,却报“地址保存后无法返回订单页面,未创建订单”。用户重申预期为保存地址后回到规格面板,继续既有最终复核和下单流程,并要求关联已验收 #152 建回归缺陷修复。 ## 当前事实与根因 - `editAndVerifyAddress` 在地址编辑器消失后,要求同一快照同时满足唯一地址后缀与唯一提交按钮。 - 当前 PDD 保存地址后会回到已存在的采购规格/确认面板,但其视口可能只显示规格,地址证据不在当前可见区域。 - 当前代码把“当前视口尚未满足最终证据”误当成“没有返回订单页”,立即执行一次系统 Back;该动作会退出或改变已经正确返回的规格面板,随后等待超时并产生本次错误。 - 错误发生在 `updateShippingAddress` 返回前,尚未调用一次性创建订单门禁。 ## 目标与方案 1. 保存后先确认已离开地址编辑态。 2. 若当前已经是唯一、受支持的 PDD 采购规格/确认面板,不按系统返回;只在该唯一面板内执行有限向下滑动并逐次读取新快照,重新定位地址后缀和唯一提交目标。 3. 找齐最终地址证据后返回 `ShippingAddressProof`,后续沿用既有最终规格、数量、价格、地址和唯一提交目标复核,再进入一次性创建订单门禁。 4. 当前确为地址过渡/选择页而非采购面板时,保留 #152 已验收的一次安全 Back 恢复。 5. 面板缺失、多个滚动容器、到边仍无地址/提交证据、登录/风控/验证码等情况均明确失败;不得盲目点击下单。 预计修改: - `android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt` - `android/app/src/test/java/cn/ilapage/goauto/agent/PurchaseLiveAutomationTest.kt` - `android/app/build.gradle.kts` ## 做什么 / 不做什么 - 做:修复保存后规格面板恢复、有限滚动和稳定终止;补充成功及到边失败回归;升版、构建、安装。 - 不做:不改服务端、数据库、规则或接口;不放宽最终地址/规格/数量/价格/提交目标门禁;不自动重试 CG91、不修改真实地址、不创建订单、不付款。 ## 设计与原型门禁 - 修改类型:恢复 #152 已验收行为的 Bug - 设计证据:CG91 真机复现与当前控制流 - 状态:已确认;用户于 2026-09-05 明确要求关联 #152 建单修复 - 无需 UI 原型:无界面、导航或组件变化。 ## 文档影响 - [x] 不影响长期文档,原因:恢复 #152 已确认的“保存后返回采购面板并在最终下单前严格复核”行为,不改变 API、业务规则或安全边界。 ## 交付文档影响 - [x] 无交付文档影响,原因:操作入口、部署和运维方式不变。 ## 任务记录 - 单次事实来源:本工单正文与评论 - [x] 默认不创建任务快照 ## 验收标准 - [ ] 地址保存后返回唯一采购规格/确认面板时不执行系统 Back。 - [ ] 地址位于当前视口之外时,只在唯一面板内有限滑动并重新定位,成功后继续既有最终复核流程。 - [ ] 真实地址过渡页仍最多执行一次安全 Back。 - [ ] 面板歧义或到边无证据时明确失败且不创建订单。 - [ ] 最终地址后缀、规格、数量、价格与唯一提交目标门禁不放宽。 - [ ] 定向及完整 Android 测试通过,Debug APK 构建并覆盖安装目标设备;不自动执行 live 任务。 ## 风险和回退 采购自动化属于高风险流程。本单只增加地址保存后的安全页面恢复,不新增下单动作;用户已明确授权实施。自动化测试不得点击真实提交订单,真机仅安装,不触发 CG91。回退本单 Android 提交即可恢复旧逻辑,付款永久禁止。 ## 工具说明 当前环境无 Gitea MCP 工单工具,按仓库规则回退项目配置的 Gitea API;凭据仅从忽略的 `gitea.env` 读取。
Author
Owner

实施完成,待验收

分支 fix/227-address-panel-return,提交并推送:b829a20 fix(agent): retain purchase panel after address save (#227)。

修复结果

  • 地址保存并确认详细地址编辑器稳定消失后,先判断当前是否已经是受支持的唯一 PDD 采购规格/确认面板。
  • 若已回到该面板,不再执行系统 Back;只在唯一面板内最多 5 次向下有限滑动,每次重新读取页面,定位唯一地址后缀与唯一提交目标。
  • 视口签名加入非敏感节点路径以支持动态行发现和到边稳定终止,不保存或记录节点文字、地址、控件树或截图。
  • 面板恢复成功后仅返回地址证明;后续仍走既有最终地址、规格、数量、价格和唯一提交目标复核,以及服务端一次性不可逆门禁。
  • 若当前确为地址过渡/选择页而非采购面板,保留 #152 已验收的最多一次安全 Back。
  • 面板歧义、页面变化、滑动失败或到边仍缺证据时明确失败,绝不盲目点击提交。
  • Agent 升为 0.9.49 (62)。

验证

  • PurchaseLiveAutomationTest:31 项通过;新增:
    • 保存后回到规格面板、地址在视口外:面板内滑动恢复,Back=0、提交点击=0;
    • 规格面板到边仍缺证据:明确失败,Back=0、提交点击=0。
  • scripts/verify.ps1 -Component android:Debug/Release 全部单元测试通过,Debug APK 构建成功。
  • python dev_scripts/harness.py check --strict、git diff --check:通过。
  • 远端分支已核对到 b829a203dc3ceb24d15b7b18b21ffa083d9a492d。

APK 与设备

  • Debug APK:6,282,182 bytes;SHA-256 b49057dd193e6b7bc439d379ead748d8412d3e62a97a7d6b9ccc7a49bb38dfab。
  • 已覆盖安装到 192.168.0.173:41751,回读 0.9.49 (62);GoAuto 无障碍服务仍启用。

安全与未验证

  • 未自动重试 CG91,未修改真实地址,未点击真实提交订单,未付款。
  • 本次错误位于 updateShippingAddress 返回前,代码控制流尚未进入 beforeOrderSubmit 一次性不可逆门禁。
  • 真机 CG91 仍需用户手动重试验收;该任务可能继续到创建待付款订单,付款永久禁止。

文档

本单恢复 #152 已确认的保存后返回采购面板并严格复核行为,不改变 API、长期业务规则或安全边界;按工单约定跳过 Wiki 更新与同步。

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

## 实施完成,待验收 分支 `fix/227-address-panel-return`,提交并推送:`b829a20 fix(agent): retain purchase panel after address save (#227)`。 ### 修复结果 - 地址保存并确认详细地址编辑器稳定消失后,先判断当前是否已经是受支持的唯一 PDD 采购规格/确认面板。 - 若已回到该面板,不再执行系统 Back;只在唯一面板内最多 5 次向下有限滑动,每次重新读取页面,定位唯一地址后缀与唯一提交目标。 - 视口签名加入非敏感节点路径以支持动态行发现和到边稳定终止,不保存或记录节点文字、地址、控件树或截图。 - 面板恢复成功后仅返回地址证明;后续仍走既有最终地址、规格、数量、价格和唯一提交目标复核,以及服务端一次性不可逆门禁。 - 若当前确为地址过渡/选择页而非采购面板,保留 #152 已验收的最多一次安全 Back。 - 面板歧义、页面变化、滑动失败或到边仍缺证据时明确失败,绝不盲目点击提交。 - Agent 升为 `0.9.49 (62)`。 ### 验证 - `PurchaseLiveAutomationTest`:31 项通过;新增: - 保存后回到规格面板、地址在视口外:面板内滑动恢复,Back=0、提交点击=0; - 规格面板到边仍缺证据:明确失败,Back=0、提交点击=0。 - `scripts/verify.ps1 -Component android`:Debug/Release 全部单元测试通过,Debug APK 构建成功。 - `python dev_scripts/harness.py check --strict`、`git diff --check`:通过。 - 远端分支已核对到 `b829a203dc3ceb24d15b7b18b21ffa083d9a492d`。 ### APK 与设备 - Debug APK:6,282,182 bytes;SHA-256 `b49057dd193e6b7bc439d379ead748d8412d3e62a97a7d6b9ccc7a49bb38dfab`。 - 已覆盖安装到 `192.168.0.173:41751`,回读 `0.9.49 (62)`;GoAuto 无障碍服务仍启用。 ### 安全与未验证 - 未自动重试 CG91,未修改真实地址,未点击真实提交订单,未付款。 - 本次错误位于 `updateShippingAddress` 返回前,代码控制流尚未进入 `beforeOrderSubmit` 一次性不可逆门禁。 - 真机 CG91 仍需用户手动重试验收;该任务可能继续到创建待付款订单,付款永久禁止。 ### 文档 本单恢复 #152 已确认的保存后返回采购面板并严格复核行为,不改变 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#227