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
SurfaceKind::CurveBounded with the evaluation overrides passed along to the
basis surface, base-class defaults for the rest of the SmSurface dispatch,
type queries, operator==, SetContext and ReadFromDB (wired into
Surface::read_from_db, which now takes the kernel for the boundary curve
readers). C++ shim, ffi wrapper, difftest runner and fixtures: 535 cases,
359 pass, 176 deferred (surface_p1/p3/p5/p7).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8ohWGLCzFPoZriCeSSero