3d15cdb493
DEPTH_ROADMAP:225 未完项 + 完成度审计 P0-2:launch() 里 SaveTask 是 best-effort, DB 写失败只 log 却照样 PublishTask + 返 202。结果任务发出去在后端跑了,却不进 运行历史、复盘不了、报告类的用户切页面回来彻底找不回——用户以为成功、实际没落库。 - SaveTask 对「DB 降级(nil)」返 nil、对「DB 活着写失败」返真 error,天然可区分: 前者静默跳过(开发态本就无库),后者上浮为提交失败。落库在 Publish 之前, 失败时还没发布,中止干净、不产生"看不见的执行"。 - 两个调用点(SubmitTask/GenerateReport)已把 launch 错误映射 5xx,无需再改。 范围克制:审计列的其它 best-effort 点保持不动——dispatcher 的异步回写 (UpdateTaskStatus/SaveTaskOutput/SaveTaskTrace)、审计日志、用量累计计数, 都不是"用户等着响应"的路径,没有请求可返 5xx,best-effort 是对的。 唯独 launch 这处是"用户以为提交成功实际没有",才该阻断。 live 验证:改名 task 表模拟 DB 写失败 → 提交返 502+明确文案(不再假 202); 表改回 → 立刻恢复 202。happy path 202+落库不变。go build/vet/test 全绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>