Files
solvecraft/harness/cpp
bherbruck 5265c8b428 Merge origin/main into unit/surface.surf_of_extrusion_p2
Conflicts:
- surface::surface::p2 read_from_db: keep main's PLANE_TYPE reader and
  this PR's SURF_OF_EXTRUSION_TYPE dispatch-gap arm.
- plan/STATUS.md, plan/upstream-issues.md: keep both sides. This PR's
  issues renumbered past main's: UB-85..UB-89 -> UB-91..UB-95,
  WR-63 -> WR-66 (references in modules.toml and findings.md updated).

Wiring: surface.plane_p2 is partial on main, so the
UNPORTED(surface.plane_p2) SmPlane::TrimCurveToPlaneDomain stub in
SurfOfExtrusion::intersect_with_plane is now the real call. difftest
surface.surf_of_extrusion_p2: 1359 cases, 1048 pass (was 971), 0 failed,
311 deferred (plane_p2 133, adv_surface_intersector 97, curve_p9 81).

Main build fix: main did not compile (CI red since the
surface_intersector_p3 / surface_point_solve_p1 merges): four matches
lacked the SurfaceKind::SurfOfRevolution arm. Dispatched as upstream:
IsSingularity and IsOnSeam have no SmSurfOfRevolution/SmBSplineSurface
override (base SmSurface, unported arm); SmSurfacePointSolve's
SM_CAST_PTR(SmBSplineSurface) succeeds for a surface of revolution
(its base); DropToIsoCurve calls the SmSurfOfRevolution override of
CreateIsoParametricCurve.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 15:31:36 -04:00
..