Use live topology reads and cache-first face classification while retaining exact evaluation geometry. Forward constructor identities into stitching region queries and compare primitive geometry, tolerances, trims and rays against SMLib.
Co-Authored-By: Codex <noreply@openai.com>
- Plane-fit refusals of FindOuterLoops' zero-area loop (UB-119) pass through
the face builders and defer as cpp-guard:ub-119 in the runners.
- geom.tools: FindEdge's DropPoint wired to curve.curve_p6.
- primitive.api_primitives shim: put_brep takes the out-parameter by reference
(it was read before the call wrote it); the runner counts the B-rep's lists.
- plan: brep_p8 partial, findings rewritten, brep_p6 blocker noted.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pfe7dodPG5rpuN9B8QcnuX
Surface overloads (plane, cylinder, cone, torus) are ported in full; the
B-rep entry points validate as upstream and defer to the unported
SmPrimitiveCreation / SmBrep units. Upstream crashes and hangs found by
the C++ reference run are recorded as UB-158..161 and HANG-16 and fenced
off by the ffi guard.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm