提出时间:2026-09-05。
本地服务中,SYB 订单 2609045BU9XFDW 的历史采购任务 CG69 在规格角色修复后点击 Agent“重试采购”,仍失败并提示“没有下发可用的精确商品规格”。用户确认按建议建工单修复。
2609045BU9XFDW
spec_decision_request_id
mapped_color_snapshot
mapped_size_snapshot
POST /api/agent/v1/purchase-tasks/:taskId/reset
spec_source == unresolved
spec_probe
spec_source=ai_match
purchase
spec_source
AgentRetry -> BatchRetry -> Create
现有 Agent 采购历史页的小范围行为与文案修正,复用既有卡片、确认弹窗和成功反馈,不新增页面、导航或组件;属于恢复安全重试语义的缺陷修复,不要求完整原型。需覆盖正常、接口失败、禁用和新任务成功反馈。
采购重试可能进入创建待付款订单流程,属于高风险修改。用户已于 2026-09-05 明确要求“按照你的建议建工单修复”;本次只实施代码和自动化验证,不触发真实任务或下单,付款永久禁止。
预期需要更新 Business-Rules-and-Glossary 与 Android-Agent-API-Contract:明确普通 Agent 重试也创建新任务、旧任务不可变,以及空精确规格不得进入正式采购阶段。若实现核对后长期契约已完整表达,则在工单说明无长期文档影响并跳过 Wiki 更新。
Business-Rules-and-Glossary
Android-Agent-API-Contract
当前会话未提供可调用的 Gitea MCP,因此按仓库规则回退 Gitea API;凭据仅从已忽略的本机 gitea.env 读取,未写入工单、日志或源码。
gitea.env
/reset
/retry
PURCHASE_SPEC_MAPPING_REQUIRED
0.9.40 (53)
go test ./app/goauto/purchase
scripts/verify.ps1 -Component android
scripts/verify.ps1 -Component all
web/src/views/goauto/purchase-tasks/index.vue
python dev_scripts/harness.py check --strict
sync
sync --check
bd2748f2b58daee92eaa1e5ed16ce61fa18f728f
644b864833730130cf4a2098a01611da0c0ac45d
96cc2ab
docs(purchase): 更新 Agent 重试契约 (#217)
8d2e61b
fix(purchase): 重建 Agent 重试任务 (#217)
origin/fix/217-agent-retry-current-spec
bd386cf
未进行真机重试,因为点击后可能创建正式待付款订单,需要单独人工授权。部署服务端并安装 Agent 0.9.40 (53) 后,可在手机对 CG69 点击“重试采购”:预期界面提示创建新的 CG 任务;CG69 保持失败历史;新任务目标规格读取当前数据并从 spec_probe 开始。到达可能创建订单的后续步骤前,仍须遵循真机高风险授权边界。
#225 已修正本单引入的普通 Agent 重试语义回归:普通“重试采购”恢复复用原 task ID 并新增 attempt;本单的 /retry 新任务路径只保留给替代商品“继续采购”,Admin 批量重试仍保持新任务语义。长期 Wiki/API 契约已按 #225 修正。#217 仍保持未验收状态,不以其“普通重试创建新任务”作为验收事实。
No dependencies set.
The note is not visible to the blocked user.
原始需求摘要
提出时间:2026-09-05。
本地服务中,SYB 订单
2609045BU9XFDW的历史采购任务 CG69 在规格角色修复后点击 Agent“重试采购”,仍失败并提示“没有下发可用的精确商品规格”。用户确认按建议建工单修复。当前事实与根因
spec_decision_request_id,但mapped_color_snapshot/mapped_size_snapshot均为空。POST /api/agent/v1/purchase-tasks/:taskId/reset,就地复用旧任务和旧规格快照。spec_source == unresolved判断是否回到spec_probe;CG69 的spec_source=ai_match,因此空映射仍被推进purchase阶段,Agent 按安全规则拒绝执行。目标
spec_source或已有决策 ID。非目标
前置依赖与并行性
AgentRetry -> BatchRetry -> Create新任务链路。方案
purchaseattempt。若仍保留就地 Reset 能力,应安全回到探测或明确拒绝,且不得形成空规格正式采购 payload。设计证据
现有 Agent 采购历史页的小范围行为与文案修正,复用既有卡片、确认弹窗和成功反馈,不新增页面、导航或组件;属于恢复安全重试语义的缺陷修复,不要求完整原型。需覆盖正常、接口失败、禁用和新任务成功反馈。
验收标准
spec_probe作为首趟阶段。purchase阶段。风险与确认
采购重试可能进入创建待付款订单流程,属于高风险修改。用户已于 2026-09-05 明确要求“按照你的建议建工单修复”;本次只实施代码和自动化验证,不触发真实任务或下单,付款永久禁止。
文档影响
预期需要更新
Business-Rules-and-Glossary与Android-Agent-API-Contract:明确普通 Agent 重试也创建新任务、旧任务不可变,以及空精确规格不得进入正式采购阶段。若实现核对后长期契约已完整表达,则在工单说明无长期文档影响并跳过 Wiki 更新。工具回退
当前会话未提供可调用的 Gitea MCP,因此按仓库规则回退 Gitea API;凭据仅从已忽略的本机
gitea.env读取,未写入工单、日志或源码。实施完成,待验收
实现
/reset,统一调用既有/retry;旧失败任务保留,新任务读取当前 SYB、虾皮/PDD 档案与当前采购规则。purchase。/reset对“已有决策但执行规格不完整”的任务返回PURCHASE_SPEC_MAPPING_REQUIRED,不修改旧任务、不创建 attempt。0.9.40 (53),debug APK 已构建;未安装真机、未创建采购任务或订单、未支付。回归证据
go test ./app/goauto/purchase:通过。scripts/verify.ps1 -Component android:Debug/Release 单元测试与 Debug APK 构建通过。scripts/verify.ps1 -Component all:服务端全部测试及构建通过;随后被仓库当前web/src/views/goauto/purchase-tasks/index.vue的既有 tab/space lint 错误阻断。本工单未修改该文件,未混入相邻修复。python dev_scripts/harness.py check --strict:通过。sync和一次sync --check:Business-Rules-and-Glossaryrevisionbd2748f2b58daee92eaa1e5ed16ce61fa18f728fAndroid-Agent-API-Contractrevision644b864833730130cf4a2098a01611da0c0ac45d提交与分支
96cc2abdocs(purchase): 更新 Agent 重试契约 (#217)8d2e61bfix(purchase): 重建 Agent 重试任务 (#217)origin/fix/217-agent-retry-current-specbd386cf,合并/部署时须保持该依赖顺序。未验证与验收建议
未进行真机重试,因为点击后可能创建正式待付款订单,需要单独人工授权。部署服务端并安装 Agent
0.9.40 (53)后,可在手机对 CG69 点击“重试采购”:预期界面提示创建新的 CG 任务;CG69 保持失败历史;新任务目标规格读取当前数据并从spec_probe开始。到达可能创建订单的后续步骤前,仍须遵循真机高风险授权边界。#225 已修正本单引入的普通 Agent 重试语义回归:普通“重试采购”恢复复用原 task ID 并新增 attempt;本单的
/retry新任务路径只保留给替代商品“继续采购”,Admin 批量重试仍保持新任务语义。长期 Wiki/API 契约已按 #225 修正。#217 仍保持未验收状态,不以其“普通重试创建新任务”作为验收事实。