Skip to content

Release: Fix For Open Paths#2507

Merged
mikedh merged 5 commits intomainfrom
release/open
Mar 5, 2026
Merged

Release: Fix For Open Paths#2507
mikedh merged 5 commits intomainfrom
release/open

Conversation

@mikedh
Copy link
Owner

@mikedh mikedh commented Mar 4, 2026

Cyriel Notteboom and others added 5 commits February 25, 2026 14:39
`traversals()` used `set.pop()` to pick the BFS/DFS start node,
which could land on an interior node of an open path. This caused
the traversal to backtrack or expand outward, producing non-edge
consecutive pairs that `_split_traversal` would split on —
fragmenting a single connected path into multiple pieces.

Fix: compute node degrees and prefer degree-1 nodes (endpoints) as
start points. For open paths this guarantees an end-to-end traversal
with no backtracking. Closed paths (all degree-2) fall back to the
original `set.pop()` behavior.

Co-Authored-By: Claude Opus 4.6 <[email protected]>
## Summary

`traversals()` uses `set.pop()` to pick the DFS/BFS start node. When
this
lands on an interior node of an open path, the traversal backtracks,
producing
non-edge consecutive pairs that `_split_traversal` splits on —
fragmenting a
single connected path into multiple entities.

**Fix:** Compute node degrees and prefer degree-1 nodes (endpoints) as
start
points. For open paths this guarantees end-to-end traversal with no
backtracking. Closed paths (all degree-2) fall back to the original
behavior.

## Test plan

- `test_traversal_no_fragmentation` — open chain → 1 traversal; two
disjoint chains → 2
- `test_section_entity_count` — box and cylinder sections → 1 entity
each
- All existing `test_graph.py` and `test_section.py` tests pass
@mikedh mikedh merged commit 5688bae into main Mar 5, 2026
@mikedh mikedh deleted the release/open branch March 5, 2026 19:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant