docs: import wiki at afc651f75a3a
+64
@@ -0,0 +1,64 @@
|
||||
<!-- docs-wiki-sync:docs/tasks/T-280.md@afc651f75a3abc2676bb13aa8a80f6aa6a25a72e -->
|
||||
> 同步来源:[`docs/tasks/T-280.md`](/chengma/mroubao/src/commit/afc651f75a3abc2676bb13aa8a80f6aa6a25a72e/docs/tasks/T-280.md) · commit `afc651f75a3a`
|
||||
|
||||
---
|
||||
id: T-280
|
||||
title: 安全停止后确认后台取消并清理本地任务
|
||||
phase: 2
|
||||
deps:
|
||||
- T-259
|
||||
- T-270
|
||||
- T-279
|
||||
status: DONE
|
||||
created: 2026-08-03
|
||||
context_ref: 3cdfe7e
|
||||
work_branch: null
|
||||
write_paths:
|
||||
- docs/tasks/T-280.md
|
||||
- docs/current-state.md
|
||||
- android-buyer/app/src/main/**
|
||||
- android-buyer/app/src/test/**
|
||||
---
|
||||
|
||||
## 问题 / 背景
|
||||
|
||||
任务 `e965c234-3a02-40eb-8911-e46e7cecb065` 的执行租约到期后,Roubao 正确进入
|
||||
`SAFE_STOPPED`。Admin 随后取消任务,后台只写入 `cancel_requested`,等待原设备确认;
|
||||
但 App 的普通同步和手动同步都会在安全停止分支提前返回,既不发送后端已允许的
|
||||
`SAFE_STOPPED` 心跳,也无法读取取消请求和调用取消确认接口。本地随后又被设备心跳恢复
|
||||
成“当前领取任务”,形成后台等待设备、设备等待后台的僵持状态。
|
||||
|
||||
## 行为契约
|
||||
|
||||
1. 自动化安全停止后不得恢复拼多多操作、候选搜索、订单 dry-run 或提交订单。
|
||||
2. 用户打开 Roubao 任务页或点击同步时,App 可以发送只用于控制面同步的
|
||||
`SAFE_STOPPED` heartbeat;过期执行不得借此延长 claim 或恢复执行资格。
|
||||
3. heartbeat 返回 `cancel_requested=true` 时,App 使用原 claim/execution 和固定幂等键
|
||||
确认取消;成功后后台任务变为 `CANCELED`,App 原子清理本地 task/execution/order 状态。
|
||||
4. 后台未请求取消时,本地继续保持 `AUTHORIZATION_EXPIRED`,不能把“同一 active task”
|
||||
的设备心跳解释为恢复自动化。
|
||||
5. 网络失败保留本地安全停止状态,后续打开任务页或同步时继续重试控制面请求。
|
||||
|
||||
## 方案
|
||||
|
||||
1. 调整 Repository 的 `allowSafetyStoppedSync` 分支:只在普通执行循环中保持原提前停止;
|
||||
显式同步允许继续调用 task heartbeat,并复用既有取消确认和本地清理逻辑。
|
||||
2. 任务页处于 `AUTHORIZATION_EXPIRED` 时,自动轮询调用显式控制面同步,不再只调用
|
||||
device heartbeat 的领取关系恢复。
|
||||
3. 增加回归测试,证明过期安全停止状态会发送 `SAFE_STOPPED` heartbeat、确认取消、
|
||||
清空本地状态,且不会触发任何拼多多 driver。
|
||||
|
||||
## 验收要点
|
||||
|
||||
- [x] Admin 取消过期任务后,打开 Roubao 最迟一个轮询周期内清理任务卡片。
|
||||
- [x] 后台任务从 `WAITING_CONFIRMATION + cancel_requested` 变为 `CANCELED`。
|
||||
- [x] 取消确认过程不恢复授权、不打开拼多多、不产生订单提交。
|
||||
- [x] Android Debug/Release 单测、lint 和构建通过。
|
||||
|
||||
## 执行记录
|
||||
|
||||
- 2026-08-03:根据过期任务无法确认 Admin 取消的问题创建任务,状态 `TODO`。
|
||||
- 2026-08-03:显式同步允许安全停止 execution 发送 `SAFE_STOPPED` heartbeat;任务页
|
||||
恢复和十秒轮询改为控制面同步,复用既有取消确认与本地原子清理逻辑。
|
||||
- 2026-08-03:增加过期状态确认取消回归测试;Android 双变体单测、lint 和构建通过,
|
||||
状态改为 `DONE`。
|
||||
Reference in New Issue
Block a user