Loading...
Loading...
Compare original and translation side by side
.to().to().to().add().add(node.output(0)).to(target) // ❌ connection silently dropped
.add(node.output(0).to(target)) // ✅validate_workflow.add(...).to(...).to().add().add(node.output(0)).to(target) // ❌ 连接被静默丢弃
.add(node.output(0).to(target)) // ✅ 正确写法validate_workflow.add(...).to(...).to().add(source.output(n).to(target))source.output(n).to(target).to(target.input(m)).add().add().add(source.output(n).to(target))source.output(n).to(target).to(target.input(m)).add().add()Wiring a connection?
├── Linear (one source → one target, single output, single input)?
│ └── .add(source).to(target). The simple case; .to() outside is fine here
│ because there's no .output(n) selector inside .add()
│
├── Selector involved (.output(n) or composite handlers)?
│ └── .to() MUST go inside .add(). See "the trap" above
│
├── Targeting a specific input slot on a multi-input node (Merge)?
│ └── .add(source.output(n).to(target.input(m)))
│ AND check useDataOfInput. See references/MERGE_INDEX_RULES.md
│
├── Error branch?
│ └── .add(node.output(1).to(handler))
│ AND set onError: 'continueErrorOutput' on the node config.
│ See references/ERROR_OUTPUTS.md
│
└── Fan-out (one source → many targets) or fan-in (many sources → one target)?
└── See references/FAN_OUT_FAN_IN.md要配置连接?
├── 线性连接(一个源节点 → 一个目标节点,单输出、单输入)?
│ └── 使用.add(source).to(target)。这种简单场景下,.to()放在外面没问题
│ 因为.add()内部没有.output(n)选择器
│
├── 涉及选择器(.output(n)或复合处理器)?
│ └── .to()必须放在.add()内部。参见上方的“陷阱”部分
│
├── 要定位多输入节点(如Merge)的特定输入槽?
│ └── 使用.add(source.output(n).to(target.input(m)))
│ 并检查useDataOfInput配置。参见参考文档/MERGE_INDEX_RULES.md
│
├── 错误分支?
│ └── 使用.add(node.output(1).to(handler))
│ 并在节点配置中设置onError: 'continueErrorOutput'。
│ 参见参考文档/ERROR_OUTPUTS.md
│
└── 扇出(一个源节点 → 多个目标节点)或扇入(多个源节点 → 一个目标节点)?
└── 参见参考文档/FAN_OUT_FAN_IN.md.onTrue.onFalse.onCase.onError.onTrue.onFalse.onCase.onError.add(ifNode.onTrue(targetA)) // same as .add(ifNode.output(0).to(targetA))
.add(ifNode.onFalse(targetB)) // same as .add(ifNode.output(1).to(targetB))
.add(sw.onCase(2, target)) // same as .add(sw.output(2).to(target))
.add(node.onError(handler)) // same as .add(node.output(1).to(handler)).output(n).add(ifNode.onTrue(targetA))
.add(ifNode.output(0).to(targetB))
// Result: BOTH targetA and targetB on IF's main[0]. Composite + .output(n) merge..add(selector).to(target).add(ifNode.onTrue(targetA)) // 等同于.add(ifNode.output(0).to(targetA))
.add(ifNode.onFalse(targetB)) // 等同于.add(ifNode.output(1).to(targetB))
.add(sw.onCase(2, target)) // 等同于.add(sw.output(2).to(target))
.add(node.onError(handler)) // 等同于.add(node.output(1).to(handler)).output(n).add(ifNode.onTrue(targetA))
.add(ifNode.output(0).to(targetB))
// 结果:IF节点的主输出[0]同时连接到targetA和targetB。复合处理器 + .output(n)会合并连接。.add(selector).to(target)validate_workflowcreate_workflow_from_codeupdate_workflowget_workflow_detailsconnectionsmain[i]useDataOfInputonError: 'continueErrorOutput'main[1]references/VERIFICATION.mdvalidate_workflowcreate_workflow_from_codeupdate_workflowget_workflow_detailsconnectionsmain[i]useDataOfInputonError: 'continueErrorOutput'main[1]references/VERIFICATION.md| File | Read when |
|---|---|
| One source → many targets, or many sources → one target |
| Wiring a Merge node, or you see |
| Adding error handling on an individual node (not error workflow, that's |
| Just created or updated a workflow with non-trivial connections |
| 文件 | 阅读场景 |
|---|---|
| 一个源节点 → 多个目标节点,或多个源节点 → 一个目标节点 |
| 配置Merge节点,或在节点配置中看到 |
| 为单个节点添加错误处理(不是错误工作流,错误工作流请参考 |
| 刚创建或更新了包含复杂连接的工作流 |
| Anti-pattern | What goes wrong | Fix |
|---|---|---|
| Wire silently dropped, validation passes | Move |
Mixing | Off-by-one, wire feeds the wrong input | Use |
Error branch wired without | Branch is unreachable, and node fails the whole workflow on error | Set |
Skipping | Silently broken workflows ship | Always pull and inspect after create/update |
| Reading all four reference files before wiring one connection | Wasted context | Read only the file matching the situation |
| 反模式 | 问题 | 修复方案 |
|---|---|---|
| 连接被静默丢弃,但验证通过 | 将 |
| 索引偏移,连接传入错误的输入 | 当 |
错误分支已连接,但未设置 | 分支无法访问,节点出错会导致整个工作流失败 | 在节点配置中设置 |
创建后跳过 | 损坏的工作流被静默发布 | 创建/更新后务必拉取并检查工作流 |
| 配置单个连接前阅读全部四份参考文档 | 浪费时间和精力 | 只阅读与当前场景匹配的文档 |