T26 PDD 商品详情进入失败后一次性重开浏览器恢复 #28

Closed
opened 2026-08-15 17:39:07 +08:00 by ila · 2 comments
Owner

原始需求摘要

新任务从浏览器跳转到 PDD App 后偶发落在 PDD 首页,未进入商品详情页。用户确认按建议增加:未到达详情页时回到浏览器重新打开同一 PDD URL,再尝试进入一次。

目标

为 v2 PDD 商品详情任务增加有界的导航恢复:首次跳转未到达精确商品详情 Activity 时,由 Android Agent 显式重新打开任务 urlSnapshot,重复既有安全导航步骤一次。

非目标

  • 不处理登录、验证码、风控、人机验证或无效链接。
  • 不无限重试,不自动换机。
  • 不使用 Android 返回键猜测页面栈。
  • 不改变假售罄下拉恢复及规格采集算法。
  • 不保存原始控件树或截图,不创建订单、不付款。

前置依赖

T20~T25;共享 API 仍以 docs/08-agent-api-contract.md 为准。

是否可并行

否。服务端规则契约、Web 安全表单和 Android 执行流程必须使用同一字段定义。

子项目影响

  • server/:v2 契约、模板、能力推导与测试。
  • android/:未到达详情页的专用错误、显式重开 URL、导航步骤重放与测试。
  • web/:有界安全配置表单。
  • docs/:API 契约、规则样例、交付索引。

方案

新增可选规则字段:

"navigationRecovery": {
  "reopenBrowser": {
    "enabled": true,
    "maxAttempts": 1,
    "settleMs": 1000
  }
}

约束:maxAttempts 固定为 1,settleMs 为 500~5000 毫秒。旧快照字段缺省时保持原行为。

执行流程:

  1. Agent 显式用浏览器打开任务 URL,并执行既有安全导航步骤。
  2. 采集器在页面超时内未到达精确 PDD 商品详情 Activity/页面证据时返回 PDD_DETAIL_ENTRY_FAILED。
  3. 仅当规则启用恢复且首次结果为该错误时,再次显式用浏览器打开同一 urlSnapshot,重放导航步骤一次。
  4. 第二次到达详情页后继续采集;仍失败则提交 PDD_DETAIL_ENTRY_FAILED。
  5. 登录、验证码、风控和链接失效错误直接失败,不触发恢复。

验收标准

  • 旧 v2 快照无字段仍可解析,且不重开浏览器。
  • 新模板默认启用一次重开,服务端拒绝未知字段、maxAttempts != 1 和越界等待。
  • 首次未到详情页时只重开一次同一任务 URL并重放导航步骤。
  • 第二次成功后进入原采集流程;第二次失败返回 PDD_DETAIL_ENTRY_FAILED。
  • 登录、验证码、风控、无效链接和已进入详情页后的规格失败均不触发导航恢复。
  • 网页只允许编辑启用状态和有界等待,URL、动作类型及次数上限不可自由输入。
  • 三端测试与构建通过;一加真机验证至少覆盖正常到达或可复现的首页恢复场景。

验证计划

  • Go:契约、模板、能力与边界测试。
  • Android:解析、首次失败后成功、持续失败仅一次、非入口错误不恢复的单元测试;APK 构建。
  • Web:lint、生产构建、Playwright 规则表单验证。
  • 真机:安装 APK;用正式任务观察 Activity 和最终任务状态。无法稳定复现时如实记录。

风险

  • 浏览器/PDD 页面加载慢可能导致误判,需使用已有页面超时并保持重试有界。
  • 重放导航可能遇到系统确认框差异,继续复用现有安全可选步骤。
  • 现有任务快照不会自动升级,必须编辑规则后创建新任务。

文档影响

更新 docs/08-agent-api-contract.md、docs/09-delivery-issues.md 和 docs/rules/pdd-product-detail-v2.proposed.json。

