Parallel fail-fast leaves collateral node failures unattributed and stale
bugproject#dify
### Self Checks
- [x] I have read the [Contributing Guide](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) and [Language Policy](https://github.com/langgenius/dify/issues/1542).
- [x] This is only for bug report, if you would like to ask a question, please head to [Discussions](https://github.com/langgenius/dify/discussions/categories/general).
- [x] I have searched for existing issues [search for existing issues](https://github.com/langgenius/dify/issues), including closed ones.
- [x] I confirm that I am using English to submit this report, otherwise it will be closed.
- [x] 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :)
- [x] Please do not modify this template :) and fill in all the required fields.
### Dify version
`main` (reproduced against the source branch before the proposed fix)
### Cloud or Self Hosted
Self Hosted (Source)
### Steps to reproduce
1. Create a workflow whose start node fans out into parallel branches.
2. Configure one branch to fail fatally with fail-fast behavior.
3. Keep at least one sibling node running, and optionally another sibling node in retry, when the fatal branch fails.
4. Run the workflow from the Test Run panel.
5. Inspect the collateral nodes in the live Tracing panel and on the canvas, then inspect the persisted run trace.
A minimal reproduction can use one HTTP node that fails immediately and two slow LLM nodes in sibling branches.
https://github.com/user-attachments/assets/641c1695-63f8-4862-bbd3-da97ce06facd
### ✔️ Expected Behavior
- The fatal graph failure identifies the exact node execution that caused it.
- Concurrent sibling executions terminated by fail-fast are persisted as failed with causal metadata identifying the source node.
- A collateral node is presented as terminated because another node failed, rather than as if it produced the error itself.
- The live Tracing panel and canvas reconcile to the persisted terminal node states after the workflow finishes.
### ❌ Actual Behavior
The graph-level failure contains only the error text, so Dify cannot distinguish the source node from sibling executions terminated by fail-fast. Collateral running or retrying nodes can remain stale in the live UI, and persisted failures cannot explain which node caused their termination.
### Companion issue
This is the Dify companion to [langgenius/graphon#220](https://github.com/langgenius/graphon/issues/220). Graphon must preserve and publish the fatal node execution identity before Dify can persist and present it.
58 条评论