任务生命周期:行先于执行,删会话不再留幽灵
一句话结论:长任务系统的三个老毛病——删掉会话却留下"幽灵任务"还在后台跑、取消按钮找不到对应行、AI 自动审批被直接拒绝——根因是"任务行"和"执行"是两张皮。我们改成"行先于执行",并把 T3 高危操作从"直接拒"改成"挂起等用户批"。
三个老毛病
长任务跑起来后,生命周期上有三处设计债:
- 删会话留幽灵:用户删掉一个会话,里面在跑的任务没被一起取消,变成后台幽灵链,继续烧算力还查不到归属。
- 执行期不可见、不可取消:快车道(同步派发)执行时根本没有任务行,用户想停都不知道停哪。
- T3 直接拒:需要用户拍板的高危操作,在无人值守模式下被代码直接拒绝("auto mode rejected"),而不是挂起等用户回来批。
这三件表面上不相关,底层是同一件事:任务的"行"(状态记录)和"执行"(实际跑的进程)没对齐。
行先于执行
改造的第一刀:无论走哪条车道(lite / expert / pro / specialist),在派发 switch 之前先建任务行——状态 pending → running,并和派发在同表注册取消入口。建行失败就 fail-fast,不让执行裸奔。
效果是:快车道执行期也能在任务中心看到这一行,能取消、能追踪,不再有"看不见的任务"。
所有权级联:删会话 = 止①类
删会话不再是"删数据"一件事,而是先取消:对该会话的 running / pending / waiting_approval 任务做级联取消,落"会话已删除,任务取消"的交代,再删数据。幽灵链从根上消失。
T3 挂起三合一
最需要改的是 T3(高危审批)。原逻辑在 auto 模式直接 ErrAutoModeRejected,等于"用户在场才能干、不在就废掉"。改成:
- auto + T3 → 改道挂起,不拒绝。
- 三重豁免:僵尸扫描、停滞墙、链级零进展,对挂起轮次豁免,不被误杀。
- 不设超时:挂起等用户批或进程重启,不在 300s 回落倒计时里把决策按钮吃掉。
- 批后原位续走:批准后从挂起点继续,不重派、不重跑。
前端同步加"处理审批"面板,审批卡设为无界(T3 无到期时刻)。
结论
任务生命周期收口后,长任务系统第一次做到:每一份执行都有可见可取消的行、删会话干净无残留、高危操作等人批而不是被悄悄丢掉。