修复 Agent 当前页面采集返回系统设置而非 PDD 商品页 #104

Closed
opened 2026-08-27 11:10:52 +08:00 by ila · 3 comments
Owner

所属与来源

  • 关联工单:#101 Agent 当前 PDD 商品页临时采集。
  • 来源:用户于 2026-08-27 真机反馈:“PDD App 在商品详情页,Agent 点击采集后没有切换到 PDD,停留在设置页面”,并要求建立独立缺陷工单实施。
  • 类型:Android Agent / 页面恢复 / 任务栈缺陷。
  • 设计证据:复用已审核的 #101 v1 原型与“将 Agent 移到后台并恢复此前 PDD 任务栈”契约;本缺陷不新增页面、组件、文案或流程,因此不另做原型。

当前事实与根因

一加 PKG110、Agent 0.9.0 真机证据:

  • 服务端已加载 #101 两个新接口,临时任务能成功创建。
  • 采集任务 #66、#67 均以 CURRENT_PDD_PAGE_NOT_FOUND 失败,未绑定商品身份、未写 PDD 商品。
  • PDD NewPageActivity 商品详情仍保留在独立任务栈。
  • 系统无障碍设置 Activity 被打开在 Agent 任务栈内;辅助入口再次打开 Agent 后,现有实现执行一次 GLOBAL_ACTION_BACK,返回到 com.android.settings/.SubSettings,无法露出 PDD 任务。
  • 不创建任务的复现:“打开 Agent → 返回”后前台仍为系统设置。

根因是 restoreRecentPddPage 把“返回一次”等同于“将 Agent 任务移到后台”,对被系统设置污染的 Activity 栈不成立。

目标

点击“开始采集”后可靠地把整个 Agent 任务移到后台,恢复用户此前已经打开的 PDD 商品页;不通过浏览器重开链接、不从桌面重新启动 PDD、不点击系统最近任务或相似商品。

实施方案

  1. 在采集确认按钮回调中,由前台 MainActivity 调用 moveTaskToBack(true),其成功后再启动当前页面采集服务;这是 Android 对“把当前任务移到后台”的直接语义。
  2. 若任务移后台失败,不创建服务端任务,显示普通人可理解的失败提示。
  3. restoreRecentPddPage 调整为:
    • 当前已经是 PDD 时直接继续;
    • 当前仍是 Agent 时只保留一次受控返回作为兼容兜底;
    • 其他包名立即失败,不连续返回、不遍历系统页面。
  4. Agent 打开系统无障碍设置时使用独立任务,避免以后把设置 Activity 继续压入 Agent 任务栈。
  5. 保留恢复后的 PDD 包名、Activity 和商品页强证据校验;未满足仍以 CURRENT_PDD_PAGE_NOT_FOUND 失败。
  6. 不修改 Server、数据库、规则、采集字段和采购能力。

安全边界

  • 不采购、不修改地址、不创建订单、不支付。
  • 不打开浏览器、不重新启动 PDD、不操作系统最近任务。
  • 不保存控件树、截图或剪贴板内容。
  • 不增加连续 Back;避免退出未知系统页面。
  • 只允许已授权的一加手机执行采集真机回归。

验收标准

  • 从 PDD 商品详情切到 Agent,点击“采集”并确认后,Agent 整体退到后台,原 PDD NewPageActivity 恢复到前台。
  • 即使 Agent 之前打开过系统无障碍设置,也不会停留在设置页。
  • 服务端只创建一个 agent_current_page 任务,设备串行互斥和请求幂等保持有效。
  • 恢复后不是可信 PDD 商品详情时明确失败,不继续分享或采集。
  • 普通采集、采购、设置页及辅助入口行为无回归。
  • Android 单元测试与 APK 构建通过;获授权一加真机验证页面恢复,不执行采购和支付。

验证计划

  • 单元测试:任务移后台成功/失败的调度顺序;恢复状态分类;无障碍设置 Intent flags。
  • 构建:.\gradlew.bat testDebugUnitTest assembleDebug。
  • 真机:PDD 商品详情 → Agent → 当前页面采集,验证前台包名/Activity、服务端任务状态与失败边界。
  • 文档影响:无长期契约变化,只恢复 #101 已记录行为;在工单记录原因并跳过 Wiki。
