Add face kind 5 to the mass.integrator shim, FFI guard and runner: a
rational quadratic B-spline patch with a u knot at 0.4 and a double v knot
at 0.5, so the default precise-property path is compared against C++ on a
face whose trims cross surface knots. 62 cases (domains crossing, between
and at the knots, accuracies 1e-3 to 1e-8, huge/tiny scale, queries 0 and
2-6): mass.integrator 1590 cases, 1590 pass, 0 deferred.
Record the defect as WR-494, naming the opt-in flag
precise_properties_split_at_surface_knots.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SdcgEtgaA54W2nr8dK1EYp
Snapshot of the swarm's in-progress v1.0.1 port before merging main:
per-slice ports (curve_class, face, brep/NLib, heal, primitives/cone,
SM_API and small files, offset/merge/topology_intersector, proto_topology,
vertex/vertexuse/track changes), shim/FFI updates, the pin file and
callgraph remap, fixtures and "fixed in v1.0.1" addenda. Not yet gated.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJzQKZ9sjU1DhgS253e8J5
Three runners passed at 1e-9 but were not bit-identical because the Rust
side was given different geometry than the C++ used; the kernel ports
were faithful in all three:
- mass.integrator: plane-face trims were rebuilt from their NURB as
BSplineCurve, while C++ integrates them as SmLine (analytic Evaluate).
The shim now exports the SmLine members and the runner builds a Line.
- offset.offset_executive_p1: input lines were built with
Line::from_points + edit_parameterization; the shim uses
SmLine::CreateLineSegment. Use Line::create_line_segment.
- topology.edgeuse_p2: StepOff on SmCone/SmCylinder/SmSphere faces ran on
the imported B-spline part, while C++ uses the analytic evaluators.
Defer those cases on surface.surface_p2 (no Cone/Sphere SurfaceKind yet),
as CheckSet already does.
All three now report max_rel_err 0 (checked with REL_TOL temporarily 0).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seed the face evaluator adapter from the current Cash–Karp derivative array, retaining upstream behavior when the U tangent is zero. Add curved face and rational edge regressions, compare nested surface area integration and share the actual bounding-box scale.
Retain unused initial values and infinite error controls where upstream permits them, move the properties module before tests, and renumber the integration issue to WR-94.
Co-Authored-By: Codex <noreply@openai.com>