## 原始需求摘要 新任务从浏览器跳转到 PDD App 后偶发落在 PDD 首页,未进入商品详情页。用户确认按建议增加:未到达详情页时回到浏览器重新打开同一 PDD URL,再尝试进入一次。 ## 目标 为 v2 PDD 商品详情任务增加有界的导航恢复:首次跳转未到达精确商品详情 Activity 时,由 Android Agent 显式重新打开任务 `urlSnapshot`,重复既有安全导航步骤一次。 ## 非目标 - 不处理登录、验证码、风控、人机验证或无效链接。 - 不无限重试,不自动换机。 - 不使用 Android 返回键猜测页面栈。 - 不改变假售罄下拉恢复及规格采集算法。 - 不保存原始控件树或截图,不创建订单、不付款。 ## 前置依赖 T20~T25;共享 API 仍以 `docs/08-agent-api-contract.md` 为准。 ## 是否可并行 否。服务端规则契约、Web 安全表单和 Android 执行流程必须使用同一字段定义。 ## 子项目影响 - `server/`:v2 契约、模板、能力推导与测试。 - `android/`:未到达详情页的专用错误、显式重开 URL、导航步骤重放与测试。 - `web/`:有界安全配置表单。 - `docs/`:API 契约、规则样例、交付索引。 ## 方案 新增可选规则字段: ```json "navigationRecovery": { "reopenBrowser": { "enabled": true, "maxAttempts": 1, "settleMs": 1000 } } ``` 约束:`maxAttempts` 固定为 1,`settleMs` 为 500~5000 毫秒。旧快照字段缺省时保持原行为。 执行流程: 1. Agent 显式用浏览器打开任务 URL,并执行既有安全导航步骤。 2. 采集器在页面超时内未到达精确 PDD 商品详情 Activity/页面证据时返回 `PDD_DETAIL_ENTRY_FAILED`。 3. 仅当规则启用恢复且首次结果为该错误时,再次显式用浏览器打开同一 `urlSnapshot`,重放导航步骤一次。 4. 第二次到达详情页后继续采集;仍失败则提交 `PDD_DETAIL_ENTRY_FAILED`。 5. 登录、验证码、风控和链接失效错误直接失败,不触发恢复。 ## 验收标准 - [ ] 旧 v2 快照无字段仍可解析,且不重开浏览器。 - [ ] 新模板默认启用一次重开,服务端拒绝未知字段、`maxAttempts != 1` 和越界等待。 - [ ] 首次未到详情页时只重开一次同一任务 URL并重放导航步骤。 - [ ] 第二次成功后进入原采集流程;第二次失败返回 `PDD_DETAIL_ENTRY_FAILED`。 - [ ] 登录、验证码、风控、无效链接和已进入详情页后的规格失败均不触发导航恢复。 - [ ] 网页只允许编辑启用状态和有界等待,URL、动作类型及次数上限不可自由输入。 - [ ] 三端测试与构建通过;一加真机验证至少覆盖正常到达或可复现的首页恢复场景。 ## 验证计划 - Go:契约、模板、能力与边界测试。 - Android:解析、首次失败后成功、持续失败仅一次、非入口错误不恢复的单元测试;APK 构建。 - Web:lint、生产构建、Playwright 规则表单验证。 - 真机:安装 APK;用正式任务观察 Activity 和最终任务状态。无法稳定复现时如实记录。 ## 风险 - 浏览器/PDD 页面加载慢可能导致误判,需使用已有页面超时并保持重试有界。 - 重放导航可能遇到系统确认框差异,继续复用现有安全可选步骤。 - 现有任务快照不会自动升级,必须编辑规则后创建新任务。 ## 文档影响 更新 `docs/08-agent-api-contract.md`、`docs/09-delivery-issues.md` 和 `docs/rules/pdd-product-detail-v2.proposed.json`。
Author
Owner

实施完成,待人工验收

