审批系统从"能挂起"走到了"能恢复",长任务租约不会再被误回收,失败终于可以明确归因。
密,但不乱。方向很清楚。
一、审批闭环:飞书卡片、待审列表、超时清扫
这是本轮最重的一条线。审批系统之前的状态是"能挂起、能写状态",但点击批准或拒绝之后,只是修改了数据库记录,挂起的Agent执行并没有真正恢复。
这一轮补上了最核心的一环:点击批准或拒绝后,不再只是改状态,而是真正恢复原来挂起的执行图。恢复时保留中断状态,避免重复调用工具。飞书审批卡同步上线,用户可以直接在卡片上完成批准或拒绝,页面刷新后可以通过待审批列表重新找回审批请求。后台清扫器自动处理过期审批,并把"审批已超时"状态真实推送给用户。
前端也做了配套:批准后显示Agent的最终收尾回复,不再让用户停在空白页面。
之前审批是"写了个状态就结束了",现在审批是"真的让系统继续跑了"。 恶意或异常情况下的审批绕过、重复执行和中断被吞等问题也一并修复。
审批请求归属人落空的问题修了------飞书发起人可以审批自己的操作。订单工具的消息也纳入了终态门禁,确保任务不会提前结束。

二、长任务租约会话:别再误回收了
长任务租约和会话清理的问题是这轮系统性修复的重点。
之前长任务执行期间,租约冻结经常失效,沙箱准备时间过长时租约在真正执行前就丢失了,导致任务被误回收。这轮修复了租约冻结逻辑,慢速沙箱准备期间不再提前过期,大文件任务支持正确续跑和超时处理。
会话被清理后可以安全重建并重新读取工作区数据,跨会话分配时结果回读和事件重放也修了。上游模型流中断后可以继续执行,不再直接遗失整轮结果。长任务摘要现在保留工具执行进度,不再是空白。
任务不能因为"准备太久"就被杀掉。

三、失败必须可归因
这一轮建立了一个明确的工程约束:所有失败必须明确归因。
沙箱没有返回退出状态时,报告"基础设施或状态缺失"而不是错误声称业务校验失败。Docker Grant、运行时和宿主校验失败现在能区分具体阶段------是权限问题、资源问题还是代码问题,看归因就知道。沙箱运行诊断码放进日志正文,避免被日志格式化丢弃。
还补充了故障注入演练手册,并通过实际演练修正了错误判据。
"失败了"和"知道为什么失败"之间,差的是诊断设计。 这轮补的就是这个。

四、访客租户清理重新开放
访客租户物理清除之前被暂时关闭了。这轮重新开放,但加了审计触发器的保护:符合访客前缀且声明了事务的清除操作可以放行,普通组织仍受不可删除审计记录的保护。迁移顺序也做了调整,避免并行冲突。
在保持正式租户审计保护的同时,允许受控清除访客租户。

五、分享页和图片完整性
分享页图片可以正常预览和下载了。导出链接返回用户真正能够访问的外部地址,而不是内部地址。图片直接输出时保持顺序和完整性。
订单全集扫描也修了:系统之前无法正确判断是否获取了全部分页数据,不完整的结果会被错误标记为完整。修复后订单工具的消息参与终态检查,任务不会提前结束。
定时任务执行记录弹窗加宽、结果展示区域增大、结果按Markdown渲染------用户审批后能看到执行完成的最终结果。

六、沙箱镜像一致性
应用镜像和会话沙箱镜像终于绑定了。之前应用代码更新了,沙箱可能还在跑旧代码,导致Grant归因、会话修复等改动在沙箱里实际没有生效。现在主应用镜像发布时同步更新会话沙箱镜像,发布流程增加明确护栏。
代码改了,运行的必须是改了之后的东西。

这轮104条提交,主线清晰:审批能恢复、任务能续跑、失败能归因、沙箱能同步。每一个"能"的背后,都是之前"不能"的补齐。
这,是第八十二天。
**《从0到1:企业级AI项目迭代日记》**记录一个企业级 AI 项目从创意、架构到落地的真实过程。不讲神话,只记录进化。
如果你也在做企业 AI 落地,欢迎留言来聊。或者,把这篇转发给一个正在踩同样坑的朋友。