# 03 — 耐久调度回路 + 重启恢复 + 取消 **What to build:** 平台自带一个耐久调度循环,无需外部驱动即可让一个"进行中"的活动按其(可压缩的)窗口自动推进到终点:到点派生子 Run、窗口走完把活动置为"已完成"。服务重启后,调度从数据库恢复所有未完成活动、继续推进且不重复派生。用户可中途取消进行中的活动,已完成的子 Run 结果保留。 **Blocked by:** 02(需要调度决策纯函数与派生能力)。 **Status:** ready-for-agent - [ ] 调度循环挂在 Web 应用 lifespan:启动时加载所有"进行中"活动并推进,关闭时优雅停止;循环是薄壳,决策仍走 02 的纯函数 - [ ] 活动进度(窗口起止、已派生/已完成到哪)为库中权威状态,进程内不持有权威态 - [ ] 重启恢复:进程重启后据库续跑未完成活动,不重复派生已到点条目;沿用 mark_orphans_failed 思路处理重启时正在跑的子 Run - [ ] 窗口走完活动状态转"已完成";派生/执行异常不拖垮整个活动(单条失败可跳过并记录) - [ ] 取消:`POST /api/campaigns/{id}/cancel` 将进行中活动置"已取消"、停止后续派生,已完成子 Run 保留 - [ ] `GET /api/campaigns/{id}` 详情反映实时进度(当前窗口位置、已派生/已完成子 Run 数、状态) - [ ] 集成测试:压缩倍速活动端到端自动跑完并置"已完成";模拟重启(进行中活动 + 部分子 Run)后恢复续跑,断言不重复派生、不丢进度;取消后不再派生