提交:c4e0aa7 feat: retry PDD detail navigation once (#28)

实现

  • v2 规则新增 navigationRecovery.reopenBrowser,旧快照缺省时保持原行为。
  • 内置模板默认启用,maxAttempts 固定为 1,settleMs 限制为 500~5000ms。
  • Android 将“显式打开任务 URL →执行既有安全导航步骤→采集器校验详情页”组织为有界两轮流程。
  • 仅首次返回 PDD_DETAIL_ENTRY_FAILED 时重开同一 urlSnapshot;登录、验证码、风控、链接无效和详情页内规格失败不恢复。
  • 第二轮仍未到详情页时明确失败 PDD_DETAIL_ENTRY_FAILED,不继续循环。
  • 管理端增加“商品详情进入恢复”安全表单,动作和次数不可自由输入。
  • API 契约、业务规则、规则样例、项目档案和交付索引已同步。

验证

  • go test ./app/goauto/...:通过。
  • android/gradlew.bat testDebugUnitTest assembleDebug:通过。
  • pnpm lint:0 error(30 条仓库既有 warning)。
  • pnpm build:prod:通过。
  • pnpm exec playwright test tests/e2e/collection-rule-editor.spec.ts:2 passed。
  • Android 自动化覆盖首次失败后第二次成功、持续失败只重开一次、登录错误不重开、关闭恢复时不重开。
  • APK 已覆盖安装到一加 192.168.0.173:5555,无障碍和前台服务已恢复;设备已在线心跳。
  • 后端 8000 已重启加载新契约,前端 9527 保持运行。

待人工验收

现有规则与任务快照不会自动升级。需在管理端编辑现有 v2 规则,启用“商品详情进入恢复”,保存后新建任务;再观察落入 PDD 首页时是否重开浏览器一次。现场尚未新建带该快照的正式任务,因此未声明真机恢复路径通过。

工单保持打开,等待用户验收。

## 实施完成,待人工验收 提交:`c4e0aa7 feat: retry PDD detail navigation once (#28)` ### 实现 - v2 规则新增 `navigationRecovery.reopenBrowser`,旧快照缺省时保持原行为。 - 内置模板默认启用,`maxAttempts` 固定为 1,`settleMs` 限制为 500~5000ms。 - Android 将“显式打开任务 URL →执行既有安全导航步骤→采集器校验详情页”组织为有界两轮流程。 - 仅首次返回 `PDD_DETAIL_ENTRY_FAILED` 时重开同一 `urlSnapshot`;登录、验证码、风控、链接无效和详情页内规格失败不恢复。 - 第二轮仍未到详情页时明确失败 `PDD_DETAIL_ENTRY_FAILED`,不继续循环。 - 管理端增加“商品详情进入恢复”安全表单,动作和次数不可自由输入。 - API 契约、业务规则、规则样例、项目档案和交付索引已同步。 ### 验证 - `go test ./app/goauto/...`:通过。 - `android/gradlew.bat testDebugUnitTest assembleDebug`:通过。 - `pnpm lint`:0 error(30 条仓库既有 warning)。 - `pnpm build:prod`:通过。 - `pnpm exec playwright test tests/e2e/collection-rule-editor.spec.ts`:2 passed。 - Android 自动化覆盖首次失败后第二次成功、持续失败只重开一次、登录错误不重开、关闭恢复时不重开。 - APK 已覆盖安装到一加 `192.168.0.173:5555`,无障碍和前台服务已恢复;设备已在线心跳。 - 后端 8000 已重启加载新契约,前端 9527 保持运行。 ### 待人工验收 现有规则与任务快照不会自动升级。需在管理端编辑现有 v2 规则,启用“商品详情进入恢复”,保存后新建任务;再观察落入 PDD 首页时是否重开浏览器一次。现场尚未新建带该快照的正式任务,因此未声明真机恢复路径通过。 工单保持打开,等待用户验收。
Author
Owner

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

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:24 +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#28