- SubdivideNode: split into SurfaceCache::subdivide_node_split plus the base class
ending; TrimSrfCache splits through its own subdivide_node, which re-implants a
boundary parent's edge uses into the children with TrimSrfCache::implant_edgeuse
(needs SmEdgeuse::GetUVTrimCurve: those cases defer on topology.edgeuse_p1; poly
edges on query.poly) instead of dropping them through the base ImplantEdgeuse.
- trim_srf_cache shim and runner: ImplantEu prints every node of the tree (the
children subdivisions make included); fixture implant_then_split_boundary_leaf.
- FFI accepts planes where it asked for a B-spline cache (an SmPlane is an
SmBSplineSurface); the generator uses them; the tolerance test reads a plane's
NURB through base_for_query (found by the new plane cases).
- DISPATCH GAP comments for GetTree's virtual BuildTree and SubdivideNode's GetTree;
the bare-tree patch data reads (geom.tree, geom.grid, surface_p2) are dispatch
gaps tagged with their owning units, not surface.surface_cache_p3.
- Stale docs and notes fixed; findings for the review points.
surface.surface_cache_p3: 445 pass, 0 fail, 155 deferred, --perturb 445/445.
surface.trim_srf_cache: 526 pass, 0 fail, 95 deferred, --perturb 526/526.
difftest --green: 117 units, 0 failed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RsMto2bEoBSCSCJku4nT4u