执行 #42 Android 采购演练联调前发现:#34 已实现采购任务领取与运行状态,但设备心跳、设备列表和离线扫描仍只查询 collection_task。Android 若按共享契约上报正在运行的采购任务 ID,会被服务端拒绝为 DEVICE_TASK_MISMATCH;若改为不上报,又会破坏设备忙碌和离线失败事实。
collection_task
DEVICE_TASK_MISMATCH
提出时间:2026-08-20。来源:#42 实施中的跨端契约核对。
server
device/heartbeat.go:runningTaskForDevice
models.CollectionTask
device/list.go
Busy
CurrentTaskID
device/heartbeat.go:MarkStaleDevicesOffline
DEVICE_OFFLINE
purchase/lifecycle.go:ensureDeviceFree
currentTaskId
running
failed
order_submit_started
order_result_unknown
busy=true
go test ./...
离线清理若错误处理已经点击创建订单的任务,可能造成重复下单。因此 order_submit_started 必须保留结果未知边界,禁止自动重派。本单不执行任何 PDD 或订单动作。
docs/03
docs/08
docs/09
实现提交:b0f33bf (fix(#54): unify device state across task domains),已推送 main。
fix(#54): unify device state across task domains
实际方案:
验证:
go test ./app/goauto/device
python dev_scripts/harness.py sync --verify
Wiki-first:
39297e8886ddcd441c9cb874f399b3962055a3a1
60e8cebb504e23f1a42076977d8d99b486909594
7c3027260213a9b4dc969349f41cdd25d8337e13
8ea157416a700450159e8f38443724c53d27b997
工单保持打开,等待用户验收。
用户于 2026-08-20 明确验收 #54。验收文档提交:e5b8d48;实现提交:b0f33bf。Delivery-Issues revision:9dca116d826e7c6a6f471363dc1a4114a18f7a12;任务归档 revision:4706314606de4614283157cc4e71af1747e029ad。Wiki 镜像同步与严格校验通过。
No dependencies set.
The note is not visible to the blocked user.
原始需求摘要
执行 #42 Android 采购演练联调前发现:#34 已实现采购任务领取与运行状态,但设备心跳、设备列表和离线扫描仍只查询
collection_task。Android 若按共享契约上报正在运行的采购任务 ID,会被服务端拒绝为DEVICE_TASK_MISMATCH;若改为不上报,又会破坏设备忙碌和离线失败事实。提出时间:2026-08-20。来源:#42 实施中的跨端契约核对。
类型与范围
server、共享 API/Wiki 文档当前事实与证据
device/heartbeat.go:runningTaskForDevice只查询models.CollectionTask。device/list.go的Busy/CurrentTaskID只查询运行中的采集任务。device/heartbeat.go:MarkStaleDevicesOffline只把运行中的采集任务置为DEVICE_OFFLINE,不处理采购任务和采购 attempt。purchase/lifecycle.go:ensureDeviceFree已禁止采集与采购在同一设备并行,因此服务端应把两类任务统一视为设备当前任务。建议方案(实施前需确认)
currentTaskId字段,不扩展 API;因为服务端已禁止一台设备跨域并行,当前任务 ID 足以用于本次兼容。Busy/CurrentTaskID同时包含运行中的采购任务。running的采购任务转为failed,错误码DEVICE_OFFLINE,清除设备/账号运行槽和租约;对应运行 attempt 标为失败并记录结束时间。order_submit_started属于未来高风险不确定状态,不得误报普通失败;按既有安全边界转为order_result_unknown或由对应正式下单工单补充明确策略。本单测试必须固定该边界,不能自动重派或再次点击。验收标准
busy=true;空值或错误 ID 返回DEVICE_TASK_MISMATCH。DEVICE_OFFLINE,租约及运行槽清理且不自动重试。order_submit_started离线不会被误标为可自动重试的普通失败。go test ./...通过,Wiki-first 更新契约和交付索引。风险
离线清理若错误处理已经点击创建订单的任务,可能造成重复下单。因此
order_submit_started必须保留结果未知边界,禁止自动重派。本单不执行任何 PDD 或订单动作。文档影响
docs/03、docs/08、docs/09实施完成,等待验收
实现提交:b0f33bf (
fix(#54): unify device state across task domains),已推送 main。实际方案:
running与采购running/order_submit_started。DEVICE_OFFLINE失败,清除租约和运行槽。order_submit_started的任务转为order_result_unknown,禁止自动重派或再次点击创建订单。currentTaskId接口字段,没有数据库迁移,没有执行 PDD、创建订单或支付动作。验证:
go test ./app/goauto/device:通过。go test ./...:通过。python dev_scripts/harness.py sync --verify:Wiki 镜像同步与 DevHarness 严格校验通过。Wiki-first:
39297e8886ddcd441c9cb874f399b3962055a3a160e8cebb504e23f1a42076977d8d99b4869095947c3027260213a9b4dc969349f41cdd25d8337e138ea157416a700450159e8f38443724c53d27b997工单保持打开,等待用户验收。
用户于 2026-08-20 明确验收 #54。验收文档提交:e5b8d48;实现提交:b0f33bf。Delivery-Issues revision:9dca116d826e7c6a6f471363dc1a4114a18f7a12;任务归档 revision:4706314606de4614283157cc4e71af1747e029ad。Wiki 镜像同步与严格校验通过。