背景
当前新建 Flow 后,saveOfflineFlowDocument 会将样板 flow.yaml 写入磁盘,导致 git status 检测到未提交变更,flowCommitDirty 变为 true,提交按钮启用并显示红点——但 Flow 还是空的,没有任何用户内容,这种状态下允许提交不合理。
方案
新建 Flow 时画布上自动生成一个出口节点(exit node),作为 DAG 的末端汇聚点。
出口节点规则
- 不可编辑、不可删除、不可改名、不可双击
- 无脚本内容
- 只能有入向连线(别人指向它),不能有出向连线
- 用户所有节点最终必须连到出口节点,提交时才视为完整
YAML 表示
tasks:
- id: flow_dag
type: io.kestra.plugin.core.flow.Dag
tasks:
- task:
id: __exit__
dependsOn:
- last_real_node
出口节点只有 id 和 dependsOn,无 type、无脚本文件。后端解析时识别 id 为 __exit__ 跳过常规的 type/scriptPath 校验。
优势
- 新建 Flow 后画布上就有出口节点,提交它完全合理
- DAG 有明确的终点约束,避免"断头路"
- 不需要特殊处理空 Flow 的提交按钮状态
待讨论
- 出口节点放在 YAML 里还是前端/框架层面注入
- 后端解析和验证逻辑的具体改动范围
- 画布渲染时的视觉区分方式
背景
当前新建 Flow 后,
saveOfflineFlowDocument会将样板flow.yaml写入磁盘,导致git status检测到未提交变更,flowCommitDirty变为true,提交按钮启用并显示红点——但 Flow 还是空的,没有任何用户内容,这种状态下允许提交不合理。方案
新建 Flow 时画布上自动生成一个出口节点(exit node),作为 DAG 的末端汇聚点。
出口节点规则
YAML 表示
出口节点只有
id和dependsOn,无type、无脚本文件。后端解析时识别id为__exit__跳过常规的 type/scriptPath 校验。优势
待讨论