125 shims carried private copies of the same small helpers (put_vec, st,
nl_status, Rd, dump_crv, read_nurb, ...). Move the most common, byte-identical
form of each into three headers grouped by the upstream API they need, and have
those shims pull them in with `using sc::<name>;`. Shims with a different
variant keep their own copy; files touched by open PRs are left alone.
`the_context()` stays per shim (its function-local SmContext must not be shared).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FBLgPenT24P1dunqnZR1Dj
Brings in intersect.surface_drop_lib_p2 (#112) and wires its stubs into
this PR's solvers: IsSingularity (both overloads) and LocalPointSolve
(SER, with the caller's kernel, which sm_AddToCurve now takes in place
of its unused crContext), and EvaluateGeometric (status ignored as
upstream, curvatures 0.0 on failure). Its difftest planes get their NURB
up front on both sides, as for surface_drop_curve. drop_lib_p2: 1304
pass, 227 deferred (surface.offset_surface), 0 failed.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm