@@ -185,7 +185,11 @@ func New(edges []Edge) (*Workflow, error) {
185185 for _ , edge := range edges {
186186 adj [edge .From ] = append (adj [edge .From ], edge )
187187 }
188- return & Workflow {edges : adj }, nil
188+ wf := & Workflow {edges : adj }
189+ if err := validateWorkflow (wf ); err != nil {
190+ return nil , fmt .Errorf ("workflow validation failed: %w" , err )
191+ }
192+ return wf , nil
189193}
190194
191195type nodeInput struct {
@@ -208,15 +212,10 @@ func (w *Workflow) findNextNodes(currentNode Node, input any, event *session.Eve
208212 }
209213 matched := false
210214 queue := []nodeInput {}
211- added := make (map [Node ]struct {})
212215 var defaultRouteNode Node
213216 for _ , edge := range w .edges [currentNode ] {
214- if _ , ok := added [edge .To ]; ok {
215- continue
216- }
217217 if edge .Route == nil {
218218 queue = append (queue , nodeInput {node : edge .To , input : input })
219- added [edge .To ] = struct {}{}
220219 continue
221220 }
222221 if edge .Route == Default {
@@ -225,7 +224,6 @@ func (w *Workflow) findNextNodes(currentNode Node, input any, event *session.Eve
225224 }
226225 if edge .Route .Matches (event ) {
227226 queue = append (queue , nodeInput {node : edge .To , input : input })
228- added [edge .To ] = struct {}{}
229227 matched = true
230228 }
231229 }
0 commit comments