9c44c709e9
The previous computeLayers used a reachability-based relation (a « b) with depth tiebreaker to define a < b, then grouped nodes by == into equivalence classes. However == is NOT an equivalence relation (fails transitivity), making the grouping order-dependent and incorrect for graphs with parallel branches. Replace with standard Sugiyama longest-path layering: 1. DFS to detect and remove back-edges (break cycles) 2. Kahn's topological sort on the resulting DAG 3. rank(n) = max(rank(pred) + 1) for longest-path assignment 4. Group nodes by rank into layers Also removes the experimental dagre layout strategy that was added for comparison — longest-path produces better results for our workflow graphs.