diff --git a/docs/superpowers/specs/2026-08-25-video-segment-resume-design.md b/docs/superpowers/specs/2026-08-25-video-segment-resume-design.md index 6559af4..9470637 100644 --- a/docs/superpowers/specs/2026-08-25-video-segment-resume-design.md +++ b/docs/superpowers/specs/2026-08-25-video-segment-resume-design.md @@ -56,7 +56,7 @@ flow_segment_result DAO 方法: - `Save(ctx, execId, nodeId, segmentIndex, videoURL) error` — 段成功后落库(INSERT ON CONFLICT DO UPDATE) - `ListByNode(ctx, execId, nodeId) (map[int]string, error)` — 返回 `segment_index → video_url` -- `DeleteByExecution(ctx, execId) error` — 全新执行(forceNewRun)时清理旧段结果 +- `DeleteByExecution(ctx, execId) error` — 清理指定执行的段结果,两个时机:**全新执行(forceNewRun)清旧段**、**工作流执行成功后清理** #### 组件 B:`FlowExecutionInput` 加 `ForceNewRun bool` @@ -91,6 +91,7 @@ DAO 方法: 2. `ModelLambda`:拆段得 5 份参数 → `DeleteByExecution` 清旧 → 需生成全部 5 段 3. 并行调模型,每段失败重试 1 次;每段成功立即 `Save(execId, nodeId, idx, url)` 4. 段 4 两次均失败 → 节点失败 → 工作流失败(段 1/2/3/5 已落库),exec_workflow 记失败 +5. 若全部段成功 → 节点成功 → 工作流继续 → `BuildExecution` 成功返回时删 checkpoint 并 `DeleteByExecution` 清理段结果 #### 重新执行(`ForceNewRun=false`,reExecute 断点续跑) @@ -98,7 +99,7 @@ DAO 方法: 2. `ModelLambda`:拆段仍得 5 段 → `!ForceNewRun` → `ListByNode` 得 `{1:url1, 2:url2, 3:url3, 5:url5}` 3. 需生成段 = 仅段 4,只调模型生成它(失败重试 1 次)→ 成功 → `Save(…, 4, url4)` 4. 合并 1-5 按段序 → `concat_videos` 按序拼接 → 节点成功,后续节点继续 -5. 工作流成功,删 checkpoint +5. 工作流成功 → `BuildExecution` 返回时删 checkpoint + `DeleteByExecution` 清理段结果(下次全新执行无残留) ### 3.3 错误处理与边界 @@ -112,6 +113,7 @@ DAO 方法: | 并行段并发写表 | 每段 index 独立,唯一键 `(execution_id, node_id, segment_index)`,无冲突 | | 手动中断/断连 | 已成功段已落库,重跑自动复用 | | 重试次数 | 每段失败重试 1 次(共 2 次尝试),参数化可调 | +| 工作流执行成功 | `BuildExecution` 成功返回 → 删 checkpoint 并 `DeleteByExecution` 清理该执行段结果,下次执行全新生成 | ### 3.4 测试 @@ -122,4 +124,4 @@ DAO 方法: ## 4. 开放问题 -- 段结果表数据保留策略:当前 `forceNewRun` 清理 + 执行失败保留供复用;是否需定时清理历史成功段,暂不引入 \ No newline at end of file +- 已解决:段结果表数据保留策略 = **`forceNewRun` 清理旧段 + 工作流执行成功后清理**(`BuildExecution` 成功路径与删 checkpoint 并列调用 `DeleteByExecution`);执行失败则保留,供 reExecute 复用。无残留、无需定时清理。 \ No newline at end of file