## 所属与来源 - 关联工单:#101 Agent 当前 PDD 商品页临时采集。 - 来源:用户于 2026-08-27 真机反馈:“PDD App 在商品详情页,Agent 点击采集后没有切换到 PDD,停留在设置页面”,并要求建立独立缺陷工单实施。 - 类型:Android Agent / 页面恢复 / 任务栈缺陷。 - 设计证据:复用已审核的 #101 v1 原型与“将 Agent 移到后台并恢复此前 PDD 任务栈”契约;本缺陷不新增页面、组件、文案或流程,因此不另做原型。 ## 当前事实与根因 一加 PKG110、Agent 0.9.0 真机证据: - 服务端已加载 #101 两个新接口,临时任务能成功创建。 - 采集任务 #66、#67 均以 `CURRENT_PDD_PAGE_NOT_FOUND` 失败,未绑定商品身份、未写 PDD 商品。 - PDD `NewPageActivity` 商品详情仍保留在独立任务栈。 - 系统无障碍设置 Activity 被打开在 Agent 任务栈内;辅助入口再次打开 Agent 后,现有实现执行一次 `GLOBAL_ACTION_BACK`,返回到 `com.android.settings/.SubSettings`,无法露出 PDD 任务。 - 不创建任务的复现:“打开 Agent → 返回”后前台仍为系统设置。 根因是 `restoreRecentPddPage` 把“返回一次”等同于“将 Agent 任务移到后台”,对被系统设置污染的 Activity 栈不成立。 ## 目标 点击“开始采集”后可靠地把整个 Agent 任务移到后台,恢复用户此前已经打开的 PDD 商品页;不通过浏览器重开链接、不从桌面重新启动 PDD、不点击系统最近任务或相似商品。 ## 实施方案 1. 在采集确认按钮回调中,由前台 `MainActivity` 调用 `moveTaskToBack(true)`,其成功后再启动当前页面采集服务;这是 Android 对“把当前任务移到后台”的直接语义。 2. 若任务移后台失败,不创建服务端任务,显示普通人可理解的失败提示。 3. `restoreRecentPddPage` 调整为: - 当前已经是 PDD 时直接继续; - 当前仍是 Agent 时只保留一次受控返回作为兼容兜底; - 其他包名立即失败,不连续返回、不遍历系统页面。 4. Agent 打开系统无障碍设置时使用独立任务,避免以后把设置 Activity 继续压入 Agent 任务栈。 5. 保留恢复后的 PDD 包名、Activity 和商品页强证据校验;未满足仍以 `CURRENT_PDD_PAGE_NOT_FOUND` 失败。 6. 不修改 Server、数据库、规则、采集字段和采购能力。 ## 安全边界 - 不采购、不修改地址、不创建订单、不支付。 - 不打开浏览器、不重新启动 PDD、不操作系统最近任务。 - 不保存控件树、截图或剪贴板内容。 - 不增加连续 Back;避免退出未知系统页面。 - 只允许已授权的一加手机执行采集真机回归。 ## 验收标准 - [ ] 从 PDD 商品详情切到 Agent,点击“采集”并确认后,Agent 整体退到后台,原 PDD `NewPageActivity` 恢复到前台。 - [ ] 即使 Agent 之前打开过系统无障碍设置,也不会停留在设置页。 - [ ] 服务端只创建一个 `agent_current_page` 任务,设备串行互斥和请求幂等保持有效。 - [ ] 恢复后不是可信 PDD 商品详情时明确失败,不继续分享或采集。 - [ ] 普通采集、采购、设置页及辅助入口行为无回归。 - [ ] Android 单元测试与 APK 构建通过;获授权一加真机验证页面恢复,不执行采购和支付。 ## 验证计划 - 单元测试:任务移后台成功/失败的调度顺序;恢复状态分类;无障碍设置 Intent flags。 - 构建:`.\gradlew.bat testDebugUnitTest assembleDebug`。 - 真机:PDD 商品详情 → Agent → 当前页面采集,验证前台包名/Activity、服务端任务状态与失败边界。 - 文档影响:无长期契约变化,只恢复 #101 已记录行为;在工单记录原因并跳过 Wiki。
Author
Owner

