T40 Android 采购演练规则与持久执行基线 #42

Closed
opened 2026-08-17 10:24:50 +08:00 by ila · 6 comments
Owner

基本信息

  • 类型:需求 / Android采购演练 / 持久执行基线
  • 所属总体设计:#32
  • 阶段:待实施(受 #32 QuantUX 原型审核门禁阻塞)

依赖与并行

  • 前置工单:#33采购共享契约、#34服务端采购演练任务能力,以及#32原型经用户明确验收
  • 是否允许并行:服务端契约稳定后可开发;必须先于真实地址修改和创建订单
  • 原因:先用没有外部副作用的演练验证“服务端规则变化无需升级APK”和Android持久执行边界

子项目影响

  • 交付单元:android / shared-docs
  • 是否跨子项目:是
  • 是否修改共享接口:只实现#33已确认的采购演练契约,不自行扩展
  • 验证:Android单元测试、APK构建、规则固件测试和不下单真机演练

原始需求

cmautobuy已经验证了商品、规格、数量、价格复核和本地Outbox等采购安全规则,但其PDD页面判断大量写死在Windows Client中,每次兼容新控件树都要更新Client。GoAuto第一步应保留手机直连云端架构,把可变化的页面证据和操作顺序放入服务端规则,并在不创建订单的演练流程中验证。

做什么

  • 增加采购演练执行类型;任务输入人工指定PDD商品、精确颜色、尺码、数量、订单总价上限、设备和采购规则快照。
  • Android使用Room/SQLite持久化最小采购任务、执行尝试和Outbox:task_id、attempt_id、规则快照哈希、当前步骤、状态、结果、上报状态和时间。
  • 任务结果与待上报Outbox在同一事务保存;网络重试只重发既有结果,不重新操作PDD。
  • 复用GoAuto版本化规则和能力协商,采购规则只能调用已声明的通用类型化动作。
  • 用服务端规则完成:打开商品、验证商品身份、进入规格面板、精确选择颜色/尺码、设置数量、复核规格/数量/订单总价。
  • 最终复核完成后停在安全点并提交rehearsal_completed,不得进入地址修改和订单创建。
  • 从cmautobuy提取已验证的页面证据、唯一候选、精确规格、数量和价格保护测试场景;不复制Windows Client、ADB或Python线程架构。
  • 登录失效、验证码、风控、人机验证、商品不一致、价格超限和控件不唯一时明确失败。
  • 规格缺失或定位不到目标规格时不直接失败:按 #46 全量遍历采集规格与颜色价格并提交服务端,本趟正常结束;服务端 AI 匹配后重新派发第二趟执行。Agent 只按服务端下发的精确规格执行,本地不自行挑选候选。
  • pending 状态的 PDD 商品只有 URL 与 goods_id,其身份校验只依赖 goods_id,不做标题比对。

规则与Agent边界

仅修改服务端规则即可处理:文字/ID/层级证据变化、同义文字、等待时间、有限滑动次数、已知弹窗分支和最近可点击父节点策略。

必须升级Agent的情况:新增通用动作类型、新的复杂遍历算法、系统级OEM浮层能力、无障碍API边界或新的本地可靠性机制。服务端下发任意脚本不在范围内。

不做什么

  • 不接SYB导入和Shopee映射管理;测试输入允许人工准备。
  • 不修改收货地址,不点击创建订单,不进入支付页面,不支付。
  • 不采集PDD订单号、快递单号或执行货运宝回填。
  • 不保存原始控件树、截图、PDD账号凭据或完整收货地址。
  • 不迁移或保留Windows桌面Client架构。

验收标准

  • 规则A可以完成一次商品、规格、数量和总价复核后安全停止。
  • 服务端把按钮同义文字、等待时间或滑动次数改成规则B后,不更新APK即可执行新任务。
  • 旧任务仍执行自身规则A快照,不受规则B影响。
  • 下发Agent不支持的能力时在操作PDD前返回AGENT_CAPABILITY_MISMATCH。
  • 数量、价格或唯一页面证据不满足时停止,不点击相近候选。
  • 规格定位不到时按 #46 走采集回传并结束本趟,不在本地挑选相近候选;第二趟按下发规格精确执行。
  • 结果与Outbox事务保存;断网/重启后只重新上报,不重复执行PDD操作。
  • 全流程没有修改地址、创建PDD订单或支付。
  • Android单元测试、APK构建和一加真机安全演练通过。

风险和回退

本工单不得包含任何真实下单动作。采购演练能力与采集能力按任务类型隔离;出现问题可停用采购演练规则并回退APK,不影响现有采集闭环。


2026-08-18 规则修订:本工单的规格匹配相关条款已按 #46 T44 采购规格 AI 匹配与实时规格回传(决策变更) 修订,以上文正文为准。#46 是该决策的唯一事实来源。

2026-08-20 实施前阻塞核对

  • 新增阻塞依赖:#53(采购规则参数化动作契约)。
  • 当前服务端只接受 actions[].type,无法承载本单已确认的按钮同义词、等待时间和滑动次数;在 #53 验收前不能实现满足验收条件的 Android 解释器。
  • 本单保持待实施,未执行 PDD 操作,未修改 Android、服务端或数据库。

2026-08-20 服务端联调阻塞

  • 新增阻塞依赖:#54(统一采集与采购任务的设备心跳、忙碌和离线处理)。
  • 当前心跳、设备列表和离线扫描只识别 collection_task;Android 如实上报采购任务会收到 DEVICE_TASK_MISMATCH,省略上报则违反共享契约。
  • Android 本地实现与单测/APK 构建已完成,修改暂存工作区;#54 验收前不进行真机采购演练、不提交 #42 完成结果。
## 基本信息 - 类型:需求 / Android采购演练 / 持久执行基线 - 所属总体设计:#32 - 阶段:待实施(受 #32 QuantUX 原型审核门禁阻塞) ## 依赖与并行 - 前置工单:#33采购共享契约、#34服务端采购演练任务能力,以及#32原型经用户明确验收 - 是否允许并行:服务端契约稳定后可开发;必须先于真实地址修改和创建订单 - 原因:先用没有外部副作用的演练验证“服务端规则变化无需升级APK”和Android持久执行边界 ## 子项目影响 - 交付单元:android / shared-docs - 是否跨子项目:是 - 是否修改共享接口:只实现#33已确认的采购演练契约,不自行扩展 - 验证:Android单元测试、APK构建、规则固件测试和不下单真机演练 ## 原始需求 `cmautobuy`已经验证了商品、规格、数量、价格复核和本地Outbox等采购安全规则,但其PDD页面判断大量写死在Windows Client中,每次兼容新控件树都要更新Client。GoAuto第一步应保留手机直连云端架构,把可变化的页面证据和操作顺序放入服务端规则,并在不创建订单的演练流程中验证。 ## 做什么 - 增加采购演练执行类型;任务输入人工指定PDD商品、精确颜色、尺码、数量、订单总价上限、设备和采购规则快照。 - Android使用Room/SQLite持久化最小采购任务、执行尝试和Outbox:`task_id`、`attempt_id`、规则快照哈希、当前步骤、状态、结果、上报状态和时间。 - 任务结果与待上报Outbox在同一事务保存;网络重试只重发既有结果,不重新操作PDD。 - 复用GoAuto版本化规则和能力协商,采购规则只能调用已声明的通用类型化动作。 - 用服务端规则完成:打开商品、验证商品身份、进入规格面板、精确选择颜色/尺码、设置数量、复核规格/数量/订单总价。 - 最终复核完成后停在安全点并提交`rehearsal_completed`,不得进入地址修改和订单创建。 - 从`cmautobuy`提取已验证的页面证据、唯一候选、精确规格、数量和价格保护测试场景;不复制Windows Client、ADB或Python线程架构。 - 登录失效、验证码、风控、人机验证、商品不一致、价格超限和控件不唯一时明确失败。 - 规格缺失或定位不到目标规格时不直接失败:按 #46 全量遍历采集规格与颜色价格并提交服务端,本趟正常结束;服务端 AI 匹配后重新派发第二趟执行。Agent 只按服务端下发的精确规格执行,本地不自行挑选候选。 - `pending` 状态的 PDD 商品只有 URL 与 `goods_id`,其身份校验只依赖 `goods_id`,不做标题比对。 ## 规则与Agent边界 仅修改服务端规则即可处理:文字/ID/层级证据变化、同义文字、等待时间、有限滑动次数、已知弹窗分支和最近可点击父节点策略。 必须升级Agent的情况:新增通用动作类型、新的复杂遍历算法、系统级OEM浮层能力、无障碍API边界或新的本地可靠性机制。服务端下发任意脚本不在范围内。 ## 不做什么 - 不接SYB导入和Shopee映射管理;测试输入允许人工准备。 - 不修改收货地址,不点击创建订单,不进入支付页面,不支付。 - 不采集PDD订单号、快递单号或执行货运宝回填。 - 不保存原始控件树、截图、PDD账号凭据或完整收货地址。 - 不迁移或保留Windows桌面Client架构。 ## 验收标准 - [ ] 规则A可以完成一次商品、规格、数量和总价复核后安全停止。 - [ ] 服务端把按钮同义文字、等待时间或滑动次数改成规则B后,不更新APK即可执行新任务。 - [ ] 旧任务仍执行自身规则A快照,不受规则B影响。 - [ ] 下发Agent不支持的能力时在操作PDD前返回`AGENT_CAPABILITY_MISMATCH`。 - [ ] 数量、价格或唯一页面证据不满足时停止,不点击相近候选。 - [ ] 规格定位不到时按 #46 走采集回传并结束本趟,不在本地挑选相近候选;第二趟按下发规格精确执行。 - [ ] 结果与Outbox事务保存;断网/重启后只重新上报,不重复执行PDD操作。 - [ ] 全流程没有修改地址、创建PDD订单或支付。 - [ ] Android单元测试、APK构建和一加真机安全演练通过。 ## 风险和回退 本工单不得包含任何真实下单动作。采购演练能力与采集能力按任务类型隔离;出现问题可停用采购演练规则并回退APK,不影响现有采集闭环。 --- > **2026-08-18 规则修订**:本工单的规格匹配相关条款已按 [#46 T44 采购规格 AI 匹配与实时规格回传(决策变更)](https://git.ilapage.cn/OPC/goauto/issues/46) 修订,以上文正文为准。#46 是该决策的唯一事实来源。 ## 2026-08-20 实施前阻塞核对 - 新增阻塞依赖:#53(采购规则参数化动作契约)。 - 当前服务端只接受 `actions[].type`,无法承载本单已确认的按钮同义词、等待时间和滑动次数;在 #53 验收前不能实现满足验收条件的 Android 解释器。 - 本单保持待实施,未执行 PDD 操作,未修改 Android、服务端或数据库。 ## 2026-08-20 服务端联调阻塞 - 新增阻塞依赖:#54(统一采集与采购任务的设备心跳、忙碌和离线处理)。 - 当前心跳、设备列表和离线扫描只识别 `collection_task`;Android 如实上报采购任务会收到 `DEVICE_TASK_MISMATCH`,省略上报则违反共享契约。 - Android 本地实现与单测/APK 构建已完成,修改暂存工作区;#54 验收前不进行真机采购演练、不提交 #42 完成结果。
Author
Owner

开始执行 #42 后完成依赖与契约核对。发现当前 purchasecontract.Action 仅有 type,严格校验会拒绝 #42 验收所需的按钮同义词、等待时间和滑动参数。已建立阻塞缺陷 #53。为避免把页面判断重新写死进 APK,也避免越过本单 Android/shared-docs 范围修改服务端,#42 暂停在待实施;本次未运行任何 PDD 动作,未修改源码或数据库。

开始执行 #42 后完成依赖与契约核对。发现当前 `purchasecontract.Action` 仅有 `type`,严格校验会拒绝 #42 验收所需的按钮同义词、等待时间和滑动参数。已建立阻塞缺陷 #53。为避免把页面判断重新写死进 APK,也避免越过本单 Android/shared-docs 范围修改服务端,#42 暂停在待实施;本次未运行任何 PDD 动作,未修改源码或数据库。
Author
Owner

阻塞依赖 #53 已完成实现并提交 afeb2723ea0acfb03f2ab31b7b12f491602f4a9b,当前等待用户验收。#53 验收关闭后,本单可继续实现 Android 参数解释、持久任务与 Outbox;本次未修改或执行 Android。

阻塞依赖 #53 已完成实现并提交 `afeb2723ea0acfb03f2ab31b7b12f491602f4a9b`,当前等待用户验收。#53 验收关闭后,本单可继续实现 Android 参数解释、持久任务与 Outbox;本次未修改或执行 Android。
Author
Owner

前置缺陷 #53 已于 2026-08-20 用户验收并关闭,参数化采购规则契约阻塞解除。现在继续执行 #42。

前置缺陷 #53 已于 2026-08-20 用户验收并关闭,参数化采购规则契约阻塞解除。现在继续执行 #42。
Author
Owner

#42 Android 规则解释器、SQLite task/attempt/Outbox、重启安全恢复、采购 API 接入和安全执行单测已完成本地实现;testDebugUnitTest 与 assembleDebug 均通过。联调前发现服务端心跳/设备列表/离线扫描只识别 collection_task,已建立阻塞缺陷 #54。在该缺陷确认并验收前不通过 Android 省略任务 ID 绕过,也不进行真机采购演练。当前 #42 修改保留在工作区,尚未提交。

#42 Android 规则解释器、SQLite task/attempt/Outbox、重启安全恢复、采购 API 接入和安全执行单测已完成本地实现;`testDebugUnitTest` 与 `assembleDebug` 均通过。联调前发现服务端心跳/设备列表/离线扫描只识别 `collection_task`,已建立阻塞缺陷 #54。在该缺陷确认并验收前不通过 Android 省略任务 ID 绕过,也不进行真机采购演练。当前 #42 修改保留在工作区,尚未提交。
Author
Owner

#54 已完成服务端实现并推送 main(b0f33bf),采购任务心跳、设备忙碌状态和离线处理现已与采集任务统一。#42 的服务端联调阻塞已解除;继续 #42 时仍只做采购演练,不改地址、不创建订单。

#54 已完成服务端实现并推送 main(b0f33bf),采购任务心跳、设备忙碌状态和离线处理现已与采集任务统一。#42 的服务端联调阻塞已解除;继续 #42 时仍只做采购演练,不改地址、不创建订单。
Author
Owner

用户验收通过并完成归档

用户于 2026-08-20 明确表示“通过验收 #42”。

实现与验证:

  • 实现提交:888cc8b feat(#42): add persistent purchase rehearsal execution
  • 文档提交:dae9cb6 docs(#42): record user acceptance
  • Android testDebugUnitTest + assembleDebug:BUILD SUCCESSFUL
  • DevHarness sync --verify:通过
  • 本次没有执行地址修改、创建订单或支付动作。

Wiki-first:

说明:本次归档没有重新执行真机动作,用户已明确完成验收。#54 仍是独立待验收工单,不随本单关闭。

## 用户验收通过并完成归档 用户于 2026-08-20 明确表示“通过验收 #42”。 实现与验证: - 实现提交:888cc8b feat(#42): add persistent purchase rehearsal execution - 文档提交:dae9cb6 docs(#42): record user acceptance - Android testDebugUnitTest + assembleDebug:BUILD SUCCESSFUL - DevHarness sync --verify:通过 - 本次没有执行地址修改、创建订单或支付动作。 Wiki-first: - Project-Profile revision 63251261d5cf18c9d3a14fb74d268e1c7c10842d - Architecture-and-Code-Map revision 5702b75cf0a7e045f09f58eb14d5362fc3734c09 - Business-Rules-and-Glossary revision 7c81f6f6c5ad12b8ace76cc71fb1475b5fdb2274 - Android-Agent-API-Contract revision cac56434a387fcac4314ab62248c6ae5a9c69309 - Delivery-Issues revision b12c7f5391f9ce80f78ff0dd57ef09c162dc1890 - 任务归档:https://git.ilapage.cn/OPC/goauto/wiki/Task-42-Android-%E9%87%87%E8%B4%AD%E6%BC%94%E7%BB%83%E8%A7%84%E5%88%99%E4%B8%8E%E6%8C%81%E4%B9%85%E6%89%A7%E8%A1%8C%E5%9F%BA%E7%BA%BF.- - 归档 revision:13b600896b8b00fcd2ea7e8610bd684eba287e66 说明:本次归档没有重新执行真机动作,用户已明确完成验收。#54 仍是独立待验收工单,不随本单关闭。
ila closed this issue 2026-08-20 23:15:41 +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#42