概述
将工作流 名称 视为不可变的生产目标。在控制台中的编辑会写入 Draft(草稿)。Live(线上) 流量运行已发布的修订版本。
该功能由 workflow_releases_enabled 控制(默认 关闭)。关闭时,API 执行仍使用可变的 workflows 行。创建和导入仍会写入修订版本 r1,以便回填保持幂等。在完成下方检查清单之前,请勿在生产环境启用该功能。
核心概念
| 术语 | 含义 |
|---|---|
| Draft(草稿) | 当前的 workflows / workflow_events 行 |
| Live(线上) | workflows.published_revision_id |
snapshot_hash | 去重哈希(content_hash 列);包含子工作流的 Live 固定点;不包含结构化输出的 id/名称 |
content_fingerprint | 脏检查哈希;忽略固定点修订字段以及结构化输出的 id/名称 |
| 执行快照(Execution snapshot) | 用于异步 Playground 草稿任务的短期 Draft 固定点(不是修订版本) |
脏状态原因相互独立:
draft_content_changed— Draft 指纹与 Live 不一致dependency_live_moved— 某个回调目标的 Live 固定点已变更
运行时行为
- 生产 API 密钥始终运行 Live。不支持
@12或请求头固定修订版本。 - Live 异步任务会存储
workflow_revision_id。 - Playground 中的 Draft 异步任务会持久化执行快照并存储
execution_snapshot_id。该记录会保留到expires_at已过期 且 没有待处理 channel 且 没有未完成的 Oban 任务引用它为止。 - 停用子工作流不会破坏已有固定点。
by_name会对已停用工作流返回 404。新的 Publish 不能固定到已停用的目标。
控制台
- 创建后不能修改名称。
- 删除会停用工作流;修订历史会保留。
- Publish(发布)和 Rollback(回滚):组织所有者/管理员。
- Restore draft(恢复草稿):编辑者;会克隆结构化输出,避免影响其他工作流。
启用步骤
- 运行
mix backfill_workflow_releases,直到所有工作流(包括已停用的)都拥有 Live 指针。 - 确认回调图无环。
- 在预发环境开启功能开关并充分验证:排队任务、channel TTL 刷新、在有进行中任务时执行 Publish。
- 确认已为
[:modelriver, :workflow, :missing_live]和[:modelriver, :workflow, :execution_snapshot_expired]配置监控面板。
仅当上述门禁全部通过后,再设置 WORKFLOW_RELEASES_ENABLED=true。