缺陷:采购已进入 PDD 商品页仍误报打开拼多多失败 #150

Closed
opened 2026-08-29 14:17:36 +08:00 by ila · 3 comments
Owner

来源与关联

用户于 2026-08-29 观察最新采购任务执行过程:Agent 已打开 PDD App 并进入目标商品详情页,数秒后仍上报“打开拼多多失败”。只读核验任务 #15(以及同设备任务 #13、#14)均记录 RULE_ACTION_FAILED / 打开拼多多失败。

关联代码:Android PurchaseRehearsalExecutor.openProduct。

根因

采购导航已经通过 Admin 规则定位浏览器中的唯一“打开拼多多APP/打开”入口,但执行器把 clickFresh 的即时返回值作为最终结果。浏览器/PDD 切换期间若控件重绘、无障碍动作返回 false 或重新定位瞬时失败,即使 PDD 已实际进入商品页,执行器仍立即返回 RULE_ACTION_FAILED;失败前没有检查“前台已是 PDD”这一后置条件。

目标

  1. 点击入口后以“已进入 PDD 且满足商品页基础证据”为成功后置条件,避免点击返回值假阴性。
  2. 对根节点瞬时不可用、目标瞬时消失和 ACTION_CLICK=false 做短时、有界的重新采集与重新定位。
  3. 多个独立候选、登录、验证码、风控和无效商品仍按既有安全错误明确失败。
  4. 保留现有规则快照和操作边界;不点击相似目标,不扩大订单或支付能力。

非目标

  • 不修改 Admin 采购规则、服务端采购状态机、接口或数据库。
  • 不调整规格、数量、价格、地址和创建订单逻辑。
  • 不执行真实创建订单或支付。
  • 不保存控件树或截图。

方案

  • 在采购 openProduct 中使用详细点击结果。
  • 每次动作前重新采集并只接受唯一别名候选;歧义立即失败。
  • 点击返回成功、未找到或失败后均在有限截止时间内优先检查 PDD 前台及页面问题;已进入 PDD 则成功。
  • 仅对可恢复的浏览器瞬态重新采集并重试;不得使用兄弟节点、相似文案或盲目坐标点击。
  • 超时后根据最后原因返回可诊断但不泄露页面内容的稳定错误信息。
  • 增加测试覆盖:点击返回失败但已进入 PDD、浏览器重绘后第二次成功、持续失败、歧义、登录/风控,以及重试次数/时长有界。

设计证据

恢复既有“打开 PDD 商品页后继续采购”的明确行为,不新增页面或交互,不需要 UI 原型。

验收

  • 点击返回 FAILED/NOT_FOUND 但前台已进入 PDD 商品页时不再假失败。
  • 浏览器瞬时重绘可在有界重试内恢复。
  • 持续失败最终明确报错且不忙循环。
  • 歧义、登录、验证码、风控仍失败关闭。
  • Android 单元测试与 Release APK 构建通过。
  • 同商品真机验证进入 PDD 后继续到下一采购步骤,不因打开动作假失败。
  • 提交推送并回写证据,保持待验收。

文档影响

仅修复既有后置条件判断,不改变长期接口、业务规则、安全边界和运维方式;无长期文档影响,跳过 Wiki 更新与同步。