开始实施(2026-08-27)

已核对 #101 设计证据与一加真机任务栈。按工单最小方案修改 Android:

  • 采集确认后先把整个 Agent 任务移到后台,再启动当前页面采集服务;
  • 系统无障碍设置改为独立任务;
  • 保留一次受控 Back 兼容兜底及原有 PDD 页面强证据;
  • 增加纯策略单元测试并构建 APK。

不修改 Server、数据库、规则或采购能力。

## 开始实施(2026-08-27) 已核对 #101 设计证据与一加真机任务栈。按工单最小方案修改 Android: - 采集确认后先把整个 Agent 任务移到后台,再启动当前页面采集服务; - 系统无障碍设置改为独立任务; - 保留一次受控 Back 兼容兜底及原有 PDD 页面强证据; - 增加纯策略单元测试并构建 APK。 不修改 Server、数据库、规则或采购能力。
Author
Owner

实现与自动化验证完成,等待解锁后真机回归

实现

  • Agent 采集确认后先调用 moveTaskToBack(true),成功才启动当前页面采集服务;失败时不创建任务并提示重新打开商品。
  • 当前页面恢复策略只接受:PDD 已在前台,或从 Agent 执行一次兼容 Back;系统设置等其他包立即失败,不连续返回。
  • 打开系统无障碍设置增加 FLAG_ACTIVITY_NEW_TASK,避免以后继续把设置页压入 Agent 任务栈。
  • Agent 版本更新为 0.9.1(versionCode 14)。
  • 无 Server、数据库、规则或采购改动;无长期契约变化,按工单说明跳过 Wiki。

自动化验证

  • cd android && .\gradlew.bat testDebugUnitTest assembleDebug:通过。
  • 新增策略测试:先退后台再启动、退后台失败不启动、PDD/Agent/系统设置恢复决策。
  • python dev_scripts/harness.py check --strict:通过。
  • git diff --check:通过。
  • 本地提交:95a0660 fix: restore PDD task before current-page collection (#104)。
  • APK 已安装到一加 PKG110:0.9.1 / versionCode 14;无障碍保持开启。

真机状态

准备回归时设备处于锁屏,PDD NewPageActivity 仍保留但被 Keyguard/NotificationShade 遮挡。未绕过锁屏、未创建新的采集任务。待用户解锁并保持 PDD 商品详情页后继续验证;工单保持打开。

## 实现与自动化验证完成,等待解锁后真机回归 ### 实现 - Agent 采集确认后先调用 `moveTaskToBack(true)`,成功才启动当前页面采集服务;失败时不创建任务并提示重新打开商品。 - 当前页面恢复策略只接受:PDD 已在前台,或从 Agent 执行一次兼容 Back;系统设置等其他包立即失败,不连续返回。 - 打开系统无障碍设置增加 `FLAG_ACTIVITY_NEW_TASK`,避免以后继续把设置页压入 Agent 任务栈。 - Agent 版本更新为 0.9.1(versionCode 14)。 - 无 Server、数据库、规则或采购改动;无长期契约变化,按工单说明跳过 Wiki。 ### 自动化验证 - `cd android && .\gradlew.bat testDebugUnitTest assembleDebug`:通过。 - 新增策略测试:先退后台再启动、退后台失败不启动、PDD/Agent/系统设置恢复决策。 - `python dev_scripts/harness.py check --strict`:通过。 - `git diff --check`:通过。 - 本地提交:`95a0660 fix: restore PDD task before current-page collection (#104)`。 - APK 已安装到一加 PKG110:0.9.1 / versionCode 14;无障碍保持开启。 ### 真机状态 准备回归时设备处于锁屏,PDD `NewPageActivity` 仍保留但被 Keyguard/NotificationShade 遮挡。未绕过锁屏、未创建新的采集任务。待用户解锁并保持 PDD 商品详情页后继续验证;工单保持打开。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:12 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#104