Page:
T-280
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
同步来源:
docs/tasks/T-280.md· commitafc651f75a3a
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 心跳,也无法读取取消请求和调用取消确认接口。本地随后又被设备心跳恢复
成“当前领取任务”,形成后台等待设备、设备等待后台的僵持状态。
行为契约
- 自动化安全停止后不得恢复拼多多操作、候选搜索、订单 dry-run 或提交订单。
- 用户打开 Roubao 任务页或点击同步时,App 可以发送只用于控制面同步的
SAFE_STOPPEDheartbeat;过期执行不得借此延长 claim 或恢复执行资格。 - heartbeat 返回
cancel_requested=true时,App 使用原 claim/execution 和固定幂等键 确认取消;成功后后台任务变为CANCELED,App 原子清理本地 task/execution/order 状态。 - 后台未请求取消时,本地继续保持
AUTHORIZATION_EXPIRED,不能把“同一 active task” 的设备心跳解释为恢复自动化。 - 网络失败保留本地安全停止状态,后续打开任务页或同步时继续重试控制面请求。
方案
- 调整 Repository 的
allowSafetyStoppedSync分支:只在普通执行循环中保持原提前停止; 显式同步允许继续调用 task heartbeat,并复用既有取消确认和本地清理逻辑。 - 任务页处于
AUTHORIZATION_EXPIRED时,自动轮询调用显式控制面同步,不再只调用 device heartbeat 的领取关系恢复。 - 增加回归测试,证明过期安全停止状态会发送
SAFE_STOPPEDheartbeat、确认取消、 清空本地状态,且不会触发任何拼多多 driver。
验收要点
- Admin 取消过期任务后,打开 Roubao 最迟一个轮询周期内清理任务卡片。
- 后台任务从
WAITING_CONFIRMATION + cancel_requested变为CANCELED。 - 取消确认过程不恢复授权、不打开拼多多、不产生订单提交。
- Android Debug/Release 单测、lint 和构建通过。
执行记录
- 2026-08-03:根据过期任务无法确认 Admin 取消的问题创建任务,状态
TODO。 - 2026-08-03:显式同步允许安全停止 execution 发送
SAFE_STOPPEDheartbeat;任务页 恢复和十秒轮询改为控制面同步,复用既有取消确认与本地原子清理逻辑。 - 2026-08-03:增加过期状态确认取消回归测试;Android 双变体单测、lint 和构建通过,
状态改为
DONE。