## 来源与关联 用户于 2026-08-29 观察最新采购任务执行过程:Agent 已打开 PDD App 并进入目标商品详情页,数秒后仍上报“打开拼多多失败”。只读核验任务 #15(以及同设备任务 #13、#14)均记录 `RULE_ACTION_FAILED / 打开拼多多失败`。 关联代码:Android `PurchaseRehearsalExecutor.openProduct`。 ## 根因 采购导航已经通过 Admin 规则定位浏览器中的唯一“打开拼多多APP/打开”入口,但执行器把 `clickFresh` 的即时返回值作为最终结果。浏览器/PDD 切换期间若控件重绘、无障碍动作返回 false 或重新定位瞬时失败,即使 PDD 已实际进入商品页,执行器仍立即返回 `RULE_ACTION_FAILED`;失败前没有检查“前台已是 PDD”这一后置条件。 ## 目标 1. 点击入口后以“已进入 PDD 且满足商品页基础证据”为成功后置条件,避免点击返回值假阴性。 2. 对根节点瞬时不可用、目标瞬时消失和 ACTION_CLICK=false 做短时、有界的重新采集与重新定位。 3. 多个独立候选、登录、验证码、风控和无效商品仍按既有安全错误明确失败。 4. 保留现有规则快照和操作边界;不点击相似目标,不扩大订单或支付能力。 ## 非目标 - 不修改 Admin 采购规则、服务端采购状态机、接口或数据库。 - 不调整规格、数量、价格、地址和创建订单逻辑。 - 不执行真实创建订单或支付。 - 不保存控件树或截图。 ## 方案 - 在采购 `openProduct` 中使用详细点击结果。 - 每次动作前重新采集并只接受唯一别名候选;歧义立即失败。 - 点击返回成功、未找到或失败后均在有限截止时间内优先检查 PDD 前台及页面问题;已进入 PDD 则成功。 - 仅对可恢复的浏览器瞬态重新采集并重试;不得使用兄弟节点、相似文案或盲目坐标点击。 - 超时后根据最后原因返回可诊断但不泄露页面内容的稳定错误信息。 - 增加测试覆盖:点击返回失败但已进入 PDD、浏览器重绘后第二次成功、持续失败、歧义、登录/风控,以及重试次数/时长有界。 ## 设计证据 恢复既有“打开 PDD 商品页后继续采购”的明确行为,不新增页面或交互,不需要 UI 原型。 ## 验收 - [ ] 点击返回 FAILED/NOT_FOUND 但前台已进入 PDD 商品页时不再假失败。 - [ ] 浏览器瞬时重绘可在有界重试内恢复。 - [ ] 持续失败最终明确报错且不忙循环。 - [ ] 歧义、登录、验证码、风控仍失败关闭。 - [ ] Android 单元测试与 Release APK 构建通过。 - [ ] 同商品真机验证进入 PDD 后继续到下一采购步骤,不因打开动作假失败。 - [ ] 提交推送并回写证据,保持待验收。 ## 文档影响 仅修复既有后置条件判断,不改变长期接口、业务规则、安全边界和运维方式;无长期文档影响,跳过 Wiki 更新与同步。
Author
Owner

实施完成,待真机验收

