Resolve plan conflicts (keep both sides; loopuse's IsClosed3d bug renumbered
WR-88 -> WR-93 since heal.gap took WR-88). Carry the loop use orientation in
the topology.edge, topology.vertex and heal.gap export copies and importers.
Wire SmVertex/SmEdge::IsConnectedTo to the now-merged topology.vertex and
topology.edge ports; the shim runs those 99 cases (null-deref guarded).
topology.loopuse: 8854 cases, 7950 pass, 0 failed, 904 deferred.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
- Closed3d op takes an optional edge_tol that sets every edge tolerance
(SmEdge::m_sZoneTol3d / Edge::tolerance, stored as fabs) first;
fixtures/topology.loopuse/tolerance_limit.json (1984 cases) reaches the
over-tolerance branch of SmLoopuse::IsClosed3d 176 times, incl. the
bCheckAllGaps == FALSE early stop.
- Shim closed3d_safe predicts the early stop from SmTol::GetXSectTol3d of
the two zone tolerances, as upstream.
- fixtures/topology.loopuse/review_adversarial.json: 4712-case subset of
the reviewer's sweep.
- drop_point stub docs: return any point DropPoint writes (bSuccess ignored).
- WR-88 confirmation text, unit notes, findings.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
Ports the SmLoop and SmLoopuse members owned by the unit into
topology::loopuse (member walks, closure and connectivity predicates,
FlipLoopOrientation, CollectEdgeuses, GetUVCornerBoundaries,
IsMissingSeamAtVertices), adds Loopuse::orientation, wires the co-ports
of topology.edgeuse_p1, topology.face_p2, query.loop and the
GetOrientation stub of topology.vertexuse, and adds the shim, FFI
binding, difftest runner and fixtures. The shared B-rep export carries
each loop use's orientation.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm