Description
In reorder_attachments_by_position (src/simlin-engine/src/layout/mod.rs), when flows change faces (e.g., from Bottom to Right after a chain is removed), the sort key uses the new side's axis (y for Right). However, the old attachment points from the Bottom face all share the same y-coordinate, so they collapse to identical sort keys and fall back to alphabetical ordering, losing their original left-to-right visual positioning.
Concrete example
Suppose a stock has three flows attached to its Bottom face at positions x=100, x=200, x=300. When the layout logic moves these flows to the Right face, it sorts by the y-coordinate (the natural axis for the Right face). But all three flows still have their old Bottom-face coordinates where y is identical (the bottom edge of the stock). The sort produces equal keys for all three, so they end up ordered alphabetically rather than preserving the x=100, x=200, x=300 visual sequence.
Why it matters
- Correctness: Flow attachment order affects the visual layout of the diagram. Losing spatial ordering means flows get rearranged in a way that does not match user intent.
- User experience: When a chain is removed or restructured, flows jumping to unexpected positions is confusing.
Component(s) affected
simlin-engine -- specifically src/simlin-engine/src/layout/mod.rs, the reorder_attachments_by_position function
Possible approaches
- Sort by the axis with more variance among the attachment points (i.e., if all points have the same y, sort by x instead).
- Use the old side's natural axis as the sort key rather than the new side's axis.
- Use a composite sort key incorporating both x and y coordinates, with the primary key being the axis that has actual variance.
Context
Identified during code review of PR #444 (layout: route non-chain flows perpendicular to aging chains). Classified as P3 -- the issue is real but unlikely to be triggered frequently in current usage patterns.
Description
In
reorder_attachments_by_position(src/simlin-engine/src/layout/mod.rs), when flows change faces (e.g., from Bottom to Right after a chain is removed), the sort key uses the new side's axis (y for Right). However, the old attachment points from the Bottom face all share the same y-coordinate, so they collapse to identical sort keys and fall back to alphabetical ordering, losing their original left-to-right visual positioning.Concrete example
Suppose a stock has three flows attached to its Bottom face at positions x=100, x=200, x=300. When the layout logic moves these flows to the Right face, it sorts by the y-coordinate (the natural axis for the Right face). But all three flows still have their old Bottom-face coordinates where y is identical (the bottom edge of the stock). The sort produces equal keys for all three, so they end up ordered alphabetically rather than preserving the x=100, x=200, x=300 visual sequence.
Why it matters
Component(s) affected
simlin-engine-- specificallysrc/simlin-engine/src/layout/mod.rs, thereorder_attachments_by_positionfunctionPossible approaches
Context
Identified during code review of PR #444 (layout: route non-chain flows perpendicular to aging chains). Classified as P3 -- the issue is real but unlikely to be triggered frequently in current usage patterns.