提交:d847b00 fix(#150): verify PDD entry after browser click,已推送 main,本地与 origin/main 一致。

修复

  • 采购打开商品页不再把无障碍点击的即时返回值当作最终成败。
  • 点击后在既有 5 秒边界内持续核对实际前台;只要进入 PDD,继续执行后续 verifyProduct。
  • 浏览器重绘、目标瞬时消失或 ACTION_CLICK=false 时,只对同一个唯一别名目标按 1 秒间隔有限重试,最多 5 次。
  • 多个独立候选仍立即返回 RULE_AMBIGUOUS;登录、验证码、风控和无效链接仍由既有页面分类器失败关闭。
  • 持续失败根据最后的无障碍原因返回更准确且不包含页面内容的提示。
  • Agent 版本提升到 0.9.21 (34)。

自动化验证

  • 定向 PurchaseRehearsalExecutorTest:通过。
  • 新增覆盖:
    • 点击返回 FAILED 但实际进入 PDD 时继续成功;
    • 浏览器重绘后第二次点击恢复;
    • 持续失败在 50 次轮询/最多 5 次点击内停止;
    • 既有歧义目标测试继续通过。
  • .\scripts\verify.ps1 -Component android:Debug/Release 单元测试与 Debug APK 构建通过。
  • .\gradlew.bat assembleRelease:通过。
  • Debug APK:android/app/build/outputs/apk/debug/app-debug.apk,SHA-256 771F968B5C383AC89938D2635480257656E04E549D521765E8F7CC5DD8F4DBFC。
  • Release APK:android/app/build/outputs/apk/release/app-release-unsigned.apk,SHA-256 9FE93886CD301C262400BCA878C5B82EDE033835D339AEC16013D00E650F07D5。
  • 两个 APK 均核验为 versionName=0.9.21、versionCode=34。
  • git diff --check:通过。

未验证

当前 adb devices -l 无设备,未安装 APK,也未对商品 808062345927 执行真机采购验证。未创建订单、未修改地址、未支付。设备连接后应安装 Debug APK,并只验证“进入 PDD 后不再误报打开失败、能继续到下一采购步骤”;任何真实创建订单仍需独立授权。

文档

仅恢复既有导航后置条件,无新的长期事实,按工单约定跳过 Wiki 更新与同步。未改动既有未跟踪文件。

状态:实现完成,等待真机验收。

## 实施完成,待真机验收 提交:`d847b00 fix(#150): verify PDD entry after browser click`,已推送 `main`,本地与 `origin/main` 一致。 ### 修复 - 采购打开商品页不再把无障碍点击的即时返回值当作最终成败。 - 点击后在既有 5 秒边界内持续核对实际前台;只要进入 PDD,继续执行后续 `verifyProduct`。 - 浏览器重绘、目标瞬时消失或 `ACTION_CLICK=false` 时,只对同一个唯一别名目标按 1 秒间隔有限重试,最多 5 次。 - 多个独立候选仍立即返回 `RULE_AMBIGUOUS`;登录、验证码、风控和无效链接仍由既有页面分类器失败关闭。 - 持续失败根据最后的无障碍原因返回更准确且不包含页面内容的提示。 - Agent 版本提升到 `0.9.21 (34)`。 ### 自动化验证 - 定向 `PurchaseRehearsalExecutorTest`:通过。 - 新增覆盖: - 点击返回 FAILED 但实际进入 PDD 时继续成功; - 浏览器重绘后第二次点击恢复; - 持续失败在 50 次轮询/最多 5 次点击内停止; - 既有歧义目标测试继续通过。 - `.\scripts\verify.ps1 -Component android`:Debug/Release 单元测试与 Debug APK 构建通过。 - `.\gradlew.bat assembleRelease`:通过。 - Debug APK:`android/app/build/outputs/apk/debug/app-debug.apk`,SHA-256 `771F968B5C383AC89938D2635480257656E04E549D521765E8F7CC5DD8F4DBFC`。 - Release APK:`android/app/build/outputs/apk/release/app-release-unsigned.apk`,SHA-256 `9FE93886CD301C262400BCA878C5B82EDE033835D339AEC16013D00E650F07D5`。 - 两个 APK 均核验为 `versionName=0.9.21`、`versionCode=34`。 - `git diff --check`:通过。 ### 未验证 当前 `adb devices -l` 无设备,未安装 APK,也未对商品 `808062345927` 执行真机采购验证。未创建订单、未修改地址、未支付。设备连接后应安装 Debug APK,并只验证“进入 PDD 后不再误报打开失败、能继续到下一采购步骤”;任何真实创建订单仍需独立授权。 ### 文档 仅恢复既有导航后置条件,无新的长期事实,按工单约定跳过 Wiki 更新与同步。未改动既有未跟踪文件。 状态:实现完成,等待真机验收。
Author
Owner

真机安装更新

2026-08-29 已将提交 d847b00 构建的 Debug APK 覆盖安装到一加 PKG110(序列号仅记录脱敏设备型号,不写设备凭据)。

  • ADB 安装:Success
  • 包名:cn.ilapage.goauto.agent
  • 手机上回读:versionName=0.9.21、versionCode=34
  • 本次仅安装并核验版本,未启动采购任务、未修改地址、未创建订单、未支付。

仍待用户执行同商品安全真机验收:确认进入 PDD 商品详情页后不再误报“打开拼多多失败”,并在任何不可逆下单动作前停止。

## 真机安装更新 2026-08-29 已将提交 `d847b00` 构建的 Debug APK 覆盖安装到一加 PKG110(序列号仅记录脱敏设备型号,不写设备凭据)。 - ADB 安装:`Success` - 包名:`cn.ilapage.goauto.agent` - 手机上回读:`versionName=0.9.21`、`versionCode=34` - 本次仅安装并核验版本,未启动采购任务、未修改地址、未创建订单、未支付。 仍待用户执行同商品安全真机验收:确认进入 PDD 商品详情页后不再误报“打开拼多多失败”,并在任何不可逆下单动作前停止。
Author
Owner

用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。

用户于 2026-08-29 明确确认本工单通过验收。验收结论已记录,现关闭工单。没有新的长期事实变化,本次不重复同步 Wiki。
ila closed this issue 2026-08-29 20:44:20 +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#150