feat(purchase): 两阶段采购只打开一次商品链接 #219

Open
opened 2026-09-05 10:19:19 +08:00 by ila · 1 comment
Owner

来源与目标

  • 来源:用户于 2026-09-05 确认,采购任务串行执行;规格探测完成后 PDD 仍停留在同一商品页,因此第二阶段不应再次通过浏览器打开链接。
  • 目标:同一采购任务仅在 spec_probe 阶段打开一次商品链接;服务端匹配期间保留该设备/任务的连续执行关系;purchase 阶段直接复用当前 PDD 页面。
  • 非目标:不自动支付;不放宽服务端精确规格选择;不执行真机真实创建订单测试;不以标题、goodsId 或页面指纹做第二阶段严格同页校验。

当前事实与基线

  • 代码基线:5859a81(分支 feat/218-purchase-result-bubble)。
  • 当前两阶段都会走打开浏览器链接逻辑,CG75 日志显示同一流程发生两次浏览器跳转。
  • spec_probe_pending 期间设备租约已释放,服务端可能继续下发其他采购任务;Agent 在没有采购任务时还可能领取采集任务,因此必须同步收紧调度等待语义,不能只删除第二次跳转。
  • Gitea MCP 当前不可用,本工单按仓库规则回退项目已配置的 Gitea API;凭据只从 gitea.env 读取,不写入工单或日志。

依赖与并行

  • 依赖 #218 已实现提交 5859a81 作为当前 Agent 基线;不要求关闭 #218。
  • 与后续 CG75 修复不可并行:后续工单必须基于本工单的单次跳转流程实施。

影响范围与方案

  • 服务端:当设备存在尚在服务端规格匹配中的 spec_probe_pending 任务时,next 返回该等待任务而不是越过它领取其他采购;匹配成功后仍优先继续同一任务。
  • Android:识别等待态,不执行任务、不领取采集任务;purchase 阶段不再重开浏览器,直接从当前 PDD 页面继续。
  • 最低安全边界:继续校验 PDD 包名、可识别的商品/规格/订单页面结构及服务端下发的精确候选;页面异常明确失败,不通过重开链接掩盖。
  • 共享契约/业务规则:更新 Wiki 后同步 docs/08-agent-api-contract.md 与 docs/03-business-rules-and-glossary.md 镜像。

设计证据

  • 非新增管理端 UI,不需要原型。
  • 流程证据:spec_probe → spec_probe_pending(设备等待) → purchase(复用当前页);等待期间同设备不领取其他采购或采集任务。

验收标准

  1. 同一采购任务完整两阶段最多触发一次浏览器打开。
  2. 服务端匹配未完成时 Agent 保持等待,不能执行其他采购或采集任务。
  3. 匹配完成后继续同一任务,第二阶段不做 goodsId/标题/页面指纹严格校验。
  4. 当前页面不具备 PDD 商品/规格/订单安全证据时明确失败,不自动重开链接。
  5. Android 与服务端相关自动化测试通过,APK 可构建;不执行真实订单创建或付款。

风险与授权

  • 涉及采购调度与设备串行,属于高风险修改。用户已于 2026-09-05 明确要求“按照简化的流程建工单…按照顺序做工单”,授权本工单实施、测试、提交和推送。
  • 自动化验证不得点击真实提交订单或付款入口。
## 来源与目标 - 来源:用户于 2026-09-05 确认,采购任务串行执行;规格探测完成后 PDD 仍停留在同一商品页,因此第二阶段不应再次通过浏览器打开链接。 - 目标:同一采购任务仅在 `spec_probe` 阶段打开一次商品链接;服务端匹配期间保留该设备/任务的连续执行关系;`purchase` 阶段直接复用当前 PDD 页面。 - 非目标:不自动支付;不放宽服务端精确规格选择;不执行真机真实创建订单测试;不以标题、goodsId 或页面指纹做第二阶段严格同页校验。 ## 当前事实与基线 - 代码基线:`5859a81`(分支 `feat/218-purchase-result-bubble`)。 - 当前两阶段都会走打开浏览器链接逻辑,CG75 日志显示同一流程发生两次浏览器跳转。 - `spec_probe_pending` 期间设备租约已释放,服务端可能继续下发其他采购任务;Agent 在没有采购任务时还可能领取采集任务,因此必须同步收紧调度等待语义,不能只删除第二次跳转。 - Gitea MCP 当前不可用,本工单按仓库规则回退项目已配置的 Gitea API;凭据只从 `gitea.env` 读取,不写入工单或日志。 ## 依赖与并行 - 依赖 #218 已实现提交 `5859a81` 作为当前 Agent 基线;不要求关闭 #218。 - 与后续 CG75 修复不可并行:后续工单必须基于本工单的单次跳转流程实施。 ## 影响范围与方案 - 服务端:当设备存在尚在服务端规格匹配中的 `spec_probe_pending` 任务时,`next` 返回该等待任务而不是越过它领取其他采购;匹配成功后仍优先继续同一任务。 - Android:识别等待态,不执行任务、不领取采集任务;`purchase` 阶段不再重开浏览器,直接从当前 PDD 页面继续。 - 最低安全边界:继续校验 PDD 包名、可识别的商品/规格/订单页面结构及服务端下发的精确候选;页面异常明确失败,不通过重开链接掩盖。 - 共享契约/业务规则:更新 Wiki 后同步 `docs/08-agent-api-contract.md` 与 `docs/03-business-rules-and-glossary.md` 镜像。 ## 设计证据 - 非新增管理端 UI,不需要原型。 - 流程证据:`spec_probe → spec_probe_pending(设备等待) → purchase(复用当前页)`;等待期间同设备不领取其他采购或采集任务。 ## 验收标准 1. 同一采购任务完整两阶段最多触发一次浏览器打开。 2. 服务端匹配未完成时 Agent 保持等待,不能执行其他采购或采集任务。 3. 匹配完成后继续同一任务,第二阶段不做 goodsId/标题/页面指纹严格校验。 4. 当前页面不具备 PDD 商品/规格/订单安全证据时明确失败,不自动重开链接。 5. Android 与服务端相关自动化测试通过,APK 可构建;不执行真实订单创建或付款。 ## 风险与授权 - 涉及采购调度与设备串行,属于高风险修改。用户已于 2026-09-05 明确要求“按照简化的流程建工单…按照顺序做工单”,授权本工单实施、测试、提交和推送。 - 自动化验证不得点击真实提交订单或付款入口。
Author
Owner

开始实施。基线为 5859a81,分支 feat/219-single-pdd-entry。按已确认范围先收紧 spec_probe_pending 调度等待语义,再移除 purchase 阶段的二次浏览器跳转;仅做自动化测试与构建,不执行真实创建订单或付款。Gitea MCP 不可用,本次使用项目配置的 API 回退。

开始实施。基线为 `5859a81`,分支 `feat/219-single-pdd-entry`。按已确认范围先收紧 `spec_probe_pending` 调度等待语义,再移除 purchase 阶段的二次浏览器跳转;仅做自动化测试与构建,不执行真实创建订单或付款。Gitea MCP 不可用,本次使用项目配置的 API 回退。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#219