Files
solvecraft/plan/modules.toml
T
bherbruck b2d3adb428 Merge pull request #64 from bherbruck/p9-guards
surface.surface_p9: narrow FFI guards to what the C++ can't handle; extra fixtures
2026-10-14 15:11:36 -04:00

3658 lines
382 KiB
TOML

# Generated by harness/callgraph/plan_units.py -- edit statuses/claims freely; regenerate only
# with care (ids are stable for a given closure). Function lists: harness/callgraph/units.json.
# est_lines = in-scope (reachable) upstream function lines in the unit.
[[unit]]
id = "geom.extent3d"
upstream = ["source/SMLib/inc/SmExtent3d.h", "source/SMLib/src/SmExtent3d.cpp"]
rust_module = "geom::extent3d"
depends_on = []
soft_depends_on = []
est_lines = 1122
layer = 0
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle"]
status = "green"
claimed_by = "swarm-geom.extent3d-a1"
claimed_at = "2026-10-12T19:22:46Z"
notes = "GREEN: difftest 3086 cases, all bit-identical, 0 deferred (Circumscribe wired by geom.pseudo_box); geom.extent1d intervals wired; co-ports sm_sqrt/sm_asin/GetMaxDimension (geom.vector3d). 67 fns; largest: SmExtent3d::IntersectLine, SmExtent3d::Circumscribe, SmExtent3d::ApproximateUnbounded, SmExtent3d::ComputeConeBoundTo; cycle back-edges (call into later units; stub or co-port): geom.vector3d(51), geom.extent1d(9), geom.pseudo_box(4); unit-SCC #22 (220 units); 318 upstream test entry points reach this unit"
[[unit]]
id = "geom.vector2d"
upstream = ["source/SMLib/inc/SmVector2d.h", "source/SMLib/src/SmVector2d.cpp"]
rust_module = "geom::vector2d"
depends_on = []
soft_depends_on = []
est_lines = 339
layer = 0
tests = ["prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle"]
status = "green"
claimed_by = "swarm-geom.vector2d-a1"
claimed_at = "2026-10-12T19:22:41Z"
notes = "35 fns; largest: SmVector2d::AngleBetween, SmVector2d::CCWAngleBetween, SmVector2d::Unitize, SmVector2d::CloserThan; cycle back-edges (call into later units; stub or co-port): geom.vector3d(5), geom.tol(2); unit-SCC #22 (220 units); 318 upstream test entry points reach this unit; GREEN: difftest 4060 cases (60 fixture + 4000 generated), 0 deferred, max_rel_err 0 (bit-identical); 200k-seed run clean; back-edges sm_sqrt/sm_acos/sm_asin (geom.vector3d) and SM_IS_ZERO_SQUARED (geom.tol) co-ported as private helpers"
[[unit]]
id = "nlib.knots"
upstream = ["source/SMLib/src/NL_BasisBasic.cpp"]
rust_module = "nurbs::knots"
depends_on = []
soft_depends_on = []
est_lines = 768
layer = 0
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "wave0-leaf"
claimed_at = "2026-10-12T18:52:20Z"
notes = "12 fns; largest: N_BasisIDerivs, N_BasisIEval, N_BasisFindSpan, N_BasisEval; 317 upstream test entry points reach this unit; GREEN: difftest 2953 cases (1753 fixture + 1200 generated), max_rel_err 0 (bit-identical); 50k-seed run clean"
[[unit]]
id = "nlib.math"
upstream = ["source/SMLib/src/NL_Math.cpp", "source/SMLib/src/NL_SrfPoly.cpp", "source/SMLib/src/NL_Util.cpp"]
rust_module = "nurbs::math"
depends_on = []
soft_depends_on = []
est_lines = 2971
layer = 0
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.math-a1"
claimed_at = "2026-10-12T19:21:27Z"
notes = "green: 3076 difftest cases (76 fixture + 3000 generated), 0 deferred, max_rel_err 0 (bit-identical; a 100,076-case run was also clean). N_SrfPowerBasisEvalPt back-edge into nlib.srf_basic removed (Rust takes the control net; see plan/findings.md). 79 fns; largest: N_SrfPowerBasisEvalDerivs, N_RealMatrixForBack, N_RealMatrixMultiply, N_SolveQuadraticEq; unit-SCC #2 (3 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.database_io"
upstream = ["source/SMLib/inc/SmDatabaseIO.h", "source/SMLib/src/SmDatabaseIO.cpp"]
rust_module = "topology::database_io"
depends_on = []
soft_depends_on = []
est_lines = 363
layer = 0
tests = ["prog_test:my_test_poly_solver_2", "prog_test:my_test_poly_solver_1", "prog_test:my_test_sp_nurb", "SM_API_test:TestSmTessellateMaxEdgeCap", "SM_API_test:TestSmPolyBrepMassPropertiesWinding", "prog_test:my_test_MakeFace", "pt_TestFiles/Tess/BoxFillet.stl", "pt_TestFiles/Tess/Extrusion.pbp", "pt_TestFiles/Surface.sms", "pt_TestFiles/MakeFace/ApproximateSphere.smp"]
status = "green"
claimed_by = "swarm-topology.database_io-a1"
claimed_at = "2026-10-12T19:21:50Z"
notes = "28 fns; largest: SmDatabaseIO::ReadLongs, SmDatabaseIOFile::OpenFileForRead, SmDatabaseIO::ReadLong, SmDatabaseIO::ReadType; 82 upstream test entry points reach this unit; difftest green: 2059 cases (59 fixtures + 2000 generated), 0 deferred; 200k-seed run green"
[[unit]]
id = "geom.attribute"
upstream = ["source/SMLib/inc/SmAttribute.h", "source/SMLib/src/SmAttribute.cpp"]
rust_module = "geom::attribute"
depends_on = ["topology.database_io"]
soft_depends_on = []
est_lines = 920
layer = 1
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-geom.attribute-a1"
claimed_at = "2026-10-12T19:38:43Z"
notes = "90 fns; largest: SmMergeRegionAttribute::Merge, SmAttribute::Split, SmColorAttribute::PropagateRegionsThroughBooleans, SmAttributeData::ReadIndexedAttributesFromDB; cycle back-edges (call into later units; stub or co-port): geom.a_object(14), geom.object(11), query.brep(6), geom.vector3d(4), query.tess(4), topology.shell(3), curve.composite_curve_p1(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; PARTIAL: difftest 2029 cases (29 fixture + 2000 generated), 1991 pass bit-identical, 38 deferred (topology.shell 38: SmRegion::GetBrep in SmMergeRegionAttribute::Merge); 200k-seed run clean; SmAObject attribute-list methods co-ported into AttributeStore (CO-PORT(geom.a_object)), SmObject::IsKindOf co-ported (geom.object)"
[[unit]]
id = "geom.tol"
upstream = ["source/SMLib/inc/SmRelation.h", "source/SMLib/inc/SmTol.h", "source/SMLib/src/SmTol.cpp"]
rust_module = "geom::tol"
depends_on = ["geom.extent3d", "geom.vector2d"]
soft_depends_on = []
est_lines = 923
layer = 1
tests = ["prog_test:my_test_crv_projected_max", "prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix"]
status = "green"
claimed_by = "swarm-geom.tol-a1"
claimed_at = "2026-10-12T19:35:37Z"
notes = "119 fns; largest: SmTol::UpdateObjectTolerance, SmTol::GetZoneTol3d, SmRelation::RelatePair, SmTol::MapTo2d; cycle back-edges (call into later units; stub or co-port): geom.vector3d(20), curve.curve_p2(10), intersect.curve_class_p1(9), topology.edge(9), geom.object(6), heal.gap(6), topology.face_p2(6), geom.extent1d(5), geom.extent2d(5), surface.surface_p1(5), surface.surface_p2(5), intersect.point_class(4), topology.brep_p1(4), topology.vertex(4), curve.curve_p4(3), topology.topology(3), curve.crv_on_surf(2), geom.context(2), query.face_p1(2), surface.surface_p7(2), topology.shell(2), blend.fillet_corner_p1(1), blend.fillet_solver_p1(1), geom.local_solve_nd(1), geom.pseudo_box(1), query.brep(1), query.poly(1), surface.surface_p5(1), surface.volume_p1(1), surface.volume_p2(1), topology.face_p3(1), topology.face_p4(1); unit-SCC #22 (220 units); 320 upstream test entry points reach this unit; GREEN: difftest 3435 cases (435 fixture + 3000 generated; MapTo1d / GetScaledZero(SmExtent1d) wired by geom.extent1d), all bit-identical, 0 deferred (the 221 geom.vector3d cases resolved when geom.vector3d landed), max_rel_err 0; 60k-seed run clean; object/curve/surface/topology/extent2d overloads are UNPORTED(<unit>) markers in geom/tol.rs; SmRelation results sorted (upstream hash order, see findings)"
[[unit]]
id = "geom.tree"
upstream = ["source/SMLib/inc/SmTree.h", "source/SMLib/src/SmTree.cpp"]
rust_module = "geom::tree"
depends_on = ["geom.extent3d"]
soft_depends_on = []
est_lines = 1259
layer = 1
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-geom.tree-a1"
claimed_at = "2026-10-12T19:33:41Z"
notes = "difftest: 618 cases (18 fixture + 600 generated), 611 pass bit-identical, 7 deferred (surface.surface_cache_p3 7: GetFirstBezierPatch reading patch data from a bare tree; GetOwnerObject of surface trees wired by surface.surface_cache_p1); 34 fns; largest: SmTree::AddToSpatialTree, SmTree::RmFromSpatialTree, SmTreeNode::PropagateToParents, SmTreeNode::GetBotSide; cycle back-edges (call into later units; stub or co-port): geom.vector3d(5), geom.object(2), surface.surface_cache_p1(2), curve.curve_cache(1), nurbs.b_spline_surface_p1(1), surface.surface_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "nlib.geom"
upstream = ["source/SMLib/src/NL_FrameBasic.cpp", "source/SMLib/src/NL_Geom.cpp"]
rust_module = "nurbs::geom"
depends_on = ["nlib.math"]
soft_depends_on = []
est_lines = 1244
layer = 1
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.geom-a1"
claimed_at = "2026-10-12T19:47:08Z"
notes = "green: 3173 difftest cases (173 fixture + 3000 generated), 0 deferred, max_rel_err 0 (bit-identical). No UNPORTED(nlib.geom) stubs existed to wire. 64 fns; largest: N_CreateTransformMatrixFromAxes, N_IsectLineLine, N_IsectLinePlane, N_CreateRotationMatrixAboutAxis; unit-SCC #2 (3 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "geom.assert_array"
upstream = ["source/SMLib/inc/SmAssertArray.h", "source/SMLib/src/SmAssertArray.cpp"]
rust_module = "geom::assert_array"
depends_on = []
soft_depends_on = ["geom.tol", "geom.vector2d"]
est_lines = 373
layer = 2
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.assert_array-a1"
claimed_at = "2026-10-12T19:48:02Z"
notes = "10 fns; largest: SmAssertReport::SmAssertReport, SM_GetAssertLabelList, SmAssertArray::AddUniqueDeleteDuplicate, SmAssertArray::Contains; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; difftest: 3734 cases (fixtures, every label-table entry, generated reports and AddUniqueDeleteDuplicate/Contains/SetLastAdd sequences), all bit-identical, 0 deferred"
[[unit]]
id = "geom.context"
upstream = ["source/SMLib/inc/SmContext.h", "source/SMLib/inc/SmTopoTypes.h", "source/SMLib/src/SmContext.cpp", "source/SM_API/src/SmApiGeneral.cpp"]
rust_module = "geom::context"
depends_on = []
soft_depends_on = ["geom.tol"]
est_lines = 355
layer = 2
tests = ["prog_test:my_test_crv_projected_max", "prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix"]
status = "green"
claimed_by = "swarm-geom.context-a1"
claimed_at = "2026-10-12T19:48:04Z"
notes = "green: 2013 difftest cases (13 fixtures + 2000 generated scripts), 0 deferred, all bit-identical; wired UNPORTED(geom.context) in geom.tol (Option<&Context> overloads; geom.tol stays green). 30 fns; largest: SmNewMarkAndLock::LockMark, SmNewMarkAndLock::UnlockMark, SmContext::NewMark, SmContext::SmContext; entry points: SmApiCreateContext, SmApiGetOrCreateContext; unit-SCC #22 (220 units); 320 upstream test entry points reach this unit"
[[unit]]
id = "geom.extent1d"
upstream = ["source/SMLib/inc/SmExtent1d.h", "source/SMLib/inc/SmExtentNd.h", "source/SMLib/src/SmExtent1d.cpp", "source/SMLib/src/SmExtentNd.cpp"]
rust_module = "geom::extent1d"
depends_on = []
soft_depends_on = ["geom.tol"]
est_lines = 974
layer = 2
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.extent1d-a1"
claimed_at = "2026-10-12T19:48:21Z"
notes = "GREEN: difftest 3091 cases (91 fixture from my_test_extent1d/header examples/edge cases + 3000 generated), all bit-identical, 0 deferred, max_rel_err 0; --perturb SENSITIVE. Wired back-edges: SmExtent3d::Get{U,V,W}Interval/Set{U,V}Interval (geom.extent3d intervals cases no longer deferred), SmTol::MapTo1d(SmTol3d&,SmVector3d&,const SmExtent1d&) and SmTol::GetScaledZero(const SmExtent1d&) (geom.tol, +5 fixtures and a map_to_1d op). Unowned dead fns (OnlySnapValue, Maximum/MinimumDistance, AreOverlapping, ContainsValueRelative, AnyBounds, AssertValid, Dump) not ported. 56 fns; largest: SmExtent1d::IntersectPeriodic, SmExtent1d::ContainsPeriodicValue, SmExtentNd::ClampVector, SmExtent1d::ApproximateUnbounded; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "geom.matrix"
upstream = ["source/SMLib/inc/SmMatrix.h", "source/SMLib/src/SmMatrix.cpp"]
rust_module = "geom::matrix"
depends_on = []
soft_depends_on = ["geom.tol"]
est_lines = 816
layer = 2
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.matrix-a1"
claimed_at = "2026-10-12T19:48:03Z"
notes = "20 fns; largest: SmMatrix::EigenSystemJacobiSolver, SmMatrix::LUDecompose, SmMatrix::SolveLinearSystem, SmMatrix::Compute3x3EigenVectors; cycle back-edges (call into later units; stub or co-port): geom.vector3d(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; GREEN: difftest 4044 cases (44 fixture + 4000 generated), 0 deferred, max_rel_err 0 (bit-identical); 100k-seed run clean; back-edges sm_sqrt/SmVector3d::Set (geom.vector3d) co-ported as private helpers"
[[unit]]
id = "geom.periodic_extent1d"
upstream = ["source/SMLib/inc/SmPeriodicExtent1d.h", "source/SMLib/src/SmPeriodicExtent1d.cpp"]
rust_module = "geom::periodic_extent1d"
depends_on = ["geom.tol"]
soft_depends_on = []
est_lines = 406
layer = 2
tests = ["prog_test:my_test_trimming_tools", "SM_API_test:TestSmTrimSurfaceWith3dCurves", "prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal", "prog_test:my_test_missing_poles_refreshes_all_faces", "SM_API_test:TestSmHealBrep"]
status = "green"
claimed_by = "swarm-geom.periodic_extent1d-a1"
claimed_at = "2026-10-12T00:00:00Z"
notes = "green: 4054 difftest cases (54 fixture + 4000 generated), 0 deferred, all bit-identical; 17 fns; largest: SmPeriodicExtent1d::AddInterval, SmPeriodicExtent1d::IsContainedBy, SmPeriodicExtent1d::SetMinMax, SmPeriodicExtent1d::AreDisjoint; unit-SCC #22 (220 units); 100 upstream test entry points reach this unit"
[[unit]]
id = "geom.vector3d"
upstream = ["source/SMLib/inc/SmVector3d.h", "source/SMLib/src/SmMath.cpp", "source/SMLib/src/SmVector3d.cpp"]
rust_module = "geom::vector3d"
depends_on = []
soft_depends_on = ["geom.tol"]
est_lines = 1145
layer = 2
tests = ["prog_test:my_test_polynomial", "SM_API_test:TestSmPrincipalDirectionPairing", "prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point"]
status = "green"
claimed_by = "swarm-geom.vector3d-a1"
claimed_at = "2026-10-12T19:48:09Z"
notes = "65 fns; largest: SmVector3d::CCWAngleBetween, SmVector3d::AngleBetween, SmVector3d::MakeUnitOrthoVectors, SmVector3d::UnitizedDerivative3; unit-SCC #22 (220 units); 321 upstream test entry points reach this unit; GREEN: difftest 6114 cases (114 fixture from my_test_vector3d + edge cases, 6000 generated), all bit-identical, 0 deferred, perturb SENSITIVE; Vec3 moved from math.rs to geom::vector3d (re-exported); wired UNPORTED(geom.vector3d) in geom.tol (AreParallel/ArePerpendicular) and replaced CO-PORTs in tol/vector2d/extent3d"
[[unit]]
id = "nlib.basis_basic"
upstream = ["source/SMLib/src/NL_BasisBasic.cpp"]
rust_module = "nurbs::basis_basic"
depends_on = ["nlib.knots"]
soft_depends_on = ["nlib.geom", "nlib.math"]
est_lines = 786
layer = 2
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.basis_basic-a1"
claimed_at = "2026-10-12T19:59:25Z"
notes = "8 fns; green: 2596 difftest cases (1096 fixture + 1500 generated), 0 deferred, bit-identical (max_rel_err 0); 201,096-case run also clean. See plan/findings.md"
[[unit]]
id = "nlib.srf_basic"
upstream = ["source/SMLib/src/NL_SrfBasic.cpp", "source/SMLib/src/NL_SrfGeom.cpp"]
rust_module = "nurbs::srf_basic"
depends_on = ["nlib.geom", "nlib.math"]
soft_depends_on = ["nlib.knots"]
est_lines = 1088
layer = 2
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.srf_basic-a1"
claimed_at = "2026-10-12T20:02:23Z"
notes = "35 fns; largest: N_SrfIsFlatCheap, N_SrfGetAverageLen, N_SrfsAreEqual, N_SrfGetENet; unit-SCC #2 (3 units); 317 upstream test entry points reach this unit; green: 3220 difftest cases (220 fixture + 3000 generated), 0 deferred, bit-identical"
[[unit]]
id = "geom.axis2_placement"
upstream = ["source/SMLib/inc/SmAxis2Placement.h", "source/SMLib/src/SmAxis2Placement.cpp"]
rust_module = "geom::axis2_placement"
depends_on = ["geom.vector3d"]
soft_depends_on = ["geom.tol"]
est_lines = 479
layer = 3
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.axis2_placement-a1"
claimed_at = "2026-10-12T20:00:41Z"
notes = "GREEN: difftest 4048 cases, all bit-identical, 0 deferred (AreCoaxial wired to geom.geom_utility_p1); 30 fns; largest: SmAxis2Placement::RotateAboutAxis, SmAxis2Placement::AreCoaxial, SmAxis2Placement::GetMatrix, SmAxis2Placement::GetMirrorMatrix; cycle back-edges (call into later units; stub or co-port): geom.geom_utility_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "geom.extent2d"
upstream = ["source/SMLib/inc/SmExtent2d.h", "source/SMLib/src/SmExtent2d.cpp"]
rust_module = "geom::extent2d"
depends_on = ["geom.extent1d", "geom.vector2d"]
soft_depends_on = ["geom.extent3d", "geom.tol", "geom.vector3d"]
est_lines = 766
layer = 3
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.extent2d-a1"
claimed_at = "2026-10-12T20:02:32Z"
notes = "55 fns; largest: SmExtent2d::IntersectWithInfiniteLine, SmExtent2d::ClipLine2d, SmExtent2d::Inversion, SmExtent2d::ClassifyPoint2d; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; GREEN: difftest 3069 cases (69 fixture + 3000 generated), all bit-identical, 0 deferred, max_rel_err 0; 30k-seed run clean; only the 55 owned fns ported (rest of SmExtent2d is in unused_functions.txt); wired UNPORTED(geom.extent2d) SmTol::GetScaledZero(const SmExtent2d&) in geom/tol.rs (geom.tol still green, 3440 cases)"
[[unit]]
id = "geom.geom_utility_p2"
upstream = ["source/SMLib/src/SmGeomUtility.cpp"]
rust_module = "geom::geom_utility::p2"
depends_on = ["geom.tol", "geom.vector3d"]
soft_depends_on = ["geom.matrix", "geom.vector2d"]
est_lines = 1617
layer = 3
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.geom_utility_p2-a1"
claimed_at = "2026-10-12T20:00:30Z"
notes = "16 fns; largest: smgu_SphereCircleSphereCircleIntersect, smgu_EvaluateCurveContinuity, smgu_SegmentSegmentIntersect, smgu_SegmentSegmentPerpspectiveIntersect; cycle back-edges (call into later units; stub or co-port): geom.geom_utility_p1(28); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; GREEN: difftest 3270 cases (70 fixture + 3200 generated), all bit-identical, 0 deferred (p1 back-edges wired by geom.geom_utility_p1)"
[[unit]]
id = "geom.hash_table"
upstream = ["source/SMLib/inc/SmHashTable.h"]
rust_module = "geom::hash_table"
depends_on = ["geom.extent3d", "geom.tol", "geom.vector3d"]
soft_depends_on = []
est_lines = 593
layer = 3
tests = ["prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal", "prog_test:my_test_missing_poles_refreshes_all_faces", "SM_API_test:TestSmHealBrep", "SM_API_test:TestSmHeal", "prog_test:my_test_MakeFace", "pt_TestFiles/MakeFace/ApproximateSphere.smp"]
status = "green"
claimed_by = "swarm-geom.hash_table-a1"
claimed_at = "2026-10-12T20:00:27Z"
notes = "GREEN: difftest 619 cases (19 fixture incl. SmHealData::Cache_CoinVertices replays on Points.pts/FitCrvPoints.pts/PointSet + 600 generated), 0 deferred, bit-identical; a 10,019-case run was also clean; upstream IncMaxItemCount use-after-free and FindCoincidentPairs head-only/aliasing quirks in findings.md. 12 fns; largest: SmObjsInVoxels::Add, SmObjsInVoxels::FindCoincidentPairs, SmObjsInVoxels::IncMaxItemCount, SmObjsInVoxels::MapPointToVoxel; unit-SCC #22 (220 units); 59 upstream test entry points reach this unit"
[[unit]]
id = "geom.local_solve1d"
upstream = ["source/SMLib/inc/SmLocalSolve1d.h", "source/SMLib/src/SmLocalSolve1d.cpp"]
rust_module = "geom::local_solve1d"
depends_on = ["geom.extent1d"]
soft_depends_on = ["geom.tol"]
est_lines = 1294
layer = 3
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.local_solve1d-a1"
claimed_at = "2026-10-12T20:02:32Z"
notes = "12 fns; largest: SmLocalSolve1d::SolveIt, SmLocalSolve1d::SolveOscillating, SmLocalSolve1d::SolveByBrent, SmLocalSolve1d::SolveByBisection; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; difftest: 3316 cases (316 fixture + 3000 generated), bit-identical, 0 deferred"
[[unit]]
id = "geom.local_solve_nd"
upstream = ["source/SMLib/inc/SmLocalSolveNd.h", "source/SMLib/src/SmLocalSolveNd.cpp"]
rust_module = "geom::local_solve_nd"
depends_on = ["geom.matrix"]
soft_depends_on = []
est_lines = 860
layer = 3
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.local_solve_nd-a1"
claimed_at = "2026-10-12T19:58:04Z"
notes = "15 fns; largest: SmLocalSolveNd::SolveIt, SmEvalNFunctionsObject::ComputeJacobian, SmLocalSolveNd::SmLocalSolveNd, SmEvalNFunctionsObject::Evaluate; cycle back-edges (call into later units; stub or co-port): geom.extent1d(4); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; GREEN: difftest 3043 cases (43 fixture + 3000 generated), 0 deferred, max_rel_err 0 (bit-identical, full Evaluate trace compared); 30k-seed run clean; back-edges into geom.extent1d resolved by its merge; wired SmTol::GetScaledZero(SmEvalNFunctionsObject) in geom.tol"
[[unit]]
id = "geom.object"
upstream = ["source/SMLib/inc/SmObject.h", "source/SMLib/inc/SmShape.h", "source/SMLib/src/SmObject.cpp", "source/SMLib/src/SmShape.cpp", "source/SMLib/src/SmThreadLocalStorage.cpp"]
rust_module = "geom::object"
depends_on = ["geom.context", "geom.extent3d", "geom.tree"]
soft_depends_on = ["geom.attribute"]
est_lines = 673
layer = 3
tests = ["prog_test:my_test_polynomial", "SM_API_test:TestSmPrincipalDirectionPairing", "prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point"]
status = "partial"
claimed_by = "swarm-geom.object-a1"
claimed_at = "2026-10-12T20:05:41Z"
notes = "difftest: 624 cases (24 fixture + 600 generated), 593 pass bit-identical, 31 deferred (topology.face_p2 11, topology.brep_p1 10, topology.vertex 6, topology.edge 4: every non-empty SmShape); NotifyCallback::execute added to geom.context (stays green); UNPORTED(geom.object) note in geom.tol retagged to topology.topology (SmTol object overloads need topology/curve/surface object types). 38 fns; largest: SmShape::SmShape, SmObject::Notify, SmThreadLocalStorage::SetBeenThroughNew, SmThreadLocalStorage::GetBeenThroughNew; cycle back-edges (call into later units; stub or co-port): query.poly(24), topology.proto_topology_p1(20), blend.fillet_solver_p1(16), blend.fillet_standard_solver_p1(12), blend.fillet_geom_p1(10), query.brep(7), blend.fillet_custom_solver(6), blend.fillet_executive_p1(6), geom.a_object(6), geom.grid(6), intersect.point_class(6), intersect.ray_tracer(6), query.tess(6), topology.edge(5), topology.topology(5), curve.composite_curve_p1(4), surface.cone_p1(4), topology.brep_p1(4), topology.loopuse(4), topology.shell(4), curve.curve_p2(3), surface.surface_p1(3), surface.surface_p2(3), topology.vertex(3), blend.fillet_corner_p1(2), boolean.merge_p1(2), boolean.topology_intersector_p1(2), curve.conic(2), curve.crv_in_volume(2), curve.crv_on_surf(2), curve.curve_cache(2), curve.ellipse_p1(2), curve.ellipse_p2(2), curve.hermite_curve(2), curve.hyperbola(2), curve.iso_curve(2), curve.line(2), curve.offset_curve(2), curve.parabola(2), curve.projected_curve(2), curve.tangent_field(2), geom.solution_array(2), geom.transform(2), intersect.curve_class_p1(2), nurbs.b_spline_curve_p1(2), nurbs.b_spline_surface_p1(2), surface.b_spline_volume(2), surface.bend_volume(2), surface.curve_bounded_surface(2), surface.offset_surface(2), surface.plane_p1(2), surface.sphere(2), surface.srf_in_volume(2), surface.surf_of_extrusion_p1(2), surface.surf_of_revolution_p1(2), surface.surface_cache_p1(2), surface.surface_cache_p2(2), surface.torus(2), surface.trim_srf_cache(2), surface.twist_volume(2), surface.unbend_volume(2), surface.volume_p1(2), sweep.topology_sweep(2), topology.brep_cache(2), topology.brep_data(2), topology.brep_p4(2), topology.edgeuse_p1(2), topology.edgeuse_p2(2), topology.face_p1(2), topology.face_p4(2), topology.vertexuse(2), curve.curve_p6(1), query.edge(1), query.face_p1(1), topology.face_p2(1); unit-SCC #22 (220 units); hazards: thread_local; 321 upstream test entry points reach this unit"
[[unit]]
id = "geom.polynomial"
upstream = ["source/SMLib/src/SmPolynomial.cpp"]
rust_module = "geom::polynomial"
depends_on = ["geom.vector3d"]
soft_depends_on = []
est_lines = 386
layer = 3
tests = ["prog_test:my_test_polynomial", "SM_API_test:TestSmPrincipalDirectionPairing", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-geom.polynomial-a1"
claimed_at = "2026-10-12T20:00:26Z"
notes = "4 fns; largest: SmPolynomial::SolveQuarticEqn, SmPolynomial::SolveQuadraticEqn, SmPolynomial::SolveCubicEqn, sm_AddSolution; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; GREEN: difftest 6038 cases (38 fixture from my_test_polynomial + edge cases, 6000 generated), all bit-identical, 0 deferred, perturb SENSITIVE; no UNPORTED(geom.polynomial) stubs to wire"
[[unit]]
id = "nlib.basis_adv"
upstream = ["source/SMLib/src/NL_BasisAdv.cpp"]
rust_module = "nurbs::basis_adv"
depends_on = ["nlib.knots"]
soft_depends_on = ["nlib.basis_basic", "nlib.geom", "nlib.math"]
est_lines = 361
layer = 3
tests = ["SM_API_test:TestSmCreateSurfaceFromRandomPoints", "SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "prog_test:my_test_ss_nurb", "prog_test:my_test_surface_point_intersect"]
status = "green"
claimed_by = "swarm-nlib.basis_adv-a1"
claimed_at = "2026-10-12T20:17:12Z"
notes = "4 fns; green: 1744 difftest cases (244 fixture + 1500 generated), 0 deferred, bit-identical (max_rel_err 0); 100,244-case run also clean. See plan/findings.md"
[[unit]]
id = "nlib.bezier"
upstream = ["source/SMLib/src/NL_Bezier.cpp"]
rust_module = "nurbs::bezier"
depends_on = ["nlib.geom", "nlib.math", "nlib.srf_basic"]
soft_depends_on = []
est_lines = 1154
layer = 3
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.bezier-a1"
claimed_at = "2026-10-12T20:13:10Z"
notes = "16 fns; difftest 2223 cases (223 fixture: SM_API_test rectangle/polygon segments, FitCrvPoints.pts, Points.pts, Surface.sms, edge cases + 2000 generated), 0 deferred, max_rel_err 0 (bit-identical; a 50,223-case run was also clean); upstream quirks in findings.md"
[[unit]]
id = "nlib.funcs_basic"
upstream = ["source/SMLib/src/NL_FuncsBasic.cpp"]
rust_module = "nurbs::funcs_basic"
depends_on = []
soft_depends_on = ["nlib.basis_basic", "nlib.knots"]
est_lines = 538
layer = 3
tests = ["SM_API_test:TestSmCreateSurfaceFromPoints", "SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "SM_API_test:TestSmCreateSkinPrimitive", "prog_test:my_test_parallel_projection"]
status = "green"
claimed_by = "swarm-nlib.funcs_basic-a1"
claimed_at = "2026-10-12T20:17:09Z"
notes = "32 fns; largest: N_SrfFuncEvalPt, N_CFuncDerivs, N_CFuncEval, N_CrvFuncCompact; 160 upstream test entry points reach this unit; GREEN: difftest 3130 cases (130 fixture + 3000 generated), 0 deferred, bit-identical (max_rel_err 0); 50k-seed run clean; no UNPORTED stubs to wire"
[[unit]]
id = "geom.geom_utility_p1"
upstream = ["source/SMLib/src/SmGeomUtility.cpp"]
rust_module = "geom::geom_utility::p1"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.matrix", "geom.tol", "geom.vector2d", "geom.vector3d"]
soft_depends_on = ["geom.polynomial"]
est_lines = 2178
layer = 4
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.geom_utility_p1-a1"
claimed_at = "2026-10-12T20:09:08Z"
notes = "GREEN: difftest 4185 cases (185 fixture + 4000 generated), all bit-identical, 0 deferred; wired UNPORTED(geom.geom_utility_p1) in geom.axis2_placement (now green) and geom.geom_utility_p2 (now green); 45 fns; largest: smgu_LineCoPlanarCircleIntersect, smgu_BestFitLineToPoints, smgu_CircleCoPlanarCircleIntersect, smgu_TransformPointToStartPlane; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "geom.grid"
upstream = ["source/SMLib/inc/SmGrid.h", "source/SMLib/src/SmGrid.cpp"]
rust_module = "geom::grid"
depends_on = ["geom.extent3d", "geom.object", "geom.vector3d"]
soft_depends_on = ["geom.tree"]
est_lines = 876
layer = 4
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-geom.grid-a1"
claimed_at = "2026-10-12T20:21:29Z"
notes = "PARTIAL: difftest 615 cases (15 fixture + 600 generated), 613 pass bit-identical, 2 deferred (surface.surface_cache_p3 1: SmSurfaceGridElement::Init needs the patch data of a bare tree node; surface.surface_p2 1: ExpandHierarchy via smsurf_GetSurfaceCache, a DISPATCH GAP (the element holds a handle, no store turns it into the Surface); retagged by surface.surface_cache_p1, then by surface.surface_p1 in PR #43); 30k-seed run clean; no UNPORTED(geom.grid) stubs existed. 23 fns; largest: SmGrid::Setup3DDDA, SmGrid::Step3DDDA, SmSurfaceHierarchyElement::ExpandHierarchy, SmGrid::AddElement; cycle back-edges (call into later units; stub or co-port): geom.extent2d(2), surface.surface_cache_p1(2), surface.surface_p2(2), geom.polar_box(1), geom.pseudo_box(1), surface.surface_cache_p3(1), surface.surface_p7(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "geom.polar_box"
upstream = ["source/SMLib/inc/SmPolarBox.h", "source/SMLib/src/SmPolarBox.cpp"]
rust_module = "geom::polar_box"
depends_on = ["geom.extent2d", "geom.vector2d", "geom.vector3d"]
soft_depends_on = ["geom.tol"]
est_lines = 979
layer = 4
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.polar_box-a1"
claimed_at = "2026-10-12T20:15:15Z"
notes = "green: 3030 difftest cases (30 fixture programs + 3000 generated), bit-identical, 0 deferred; 19 fns; largest: SmPolarBox::AddVector3d, SmPolarBox::AreDisjoint, SmPolarBox::ComputePolarCoord, SmPolarBox::EvaluateNormalized; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "geom.solution_array"
upstream = ["source/SMLib/inc/SmSolutionArray.h", "source/SMLib/src/SmSolutionArray.cpp"]
rust_module = "geom::solution_array"
depends_on = ["geom.extent3d", "geom.object"]
soft_depends_on = ["geom.tol", "geom.vector2d"]
est_lines = 1319
layer = 4
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-geom.solution_array-a1"
claimed_at = "2026-10-12T20:24:32Z"
notes = "difftest: 810 cases, 754 pass, 56 deferred (curve.curve_p2 16, topology.face_p2 14, topology.edge 12, surface.surface_p2 9, topology.vertex 5); Dump not ported (print only). 42 fns; largest: SmSolution::ClassifySolutionEnd, SmSolutionArray::AddSortedSolution, SmSolution::GetPoint, SmSolution::Dump; cycle back-edges (call into later units; stub or co-port): geom.extent1d(4), geom.vector3d(4), curve.curve_p2(2), geom.extent2d(2), surface.surface_p2(2), topology.edge(2), topology.face_p2(2), query.poly(1), surface.volume_p1(1), topology.vertex(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "nlib.crv_basic"
upstream = ["source/SMLib/src/NL_CrvBasic.cpp", "source/SMLib/src/NL_SrfSymbol.cpp"]
rust_module = "nurbs::crv_basic"
depends_on = ["nlib.funcs_basic", "nlib.geom", "nlib.math"]
soft_depends_on = ["nlib.srf_basic"]
est_lines = 1542
layer = 4
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_basic-a1"
claimed_at = "2026-10-12T20:31:32Z"
notes = "46 fns; largest: N_CrvIsPlanar, N_CrossBoundDerivCrvNonRatSrf, N_CrvsAreCombatible, N_CrvIsLine; cycle back-edges (call into later units; stub or co-port): nlib.crv_tool_p2(1); unit-SCC #6 (5 units); 317 upstream test entry points reach this unit; difftest 3417 cases (417 fixture + 3000 generated), 3417 pass bit-identical, 0 deferred (promoted when nlib.crv_tool_p2 wired N_CrvsMakeCompatible); no UNPORTED(nlib.crv_basic) stubs to wire"
[[unit]]
id = "geom.global_solver"
upstream = ["source/SMLib/inc/SmGlobalSolver.h", "source/SMLib/src/SmGlobalSolver.cpp"]
rust_module = "geom::global_solver"
depends_on = ["geom.extent1d", "geom.extent3d", "geom.solution_array", "geom.vector3d"]
soft_depends_on = ["geom.geom_utility_p1", "geom.object", "geom.tol", "geom.tree", "geom.vector2d"]
est_lines = 1775
layer = 5
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-geom.global_solver-a1"
claimed_at = "2026-10-12T20:41:08Z"
notes = "24 fns; largest: SmGlobalSolver::BranchMayContainAnswers, SmGlobalSolver::AddSortedSolution, sm_CombineMinMax, SmGlobalSolver::FindBestSubdivisionNode; cycle back-edges (call into later units; stub or co-port): blend.fillet_intersector(3), intersect.adv_surface_intersector(3), intersect.surface_drop_curve(3), intersect.surface_intersector_p1(3), intersect.surface_silhouette(3), intersect.surface_tracer(3), intersect.topology_solver_p1(3), surface.surface_p2(3), curve.crv_on_surf(2), curve.curve_cache(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; difftest partial: 620 cases (20 fixtures + 600 generated), 611 pass, 9 deferred (curve.curve_p2 9: SmCurve::GetNaturalInterval via IdenticalSolutions on line solutions), max_rel_err 0; 20k-seed run clean; no UNPORTED(geom.global_solver) stubs existed to wire"
[[unit]]
id = "geom.pseudo_box"
upstream = ["source/SMLib/inc/SmPseudoBox.h", "source/SMLib/src/SmPseudoBox.cpp"]
rust_module = "geom::pseudo_box"
depends_on = ["geom.extent1d", "geom.extent3d", "geom.geom_utility_p1", "geom.tol", "geom.vector3d"]
soft_depends_on = ["geom.geom_utility_p2"]
est_lines = 1508
layer = 5
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.pseudo_box-a1"
claimed_at = "2026-10-12T20:40:41Z"
notes = "GREEN: difftest 3011 cases (11 fixture incl. my_test_pseudobox and the SmTol test box + 3000 generated programs on 4 box registers), all bit-identical, 0 deferred, max_rel_err 0, perturb SENSITIVE; wired UNPORTED(geom.pseudo_box) in geom.extent3d (Circumscribe / SmExtent3d(SmPseudoBox); promoted to green), geom.tol (GetScaledZero(SmPseudoBox)) and geom.transform (EvaluateBoundingBoxSimple: 113 cases undeferred, still partial on surface.volume_p1/p2); Circumscribe axis-map quirk in findings.md; 44 fns; largest: SmPseudoBox::ProjectToPlane, SmPseudoBox::IntersectLine, SmPseudoBox::AreDisjoint, SmPseudoBox::DistanceToPoint; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "geom.tools"
upstream = ["source/SMLib/src/SmTools.cpp"]
rust_module = "geom::tools"
depends_on = ["geom.extent1d", "geom.solution_array", "geom.vector3d"]
soft_depends_on = ["geom.object", "geom.tol"]
est_lines = 326
layer = 5
tests = ["SM_API_test:TestSmOrderCurves", "SM_API_test:TestSmCurves", "prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl_creation_3d", "prog_test:my_test_tsurf_cyl_creation_fast", "prog_test:my_test_tsurf_creation"]
status = "partial"
claimed_by = "swarm-geom.tools-a1"
claimed_at = "2026-10-12T20:43:12Z"
notes = "difftest: 913 cases, 721 pass, 192 deferred (topology.vertex 60, topology.brep_p1 64, curve.curve_p2 68); 5 fns; largest: SmTools::FindCoincidentEdge, SmTools::FindFirstPointWithinTolToPnt, SmTools::FindFirstVertexWithinTolToPnt, SmTools::FindEdge; cycle back-edges (call into later units; stub or co-port): topology.edge(8), curve.curve_p2(3), curve.curve_p6(3), topology.brep_p1(2), topology.vertex(2), intersect.topology_solver_p2(1); unit-SCC #22 (220 units); 197 upstream test entry points reach this unit"
[[unit]]
id = "geom.transform"
upstream = ["source/SMLib/inc/SmTransform.h", "source/SMLib/src/SmTransform.cpp"]
rust_module = "geom::transform"
depends_on = ["geom.extent3d", "geom.object", "geom.solution_array", "topology.database_io"]
soft_depends_on = ["geom.tol"]
est_lines = 681
layer = 5
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-geom.transform-a1"
claimed_at = "2026-10-12T20:43:11Z"
notes = "46 fns; largest: SmTransform::EvaluateBoundingBoxSimple, SmTransform::EvaluateSimple, SmTransform::ReadFromDB, SmTransform::GlobalPointSolveSimple; cycle back-edges (call into later units; stub or co-port): geom.vector3d(15), geom.pseudo_box(9), surface.volume_p1(6), geom.extent1d(5), geom.axis2_placement(4), geom.geom_utility_p1(2), geom.geom_utility_p2(2), surface.volume_p2(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; difftest green: 3042 cases (42 fixtures + 3000 generated), 3042 pass, 0 deferred (geom.pseudo_box, surface.volume_p1 and surface.volume_p2 wired; promoted by surface.volume_p2), max_rel_err 0; 20k-seed run clean"
[[unit]]
id = "nlib.crv_fit_p1"
upstream = ["source/SMLib/src/NL_CrvFit.cpp"]
rust_module = "nurbs::crv_fit::p1"
depends_on = ["nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.basis_basic", "nlib.crv_basic", "nlib.geom"]
est_lines = 1707
layer = 5
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_fit_p1-a1"
claimed_at = "2026-10-12T20:49:55Z"
notes = "12 fns; largest: N_FitCrvApproxKnots, N_FitCrvKnotsAndDeriv, N_FitCrvFirstDerivAndKnots, N_FitCrvKnotsAndDerivs; 317 upstream test entry points reach this unit; difftest green: 2084 cases (84 fixtures + 2000 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "nlib.crv_tool_p1"
upstream = ["source/SMLib/src/NL_CrvTool.cpp"]
rust_module = "nurbs::crv_tool::p1"
depends_on = ["nlib.crv_basic", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.basis_basic", "nlib.bezier", "nlib.geom"]
est_lines = 1371
layer = 5
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_tool_p1-a1"
claimed_at = "2026-10-12T20:49:43Z"
notes = "difftest: 2143 cases (143 fixtures + 2000 generated), 2143 pass bit-for-bit, 0 deferred (promoted when nlib.crv_nurb wired N_CrvGetMinMaxWeightsAndPts); 8 fns; largest: N_CrvElevateDegree, N_CrvRemoveKnot, N_CrvDecomposeBez, N_CrvExtractCrvSeg; cycle back-edges (call into later units; stub or co-port): nlib.crv_nurb(1); unit-SCC #6 (5 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nlib.iges"
upstream = ["source/SMLib/src/NL_Iges.cpp"]
rust_module = "nurbs::iges"
depends_on = ["nlib.crv_basic", "nlib.math", "nlib.srf_basic"]
soft_depends_on = ["nlib.geom", "nlib.knots"]
est_lines = 1055
layer = 5
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.iges-a1"
claimed_at = "2026-10-12T20:49:41Z"
notes = "7 fns; largest: N_IgesClampSrf, N_IgesCorrectSrfKnots, N_IgesClampCrv, N_IgesCorrectCrvKnots; 317 upstream test entry points reach this unit; difftest: 2029 cases (29 fixtures + 2000 generated), deferred=0"
[[unit]]
id = "nlib.srf_tool_p1"
upstream = ["source/SMLib/src/NL_SrfTool.cpp"]
rust_module = "nurbs::srf_tool::p1"
depends_on = ["nlib.knots", "nlib.srf_basic"]
soft_depends_on = ["nlib.crv_basic", "nlib.math"]
est_lines = 1678
layer = 5
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.srf_tool_p1-a1"
claimed_at = "2026-10-12T20:49:46Z"
notes = "6 fns; largest: N_SrfExtractPatch, N_SrfInsertKnots, N_SrfInsertKnot, N_SrfSplit; 317 upstream test entry points reach this unit; GREEN: difftest 3132 cases (132 fixture + 3000 generated), 0 deferred, max_rel_err 0 (bit-identical); perturb SENSITIVE"
[[unit]]
id = "curve.hermite_curve"
upstream = ["source/SMLib/inc/SmHermiteCurve.h", "source/SMLib/src/SmHermiteCurve.cpp"]
rust_module = "curve::hermite_curve"
depends_on = ["geom.extent1d", "geom.extent3d", "geom.pseudo_box", "geom.vector3d", "topology.database_io"]
soft_depends_on = ["geom.geom_utility_p1", "geom.polar_box", "geom.tol"]
est_lines = 383
layer = 6
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.hermite_curve-a1"
claimed_at = "2026-10-12T21:03:28Z"
notes = "18 fns; largest: SmHermiteCurve::Evaluate, SmHermiteCurve::CalculateBoundingBox, SmHermiteCurve::ReadFromDB, SmHermiteCurve::GetKnots; cycle back-edges (call into later units; stub or co-port): curve.curve_p2(3), curve.curve_p5(3); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; difftest green: 2131 cases, 0 deferred, max_rel_err 0 (SmCurve::IsKindOf wired by curve.curve_p2)"
[[unit]]
id = "geom.a_object"
upstream = ["source/SMLib/inc/NLI_Math.h", "source/SMLib/inc/SmAObject.h", "source/SMLib/inc/SmCacheMgr.h", "source/SMLib/inc/SmSAGObject.h", "source/SMLib/src/SmAObject.cpp", "source/SMLib/src/SmCacheMgr.cpp", "source/SMLib/src/SmSAGObject.cpp"]
rust_module = "geom::a_object"
depends_on = ["geom.assert_array", "geom.attribute", "geom.object"]
soft_depends_on = ["geom.tol", "geom.transform"]
est_lines = 935
layer = 6
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-geom.a_object-a1"
claimed_at = "2026-10-12T20:54:39Z"
notes = "PARTIAL: difftest 2040 cases (8 upstream-derived + 32 edge-case fixtures + 2000 generated: types, NLI helpers, notify/attribute/cache scripts), 1872 pass bit-identical, 168 deferred (topology.brep_cache 131: new SmBrepCache; topology.shell 37: SmRegion::IsVoid in SM_NO_REG_PROPAGATION; SmSAGObject::Notify wired by topology.topology); 50k-seed run clean; no UNPORTED(geom.a_object) stubs to wire (attribute-list methods stay co-ported in geom.attribute); 36 fns; largest: SmAObject::Notify, SmAObject::AssertValid, SmSAGObject::CacheMakeOrValidate, SmSAGObject::Notify; cycle back-edges (call into later units; stub or co-port): query.poly(13), topology.proto_topology_p1(9), blend.fillet_geom_p1(5), topology.brep_cache(3), topology.shell(3), surface.cone_p1(2), topology.loopuse(2), topology.topology(2), curve.composite_curve_p1(1), curve.conic(1), curve.crv_in_volume(1), curve.crv_on_surf(1), curve.curve_cache(1), curve.curve_p2(1), curve.ellipse_p1(1), curve.ellipse_p2(1), curve.hermite_curve(1), curve.hyperbola(1), curve.iso_curve(1), curve.line(1), curve.offset_curve(1), curve.parabola(1), curve.projected_curve(1), curve.tangent_field(1), nurbs.b_spline_curve_p1(1), nurbs.b_spline_surface_p1(1), query.tess(1), surface.b_spline_volume(1), surface.bend_volume(1), surface.curve_bounded_surface(1), surface.offset_surface(1), surface.plane_p1(1), surface.sphere(1), surface.srf_in_volume(1), surface.surf_of_extrusion_p1(1), surface.surf_of_revolution_p1(1), surface.surface_cache_p2(1), surface.surface_p1(1), surface.surface_p2(1), surface.torus(1), surface.trim_srf_cache(1), surface.twist_volume(1), surface.unbend_volume(1), surface.volume_p1(1), topology.brep_p4(1), topology.edge(1), topology.edgeuse_p1(1), topology.edgeuse_p2(1), topology.face_p1(1), topology.vertex(1), topology.vertexuse(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "geom.point_set"
upstream = ["source/SMLib/inc/SmPointSet.h", "source/SMLib/src/SmPointSet.cpp"]
rust_module = "geom::point_set"
depends_on = ["geom.extent3d", "geom.pseudo_box", "geom.tol", "geom.vector3d"]
soft_depends_on = ["geom.geom_utility_p1", "geom.geom_utility_p2"]
est_lines = 694
layer = 6
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-geom.point_set-a1"
claimed_at = "2026-10-12T21:03:27Z"
notes = "16 fns; largest: SmPointSet3d::SetUpTightPseudoBox, SmPointSet3d::SetUpAxes, SmPointSequence::PointContainment, SmPointSet3d::SetUpBBoxes; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; difftest: 2029 cases (29 fixtures + 2000 generated), 0 deferred, bit-identical"
[[unit]]
id = "nlib.crv_fit_p2"
upstream = ["source/SMLib/src/NL_CrvFit.cpp"]
rust_module = "nurbs::crv_fit::p2"
depends_on = ["nlib.crv_basic", "nlib.crv_fit_p1", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.basis_basic", "nlib.funcs_basic"]
est_lines = 1586
layer = 6
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_fit_p2-a1"
claimed_at = "2026-10-12T21:13:03Z"
notes = "9 fns; largest: N_FitCrvWeightedLstSqKnots, N_FitCrvApproxLstSq, N_FitCalcMatrix, N_FitCrvDerivMatrix; 317 upstream test entry points reach this unit; difftest green: 2106 cases (106 fixtures + 2000 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "nlib.crv_nurb"
upstream = ["source/SMLib/src/NL_CrvNurb.cpp"]
rust_module = "nurbs::crv_nurb"
depends_on = ["nlib.crv_basic", "nlib.geom", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.crv_tool_p1"]
est_lines = 1879
layer = 6
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_nurb-a1"
claimed_at = "2026-10-12T21:07:25Z"
notes = "difftest: 2871 cases (871 fixtures + 2000 generated), 2871 pass bit-for-bit, 0 deferred (promoted when nlib.crv_geom wired N_CrvArcLength in N_CrvGetDegenSegs); wired UNPORTED(nlib.crv_nurb) in nlib.crv_tool_p1 (now green); 23 fns; largest: N_CrvGetType, N_CrvDerivs, N_CrvGetLinearSegs, N_CrvProjectOntoPlane; cycle back-edges (call into later units; stub or co-port): nlib.crv_geom(1); unit-SCC #6 (5 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nlib.funcs_adv"
upstream = ["source/SMLib/src/NL_FuncsAdv.cpp"]
rust_module = "nurbs::funcs_adv"
depends_on = ["nlib.bezier", "nlib.crv_basic", "nlib.funcs_basic", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.basis_basic", "nlib.crv_tool_p1"]
est_lines = 1676
layer = 6
tests = ["SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "SM_API_test:TestSmCreateSkinPrimitive", "prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection"]
status = "green"
claimed_by = "swarm-nlib.funcs_adv-a1"
claimed_at = "2026-10-12T21:07:22Z"
notes = "5 fns (N_CrvFuncRefine, N_CrvFuncDeriv, N_CrvFuncMultiplyCrvFunc, N_CrvFuncMultiplyCrv, N_CrvFuncMultiplyCrv4d); difftest green: 2080 cases (80 fixture incl. 6 upstream .smc curves + 2000 generated), 0 deferred, bit-exact; no UNPORTED(nlib.funcs_adv) stubs existed to wire"
[[unit]]
id = "nlib.srf_fit"
upstream = ["source/SMLib/src/NL_SrfFit.cpp"]
rust_module = "nurbs::srf_fit"
depends_on = ["nlib.crv_fit_p1", "nlib.funcs_basic", "nlib.knots", "nlib.math", "nlib.srf_basic"]
soft_depends_on = ["nlib.geom"]
est_lines = 1359
layer = 6
tests = ["SM_API_test:TestSmCreateSurfaceFromPoints", "SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "prog_test:my_test_ss_nurb", "prog_test:my_test_surface_point_intersect"]
status = "green"
claimed_by = "swarm-nlib.srf_fit-a1"
claimed_at = "2026-10-12T21:12:59Z"
notes = "5 fns; largest: N_FitSrfLstSqApprox, N_FitSrfToPtsKnots, N_FitSrfInterpParams, N_FitSrfFuncInterp; 211 upstream test entry points reach this unit. difftest: 1556 cases (56 fixture from TestSmCreateSurfaceFromPoints grid + PointSet sections + 1500 generated), 0 deferred, max_rel_err 0 (bit-identical); a 30,056-case run was also clean"
[[unit]]
id = "nlib.crv_fit_p3"
upstream = ["source/SMLib/src/NL_CrvFit.cpp"]
rust_module = "nurbs::crv_fit::p3"
depends_on = ["nlib.crv_basic", "nlib.crv_fit_p1", "nlib.crv_fit_p2", "nlib.geom", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.basis_basic", "nlib.crv_nurb"]
est_lines = 1234
layer = 7
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_fit_p3-a1"
claimed_at = "2026-10-12T12:00:00Z"
notes = "6 fns; largest: N_FitCrvKnotsAndTangents, N_FitCubicSplineInterp, N_FitCrvDerivs, N_FitCrvHighDerivs; 317 upstream test entry points reach this unit; difftest green: 2242 cases (242 fixtures + 2000 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "nlib.crv_geom"
upstream = ["source/SMLib/src/NL_CrvGeom.cpp"]
rust_module = "nurbs::crv_geom"
depends_on = ["nlib.crv_basic", "nlib.crv_nurb", "nlib.geom", "nlib.math"]
soft_depends_on = ["nlib.bezier", "nlib.crv_tool_p1", "nlib.knots"]
est_lines = 729
layer = 7
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_geom-a1"
claimed_at = "2026-10-12T00:00:00Z"
notes = "difftest: 1723 cases (223 fixtures on the six pt_TestFiles .smc curves + edge cases, 1500 generated), 1723 pass bit-for-bit, 0 deferred; wired UNPORTED(nlib.crv_geom) in nlib.crv_nurb (now green); 3 fns; largest: N_ApproxCrvWithPolyline, N_CrvArcLength, N_CrvClosestPt; unit-SCC #6 (5 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nlib.crv_tool_p2"
upstream = ["source/SMLib/src/NL_CrvTool.cpp"]
rust_module = "nurbs::crv_tool::p2"
depends_on = ["nlib.basis_basic", "nlib.crv_basic", "nlib.crv_tool_p1", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.bezier", "nlib.crv_nurb", "nlib.geom"]
est_lines = 1748
layer = 7
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_tool_p2-a1"
claimed_at = "2026-10-12T21:27:39Z"
notes = "difftest: 2124 cases (124 fixtures + 2000 generated), 2124 pass bit-for-bit, 0 deferred; wired UNPORTED(nlib.crv_tool_p2) in nlib.crv_basic (N_CrvsAreCoincident, now green); 7 fns; largest: N_CrvReduceDegreeOnce, N_CrvRemoveDegenSegs, N_CrvRemoveKnots, N_CrvsMakeCompatibleAdjKnots; unit-SCC #6 (5 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nurbs.nurbs_crv"
upstream = ["source/SMLib/src/SmNurbsCrv.cpp"]
rust_module = "nurbs::nurbs_crv"
depends_on = ["geom.axis2_placement", "geom.extent3d", "geom.tol", "nlib.crv_basic", "nlib.knots", "nlib.math"]
soft_depends_on = ["geom.extent1d", "nlib.crv_nurb", "nlib.geom"]
est_lines = 2200
layer = 7
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nurbs.nurbs_crv-a1"
claimed_at = "2026-10-12T21:27:44Z"
notes = "27 fns; largest: sm_CrvRemoveKnots, sm_BasisIDerivs, sm_BasisFindGlobalMax, sm_BasisDerivs; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; GREEN: difftest 4089 cases (1089 fixture from the six upstream .smc curves, SM_API_test rectangle/polygon edges and edge cases + 3000 generated), all bit-identical (max_rel_err 0), 0 deferred; 51,089-case run clean; --perturb SENSITIVE. No UNPORTED(nurbs.nurbs_crv) stubs existed to wire. Upstream quirks (sm_BasisEval flags domain ends, sm_CrvTrim returns NL_INP_ERR) in plan/findings.md"
[[unit]]
id = "topology.topology"
upstream = ["source/SMLib/inc/SmTopology.h", "source/SMLib/inc/SmTrackTopologyChanges.h", "source/SMLib/src/SmTopology.cpp", "source/SMLib/src/SmTrackTopologyChanges.cpp"]
rust_module = "topology::topology"
depends_on = ["geom.a_object", "geom.context", "geom.object"]
soft_depends_on = ["geom.tol"]
est_lines = 389
layer = 7
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-topology.topology-a1"
claimed_at = "2026-10-12T21:22:31Z"
notes = "GREEN: difftest 657 cases (57 upstream-derived/edge-case fixtures + 600 generated scripts: marks under SmNewMarkAndLock, flags/user values, Notify propagation for every operation incl. the callback pass-through, tolerance, IsConnectedTo, destruction, SmTrackTopologyChanges start/stop/nesting/foreign callback), 0 deferred, bit-identical; wired SmSAGObject::Notify (geom.a_object 169 -> 168 deferred) and retargeted the SmTol::GetZoneTol3d(SmObject*) markers to the derived-kind units; SmTopologyChangeCallback::Execute is unused upstream and not ported (findings.md); 30 fns; largest: SmTopology::Notify, SmTrackTopologyChanges::StartTracking, SmTrackTopologyChanges::StopTracking, SmTrackTopologyChanges::SmTrackTopologyChanges; cycle back-edges (call into later units; stub or co-port): topology.proto_topology_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "nlib.crv_adv_p1"
upstream = ["source/SMLib/src/NL_CrvAdv.cpp"]
rust_module = "nurbs::crv_adv::p1"
depends_on = ["nlib.crv_basic", "nlib.crv_nurb", "nlib.crv_tool_p1", "nlib.geom", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.basis_basic", "nlib.crv_geom"]
est_lines = 2031
layer = 8
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_adv_p1-a1"
claimed_at = "2026-10-12T21:44:23Z"
notes = "difftest: 2670 cases (670 fixtures on the six pt_TestFiles .smc curves, SM_API_test rectangle/hexagon edges and edge cases + 2000 generated), 2670 pass bit-for-bit, 0 deferred; 100,670-case run clean; no UNPORTED(nlib.crv_adv_p1) stubs to wire; ST_curxcdr/ST_curxcrr ported as Curve::extend_by_dist_at_depth / extend_by_param_dist_at_depth (wrappers N_CrvExtendBy* are in nlib.crv_adv_p2); in-place ST_curxcrr G2 recursion frees an uninitialised curve upstream (findings.md); 7 fns; largest: ST_curxcdr, ST_curxcrr, N_CrvEvalEvenSpacedPts, N_CrvGetMax2ndDeriv"
[[unit]]
id = "nlib.crv_common"
upstream = ["source/SMLib/src/NL_CrvCommon.cpp"]
rust_module = "nurbs::crv_common"
depends_on = ["nlib.crv_basic", "nlib.geom", "nlib.math"]
soft_depends_on = ["nlib.crv_geom", "nlib.crv_tool_p1"]
est_lines = 803
layer = 8
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_common-a1"
claimed_at = "2026-10-12T21:44:13Z"
notes = "8 fns; largest: N_CreateQuarticArcTol, N_CreateQuadraticArcTol, N_CreateQuinticArcTol, N_CreateEllipticalArcAngTypeTol; 317 upstream test entry points reach this unit; difftest: 2137 cases (137 fixture + 2000 generated), 0 deferred, bit-exact"
[[unit]]
id = "nlib.spiral"
upstream = ["source/SMLib/src/NL_Spiral.cpp", "source/SMLib/src/SmNurbsVol.cpp"]
rust_module = "nurbs::spiral"
depends_on = []
soft_depends_on = ["nlib.crv_basic", "nlib.crv_fit_p3", "nlib.crv_nurb"]
est_lines = 392
layer = 8
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.spiral-a1"
claimed_at = "2026-10-12T21:55:30Z"
notes = "8 fns; largest: N_CrvApproxSpiral, sm_InitNurbVolumeMemory, sm_AllocateAndCopyNurbVolume, sm_ComputeNurbVolumeSize; 317 upstream test entry points reach this unit; GREEN: difftest 2032 cases (32 fixture from TestSmCreateHelixInvalidInputs, smSurfaceTest.cpp:1975 CreateHelixSegment, span-limit/fixed-point/volume edge cases + 2000 generated), all bit-identical (max_rel_err 0), 0 deferred; 20k-seed run clean; --perturb SENSITIVE. No UNPORTED(nlib.spiral) stubs existed. Upstream N_CrvApproxSpiral crashes (N_EndNurbs on uninitialised SL) on its early input errors: ffi rejects those inputs, Rust returns NL_INP_ERR (findings.md)"
[[unit]]
id = "nlib.crv_adv_p2"
upstream = ["source/SMLib/src/NL_CrvAdv.cpp"]
rust_module = "nurbs::crv_adv::p2"
depends_on = ["nlib.crv_adv_p1", "nlib.crv_basic", "nlib.crv_nurb", "nlib.crv_tool_p1", "nlib.funcs_adv", "nlib.funcs_basic", "nlib.knots", "nlib.math"]
soft_depends_on = ["nlib.basis_adv", "nlib.basis_basic", "nlib.crv_geom", "nlib.geom"]
est_lines = 1722
layer = 9
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.crv_adv_p2-a1"
claimed_at = "2026-10-12T22:07:37Z"
notes = "difftest green: 2815 cases (815 fixtures + 2000 generated), 0 deferred; 300,815-case run clean. 16 fns; largest: N_CrvRemoveKnotsDerivConstraints, N_CrvSumDiffCrv, N_SrfReparamMultKnots, N_CrvRatGetFirstDeriv; 317 upstream test entry points reach this unit"
[[unit]]
id = "nlib.srf_common"
upstream = ["source/SMLib/src/NL_SrfCommon.cpp"]
rust_module = "nurbs::srf_common"
depends_on = ["nlib.crv_basic", "nlib.geom", "nlib.math"]
soft_depends_on = ["nlib.crv_common", "nlib.crv_tool_p2", "nlib.srf_basic"]
est_lines = 661
layer = 9
tests = ["SM_API_test:TestSmCreateSurfaceFromCornerPoints", "SM_API_test:TestSmIntersectCurveSurface", "SM_API_test:TestSmLiftUVCurve", "SM_API_test:TestSmProjectCurveToSurface", "SM_API_test:TestSmCreateRuledSurface", "prog_test:my_test_surf_methods"]
status = "green"
claimed_by = "swarm-nlib.srf_common-a1"
claimed_at = "2026-10-12T21:56:24Z"
notes = "5 fns; largest: N_CreateCylCone, N_CreateRuledSrf, N_CreateRevolvedSrf, N_CreateSrfExtrudeCrv; 228 upstream test entry points reach this unit; difftest: 1550 cases (50 fixtures + 1500 generated), 0 deferred"
[[unit]]
id = "nurbs.b_spline_curve_p1"
upstream = ["source/SMLib/inc/SmBSplineCurve.h", "source/SMLib/src/SmBSplineCurve.cpp"]
rust_module = "nurbs::b_spline_curve::p1"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.object", "geom.tol", "geom.vector3d", "nlib.crv_basic", "nlib.crv_nurb", "nurbs.nurbs_crv"]
soft_depends_on = ["geom.geom_utility_p1", "geom.polynomial", "nlib.basis_basic", "nlib.crv_common", "nlib.iges", "nlib.math"]
est_lines = 1894
layer = 9
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-nurbs.b_spline_curve_p1-a1"
claimed_at = "2026-10-12T21:56:25Z"
notes = "GREEN: difftest 2216 cases, 2216 pass bit-identical, 0 deferred, after curve.curve_p1 wired TessellateByBisection. Earlier: PARTIAL: difftest 2216 cases, now 2212 pass / 4 deferred (curve.curve_p1: TessellateByBisection) after curve.curve_p2 wired its stubs; originally (216 fixture on the six pt_TestFiles .smc curves, smSweepTest lines/circles and edge cases + 2000 generated), 2156 pass bit-identical, 60 deferred (curve.curve_p2 59: SmCurve::EvaluateContinuity / IsKindOf / ApproximateLength; curve.curve_p1 1: TessellateByBisection); 30,216-case run clean; no UNPORTED(nurbs.b_spline_curve_p1) stubs to wire; SmBSplineCurve.h default bNonZeroTangents=FALSE binds in Evaluate recursion (findings.md). 56 fns; largest: SmBSplineCurve::Evaluate, SmBSplineCurve::EditEndPoint, SmBSplineCurve::FairBlendCurveDerivatives, SmBSplineCurve::CreateCanonical; cycle back-edges (call into later units; stub or co-port): curve.curve_p2(11), curve.curve_p5(5), curve.ellipse_p1(5), curve.ellipse_p2(5), curve.hyperbola(5), curve.line(5), curve.parabola(5), curve.curve_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "nlib.crv_approx"
upstream = ["source/SMLib/src/NL_CrvApprox.cpp"]
rust_module = "nurbs::crv_approx"
depends_on = ["nlib.crv_basic", "nlib.crv_fit_p1", "nlib.funcs_basic", "nlib.geom", "nlib.math"]
soft_depends_on = ["nlib.crv_adv_p1", "nlib.crv_adv_p2", "nlib.crv_fit_p2", "nlib.crv_fit_p3", "nlib.crv_geom", "nlib.crv_nurb", "nlib.crv_tool_p1", "nlib.knots", "nlib.srf_fit"]
est_lines = 908
layer = 10
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_bsplinesurface_nlib"]
status = "green"
claimed_by = "swarm-nlib.crv_approx-a1"
claimed_at = "2026-10-12T22:47:24Z"
notes = "3 fns; largest: N_CalcNumCPtsToApproxArc, N_ApproxCircArcWithCrvData, N_ApproxNurbsWithNonRatCrv; 151 upstream test entry points reach this unit; difftest: 1646 cases (146 fixture + 1500 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "nlib.crv_offset"
upstream = ["source/SMLib/src/NL_CrvOffset.cpp"]
rust_module = "nurbs::crv_offset"
depends_on = ["nlib.crv_basic", "nlib.crv_fit_p1", "nlib.crv_nurb", "nlib.geom"]
soft_depends_on = ["nlib.crv_adv_p2", "nlib.crv_common", "nlib.crv_tool_p1", "nlib.math"]
est_lines = 346
layer = 10
tests = ["prog_test:my_test_ss_nurb", "prog_test:my_test_surface_point_intersect", "prog_test:my_test_GlobalCC_intersect", "prog_test:my_test_GlobalCSI", "prog_test:my_test_surface_curve_intersect", "prog_test:my_test_cci_nurb"]
status = "green"
claimed_by = "swarm-nlib.crv_offset-a1"
claimed_at = "2026-10-12T22:47:21Z"
notes = "difftest green: 1555 cases (55 fixture + 1500 generated), 0 deferred, max_rel_err 0; 1 fns; largest: N_CrvOffsetPtSampling; 181 upstream test entry points reach this unit"
[[unit]]
id = "nlib.srf_nurb"
upstream = ["source/SMLib/inc/NL_Nurbsdef.h", "source/SMLib/src/NL_SrfNurb.cpp"]
rust_module = "nurbs::srf_nurb"
depends_on = ["nlib.crv_basic", "nlib.crv_nurb", "nlib.geom", "nlib.math", "nlib.srf_basic"]
soft_depends_on = ["geom.a_object", "nlib.knots", "nlib.srf_common", "nlib.srf_tool_p1"]
est_lines = 2560
layer = 10
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.srf_nurb-a1"
claimed_at = "2026-10-12T22:09:53Z"
notes = "difftest green: 2702 cases (202 fixture + 2500 generated), 0 deferred, max_rel_err 0; 24 fns; largest: N_SrfType, N_SrfBasisDerivs, N_ConeEllipticEnds, N_SrfIsClosedSmooth; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nlib.srf_tool_p2"
upstream = ["source/SMLib/src/NL_SrfTool.cpp"]
rust_module = "nurbs::srf_tool::p2"
depends_on = ["nlib.knots", "nlib.math", "nlib.srf_basic"]
soft_depends_on = ["nlib.basis_basic", "nlib.bezier", "nlib.geom", "nlib.srf_nurb"]
est_lines = 1455
layer = 11
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.srf_tool_p2-a1"
claimed_at = "2026-10-12T22:44:17Z"
notes = "difftest green: 3102 cases (102 fixture + 3000 generated), 0 deferred, max_rel_err 0; 3 fns; largest: N_SrfElevateDegree, N_SrfRemoveKnotConditional, N_SrfRemoveOneKnot; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nurbs.b_spline_curve_n_lib"
upstream = ["source/SMLib/src/SmBSplineCurveNLib.cpp"]
rust_module = "nurbs::b_spline_curve_n_lib"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "nlib.crv_adv_p2", "nlib.crv_approx", "nlib.crv_basic", "nlib.crv_fit_p3", "nlib.crv_tool_p2", "nlib.math", "nurbs.b_spline_curve_p1", "nurbs.nurbs_crv"]
soft_depends_on = ["geom.solution_array", "nlib.crv_adv_p1", "nlib.crv_fit_p2", "nlib.crv_nurb", "nlib.crv_tool_p1", "nlib.funcs_basic", "nlib.geom", "nlib.knots", "nlib.spiral"]
est_lines = 2794
layer = 11
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nurbs.b_spline_curve_n_lib-a1"
claimed_at = "2026-10-12T23:07:07Z"
notes = "25 fns; largest: SmBSplineCurve::SetIntersectionCurveThroughPoint, SmBSplineCurve::DeformToEndPointTargets, SmBSplineCurve::Trim, SmBSplineCurve::InterpolatePoints; cycle back-edges (call into later units; stub or co-port): curve.curve_p2(19), surface.surface_p2(3), nurbs.b_spline_curve_p2(2), curve.curve_p6(1), surface.surface_p5(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; GREEN: difftest 2282 cases, 0 deferred after curve.curve_p2 wired SmCurve::ApproximateLength (was PARTIAL: (282 fixture from the six pt_TestFiles .smc curves, FitCrvPoints.pts / Points.pts, my_test_curve_interface, smSurfaceTest.cpp:1975 helix, TestSmMakeCurvesCompatible, TestSmCreateRectangle / TestSmCreateRegularPolygon edges and edge cases + 2000 generated), 2225 pass bit-identical (max_rel_err 0), 57 deferred on curve.curve_p2 (SmCurve::ApproximateLength in SetIntersectionCurveThroughPoint; was 150 on nurbs.b_spline_curve_p2 before its IsIntersectorApprox / DegreeElevate stubs were wired); 100,282-case run clean; --perturb SENSITIVE; no UNPORTED(nurbs.b_spline_curve_n_lib) stubs existed to wire)"
[[unit]]
id = "nurbs.nurbs_srf"
upstream = ["source/SMLib/src/SmNurbsSrf.cpp"]
rust_module = "nurbs::nurbs_srf"
depends_on = ["geom.extent3d", "geom.vector3d", "nlib.knots"]
soft_depends_on = ["geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.tol", "nlib.math", "nlib.srf_basic", "nlib.srf_nurb", "nlib.srf_tool_p1"]
est_lines = 1188
layer = 11
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nurbs.nurbs_srf-a1"
claimed_at = "2026-10-12T22:44:10Z"
notes = "9 fns; largest: sm_ComputeNetConstants, sm_ComputeSurfConstants, sm_DecomposeSrf, sm_SplitSrf; cycle back-edges (call into later units; stub or co-port): surface.surface_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; GREEN: difftest 3092 cases (92 fixture from Surface.sms / offset_nurb.sms / DropCurveSurface.sms, SM_API_test rectangle/polygon planes and edge cases + 3000 generated), all bit-identical (max_rel_err 0), 0 deferred; 30,092-case run clean; --perturb SENSITIVE. The surface_p2 back-edge (SmSurface::EvaluatePoint) is an evaluator closure, so nothing is deferred; no UNPORTED(nurbs.nurbs_srf) stubs existed to wire"
[[unit]]
id = "nlib.srf_adv_p2"
upstream = ["source/SMLib/src/NL_SrfAdv.cpp"]
rust_module = "nurbs::srf_adv::p2"
depends_on = ["nlib.crv_basic", "nlib.geom", "nlib.math", "nlib.srf_basic"]
soft_depends_on = ["nlib.crv_adv_p2", "nlib.knots", "nlib.srf_nurb", "nlib.srf_tool_p1", "nlib.srf_tool_p2"]
est_lines = 2097
layer = 12
tests = ["prog_test:my_test_ss_nurb", "prog_test:my_test_surface_point_intersect", "prog_test:my_test_GlobalCC_intersect", "prog_test:my_test_GlobalCSI", "prog_test:my_test_surface_curve_intersect", "prog_test:my_test_cci_nurb"]
status = "green"
claimed_by = "swarm-nlib.srf_adv_p2-a1"
claimed_at = "2026-10-12T23:00:10Z"
notes = "2 fns; largest: ST_surxsdr, N_SrfEvalPtNormalDeriv; unit-SCC #22 (220 units); 182 upstream test entry points reach this unit; difftest 1695 cases (195 fixtures + 1500 generated), 0 deferred, bit-identical"
[[unit]]
id = "nlib.srf_adv_p3"
upstream = ["source/SMLib/src/NL_SrfAdv.cpp"]
rust_module = "nurbs::srf_adv::p3"
depends_on = ["nlib.crv_basic", "nlib.crv_fit_p1", "nlib.geom", "nlib.math", "nlib.srf_basic"]
soft_depends_on = ["nlib.basis_adv", "nlib.crv_adv_p1", "nlib.crv_tool_p2", "nlib.knots", "nlib.srf_fit", "nlib.srf_nurb", "nlib.srf_tool_p1", "nlib.srf_tool_p2"]
est_lines = 2233
layer = 12
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.srf_adv_p3-a1"
claimed_at = "2026-10-12T23:00:07Z"
notes = "5 fns; largest: N_SrfExtendByParamDist, N_CreateSkinSrf, N_SrfGetGridPtsNormals, N_CreateSwungSrf; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; difftest 3275 cases (275 fixture + 3000 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "nlib.srf_tool_p3"
upstream = ["source/SMLib/src/NL_SrfTool.cpp"]
rust_module = "nurbs::srf_tool::p3"
depends_on = ["nlib.math", "nlib.srf_basic", "nlib.srf_tool_p2"]
soft_depends_on = ["nlib.basis_basic", "nlib.knots", "nlib.srf_nurb", "nlib.srf_tool_p1"]
est_lines = 1380
layer = 12
tests = ["SM_API_test:TestSmCreateSurfaceFromRandomPoints", "SM_API_test:TestSmCreateExtrude", "prog_test:my_test_ss_nurb", "prog_test:my_test_surface_point_intersect", "prog_test:my_test_GlobalCC_intersect", "prog_test:my_test_GlobalCSI"]
status = "green"
claimed_by = "swarm-nlib.srf_tool_p3-a1"
claimed_at = "2026-10-12T23:00:00Z"
notes = "difftest green: 2518 cases (118 fixture + 2400 generated), 0 deferred, max_rel_err 0; 3 fns; largest: N_SrfRemoveAllKnots, N_SrfJoin, N_MakeSrfsCompatible; unit-SCC #22 (220 units); 199 upstream test entry points reach this unit"
[[unit]]
id = "nurbs.b_spline_curve_p2"
upstream = ["source/SMLib/inc/SmBSplineCurve.h", "source/SMLib/src/SmBSplineCurve.cpp"]
rust_module = "nurbs::b_spline_curve::p2"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.extent3d", "geom.object", "geom.pseudo_box", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.nurbs_crv", "topology.database_io"]
soft_depends_on = ["geom.geom_utility_p1", "geom.polar_box", "nlib.crv_basic", "nlib.crv_nurb", "nlib.crv_tool_p1", "nlib.geom", "nlib.knots", "nlib.math"]
est_lines = 1872
layer = 12
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nurbs.b_spline_curve_p2-a1"
claimed_at = "2026-10-12T23:42:38Z"
notes = "GREEN (promoted by curve.curve_p5: 2328 cases, 0 deferred after its stubs were wired); difftest partial: 2328 cases, 2234 passed, 94 deferred (curve.curve_p4 79, curve.curve_p5 10, curve.line 5) after curve.curve_cache co-ported SmCurve::IsLine; 22 fns; largest: SmBSplineCurve::CalculateBoundingBox, SmBSplineCurve::CreateByJoining, SmBSplineCurve::CreateAnalyticCurve, SmBSplineCurve::ReadFromDB; cycle back-edges (call into later units; stub or co-port): curve.curve_p2(14), curve.curve_p5(3), curve.curve_p4(2), curve.offset_curve(2), curve.curve_p1(1), curve.ellipse_p1(1), curve.line(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; PARTIAL: difftest 2328 cases (328 fixture: the six pt_TestFiles .smc curves through every op and read back with ReadFromDB, my_test_reversed_line_join line pairs, TestSmCreateRectangle / TestSmCreateRegularPolygon joins, arc/line joins, Bezier bounding-box cases, edge cases + 2000 generated), 2011 pass bit-identical (max_rel_err 0), 317 deferred (curve.curve_p2 167: SmCurve::IsKindOf in IsDegenerate/HasRepeatedEndControlPoints, EvaluateContinuity in CreateSimpleOffset; curve.curve_p4 79: IsClosed/IsDegenerate; curve.curve_p5 66: SmCurve::IsLine/IsArc; curve.line 5: SmLine in CreateAnalyticCurve); 20,328-case run clean; --perturb SENSITIVE; wired UNPORTED(nurbs.b_spline_curve_p2) in nurbs.b_spline_curve_n_lib (IsIntersectorApprox, DegreeElevate); after curve.curve_p2 wired SmCurve::IsKindOf/EvaluateContinuity: 2178 pass, 150 deferred (curve.curve_p4 79, curve.curve_p5 66, curve.line 5); after curve.line (SmLine in CreateAnalyticCurve wired): 2328 cases, 2239 pass, 89 deferred (curve.curve_p4 79, curve.curve_p5 10); after curve.curve_p4 (SmCurve::IsClosed / IsDegenerate wired): 2328 cases, 2318 pass, 10 deferred (curve.curve_p5 10)"
[[unit]]
id = "nurbs.b_spline_surface_p1"
upstream = ["source/SMLib/inc/SmBSplineSurface.h", "source/SMLib/src/SmBSplineSurface.cpp"]
rust_module = "nurbs::b_spline_surface::p1"
depends_on = ["geom.axis2_placement", "geom.extent2d", "geom.extent3d", "geom.polar_box", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector3d", "nlib.math", "nlib.srf_basic", "nlib.srf_common", "nurbs.nurbs_crv", "topology.database_io"]
soft_depends_on = ["geom.extent1d", "geom.geom_utility_p1", "nlib.iges", "nlib.srf_nurb", "nurbs.b_spline_curve_p1", "nurbs.nurbs_srf"]
est_lines = 1790
layer = 12
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-nurbs.b_spline_surface_p1-a1"
claimed_at = "2026-10-12T23:03:31Z"
notes = "difftest 2120 cases: 2058 pass, 62 deferred (surface.surface_p1 43, surface.surface_p7 19; surface.surface_p2 IsKindOf wired); 41 fns; largest: SmBSplineSurface::CalculateBoundingBox, SmBSplineSurface::CreateCanonical, SmBSplineSurface::ReadFromDB, SmBSplineSurface::IsDegenerateCurve; cycle back-edges (call into later units; stub or co-port): surface.cone_p1(8), surface.plane_p1(5), surface.surface_p1(5), surface.sphere(4), surface.surf_of_extrusion_p1(4), surface.surf_of_revolution_p1(4), surface.torus(4), surface.surface_p2(3), surface.surface_p7(3), surface.surface_p5(2), surface.surface_p4(1), topology.brep_p1(1), topology.face_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p2"
upstream = ["source/SMLib/inc/SmCurve.h", "source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p2"
depends_on = ["curve.hermite_curve", "geom.a_object", "geom.extent1d", "geom.extent3d", "geom.geom_utility_p1", "geom.global_solver", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["geom.axis2_placement", "geom.extent2d", "geom.geom_utility_p2", "geom.pseudo_box", "geom.tol", "geom.tree", "nurbs.b_spline_curve_p2"]
est_lines = 2302
layer = 13
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.curve_p2-a1"
claimed_at = "2026-10-13T00:14:00Z"
notes = "GREEN (promoted by curve.curve_p5: 3021 cases, 0 deferred after its stubs were wired); 79 fns; largest: SmCurvePropertyGS::BranchMayContainAnswers, SmCurve::SurfaceMaxDistanceBetween, SmCurve::EvaluateContinuity, sm_FlushCrv; cycle back-edges (call into later units; stub or co-port): curve.curve_cache(4), surface.surface_p2(3), curve.ellipse_p1(2), curve.composite_curve_p2(1), curve.conic(1), curve.crv_in_volume(1), curve.crv_on_surf(1), curve.hyperbola(1), curve.iso_curve(1), curve.line(1), curve.offset_curve(1), curve.parabola(1), curve.projected_curve(1), curve.tangent_field(1), surface.surface_p5(1), surface.surface_p7(1), topology.topology(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; PARTIAL: difftest 3018 cases (18 fixture re-expressing the prog_test/SM_API_test line and circle curves, ApproximateLength(ivl, 20), circle seam continuity, Hermite base defaults, ReadFromDB dispatch + 3000 generated over B-spline, Hermite and arc curves, the static helpers via verbatim shim copies and the solver box tests), 3012 pass bit-identical (max_rel_err 0), 6 deferred (curve.curve_p5 5: SmCurve::IsArc, curve.line 1: SmLine in CreateAnalyticCurve); --perturb SENSITIVE; introduces curve::curve::Curve (CurveKind enum + owner) and CurveEvaluate; wired UNPORTED(curve.curve_p2) in curve.hermite_curve (93 -> 0, green), nurbs.b_spline_curve_n_lib (57 -> 0, green), nurbs.b_spline_curve_p1 (60 -> 4), nurbs.b_spline_curve_p2 (317 -> 150), nurbs.b_spline_curve_p3 (391 -> 359); geom.tools / geom.solution_array / geom.tol stubs stay (opaque handles, see findings.md); after curve.line (SmLine::ReadFromDB wired): 3021 cases, 3016 pass, 5 deferred (curve.curve_p5 5)"
[[unit]]
id = "nlib.srf_tool_p4"
upstream = ["source/SMLib/src/NL_SrfTool.cpp"]
rust_module = "nurbs::srf_tool::p4"
depends_on = ["nlib.math", "nlib.srf_basic"]
soft_depends_on = ["nlib.basis_basic", "nlib.srf_nurb", "nlib.srf_tool_p2", "nlib.srf_tool_p3"]
est_lines = 1005
layer = 13
tests = ["SM_API_test:TestSmCreateSurfaceFromRandomPoints", "SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "prog_test:my_test_ss_nurb", "prog_test:my_test_surface_point_intersect"]
status = "green"
claimed_by = "swarm-nlib.srf_tool_p4-a1"
claimed_at = "2026-10-12T23:16:35Z"
notes = "2 fns; largest: N_SrfRemoveKnotsConstraints, N_MakeSrfsCompatibleUV; unit-SCC #22 (220 units); 208 upstream test entry points reach this unit; difftest green: 2681 cases (281 fixture + 2400 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "nurbs.b_spline_curve_p3"
upstream = ["source/SMLib/src/SmBSplineCurve.cpp"]
rust_module = "nurbs::b_spline_curve::p3"
depends_on = ["geom.assert_array", "geom.axis2_placement", "geom.extent1d", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2"]
soft_depends_on = ["geom.context", "geom.extent3d", "geom.vector2d", "nlib.geom", "nlib.math"]
est_lines = 1187
layer = 13
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-nurbs.b_spline_curve_p3-a1"
claimed_at = "2026-10-13T00:13:51Z"
notes = "difftest partial: 2195 cases, 2036 passed, 159 deferred (curve.curve_p5 159) after curve.curve_p8 wired SmCurve::GlobalCurveIntersect (TrimGap); difftest partial: 2195 cases, 1995 passed, 200 deferred (curve.curve_p7 98, curve.curve_p8 56, curve.curve_p4 46) after curve.curve_cache co-ported SmCurve::IsLine; difftest partial: 2195 cases, 1836 passed, 359 deferred (curve.curve_p5 188, curve.curve_p7 69, curve.curve_p8 56, curve.curve_p4 46) after curve.curve_p2 wired its stubs (was 966 deferred, curve.curve_p2 734); 9 fns; largest: SmBSplineCurve::AssertValid, SmBSplineCurve::JoinWith, SmBSplineCurve::TrimGap, SmBSplineCurve::IsSegmentLine; cycle back-edges (call into later units; stub or co-port): curve.curve_p2(6), curve.line(3), curve.curve_p4(1), curve.curve_p7(1), curve.curve_p8(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; after curve.curve_p4 (SmCurve::AssertValid wired): 2195 cases, 2023 pass, 172 deferred (curve.curve_p7 116, curve.curve_p8 56); after curve.curve_p7 (GlobalPropertyAnalysis wired): 2195 cases, 2023 pass, 172 deferred (curve.curve_p5 116, curve.curve_p8 56)"
[[unit]]
id = "curve.conic"
upstream = ["source/SMLib/inc/SmConic.h", "source/SMLib/src/SmConic.cpp"]
rust_module = "curve::conic"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.solution_array", "geom.vector2d", "geom.vector3d", "topology.database_io"]
soft_depends_on = ["geom.polynomial", "geom.tol"]
est_lines = 859
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.conic-a1"
claimed_at = "2026-10-13T01:00:34Z"
notes = "difftest green: 3240 cases (240 fixture incl. all 15 smCurveTest.cpp IntersectConic asserts + 3000 generated), 0 deferred; wired SmCurve::ReadFromDB(SmConic_TYPE) and CurveKind::Conic into curve.curve_p2 (still partial: curve_p5, curve.line). 19 fns; largest: SmConic::Evaluate, SmConic::InvertPointOnConic, SmConic::IntersectConic, SmConic::IntersectImplicitConic; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.crv_in_volume"
upstream = ["source/SMLib/inc/SmCrvInVolume.h", "source/SMLib/src/SmCrvInVolume.cpp"]
rust_module = "curve::crv_in_volume"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.tol", "geom.vector3d", "topology.database_io"]
soft_depends_on = ["geom.axis2_placement", "geom.context", "geom.extent3d", "geom.vector2d"]
est_lines = 949
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-curve.crv_in_volume-a1"
claimed_at = "2026-10-13T01:00:34Z"
notes = "difftest 2030 cases (1855 pass, 175 deferred: intersect.curve_class_p4 175; surface.volume_p1 and surface.volume_p2 wired); 27 fns; largest: SmCrvInVolume::GetKnots, SmCrvInVolume::Evaluate, SmCrvInVolume::ReadFromDB, SmCrvInVolume::GenerateMults; cycle back-edges (call into later units; stub or co-port): surface.volume_p1(14), curve.curve_p5(3), intersect.curve_class_p1(2), surface.volume_p2(2), intersect.curve_class_p4(1), intersect.curve_class_p8(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_cache"
upstream = ["source/SMLib/inc/SmCurveCache.h", "source/SMLib/src/SmCurveCache.cpp"]
rust_module = "curve::curve_cache"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent3d", "geom.object", "geom.tol", "geom.vector3d", "nlib.math", "nurbs.b_spline_curve_p1", "nurbs.nurbs_crv"]
soft_depends_on = ["geom.geom_utility_p1", "geom.local_solve1d", "geom.pseudo_box", "geom.tree", "nlib.knots", "nurbs.b_spline_curve_p2"]
est_lines = 1474
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.curve_cache-a1"
claimed_at = "2026-10-13T01:00:33Z"
notes = "GREEN (promoted by curve.curve_p5: 638 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 638 cases (38 fixture: lines, cubics, C0 quadratic, closed, degenerate, 2D, rational arc and Hermite curves through Tessellate with every option, sub/beyond/disjoint/reversed intervals, GetAnalyticCurve, type queries + 600 generated), 635 pass bit-identical (max_rel_err 0), 3 deferred (curve.curve_p5 2: SmCurve::IsArc, curve.line 1: SmLine in GetAnalyticCurve); co-ported SmFindCurveDistanceExtremaEFO::Evaluate (curve.curve_p4) and SmCurve::IsLine (curve.curve_p5, curve::curve::p5::is_line_base); wired curve_p2 span stubs, SmTree::GetOwnerObject and the IsLine stub of nurbs.b_spline_curve_p2; 24 fns; largest: SmCurveCache::Tessellate, sm_ComputeConstants, SmCurveCache::BuildTree, sm_ComputeParentData; cycle back-edges (call into later units; stub or co-port): curve.curve_p4(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; after curve.line: 638 cases, 636 pass, 2 deferred (curve.curve_p5 2)"
[[unit]]
id = "curve.hyperbola"
upstream = ["source/SMLib/inc/SmHyperbola.h", "source/SMLib/src/SmHyperbola.cpp"]
rust_module = "curve::hyperbola"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "topology.database_io"]
soft_depends_on = ["geom.geom_utility_p1"]
est_lines = 468
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.hyperbola-a1"
claimed_at = "2026-10-13T01:00:33Z"
notes = "GREEN (promoted by curve.curve_p5: 2062 cases, 0 deferred after its stubs were wired); difftest: 2062 cases, 1960 pass, 102 deferred (curve.curve_p1 70: SmCurve::GlobalPointSolve; curve.curve_p5 32: SmCurve::EvaluateSTEPPoint); wired UNPORTED(curve.hyperbola) in curve.curve_p2 (SmCurve::ReadFromDB). 22 fns; largest: SmHyperbola::MakeNurb, SmHyperbola::ReadFromDB, SmHyperbola::STEPInversion, SmHyperbola::EvaluateSTEP; cycle back-edges (call into later units; stub or co-port): curve.curve_p1(1), curve.curve_p5(1), surface.surf_of_extrusion_p1(1), surface.surf_of_revolution_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.iso_curve"
upstream = ["source/SMLib/inc/SmIsoCurve.h", "source/SMLib/src/SmIsoCurve.cpp"]
rust_module = "curve::iso_curve"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.object", "geom.vector3d", "topology.database_io"]
soft_depends_on = ["geom.tol", "geom.vector2d"]
est_lines = 310
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-curve.iso_curve-a1"
claimed_at = "2026-10-13T01:17:13Z"
notes = "PARTIAL: difftest 2874 cases (874 fixture: Surface.sms / offset_nurb.sms / DropCurveSurface.sms iso curves at domain ends, interior knots, outside the domain with and without clamping, bilinear patch and NURB-less surface edge cases, all ten SmSurfParamType values, equality near SM_IS_ZERO, ReadFromDB streams + 2000 generated), 2589 pass bit-identical (max_rel_err 0), 285 deferred (SmBSplineSurface::Evaluate back-edge wired 2026-10-12 in style review batch #5: 355 formerly deferred now pass; surface.surface_p6 120: SmSurface::CalculateContinuities; surface.surface_p2 101: SmSurface::ReadFromDB; curve.line 64: SmLine ctor in CreateUVIsoLine); --perturb SENSITIVE; base surface held as BSplineSurface (the only ported SmSurface); EvaluatePoint wired to nurbs.b_spline_surface_n_lib_p1; wired SmCurve::ReadFromDB(SmIsoCurve_TYPE) in curve.curve_p2 (still deferred on SmSurface::ReadFromDB, no counts changed); CurveKind::Iso. 16 fns; largest: SmIsoCurve::Evaluate, SmIsoCurve::ReadFromDB, SmIsoCurve::SmIsoCurve, SmIsoCurve::CreateUVIsoLine; cycle back-edges (call into later units; stub or co-port): surface.surface_p2(8), curve.curve_p5(2), curve.line(1), surface.surface_p1(1), surface.surface_p6(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; after curve.line wiring (SmLine in CreateUVIsoLine): 2874 cases, 2653 pass, 221 deferred (surface.surface_p2 101, surface.surface_p6 120)"
[[unit]]
id = "curve.line"
upstream = ["source/SMLib/inc/SmLine.h", "source/SMLib/src/SmLine.cpp"]
rust_module = "curve::line"
depends_on = ["curve.curve_p2", "geom.assert_array", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3", "topology.database_io"]
soft_depends_on = ["geom.axis2_placement", "geom.geom_utility_p1", "geom.geom_utility_p2", "geom.polar_box", "nurbs.nurbs_crv"]
est_lines = 1884
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = ""
claimed_at = ""
notes = "GREEN (promoted by curve.curve_p5: 2103 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 2103 cases (103 fixture: my_test_reversed_line_join x16, smTopoTest canonical lines + AdjustSTEPInterval, my_test_analytic_curves line, my_test_bsplinecurve_nlib line deform/copy, SM_API TestSmCurves/TestSmBrep lines, edge cases: degenerate/zero-vector/inside-out/infinite/2D lines, ReadFromDB ASCII+binary v30/v33/2D/rational, line/line intersections incl. overlap ranges, drop/GPS/STEP inversion, trims, joins, deform, offset, transform, AssertValid + 2000 generated programs of up to 6 ops), 2102 pass bit-identical (max_rel_err 0), 1 deferred (curve.curve_p4 1: SmCurve::AssertValid; IntersectWithEllipse wired by curve.ellipse_p2); 40k-seed run clean; --perturb SENSITIVE; co-ported SmCurve::EvaluateSTEPPoint for lines; wired UNPORTED(curve.line) in curve.curve_p2 (ReadFromDB), nurbs.b_spline_curve_p2 (CreateAnalyticCurve), nurbs.b_spline_curve_p3 (unreachable JoinWith branch dropped), curve.iso_curve (CreateUVIsoLine); fixed nurbs.b_spline_curve_n_lib DeformToEndPointTargets to ignore DegreeElevate status as upstream (see findings). 62 fns; largest: SmLine::IntersectWithLine, SmLine::GlobalPointSolveSTEP, SmLine::JoinWith, SmLine::Tessellate; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(6), curve.ellipse_p2(1), surface.surf_of_extrusion_p1(1), surface.surf_of_revolution_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; after curve.curve_p7: the 1 deferred case is now blocked by curve.curve_p5"
[[unit]]
id = "curve.offset_curve"
upstream = ["source/SMLib/inc/SmOffsetCurve.h", "source/SMLib/src/SmOffsetCurve.cpp"]
rust_module = "curve::offset_curve"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.vector3d", "topology.database_io"]
soft_depends_on = ["geom.tol"]
est_lines = 492
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.offset_curve-a1"
claimed_at = "2026-10-13T01:00:33Z"
notes = "20 fns; largest: SmOffsetCurve::Evaluate, SmOffsetCurve::ReadFromDB, SmOffsetCurve::EvaluatePoint, SmOffsetCurve::Trim; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(3); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; GREEN: difftest 2808 cases (808 fixture: TestSmOffsetCurve curve/line/vertical-line offsets, smTopoTest nested zero offsets, rational arc cusp, parabola evolute, degenerate ends, Hermite bases, reversed/trimmed/copied/compared curves, ReadFromDB ASCII+binary streams from upstream WriteToDB + 2000 generated), 0 deferred, bit-identical (max_rel_err 0); --perturb SENSITIVE. Wired: SmCurve::ReadFromDB(SmOffsetCurve_TYPE); CreateSimpleOffset now defers on SmCurve::ApproximateCurve (curve.curve_p1)"
[[unit]]
id = "curve.parabola"
upstream = ["source/SMLib/inc/SmParabola.h", "source/SMLib/src/SmParabola.cpp"]
rust_module = "curve::parabola"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "topology.database_io"]
soft_depends_on = ["geom.geom_utility_p1"]
est_lines = 441
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.parabola-a1"
claimed_at = "2026-10-13T01:00:33Z"
notes = "difftest green: 3044 cases, 3044 pass bit-identical (max_rel_err 0), 0 deferred; GlobalPointSolveSTEP wired to SmCurve::GlobalPointSolve (curve.curve_p1) at merge (206 formerly deferred cases now pass); SmCurve::EvaluateSTEPPoint (curve.curve_p5) co-ported; surf_of_extrusion_p1/surf_of_revolution_p1 GetGenDirParamExtent stubs remain (no case reaches them); CurveKind::Parabola dispatches SmBSplineCurve methods on its base like Hyperbola; wired UNPORTED(curve.parabola) in curve.curve_p2 (ReadFromDB). 22 fns; largest: SmParabola::MakeNurb, SmParabola::ReadFromDB, SmParabola::Transform, SmParabola::EvaluateSTEP; cycle back-edges (call into later units; stub or co-port): curve.curve_p1(1), curve.curve_p5(1), surface.surf_of_extrusion_p1(1), surface.surf_of_revolution_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.projected_curve"
upstream = ["source/SMLib/inc/SmProjectedCurve.h", "source/SMLib/src/SmProjectedCurve.cpp"]
rust_module = "curve::projected_curve"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.object", "geom.vector3d", "topology.database_io"]
soft_depends_on = []
est_lines = 569
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.projected_curve-a1"
claimed_at = "2026-10-13T01:00:34Z"
notes = "difftest: 2727 cases, 0 deferred (green); wired curve.curve_p2 SmProjectedCurve::ReadFromDB back-edge. 25 fns; largest: SmProjectedCurve::ReadFromDB, SmProjectedCurve::Evaluate, SmProjectedCurve::Transform, SmProjectedCurve::EvaluatePoint; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.tangent_field"
upstream = ["source/SMLib/inc/SmTangentField.h", "source/SMLib/src/SmTangentField.cpp"]
rust_module = "curve::tangent_field"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.vector3d", "topology.database_io"]
soft_depends_on = ["geom.vector2d"]
est_lines = 319
layer = 14
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.tangent_field-a1"
claimed_at = "2026-10-13T01:00:35Z"
notes = "GREEN (promoted by surface.surface_p1 after the surface_p7 merge: difftest 655 cases, 655 pass, 0 deferred); 12 fns; largest: SmTangentField::EvaluatePoint, SmTangentField::Create, SmTangentField::ReadFromDB, SmTangentField::Evaluate; cycle back-edges (call into later units; stub or co-port): curve.crv_on_surf(5), surface.surface_p7(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "nlib.srf_adv_p4"
upstream = ["source/SMLib/src/NL_SrfAdv.cpp"]
rust_module = "nurbs::srf_adv::p4"
depends_on = ["nlib.crv_adv_p2", "nlib.crv_basic", "nlib.crv_nurb", "nlib.geom", "nlib.math", "nlib.srf_basic", "nlib.srf_common"]
soft_depends_on = ["nlib.bezier", "nlib.crv_fit_p1", "nlib.crv_tool_p1", "nlib.crv_tool_p2", "nlib.funcs_adv", "nlib.funcs_basic", "nlib.knots", "nlib.srf_nurb", "nlib.srf_tool_p4"]
est_lines = 2228
layer = 14
tests = ["SM_API_test:TestSmCreateSurfaceFromRandomPoints", "SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "SM_API_test:TestSmCreateSkinPrimitive", "prog_test:my_test_parallel_projection"]
status = "green"
claimed_by = "swarm-nlib.srf_adv_p4-a1"
claimed_at = "2026-10-12T23:26:05Z"
notes = "11 fns; largest: N_CreateCoonsBoundaryCrvs, N_AdjustDerivSrf, N_ApproxCrossBoundaryDerivs, N_CreateCoonsSrf; unit-SCC #22 (220 units); 160 upstream test entry points reach this unit; difftest 3155 cases (155 fixture + 3000 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "curve.ellipse_p2"
upstream = ["source/SMLib/inc/SmEllipse.h", "source/SMLib/src/SmEllipse.cpp"]
rust_module = "curve::ellipse::p2"
depends_on = ["curve.curve_p2", "curve.line", "geom.axis2_placement", "geom.extent1d", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["geom.geom_utility_p2"]
est_lines = 1916
layer = 15
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.ellipse_p2-a1"
claimed_at = "2026-10-13T02:16:47Z"
notes = "GREEN (promoted by curve.curve_p5: 2102 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 2102 cases (102 fixture: my_test_analytic_curves circle/ellipse, my_test_drop_curve_near_seam circle (inside-out), smCurveTest circle/circle and line/circle intersection configurations re-expressed as SmEllipse, edge cases: inside-out, negative/near-0/180/360 domains, tiny arcs, skewed axes, pOptNurb, SetSTEPInterval+SetUp, transforms, DropPointFast seams/sub-intervals + 2000 generated op programs), 2005 pass bit-identical (max_rel_err 0), 97 deferred (curve.curve_p5 97: LocalPropertyAnalysis and the curve solvers' Newton equations; curve.ellipse_p1 wiring cleared GlobalPointSolve, ConvertTo2D and GlobalCoincidenceChecker); 30k-seed run clean; --perturb SENSITIVE; co-ported SmEllipse constructor + MakeNurb from curve.ellipse_p1 (Ellipse not yet a CurveKind variant); wired UNPORTED(curve.ellipse_p2) in curve.line (Line::intersect_with_ellipse takes &Ellipse; curve.line deferred 2 -> 1). 44 fns; largest: SmEllipse::IntersectWithEllipse, SmPolarConversion::SetUpPolarConversion, SmEllipse::IntersectWithLine, SmEllipse::DropPointFast; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(3), curve.curve_p1(2), curve.curve_p3(2), curve.curve_p6(1), curve.ellipse_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "nlib.srf_adv_p1"
upstream = ["source/SMLib/src/NL_SrfAdv.cpp"]
rust_module = "nurbs::srf_adv::p1"
depends_on = ["nlib.crv_basic", "nlib.crv_fit_p1", "nlib.crv_nurb", "nlib.geom", "nlib.math", "nlib.srf_basic", "nlib.srf_nurb"]
soft_depends_on = ["nlib.crv_fit_p2", "nlib.crv_tool_p2", "nlib.funcs_basic", "nlib.srf_adv_p2", "nlib.srf_adv_p3", "nlib.srf_adv_p4", "nlib.srf_fit", "nlib.srf_tool_p1"]
est_lines = 1188
layer = 15
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-nlib.srf_adv_p1-a1"
claimed_at = "2026-10-12T23:52:37Z"
notes = "5 fns; largest: N_CreateSkinSpine, N_SrfEvalPtDerivsUnbounded, N_CrossBoundaryDerivsVectorField, N_SrfOffsetGetMaxDeriv; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; green: 2886 difftest cases (386 fixtures + 2500 generated), 0 deferred, bit-identical"
[[unit]]
id = "nlib.srf_adv_p5"
upstream = ["source/SMLib/src/NL_SrfAdv.cpp"]
rust_module = "nurbs::srf_adv::p5"
depends_on = ["nlib.crv_adv_p2", "nlib.crv_basic", "nlib.crv_fit_p1", "nlib.crv_fit_p2", "nlib.geom", "nlib.math", "nlib.srf_adv_p4", "nlib.srf_basic"]
soft_depends_on = ["nlib.basis_adv", "nlib.crv_adv_p1", "nlib.crv_nurb", "nlib.crv_tool_p1", "nlib.crv_tool_p2", "nlib.funcs_adv", "nlib.funcs_basic", "nlib.knots", "nlib.srf_fit", "nlib.srf_nurb", "nlib.srf_tool_p4"]
est_lines = 1970
layer = 15
tests = ["SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "SM_API_test:TestSmCreateSkinPrimitive", "prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection"]
status = "green"
claimed_by = "swarm-nlib.srf_adv_p5-a1"
claimed_at = "2026-10-12T23:52:36Z"
notes = "1 fns; largest: N_CreateSkinSrfBoundaryContinuity; unit-SCC #22 (220 units); 159 upstream test entry points reach this unit; difftest 3073 cases (73 fixtures + 3000 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "surface.volume_p1"
upstream = ["source/SMLib/inc/SmVolume.h", "source/SMLib/src/SmVolume.cpp"]
rust_module = "surface::volume::p1"
depends_on = ["geom.a_object", "geom.extent3d", "geom.matrix", "geom.object", "geom.transform", "geom.vector3d"]
soft_depends_on = ["curve.crv_in_volume", "curve.line", "geom.axis2_placement", "geom.context", "geom.geom_utility_p1"]
est_lines = 2014
layer = 15
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-surface.volume_p1-a1"
claimed_at = "2026-10-13T02:16:42Z"
notes = "63 fns; largest: smvol_LiftThirdDerivative, SmFindPVIntersectENFO::Evaluate, SmVolume::Map, SmVolume::Evaluate; cycle back-edges (call into later units; stub or co-port): surface.b_spline_volume(2), surface.bend_volume(2), surface.twist_volume(2), surface.unbend_volume(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit; difftest partial: 2886 cases (886 fixtures + 2000 generated), 2884 pass, 2 deferred (surface.surface_p8 2: the unbend IsCurveInParamDomainSimple; twist and unbend wired by their units), max_rel_err 0; 20k-seed run clean; --perturb SENSITIVE; wired: curve.crv_in_volume (deferred 604 -> 208), geom.transform (256 -> 3), geom.tol GetScaledZero(SmVolume); geom.solution_array volume stub stays (opaque handle)"
[[unit]]
id = "curve.curve_p4"
upstream = ["source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p4"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.assert_array", "geom.extent1d", "geom.matrix", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d"]
soft_depends_on = ["curve.ellipse_p2", "curve.line", "geom.geom_utility_p1", "geom.polar_box", "nurbs.b_spline_surface_p1"]
est_lines = 2377
layer = 16
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-curve.curve_p4-a1"
claimed_at = "2026-10-13T02:46:08Z"
notes = "PARTIAL: difftest 3259 cases (259 fixture: TestSmCreateRectangle / far 1e-9 rectangle and TestSmCreateRegularPolygon / far 1.5e-6 pentagon edges through FixChainCurvesList, IsClosed, IsDegenerate, polar box, snap; my_test_reversed_line_join line pairs (chain, AnalyticCurveIntersect, AssertValid); my_test_drop_point unit circle through every SmCurvePropertyEFO property, SmCPDistAtENFO, sm_GetProjDist; tangent/extrema equations; filter cases + 3000 generated), 3210 pass bit-identical (max_rel_err 0), 49 deferred (surface.surface_p8 49: SmSurface::GlobalCurveIntersect in HasPlaneCrossings; curve.ellipse_p1 wiring cleared the 25 ellipse intersections); 30,259-case run clean; --perturb SENSITIVE; FixChainCurvesList duplicate deletion is a use after free upstream (not difftested, findings.md); SmFindCurveDistanceExtremaEFO::Evaluate co-ported earlier by curve.curve_cache; wired UNPORTED(curve.curve_p4) in nurbs.b_spline_curve_p2 (IsDegenerate, IsClosed: 94 -> 10 deferred) and nurbs.b_spline_curve_p3 (SmCurve::AssertValid: 200 -> 172 deferred); 20 fns; largest: SmCurvePropertyEFO::Evaluate, SmCCTangentIntENFO::StaticEvaluate, sm_FilterSolution, SmCurve::FixChainCurvesList; cycle back-edges (call into later units; stub or co-port): surface.surface_p8(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nlib.srf_adv_p6"
upstream = ["source/SMLib/src/NL_SrfAdv.cpp"]
rust_module = "nurbs::srf_adv::p6"
depends_on = ["nlib.crv_basic", "nlib.crv_nurb", "nlib.crv_tool_p1", "nlib.funcs_basic", "nlib.geom", "nlib.math", "nlib.srf_adv_p4", "nlib.srf_basic"]
soft_depends_on = ["nlib.basis_basic", "nlib.crv_geom", "nlib.crv_tool_p2", "nlib.funcs_adv", "nlib.knots", "nlib.srf_adv_p1", "nlib.srf_adv_p5", "nlib.srf_tool_p1", "nlib.srf_tool_p2", "nlib.srf_tool_p3"]
est_lines = 2214
layer = 16
tests = ["SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCurveSweep", "SM_API_test:TestSmPipeSweep", "SM_API_test:TestSmCurveSweepFromFaces", "SM_API_test:TestSmCurveSweepFailureCleanup", "prog_test:my_test_bsplinesurface_nlib"]
status = "green"
claimed_by = "swarm-nlib.srf_adv_p6-a1"
claimed_at = "2026-10-13T00:25:33Z"
notes = "2 fns; largest: N_FillNSidedHole, N_CreateSweepScale; unit-SCC #22 (220 units); 51 upstream test entry points reach this unit; difftest: 1016 cases (16 fixtures + 1000 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "nlib.srf_offset"
upstream = ["source/SMLib/src/NL_SrfOffset.cpp"]
rust_module = "nurbs::srf_offset"
depends_on = ["nlib.crv_basic", "nlib.geom", "nlib.math", "nlib.srf_basic", "nlib.srf_common", "nlib.srf_fit", "nlib.srf_nurb"]
soft_depends_on = ["nlib.crv_fit_p1", "nlib.crv_nurb", "nlib.crv_offset", "nlib.srf_adv_p1", "nlib.srf_adv_p3", "nlib.srf_tool_p1", "nlib.srf_tool_p3"]
est_lines = 613
layer = 16
tests = ["prog_test:my_test_ss_nurb", "prog_test:my_test_surface_point_intersect", "prog_test:my_test_GlobalCC_intersect", "prog_test:my_test_GlobalCSI", "prog_test:my_test_surface_curve_intersect", "prog_test:my_test_cci_nurb"]
status = "green"
claimed_by = "swarm-nlib.srf_offset-a1"
claimed_at = "2026-10-13T00:15:44Z"
notes = "1 fns; largest: N_SrfOffset; unit-SCC #22 (220 units); 181 upstream test entry points reach this unit; difftest: 424 cases (24 upstream .sms fixtures + 400 generated), 0 deferred, max_rel_err 0"
[[unit]]
id = "surface.b_spline_volume"
upstream = ["source/SMLib/inc/SmBSplineVolume.h", "source/SMLib/src/SmBSplineVolume.cpp"]
rust_module = "surface::b_spline_volume"
depends_on = ["geom.extent3d", "geom.pseudo_box", "geom.transform", "geom.vector3d", "surface.volume_p1"]
soft_depends_on = ["geom.tol", "nlib.math", "nlib.spiral", "nurbs.nurbs_crv"]
est_lines = 1226
layer = 16
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-surface.b_spline_volume-a1"
claimed_at = "2026-10-13T03:04:36Z"
notes = "23 fns; largest: SmBSplineVolume::EvaluateSimple, SmBSplineVolume::ReadFromDB, SmBSplineVolume::EvaluateIsoParametricCurveSimple, SmBSplineVolume::EvaluateBoundingBoxSimple; unit-SCC #22 (220 units); only 201 of 1226 lines survive RTA (reached via virtual dispatch to classes no in-scope entry point constructs); low priority / likely deferrable; 319 upstream test entry points reach this unit; GREEN: difftest 2333 cases (333 fixture: unit cube, rational Bezier, knots needing fixup, coincident control points, degree 0, unclamped, closest-point ties, oriented + compounded volumes over info/copy/equal/eval/bbox/iso/guess/transform/predicate ops + 2000 generated), all bit-identical (max_rel_err 0), 0 deferred; 30,333-case run clean; --perturb SENSITIVE. Upstream builds without USE_VOLUMES: EvaluateSimple, EvaluateIsoParametricCurveSimple, ReadFromDB, sm_LoadNLibTransform (so TransformSimple) return SM_ERR and AreEqual_gw_VOLUME is FALSE (findings.md). The SmBSplineVolume UNPORTED stub in surface.volume_p1 now only covers the surface.b_spline_volume_n_lib overrides (HasDiscontinuitiesSimple, IsCurveInParamDomainSimple); no unit deferred on surface.b_spline_volume"
[[unit]]
id = "surface.twist_volume"
upstream = ["source/SMLib/inc/SmTwistVolume.h", "source/SMLib/src/SmTwistVolume.cpp"]
rust_module = "surface::twist_volume"
depends_on = ["geom.extent3d", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.vector3d", "surface.volume_p1", "topology.database_io"]
soft_depends_on = ["geom.extent1d", "geom.tol"]
est_lines = 649
layer = 16
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-surface.twist_volume-a1"
claimed_at = "2026-10-13T03:03:30Z"
notes = "difftest green: 1572 cases (default seeds), 1572 pass, 0 deferred (ReadFromDB wired by surface.volume_p2); max_rel_err 0; wiring dropped surface.volume_p1 deferred 99 -> 39. 25 fns; largest: SmTwistVolume::Evaluate, SmTwistVolume::EvaluateSimple, SmTwistVolume::EvaluateBoundingBoxSimple, SmTwistVolume::ReadFromDB; cycle back-edges (call into later units; stub or co-port): surface.volume_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p3"
upstream = ["source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p3"
depends_on = ["curve.curve_p2", "curve.curve_p4", "geom.extent1d", "geom.global_solver", "geom.local_solve1d", "geom.local_solve_nd", "geom.matrix", "geom.object", "geom.solution_array", "geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["curve.curve_cache", "curve.projected_curve", "geom.geom_utility_p1", "geom.pseudo_box", "geom.tol", "geom.tree", "nurbs.b_spline_curve_p2"]
est_lines = 2072
layer = 17
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-curve.curve_p3-a1"
claimed_at = "2026-10-13T03:19:00Z"
notes = "PARTIAL: difftest 3076 cases (76 fixture re-expressing SmApiCreateRectangle / SmApiCreateRegularPolygon loops and the smCurveTest line / circle point extrema and drop-point tests + 3000 generated), 2334 pass bit-identical (max_rel_err 0), 742 deferred (curve.curve_p5 742: LocalPropertyAnalysis 385, SmCCIntersectENFO::Evaluate 136, SmCurve::Length 120, SmFindCCNormalENFO::Evaluate 101); --perturb SENSITIVE; co-ported SmCurve::IsLinear (curve.curve_p5) and SmCCTangentIntENFO::Evaluate; wired UNPORTED(curve.curve_p3) in curve.curve_p2 (CurvePropertyGS::LocalSolve, solver now carries the curve), curve.ellipse_p2 (LocalCurveSolve) and nurbs.b_spline_surface_n_lib_p2 (LocalCurveIntersect; its 4 deferred now on curve.curve_p5); no unit reached 0 deferred. 9 fns; largest: SmCurvePropertyGS::LocalSolve, SmCurve::LocalPointSolve, SmCurve::LocalCurveSolve, SmCurve::LocalCurveIntersect; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(7); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nurbs.b_spline_surface_n_lib_p1"
upstream = ["source/SMLib/src/SmBSplineSurfaceNLib.cpp"]
rust_module = "nurbs::b_spline_surface_n_lib::p1"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.object", "geom.vector3d", "nlib.crv_basic", "nlib.geom", "nlib.math", "nlib.srf_adv_p3", "nlib.srf_basic", "nlib.srf_nurb", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p1"]
soft_depends_on = ["geom.tol", "geom.vector2d", "nlib.crv_adv_p2", "nlib.crv_nurb", "nlib.crv_tool_p2", "nlib.knots", "nlib.srf_adv_p1", "nlib.srf_adv_p4", "nlib.srf_adv_p6", "nlib.srf_common", "nlib.srf_offset", "nlib.srf_tool_p3", "nlib.srf_tool_p4"]
est_lines = 2033
layer = 17
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-nurbs.b_spline_surface_n_lib_p1-a1"
claimed_at = "2026-10-13T00:47:51Z"
notes = "difftest: 665 cases (65 fixtures + 600 generated), 638 pass bit-identical, 27 deferred (surface.surface_p5: SmSurface::IsSingularity in CreateExtendedSurface; then surface.surface_p7 IsClosed); DropCurve path of sm_CreateNonRationalCurve not diffed (upstream crash, see findings). 23 fns; largest: sm_CreateCoonsSrf, SmBSplineSurface::CreateExtendedSurface, SmBSplineSurface::CreateCoonsPatch, SmBSplineSurface::CreateNSidedPatch; cycle back-edges (call into later units; stub or co-port): surface.surface_p2(4), curve.curve_p2(1), intersect.surface_drop_lib_p3(1), surface.surface_p5(1), surface.surface_p7(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p1"
upstream = ["source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p1"
depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.curve_p3", "curve.curve_p4", "geom.a_object", "geom.extent1d", "geom.global_solver", "geom.object", "geom.solution_array", "geom.tol", "geom.tree", "geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["curve.hermite_curve", "geom.extent3d", "geom.geom_utility_p1", "geom.pseudo_box"]
est_lines = 2097
layer = 18
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-curve.curve_p1-a1"
claimed_at = "2026-10-13T03:57:21Z"
notes = "PARTIAL: difftest 3083 cases (83 fixture re-expressing the smCurveTest my_test_point_extrema / my_test_drop_point line and circle solves, the SmApiCreateRectangle / SmApiCreateRegularPolygon edges through Tessellate / TessellateByBisection / GlobalPointSolve / ApproximateCurve and edge cases + 3000 generated), 2493 pass bit-identical (max_rel_err 0), 590 deferred (curve.curve_p5 590: LocalPropertyAnalysis 310, SmFindCCNormalENFO::Evaluate 163, SmCCIntersectENFO::Evaluate 73, IsArc 44); --perturb SENSITIVE; 12,083-case run clean; co-ported SmCurve::IsLine dispatch and CacheMakeOrValidate cache build (curve.curve_p5); SolutionObject::natural_interval added for IdenticalSolutions; wired UNPORTED(curve.curve_p1) in nurbs.b_spline_curve_p1 (TessellateByBisection: unit now green), nurbs.b_spline_curve_p2 (ApproximateCurve), curve.hyperbola (GlobalPointSolveSTEP: 70 -> 0 curve_p1 deferred), curve.ellipse_p2 (line GlobalPointSolve; the ellipse one now waits on curve.ellipse_p1); curve.curve_p4 / curve.ellipse_p2 curve_p1 deferrals now pass or wait on curve.ellipse_p1 (findings.md). 8 fns; largest: SmCPGlobalSolver::LocalSolve, SmCurve::TessellateByBisection, SmCurve::ClassifyIntersectingRangeSolution, SmCurve::GlobalPointSolve; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p6"
upstream = ["source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p6"
depends_on = ["curve.curve_p2", "curve.curve_p3", "curve.curve_p4", "geom.extent1d", "geom.extent3d", "geom.global_solver", "geom.object", "geom.polar_box", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["curve.line", "geom.extent2d", "nurbs.b_spline_curve_n_lib"]
est_lines = 2376
layer = 18
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-curve.curve_p6-a1"
claimed_at = "2026-10-13T03:57:16Z"
notes = "GREEN (promoted by curve.curve_p5: 3136 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 3136 cases (136 fixture: SM_API_test rectangle/hexagon edges (boxes, planarity, simple/global coincidence, gaps, drops), my_test_reversed_line_join line pairs x16 (simple coincidence, gaps, drops, GlobalPointSolveSTEP), smCurveTest DeformToEndPointTargets B-spline and line steps, my_test_drop_point-style drops, circle boxes, edge cases + 3000 generated), 3048 pass bit-identical (max_rel_err 0), 88 deferred (curve.curve_p5 88: SmFindCCNormalENFO::Evaluate in precise gaps, sm_IsPointSolutionAcrossClosedSeamBoundary in split recombination, LocalPropertyAnalysis/IsArc inside global solves); 30k-seed run clean; --perturb SENSITIVE; wired curve.curve_p1 (GlobalPointSolve, Tessellate, ApproximateCurve) at merge; ellipse GlobalCoincidenceChecker stub retagged UNPORTED(curve.ellipse_p1) (SmEllipse not a CurveKind; curve.ellipse_p2 stays partial, 1 case moved to ellipse_p1); geom.tools stubs kept (opaque handles, findings.md); GlobalCoincidenceChecker recursion bounded at 200 splits. 8 fns; largest: SmCurve::GlobalCoincidenceChecker, SmCurve::SimpleCoincidenceChecker, SmCurve::CurveMaxDistanceBetween, SmCurve::CalculateBoundingBox; cycle back-edges (call into later units; stub or co-port): curve.curve_p1(5), curve.crv_on_surf(3), curve.curve_p5(2), surface.surface_p1(1), surface.surface_p2(1), surface.surface_p5(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "nurbs.b_spline_surface_n_lib_p2"
upstream = ["source/SMLib/src/SmBSplineSurfaceNLib.cpp"]
rust_module = "nurbs::b_spline_surface_n_lib::p2"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1"]
soft_depends_on = ["geom.tol", "nlib.crv_basic", "nlib.crv_tool_p1", "nlib.math", "nlib.srf_adv_p1", "nlib.srf_adv_p5", "nlib.srf_basic", "nlib.srf_nurb", "nlib.srf_tool_p1", "nurbs.b_spline_curve_p2"]
est_lines = 1932
layer = 18
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-nurbs.b_spline_surface_n_lib_p2-a1"
claimed_at = "2026-10-13T01:27:54Z"
notes = "PARTIAL: difftest 654 cases (54 fixture + 600 generated), 632 pass bit-identical, 22 deferred (curve.crv_on_surf 17: SmCrvOnSurf::ApproximateCurve in G1 corner blends (surface.surface_p2 GetNaturalUVDomain wired); surface.surface_p3 5, moved from surface.surface_p7 with PR #24); 20k-seed run clean; GetDerivativeLimit co-ported (CO-PORT(surface.surface_p2)); no UNPORTED(nurbs.b_spline_surface_n_lib_p2) stubs existed. 4 fns; largest: SmBSplineSurface::CreateCornerBlend, SmBSplineSurface::Evaluate, SmBSplineSurface::CreateSkinnedSurface, SmBSplineSurface::TrimWithDomain; cycle back-edges (call into later units; stub or co-port): curve.curve_p2(4), surface.surface_p2(3), curve.tangent_field(2), curve.crv_on_surf(1), curve.curve_p3(1), curve.curve_p4(1), surface.surface_p1(1), surface.surface_p3(1), surface.surface_p7(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "curve.crv_on_surf"
upstream = ["source/SMLib/inc/SmCrvOnSurf.h", "source/SMLib/src/SmCrvOnSurf.cpp"]
rust_module = "curve::crv_on_surf"
depends_on = ["curve.curve_p2", "curve.curve_p3", "curve.curve_p6", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "topology.database_io"]
soft_depends_on = ["curve.line", "curve.tangent_field", "geom.axis2_placement", "geom.context", "geom.tol", "nurbs.b_spline_curve_p2"]
est_lines = 1728
layer = 19
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-curve.crv_on_surf-a1"
claimed_at = "2026-10-13T04:49:20Z"
notes = "PARTIAL: difftest 2094 cases (94 fixture: smTopoTest my_check_loop_uv_gap SmBSplineCurve::CreateLineSegment UV edges on the bulge patch with owner 1 (eval, approx, cached breaks, drops, copies, edits, self gap), smMergeTest plane SM_SP_UMAX boundary via the UV-line constructor for owner flags 0-3, smTopoTest face trim curves on Surface.sms / DropCurveSurface.sms + 2000 generated op programs incl. ReadFromDB records from upstream WriteToDB), 1602 pass bit-identical (max_rel_err 0), 492 deferred (intersect.curve_class_p4 294: SmCurveClassification of uncached breaks; surface.surface_p7 148: SmSurface::EvaluateNormal; surface.surface_p1 50: Evaluate2ndDerivatives); --perturb SENSITIVE; CurveKind::CrvOnSurf (UV curve + BSplineSurface by value); ApproximateCurve / DropPoint / CalculateBoundingBox dispatch to the override (Curve::approximate_curve_base, drop_point_base); smsurf_LiftSecond/ThirdDerivative co-ported (surface.surface_p2); wired SmCurve::ReadFromDB(SmCrvOnSurf_TYPE) (curve.curve_p2) and SmTangentField base read (curve.tangent_field 266 -> 264 deferred); 3 UNPORTED(curve.crv_on_surf) stubs stay (global_solver node owner, SmTangentField::ApproximateCurve, tangent field as curve kind: see findings); DeformToEndPointTargets branch retagged surface.surface_p5. 38 fns; largest: SmCrvOnSurf::SurfaceCurveMaxDistanceBetween, SmCrvOnSurf::Evaluate, SmCrvOnSurf::GetKnots, SmCrvOnSurf::SetAll; cycle back-edges (call into later units; stub or co-port): surface.surface_p2(14), surface.surface_p1(4), curve.curve_p5(3), intersect.curve_class_p1(2), surface.surface_p7(2), curve.curve_p1(1), intersect.curve_class_p4(1), intersect.curve_class_p8(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p7"
upstream = ["source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p7"
depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.curve_p3", "curve.curve_p4", "curve.curve_p6", "geom.a_object", "geom.extent1d", "geom.extent3d", "geom.geom_utility_p1", "geom.global_solver", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.vector3d"]
soft_depends_on = ["curve.projected_curve", "geom.axis2_placement", "geom.tol", "geom.tree"]
est_lines = 1666
layer = 19
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-curve.curve_p7-a1"
claimed_at = "2026-10-13T04:46:38Z"
notes = "GREEN (promoted by curve.curve_p5: 3027 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 3027 cases (27 fixture: SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon edge pairs, my_test_reversed_line_join segments, arc plane intersection / classification with comb, edge cases: coincident, tolerance-limit gaps, degenerate Hermite, self-intersecting loop, projected / perspective, sub-interval + 3000 generated: whole SolveIt and single leaf-pair LocalSolve for intersect, intersection test and the three projected intersections, GlobalPropertyAnalysis over all 29 properties with/without comb), 1716 pass bit-identical (max_rel_err 0), 1311 deferred (curve.curve_p5 1311: LocalCurveIntersect -> SmCCIntersectENFO::Evaluate, LocalPropertyAnalysis); --perturb SENSITIVE; co-ported sm_FindAdditionalCcTangentGuess (curve.curve_p5); wired UNPORTED(curve.curve_p7) in curve.curve_p2 (CciGlobalSolver::local_solve, solver now carries curves + kernel) and nurbs.b_spline_curve_p3 (AssertValid GlobalPropertyAnalysis: its 116 deferred moved to curve.curve_p5); no unit promoted. 2 fns; largest: SmCCIGlobalSolver::LocalSolve, SmCurve::GlobalPropertyAnalysis; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "curve.ellipse_p1"
upstream = ["source/SMLib/inc/SmCircle.h", "source/SMLib/src/SmCircle.cpp", "source/SMLib/src/SmEllipse.cpp"]
rust_module = "curve::ellipse::p1"
depends_on = ["curve.curve_p1", "curve.curve_p2", "curve.curve_p4", "curve.ellipse_p2", "geom.assert_array", "geom.axis2_placement", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3", "topology.database_io"]
soft_depends_on = ["geom.geom_utility_p1", "geom.polynomial", "nlib.crv_basic", "nlib.crv_common", "nurbs.b_spline_surface_p1", "nurbs.nurbs_crv"]
est_lines = 1930
layer = 19
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.ellipse_p1-a1"
claimed_at = "2026-10-13T04:34:25Z"
notes = "GREEN (promoted by curve.curve_p5: 2028 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 2028 cases (28 fixture: my_test_analytic_curves circle/ellipse (CreateCanonical, AdjustSTEPInterval, GlobalPointSolveSTEP, ReverseParameterization), smSurfaceTest cylinder circle inside-out, smTopoTest CreateCanonical + AdjustSTEPInterval / EditParameterization circles, smCurveTest circle copy constructor, edge cases: non-positive radius, collinear / 2D / closed 3-point circles, joins (overlap, flipped normal, non-ellipse), circle offsets, skewed ConvertTo2D, 2D construction, Trim modes; + 2000 generated programs over constructors, CreateCanonical and ReadFromDB records), 1896 pass bit-identical (max_rel_err 0), 132 deferred (curve.curve_p5 132: LocalPointSolve / LocalPropertyAnalysis / SmCurve::IsArc); --perturb SENSITIVE; SmEllipse and SmCircle join Curve as CurveKind::Ellipse (Curve methods whose ellipse override rebuilds the polar converter take &Kernel); wired UNPORTED(curve.ellipse_p1) in curve.curve_p2 (ReadFromDB), curve.ellipse_p2 (GlobalPointSolve, GlobalCoincidenceChecker), nurbs.b_spline_curve_p2 (CreateAnalyticCurve SmCircle), nurbs.b_spline_surface_p2 (sweep circle). 39 fns; largest: SmEllipse::MakeNurb, SmPolarConversion::ConvertToPolarParameter, SmEllipse::JoinWith, SmEllipse::Trim; cycle back-edges (call into later units; stub or co-port): surface.surf_of_extrusion_p1(1), surface.surf_of_revolution_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "nurbs.b_spline_surface_p2"
upstream = ["source/SMLib/src/SmBSplineSurface.cpp"]
rust_module = "nurbs::b_spline_surface::p2"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1"]
soft_depends_on = ["geom.extent3d", "geom.geom_utility_p1", "geom.vector2d", "nlib.srf_basic", "nlib.srf_tool_p1", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p3", "nurbs.nurbs_crv", "nurbs.nurbs_srf"]
est_lines = 1338
layer = 19
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-nurbs.b_spline_surface_p2-a1"
claimed_at = "2026-10-13T02:06:41Z"
notes = "After surface.plane_p2 (IsNurbSurfacePlane wired, PR #40): 763 cases, 729 pass, 34 deferred (surface.surface_p1 29, surface.cone_p2 5; the 9 surface.surface_p7 cases moved to surface.surface_p1 with PR #24); 16 fns; largest: SmBSplineSurface::CreateSurfOfRevolution, SmBSplineSurface::CreateSphereFromArcs, SmBSplineSurface::CreateIsoParametricCurve, SmBSplineSurface::GetControlPointsExpert; cycle back-edges (call into later units; stub or co-port): curve.iso_curve(3), surface.plane_p1(3), curve.ellipse_p1(2), surface.surface_p1(2), surface.surface_p2(2), surface.surface_p7(2), curve.curve_p5(1), curve.ellipse_p2(1), curve.line(1), surface.cone_p2(1), surface.plane_p2(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surf_of_revolution_p2(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p8"
upstream = ["source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p8"
depends_on = ["curve.curve_p1", "curve.curve_p2", "curve.curve_p4", "curve.curve_p6", "curve.curve_p7", "geom.a_object", "geom.extent1d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d"]
soft_depends_on = ["curve.curve_cache", "geom.global_solver", "geom.tree"]
est_lines = 1670
layer = 20
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-curve.curve_p8-a1"
claimed_at = "2026-10-13T05:23:28Z"
notes = "GREEN (promoted by curve.curve_p5: 3058 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 3058 cases (58 fixture: SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon edge pairs and my_test_reversed_line_join line pairs (with and without the coincidence check), edge cases: line/line and B-spline line crossings, overlaps, self intersections, polyline vertex touch, parabola tangency, parallel gaps at the tolerance limit, coincident cubics, degenerate Hermite, looping self intersection, disjoint boxes + 3000 generated: crossings, tangent lines, coincident partners, self intersections, closed and looping curves), 1968 pass bit-identical (max_rel_err 0), 1090 deferred (curve.curve_p5 1090: SmCCIntersectENFO::Evaluate, sm_IsPointSolutionAcrossClosedSeamBoundary, SmCurve::IsArc); --perturb SENSITIVE; wired UNPORTED(curve.curve_p8) in nurbs.b_spline_curve_p3 (TrimGap); 1 fns; largest: SmCurve::GlobalCurveIntersect; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "primitive.api_curves"
upstream = ["source/SM_API/src/SmApiCurves.cpp"]
rust_module = "primitive::api_curves"
depends_on = ["geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["curve.ellipse_p1", "curve.line", "geom.axis2_placement", "geom.context", "geom.extent1d", "geom.tol", "nurbs.b_spline_curve_n_lib"]
est_lines = 649
layer = 20
tests = ["SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon", "SM_API_test:TestSmCreateArc", "SM_API_test:TestSmCreateCanonicalCurve", "SM_API_test:TestSmCreateCurve", "SM_API_test:TestSmCreateCircle"]
status = "green"
claimed_by = "swarm-primitive.api_curves-a1"
claimed_at = "2026-10-13T05:53:39Z"
notes = "green: difftest 1629 cases (129 fixture + 1500 generated), 0 deferred, perturb SENSITIVE; 13 fns; largest: SmApiCreateHelix, SmApiCreateCurve, SmApiCreateRegularPolygon, SmApiCreateRectangle; entry points: SmApiCreateArc, SmApiCreateCanonicalCurve, SmApiCreateCircle, SmApiCreateCurve, SmApiCreateEllipse, SmApiCreateHelix, SmApiCreateLine, SmApiCreateLineSegment, SmApiCreateRectangle, SmApiCreateRegularPolygon; 63 upstream test entry points reach this unit"
[[unit]]
id = "curve.composite_curve_p1"
upstream = ["source/SMLib/inc/SmCompositeCurve.h", "source/SMLib/src/SmCompositeCurve.cpp"]
rust_module = "curve::composite_curve::p1"
depends_on = ["curve.curve_p1", "curve.curve_p2", "curve.curve_p3", "curve.curve_p6", "curve.curve_p8", "geom.a_object", "geom.attribute", "geom.axis2_placement", "geom.extent1d", "geom.extent3d", "geom.geom_utility_p1", "geom.object", "geom.polar_box", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["geom.extent2d", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3"]
est_lines = 1700
layer = 21
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = "swarm-curve.composite_curve_p1-a1"
claimed_at = "2026-10-13T06:02:42Z"
notes = "GREEN (promoted by curve.curve_p5: 3093 cases, 0 deferred after its stubs were wired); PARTIAL: difftest 3093 cases (93 fixture: my_test_cci_self composites/offset rebuild, the disabled BuildCompositesFromCurves square, edge cases + 3000 generated), 2781 pass bit-identical (max_rel_err 0), 312 deferred (curve.curve_p5 312: AssertValid of the joined ApproximateCurve result reaches LocalPropertyAnalysis; corner chamfer / classify solves); 30k-seed run clean; --perturb SENSITIVE; SmCompositeCurve joins Curve as CurveKind::Composite; sm_FlushCrv co-ported (call graph lists it unused); no UNPORTED(curve.composite_curve_p1) stubs to wire; upstream OOB reads (GetKnots, ApproximateCurve NULL join, chamfer sSolutions[0]) in findings.md. 46 fns; largest: SmCompositeCurve::ComputeProjectedLoopOrientation, sm_CreateCorner, SmCompositeCurve::BuildCompositesFromCurves, sm_CurveClassify; cycle back-edges (call into later units; stub or co-port): curve.curve_p5(4); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p2"
upstream = ["source/SMLib/inc/SmSurface.h", "source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p2"
depends_on = ["geom.a_object", "geom.assert_array", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d"]
soft_depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.curve_p3", "curve.curve_p7", "curve.curve_p8", "geom.axis2_placement", "geom.polar_box", "geom.polynomial", "geom.tree", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2"]
est_lines = 2398
layer = 21
tests = ["SM_API_test:TestSmPrincipalDirectionPairing", "prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 869 cases (69 fixture: Surface.sms / DropCurveSurface.sms / offset_nurb.sms queries, evaluation, knots, edits, copies, SmSurfaceEval, ReadFromDB; base SmSurface() defaults; TestSmPrincipalDirectionPairing; + 800 generated), 790 pass bit-identical, 79 deferred after surface.plane_p2 wired the plane dispatch, PR #40 (surface.surface_p5 36, surface.surface_p1 31, surface.cone_p2 10, intersect.adv_surface_intersector 1, topology.trimming_tools 1; the 18 surface.surface_p7 cases moved to surface.surface_p1 with PR #24); wired UNPORTED(surface.surface_p2) in nurbs.b_spline_surface_p1 (IsKindOf), curve.curve_p2, curve.tangent_field, nurbs.b_spline_curve_n_lib, curve.iso_curve, curve.crv_on_surf (ReadFromDB, lift co-ports), nurbs.b_spline_surface_n_lib_p2 (GetDerivativeLimit co-port); geom.grid now blocked on surface.surface_cache_p1; geom.solution_array keeps 2 handle-lookup markers; 91 fns; largest: SmDerivSurfDefinition::CreateCrossSectionCurves, smsurf_EvaluateGeometric, smsurf_DropVectors, sm_CCLocalSolve; cycle back-edges (call into later units; stub or co-port): intersect.curve_class_p1(5), intersect.point_class(3), intersect.surface_intersector_p1(3), intersect.adv_surface_intersector(2), surface.cone_p1(2), surface.surface_cache_p1(2), topology.trimming_tools(2), intersect.curve_class_p2(1), intersect.curve_class_p8(1), intersect.surface_intersector_p4(1), intersect.surface_intersector_p5(1), surface.curve_bounded_surface(1), surface.offset_surface(1), surface.plane_p2(1), surface.sphere(1), surface.srf_in_volume(1), surface.surf_of_extrusion_p2(1), surface.surf_of_revolution_p3(1), surface.surface_p1(1), surface.torus(1); unit-SCC #22 (220 units); 320 upstream test entry points reach this unit"
[[unit]]
id = "curve.composite_curve_p2"
upstream = ["source/SMLib/inc/SmCompositeCurve.h", "source/SMLib/src/SmCompositeCurve.cpp"]
rust_module = "curve::composite_curve::p2"
depends_on = ["curve.composite_curve_p1", "curve.curve_p1", "curve.curve_p2", "curve.curve_p4", "curve.curve_p7", "curve.curve_p8", "curve.offset_curve", "geom.a_object", "geom.extent1d", "geom.object", "geom.solution_array", "geom.vector3d", "topology.database_io"]
soft_depends_on = ["geom.geom_utility_p1", "geom.tol", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2"]
est_lines = 1345
layer = 22
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "green"
claimed_by = "swarm-curve.composite_curve_p2-a1"
claimed_at = "2026-10-13T06:41:55Z"
notes = "GREEN (promoted by curve.curve_p5: 661 cases, 0 deferred after its stubs were wired); difftest 661 cases (361 pass, 300 deferred on curve.curve_p5); 10 fns; largest: SmCompositeCurve::CreateOffsetsOfManyCurves, SmCompositeCurve::IntersectAndTrimOffsets, sm_CheckBowTies, SmCompositeCurveSegment::ReadFromDB; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p5"
upstream = ["source/SMLib/inc/SmCurve.h", "source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p5"
depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.curve_p4", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.local_solve1d", "geom.matrix", "geom.object", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1"]
soft_depends_on = ["curve.composite_curve_p1", "curve.conic", "curve.crv_in_volume", "curve.crv_on_surf", "curve.ellipse_p2", "curve.hermite_curve", "curve.hyperbola", "curve.iso_curve", "curve.line", "curve.offset_curve", "curve.parabola", "curve.projected_curve", "curve.tangent_field", "geom.axis2_placement", "geom.solution_array", "geom.vector2d", "nurbs.b_spline_curve_p3"]
est_lines = 2299
layer = 22
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-curve.curve_p5-a1"
claimed_at = "2026-10-13T06:41:49Z"
notes = "PARTIAL: difftest 3097 cases (97 upstream-derived + edge-case fixtures: TestSmCreateRectangle/RegularPolygon edges, my_test_reversed_line_join lines, closest-point inversions, Newton Jacobians; plus 3000 generated over 16 ops), 3067 pass bit-identical, 30 deferred (mass.integrator 28: Length of curved spans; curve.curve_p2 2: GetNaturalInterval through a solution handle); 20000-seed run clean; --perturb detects all; wired all 13 UNPORTED(curve.curve_p5) stubs, promoting 12 units to green; upstream CrvsCleanup/TrimGap crash next to a closed curve not generated (see findings); 19 fns; largest: SmFindCCNormalENFO::Evaluate, SmCCIntersectENFO::Evaluate, SmCurve::IsArc, SmCurve::LocalPropertyAnalysis; cycle back-edges (call into later units; stub or co-port): curve.ellipse_p1(2), mass.integrator(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.curve_bounded_surface"
upstream = ["source/SMLib/inc/SmCurveBoundedSurface.h", "source/SMLib/src/SmCurveBoundedSurface.cpp"]
rust_module = "surface::curve_bounded_surface"
depends_on = ["geom.object", "surface.surface_p2", "topology.database_io"]
soft_depends_on = ["curve.composite_curve_p1", "curve.curve_p2"]
est_lines = 324
layer = 22
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-surface.curve_bounded_surface-a1"
claimed_at = "2026-10-13T12:00:00Z"
notes = "difftest 535 cases (135 fixture + 400 generated), 359 pass, 176 deferred (surface.surface_p1 85, surface.surface_p3 56, surface.surface_p7 25, surface.surface_p5 10); SurfaceKind::CurveBounded; Surface::read_from_db now takes &Kernel; 19 fns; largest: SmCurveBoundedSurface::ReadFromDB, SmCurveBoundedSurface::operator==, SmCurveBoundedSurface::Evaluate, SmCurveBoundedSurface::SmCurveBoundedSurface; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(4), surface.surface_p3(2), surface.surface_p5(1), surface.surface_p7(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_cache_p1"
upstream = ["source/SMLib/inc/SmSurfaceCache.h", "source/SMLib/src/SmSurfaceCache.cpp"]
rust_module = "surface::surface_cache::p1"
depends_on = ["geom.extent2d", "geom.extent3d", "geom.object", "geom.tree", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p2", "geom.extent1d", "geom.polar_box", "geom.tol", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2"]
est_lines = 1944
layer = 22
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = "swarm-surface.surface_cache_p1-a1"
claimed_at = "2026-10-13T06:57:51Z"
notes = "PARTIAL: difftest 872 cases (72 fixture + 800 generated), 709 pass bit-identical, 163 deferred (surface.surface_p7 107: SmSurface::EvaluateNormal in every polar box and at collinear boundary samples; surface.surface_p5 37: SmSurface::IsSingularity in every Bezier approximation; surface.surface_p1 19: GetFace); 20k-seed run clean, --perturb SENSITIVE; co-ports SmSurfaceCache's constructor field init and GetTree's existing-tree path (surface.surface_cache_p3); wired UNPORTED(surface.surface_cache_p1): SmTree::GetOwnerObject of surface trees (Tree::set_owner_surface), sm_GetOriginalSurface; retagged the bare-tree patch data stubs (GetFirstBezierPatch, SmSurfaceGridElement::Init, sm_CsArePerpenDisjoint) to surface.surface_cache_p3 and smsurf_GetSurfaceCache / ExpandHierarchy to surface.surface_p1 (CacheMakeOrValidate); geom.tree 7 and geom.grid 2 deferred now blocked by those; open self-stubs UNPORTED(surface.surface_cache_p1): SmPlane / SmSurfOfRevolution::CreateIsoParametricCurve (ported in surface.plane_p1 / surface.surf_of_revolution_p1, but the cache stores iso curves as BSplineCurve; wiring needs Curve storage; 8 surface.surface_cache_p3 cases defer at the SmPlane one; retagged by surface.surf_of_revolution_p3); 43 fns; largest: sm_ComputeBezierApproximation, SmSurfaceCache::MarkFaceContainment, SmSurfaceCache::BuildTreeTop, SmPatchBoundaryBoundingPlanes::ComputeBoundingPlanes; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(3), surface.surface_p1(2), surface.surface_cache_p3(1), surface.surface_p7(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "curve.curve_p9"
upstream = ["source/SMLib/src/SmCurve.cpp"]
rust_module = "curve::curve::p9"
depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.curve_p3", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.curve_p7", "curve.curve_p8", "geom.a_object", "geom.extent1d", "geom.extent3d", "geom.geom_utility_p1", "geom.geom_utility_p2", "geom.global_solver", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.vector3d"]
soft_depends_on = ["curve.line", "geom.tol", "geom.tree", "nurbs.b_spline_curve_p1"]
est_lines = 1783
layer = 23
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "8 fns; largest: SmCCGlobalSolver::LocalSolve, SmCurve::GlobalCurveSolve, sm_SolveMinSignedAngle, SmCurve::CalculateTightBoundingBox; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.plane_p1"
upstream = ["source/SMLib/inc/SmPlane.h", "source/SMLib/src/SmPlane.cpp"]
rust_module = "surface::plane::p1"
depends_on = ["curve.curve_p2", "curve.iso_curve", "curve.line", "geom.a_object", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p5", "curve.curve_p8", "nlib.srf_basic", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2"]
est_lines = 1934
layer = 23
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "partial: difftest 2705 cases (1205 fixture: 18 upstream-derived, 1179 adversarial, 8 extension; 1500 generated): 2538 passed, 167 deferred (intersect.surface_drop_lib_p3 125, surface.surface_p1 40: IsPlanar of a B-spline reaches SmSurface::GetFace through owner_zone_tolerance once surface.surface_p7 wired IsPlanar (PR #24), surface.surface_p8 2), max_rel_err 0, perturb 2538/2538 detected; private Evaluate1st/2ndDerivatives copies now call surface::surface::p7 (PR #24); CreateExtendedSurface re-dispatched to the plane overrides; surface cache plane paths are UNPORTED(surface.plane_p1) (iso curve needs Curve storage in the cache, CalculateBoundingBox not re-dispatched); 39 fns; largest: SmPlane::CoincidenceCheck, SmPlane::DropCurve, SmPlane::GlobalLineIntersect, SmPlane::DropPointFast; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(2), surface.surface_p7(2), intersect.surface_drop_lib_p3(1), surface.surface_p5(1), surface.surface_p6(1), surface.surface_p8(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surf_of_revolution_p1"
upstream = ["source/SMLib/inc/SmSurfOfRevolution.h", "source/SMLib/src/SmSurfOfRevolution.cpp"]
rust_module = "surface::surf_of_revolution::p1"
depends_on = ["curve.curve_p2", "curve.ellipse_p1", "curve.ellipse_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.curve_p7", "geom.geom_utility_p2", "nurbs.b_spline_curve_p3"]
est_lines = 1522
layer = 23
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = ""
claimed_at = ""
notes = "GREEN (promoted by surface.plane_p2, which ported the IntersectWithPlane body below the plane box; a bare plane's zone tolerance is SM_ZONE_TOL_3D): difftest 858 cases (258 fixture, incl. 51 IntersectWithPlane adversarial cases from the surface.plane_p2 review: small domains, a domain corner, tiny domain, partial sweep, swap/oob surfaces, flat generator, torus top tangent, SM_USE_DEFAULT and negative tolerances + 600 generated), 858 bit-identical (max_rel_err 0), 0 deferred; 20k-seed run clean; perturbation 858/858 detected. The plane tolerance goes through approx_tol3d as the shim's SmApproxTol3d does, and the FFI accepts any finite value. Co-ports CreateCanonical/MakeNurb (_p2) and MakeNurbWithSweepParams (_p3). The 4 UNPORTED(surface.surf_of_revolution_p1) stubs in line/ellipse/hyperbola/parabola MakeNurb stay: an owner ObjectRef cannot reach the surface (see findings.md). 31 fns; largest: SmSurfOfRevolution::IntersectWithPlane, sm_TestForIsoCircles, SmSurfOfRevolution::CreateIsoParametricCurve, SmSurfOfRevolution::EvaluateSTEP; cycle back-edges (call into later units; stub or co-port): surface.cone_p1(6), surface.sphere(3), surface.torus(3), surface.surface_p1(2), surface.plane_p1(1), surface.plane_p2(1), surface.surface_p5(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p9"
upstream = ["source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p9"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.global_solver", "geom.object", "geom.pseudo_box", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_cache_p1", "surface.surface_p2"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_cache", "curve.curve_p1", "curve.curve_p3", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.iso_curve", "geom.extent3d", "geom.solution_array", "geom.tree", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2"]
est_lines = 1252
layer = 23
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "3 fns; largest: SmCSIGlobalSolver::LocalSolve, SmSurface::FindTessellationSplits, SmSurface::CreateIsoBoundaries; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(4), surface.surface_p1(3), surface.surface_p7(2), surface.surface_p4(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; Follow-up (guard narrowing): 821 cases, 763 bit-identical, 0 failed, 58 deferred (intersect.curve_class_p4 50, surface.surface_p6 8); --perturb 763/763 detected; max_rel_err=0; FFI guard now only requires finite net/domain/chord/max side/line (CSI domains may be disjoint, touching or slivers; any scale; chord heights below 1e-3; max side above 100), keeping the [0,1] split/iso domain, the angle range, revolution-CSI rejection (one-node Rust harness tree does not model BuildTree) and the shim all-degenerate 0<max side<1 guard, plus max|net|/max side <= 1e5 (ULONG split-count conversion; Rust 1e6 split limit); 43 guard-narrowing fixtures (7 CSI crossings deferred on surface.surface_p6); max-side iso degeneracy now dispatches to the typed curve (SmEllipse/SmLine IsDegenerate); no absolute floors; CO-PORTED(surface.surface_p1): extend the existing CsiGlobalSolver with optional borrowed curve/cache/kernel context; preserve its constructor and implement its solves in p9; wire surface_to_evaluate, is_node_valid and is_point_valid; CSI disjoint fixture passes, crossing defers on surface.surface_p6; 16 explicit analytic-plane non-diagonal fixtures pass; latest main SurfOfRevolution delegates iso construction to its virtual implementation; 18 canonical-cylinder cases pass against C++ (16 splits, 2 iso boundaries)"
[[unit]]
id = "surface.trim_srf_cache"
upstream = ["source/SMLib/inc/SmTrimSrfCache.h", "source/SMLib/src/SmTrimSrfCache.cpp"]
rust_module = "surface::trim_srf_cache"
depends_on = ["curve.curve_cache", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_cache_p1"]
soft_depends_on = ["geom.tree", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "surface.surface_p2"]
est_lines = 966
layer = 23
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 621 cases (21 fixture + 600 generated), 526 bit-identical, 0 failed, 95 deferred: surface.surface_p1 36, surface.surface_p3 29, surface.surface_p6 28, topology.edgeuse_p1 2 (surface.surface_cache_p3 wired; ImplantEu prints every node of the tree, including the children subdivisions make; splitting a boundary leaf moves its edge uses through TrimSrfCache::implant_edgeuse, which needs SmEdgeuse::GetUVTrimCurve). Perturbation: 526/526 detected. Generated ImplantEdgeuse cases now include negative-area face extents (FFI accepts unordered bounds). Resumed interrupted WIP 152e005; constructor, type/state, PointTest bypass and ImplantEdgeuse verified. Vertexuse/poly-edge bodies await surface.surface_p1; face construction/classification remain explicit Unported; subdivision of a node holding edge uses defers on topology.edgeuse_p1 (poly edges on query.poly). See findings.md and reports/difftest/surface.trim_srf_cache.json. 11 fns; largest: SmTrimSrfCache::ImplantEdgeuse, SmTrimSrfCache::BuildTree, SmTrimSrfCache::ImplantVertexuse, SmTrimSrfCache::ImplantPolyEdge; cycle back-edges (call into later units; stub or co-port): intersect.point_class(7), query.poly(5), surface.surface_cache_p3(5), query.face_p2(2), topology.face_p2(2), topology.face_p4(2), topology.loopuse(2), topology.vertexuse(2), query.tess(1), surface.surface_p1(1), surface.surface_p3(1), topology.edgeuse_p1(1), topology.face_p3(1), topology.vertex(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.b_spline_volume_n_lib"
upstream = ["source/SMLib/src/SmBSplineVolumeNLib.cpp"]
rust_module = "surface::b_spline_volume_n_lib"
depends_on = ["curve.curve_p2", "geom.extent3d", "geom.object", "geom.pseudo_box", "surface.b_spline_volume", "surface.volume_p1"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p6", "curve.curve_p9", "geom.vector3d"]
est_lines = 310
layer = 24
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "3 fns; largest: SmBSplineVolume::CalculateContinuitiesSimple, SmBSplineVolume::IsCurveInParamDomainSimple, SmBSplineVolume::HasDiscontinuitiesSimple; only 0 of 310 lines survive RTA (reached via virtual dispatch to classes no in-scope entry point constructs); low priority / likely deferrable; 317 upstream test entry points reach this unit; PARTIAL: difftest 2420 cases (420 fixture: unit cube, cubic/quintic with interior multiplicities, degree 0, single distinct knot, unclamped, near-coincident knots, tiny 1e-9 and huge 1e7 domains, oriented + compounded volumes; all 9 SmVolumeParamType codes, representational and geometric continuities, HasDiscontinuitiesSimple with/without output, IsCurveInParamDomainSimple / IsCurveInParamDomain / IsCurveInInSpaceDomain on real SmLine, SmBSplineCurve, SmEllipse, SmHermiteCurve inside, outside, crossing, on a face and within SM_EFF_ZERO of it + 2000 generated), 1870 passed bit-identical (max_rel_err 0), 0 failed, 550 deferred: curve.curve_p9 550 (after merging surface.unbend_volume PR #20, whose SmVolume::EvaluatePoint co-port runs the 71 cases formerly deferred on surface.volume_p2: 58 now pass, 13 now reach curve.curve_p9; per-symbol counts before that: SmCurve::CalculateTightBoundingBox 434, SmCurve::IsOnPositiveSideOfPlanes 103); --perturb SENSITIVE. Without USE_VOLUMES the geometric continuity path always fails at EvaluateIsoParametricCurveSimple, so HasDiscontinuitiesSimple(geometric) reports none (findings.md, upstream-issues WR-48, WR-49, UB-73). Wired the surface.volume_p1 SmBSplineVolume stubs (Volume::has_discontinuities_simple gains bCalcGeometric, new Volume::calculate_continuities_simple, IsCurveIn*/IsLineInParamDomain take &Kernel); surface.volume_p1, surface.twist_volume, surface.b_spline_volume, curve.crv_in_volume, geom.transform difftests unchanged"
[[unit]]
id = "surface.bend_volume"
upstream = ["source/SMLib/inc/SmBendVolume.h", "source/SMLib/src/SmBendVolume.cpp"]
rust_module = "surface::bend_volume"
depends_on = ["geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "surface.volume_p1", "topology.database_io"]
soft_depends_on = ["curve.curve_p9", "geom.extent1d", "geom.pseudo_box"]
est_lines = 945
layer = 24
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 2347 cases (847 fixture + 1500 generated), 2273 pass bit-identical, 74 deferred (curve.curve_p9 74: IsCurveInParamDomainSimple -> SmCurve::IsOnPositiveSideOfPlanes), max_rel_err 0 (ReadFromDB base read wired by surface.volume_p2); 30k-seed run clean (30847 cases); --perturb SENSITIVE; wired into surface.volume_p1 dispatch (VolumeKind::Bend now carries BendVolume; no UNPORTED(surface.bend_volume) stubs remain); component constructor ported as BendVolume::create; 27 fns; largest: SmBendVolume::EvaluateBoundingBoxSimple, SmBendVolume::Evaluate, SmBendVolume::EvaluateSimple, SmBendVolume::ReadFromDB; cycle back-edges (call into later units; stub or co-port): surface.volume_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.cone_p1"
upstream = ["source/SMLib/inc/SmCone.h", "source/SMLib/inc/SmCylinder.h", "source/SMLib/src/SmCone.cpp", "source/SMLib/src/SmCylinder.cpp"]
rust_module = "surface::cone::p1"
depends_on = ["curve.curve_p2", "curve.line", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surf_of_revolution_p1", "surface.surface_p2", "topology.database_io"]
soft_depends_on = ["curve.curve_p6", "curve.ellipse_p1", "curve.ellipse_p2", "geom.geom_utility_p1", "nurbs.b_spline_curve_p2"]
est_lines = 1835
layer = 24
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: after surface.surf_of_revolution_p3 merged (PR #29): 20694 cases, 20238 pass, 456 deferred (surface.surf_of_revolution_p2 456); Transform (now takes &Kernel) and ReadFromDB wired; Surface::read_from_db cannot hold a cone yet (DISPATCH GAP, no SurfaceKind variant). Before: PARTIAL: difftest 20694 cases (252 fixture: TestSmConeSTEPCrossDerivative, TestSmGeneral cylinder/cone, smFilletTest/smTopoTest cylinders incl. every swap/inside-out, my_test_analytic_surfaces cones and cylinder, edge cases; + 3167 review adversarial fixtures (review.json: cone/cylinder equality across classes, on-surface inversions with/without guesses or oob, iso curves with reversed and zero trim domains, derivative orders 0-8, identity and near-identity transforms, extra coincidence configurations); + 3875 second-review adversarial fixtures (review2.json: semi-angles -30/89/89.9/90/120 deg, bounded cones with a zero radius incl. inside-out and swap, make_nurb_gen generators, near-cylinders, negative and 1e-6 heights, far/tiny/rotated/skewed/non-unit placements, seam/apex/past-apex inversions, iso circles 1e-7 off the surface, derivative orders to 4, reversed/partial/ellipse coincidence pairs); + 4100 third-review adversarial fixtures (review3.json: every derivative order pair incl. out of range, NURB eval at knot boundaries with all side/upper/non-zero flags, to_nurbs at u=720/-725/1e6, iso with reversed/zero-size/over-range trims, inversion and iso_circle with tol 0..10*scale and seam guesses, adjust at radius-boundary heights, near-identity and negative-scale transforms, cross-mode equality, partial/reversed circle coincidence at 1e-5..1e5 radii, near-coincident lines; std/rotated/far placements with and without oob); + 7800 fourth-review adversarial fixtures (review4.json: tiny/negative semi-angles with every swap/inside-out, zero/over-long/negative sweeps, zero heights, apex-crossing cones, negative and SM_USE_DEFAULT coincidence tolerances, sub-domain and closed-vs-arc circle and line coincidences, iso circles on 5e-11 deg cones); + 1500 generated incl. degenerate placements/heights/semi-angles/sweeps, 1e-6..1e5 scales), 20173 pass bit-identical (max_rel_err 0), 0 failed, 521 deferred (surface.surf_of_revolution_p2 456: AdjustSTEPUVDomain within the apex; surface.surf_of_revolution_p3 65: non-identity Transform); perturbation 20173/20173 detected; 20k-seed run clean. SmSurfOfRevolution MakeNurb/RebuildPolarConverter take the virtual iso-curve hook (cone override). sm_TotalCoincidenceChecker compared through a verbatim shim copy. SmSurface::ReadFromDB now dispatches cone/cylinder to Cone::read_from_db (then defers on surface.surf_of_revolution_p3). State compares GetTypeString (SmCone_TYPE/SmCylinder_TYPE) and GetClassString (SmCone/SmCylinder). Upstream issues UB-88, UB-87, HANG-11, WR-63, WR-64. 50 fns; largest: SmCone::CreateIsoParametricCurve, SmCone::CreateIsoCircleFromPoint, sm_TotalCoincidenceChecker, SmCone::ConvertUVFromSTEPToNURBS; cycle back-edges (call into later units; stub or co-port): surface.surf_of_revolution_p2(4), surface.surf_of_revolution_p3(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surf_of_extrusion_p1"
upstream = ["source/SMLib/inc/SmSurfOfExtrusion.h", "source/SMLib/src/SmSurfOfExtrusion.cpp"]
rust_module = "surface::surf_of_extrusion::p1"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.curve_p8", "curve.curve_p9", "curve.line", "nlib.srf_basic", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p3"]
est_lines = 1865
layer = 24
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 2055 cases (1255 fixture, incl. 1082 second-review cases in review2_extra_cases.json: TestSmCreateExtrude, the my_ssi_analytic_demo cylinders, seams, orientations, tolerance-limit tilts, tiny/huge scales, SmHyperbola/SmParabola generators; 800 generated over B-spline, SmLine, SmCircle, SmEllipse, SmHyperbola, SmParabola generators), 1958 pass bit-identical (max_rel_err 0), 0 failed, 97 deferred: 56 in STEPInversion of a non-perpendicular generator (SmBSplineSurface::STEPInversion solves; since surface.surface_p1 merged (PR #43) they reach surface.surface_p4 30: SmSurface::GlobalPointSolve, surface.surface_p5 26: SmSurface::LocalPointSolve), curve.curve_p9 41 (sm_IntersectGenerators: SmCurve::GlobalCurveSolve); --perturb SENSITIVE. UNPORTED(surface.surf_of_extrusion_p1) owner stubs in SmLine/SmEllipse/SmHyperbola/SmParabola::MakeNurb not wired (curves hold only an ObjectRef owner; see plan/findings.md); the SmLine, SmHyperbola and SmParabola owner steps are applied by SurfOfExtrusion itself. Review fixes: hyperbola/parabola owner step, InvalidInput->1007 status mapping, conversions/DropPointFast return SM_ERR without NURB; second review: STEPInversion owner step for hyperbola/parabola GlobalPointSolveSTEP (rel. err up to 9e-3 before), FFI circle/ellipse/line size guards relaxed to > 0; 20000 seeds 0 failed, max_rel_err 1.7e-16. 37 fns; largest: sm_IntersectGenerators, SmSurfOfExtrusion::STEPInversion, SmSurfOfExtrusion::DropPointFast, SmSurfOfExtrusion::MakeNurb; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surf_of_revolution_p3"
upstream = ["source/SMLib/src/SmSurfOfRevolution.cpp"]
rust_module = "surface::surf_of_revolution::p3"
depends_on = ["curve.curve_p2", "curve.curve_p5", "curve.iso_curve", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.global_solver", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surf_of_revolution_p1", "surface.surface_p2", "topology.database_io"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.curve_p6", "curve.curve_p8", "curve.ellipse_p1", "curve.ellipse_p2", "geom.extent3d", "geom.geom_utility_p1", "nlib.srf_basic", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2"]
est_lines = 1620
layer = 24
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: after merging main (surface.torus, surface.cone_p1, surface.surface_p1): 26705 cases, 26661 bit-identical, 0 failed, 44 deferred (surface.sphere 26, surface.cone_p1 18: the Rust side cannot build the SmSphere / SmCone operand); wired surface.torus and surface.cone_p1 Transform/ReadFromDB back-edges (transform_using with the derived iso maker); ConvertDomainFromNURBSToSTEP body shared with surface.surface_p1. Before the merge: difftest 26705 cases (55 fixture + 3695 review-adversarial fixture + 1092 review-2 scale fixture + 4654 review-2 adversarial fixture + 240 review-3 update fixture + 5829 review-3 adversarial fixture + 10240 review-3b adversarial fixture + 900 generated), 26118 bit-identical (max_rel_err 0), 0 failed, 587 deferred: surface.sphere 26 and surface.cone_p1 18 (IntersectWithSphere / IntersectWithCone cases: the Rust side cannot build the SmSphere / SmCone operand), surface.surface_p1 543 (IntersectWithSurfOfRevolution without approximation tolerance: the bounding box zone tolerance needs SmSurface::GetFace; the paths without exact polar conversion, SmSurface::LocalPointSolve (surface.surface_p5) and SmSTEPSurface (surface.surface_p1), are ported but not reached by these inputs). Perturbation: 26118/26118 detected. Review fixes: FFI accepts zero-width drop/intersect/update domains and zero tolerances (Reparameterize keeps positive extents); UNPORTED(surface.surf_of_revolution_p1) and UNPORTED(surface.plane_p1) CreateIsoParametricCurve stubs in surface.surface_cache_p1 retagged to surface.surface_cache_p1 (iso curves stored as BSplineCurve). Review fixes 2: FFI accepts any finite Transform / rebuild scale (zero, tiny, negative; the SM_EFF_ZERO branch of Transform is now compared); intersection bounding box error carries the intersection op path; SurfaceKind::SurfOfRevolution added to the surface.surface_p7 dispatchers (EvaluateNormal / IsClosed base bodies, IsPlanar through SmBSplineSurface::CalculateBoundingBox). After merging main: SurfaceKind::SurfOfRevolution added to intersect.surface_silhouette (EvaluateGeometric / EvaluateNormalSection: no override, stubbed to surface.surface_p3 as for B-splines) and surface.surface_cache_p3 BuildTreeBase (its NURB, SmSurfOfRevolution::MakeNurb on a copy when missing). Review fixes 3: runner maps SolidError::InvalidInput to 1007 (SM_ERR_INVALID_INPUT; SmBSplineCurve::Trim via AdjustSTEPInterval in UpdateAnalyticalDomain with a B-spline generator and a zero-width U domain); after merging main, SurfaceKind::SurfOfRevolution added to the intersect.surface_intersector_p2 IsSingularity dispatcher (base body, stubbed to surface.surface_p5). Also covers the inherited SmBSplineSurface::Reverse / SwapUV of a surface of revolution (through SmSurface dispatch). Wired the UNPORTED(surface.surf_of_revolution_p3) SmSurfOfRevolution::ReadFromDB stub in SmSurface::ReadFromDB: SurfaceKind::SurfOfRevolution joins the SmSurface dispatch (Surface::reverse / swap_uv / reparameterize / transform / drop_point_fast / convert_uv_* now take the kernel; STEPInversion, AdjustSTEPUVDomain, TrimWithDomain stubbed to surface.surf_of_revolution_p2). Extended curve.ellipse_p1 (PolarConversion::read_from_db_with_curve: the bHasCurve branch of SmPolarConversion::ReadFromDB) and geom.solution_array (SolutionObject::natural_uv_domain for surface handles). Co-ports SmSurface::ConvertDomainFromNURBSToSTEP (surface.surface_p1). MakeNurbWithSweepParams lives in surface::surf_of_revolution::p1 (co-ported there by PR #15). 12 fns; largest: SmSurfOfRevolution::IntersectWithSurfOfRevolution, SmSurfOfRevolution::DropPointFast, SmSurfOfRevolution::RebuildSTEPFromNURBParameters, SmSurfOfRevolution::ConvertUVFromSTEPToNURBS; cycle back-edges (call into later units; stub or co-port): surface.surface_p5(2), surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_cache_p2"
upstream = ["source/SMLib/src/SmSurfaceCache.cpp"]
rust_module = "surface::surface_cache::p2"
depends_on = ["geom.extent2d", "geom.object", "geom.vector3d", "nurbs.b_spline_surface_p1", "nurbs.nurbs_srf", "surface.surface_cache_p1", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p5", "curve.iso_curve", "geom.extent1d", "geom.extent3d", "geom.pseudo_box", "geom.tol", "geom.tree", "geom.vector2d", "nlib.knots", "nlib.srf_basic", "nlib.srf_nurb", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p2", "surface.surface_p9"]
est_lines = 1245
layer = 24
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = "swarm-surface.surface_cache_p2"
claimed_at = "2026-10-13T22:42:47Z"
notes = "Review validation: 905 cases, 808 bit-identical, 0 failed, 97 deferred (intersect.curve_class_p4 1, surface.surface_cache_p1 53, surface.surface_p5 43); --perturb detected 751/751; max_rel_err=0. surface_p9 FindTessellationSplits wired with the caller Kernel; remaining deferrals are recorded in the current report. Historical notes: PARTIAL: difftest 905 cases (105 fixture + 800 generated), 749 pass bit-identical, 156 deferred (after surface.surface_p7 wired SmSurface::EvaluateNormal, PR #24: 28 more compared; counts below are from before that: surface.plane_p1 53: SmPlane::CreateIsoParametricCurve in bounding planes and size tolerances; surface.surface_p1 47: SmSurface::GetFace in the B-spline bounding box of SM_AD_AUX_DATA nodes; surface.surface_p5 43: SmSurface::IsSingularity 35 in the Bezier approximation of B-splines, SmSurface::CreateIsoParametricCurve 8 of curve-bounded surfaces; surface.surface_p7 28: SmSurface::EvaluateNormal in bounding planes; surface.surface_p9 13: SmSurface::FindTessellationSplits in every SubdivideByBlock with a surface); --perturb SENSITIVE 721/721; wired the SmPlane override of IsSingularity into the surface cache Bezier approximation (p1 helper); no co-ports; 7 fns; largest: SmSurfaceCache::TestAgainstTolerances, SmSurfaceCache::SubdivideByBlock, sm_CreateApproximateBezierPatchBlock, sm_CreateBezierPatchBlock; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.torus"
upstream = ["source/SMLib/inc/SmTorus.h", "source/SMLib/src/SmTorus.cpp"]
rust_module = "surface::torus"
depends_on = ["curve.ellipse_p1", "curve.ellipse_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surf_of_revolution_p1", "surface.surface_p2", "topology.database_io"]
soft_depends_on = ["curve.curve_p2", "geom.geom_utility_p1", "nurbs.b_spline_curve_p2"]
est_lines = 1180
layer = 24
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "green"
claimed_by = ""
claimed_at = ""
notes = "GREEN (merge of PR #29): 563 cases, 563 pass bit-identical, 0 deferred (SmSurfOfRevolution::Transform / ::ReadFromDB wired to surface.surf_of_revolution_p3; Surface::read_from_db still cannot hold a torus: DISPATCH GAP, no SurfaceKind variant). Was PARTIAL (PR #23): difftest 563 cases (63 fixture: TestSmGeneral torus STEP derivatives, smSurfaceTest analytic torus, smTopoTest torus, SmApiCreateTorus radii, swap/inside-out/partial-domain/explicit-generator edges; + 500 generated) over CreateCanonical, EvaluateSTEP(Point), ConvertUVFromSTEPToNURBS/NURBSToSTEP, CreateIsoParametricCurve, CreateOffsetSurface (+rebuild), RebuildSTEPFromNURBParameters, Transform, operator==, Copy; 545 pass bit-identical, 18 deferred (surface.surf_of_revolution_p3: SmSurfOfRevolution::Transform). ReadFromDB is ported up to SmSurfOfRevolution::ReadFromDB (unported; unit test only). SurfOfRevolution::make_nurb_with_sweep_params_using / rebuild_polar_converter take the iso-curve maker so the torus override is used (upstream virtual CreateIsoParametricCurve). 21 fns; cycle back-edges: surface.surf_of_revolution_p3(2), surface.surf_of_revolution_p2(1)"
[[unit]]
id = "surface.unbend_volume"
upstream = ["source/SMLib/inc/SmUnbendVolume.h", "source/SMLib/src/SmUnbendVolume.cpp"]
rust_module = "surface::unbend_volume"
depends_on = ["geom.extent1d", "geom.extent3d", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector3d", "surface.volume_p1", "topology.database_io"]
soft_depends_on = ["curve.crv_in_volume", "curve.curve_p4", "curve.curve_p6", "curve.line", "geom.context", "geom.extent2d", "geom.geom_utility_p1", "geom.vector2d", "surface.plane_p1"]
est_lines = 920
layer = 24
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 1874 cases (374 fixture + 1500 generated), 1808 pass bit-identical, 66 deferred (surface.surface_p8 66: IsCurveInParamDomainSimple -> SmCurve::HasPlaneCrossings -> SmSurface::GlobalCurveIntersect; ReadFromDB base read wired by surface.volume_p2), max_rel_err 0; 30k-seed run clean (30374 cases); --perturb SENSITIVE; co-ports of SmVolume::EvaluatePoint and SmVolume::IsPointInParamDomain replaced by surface.volume_p2's (PR #26); wired: surface.volume_p1 (deferred 39 -> 2), curve.crv_in_volume (its SmVolume::EvaluatePoint stub now calls the co-port: surface.volume_p2 deferred 33 -> 1); component constructor ported as UnbendVolume::create; 29 fns; largest: SmUnbendVolume::Evaluate, SmUnbendVolume::EvaluateSimple, SmUnbendVolume::EvaluateBoundingBoxSimple, SmUnbendVolume::ReadFromDB; cycle back-edges (call into later units; stub or co-port): surface.volume_p2(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.cone_p2"
upstream = ["source/SMLib/src/SmCone.cpp"]
rust_module = "surface::cone::p2"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.object", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.cone_p1", "surface.surf_of_revolution_p1", "surface.surf_of_revolution_p3", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p5", "curve.ellipse_p1", "curve.ellipse_p2", "curve.line", "geom.geom_utility_p2", "geom.vector2d", "nurbs.b_spline_curve_p2"]
est_lines = 1656
layer = 25
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmCone::CreateOffsetSurface, SmCone::IsNurbSurfaceCone, sm_GetEllipseTrimIntervals, SmCone::RebuildSTEPFromNURBParameters; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surf_of_revolution_p2"
upstream = ["source/SMLib/src/SmSurfOfRevolution.cpp"]
rust_module = "surface::surf_of_revolution::p2"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surf_of_revolution_p1", "surface.surf_of_revolution_p3", "surface.surface_p2"]
soft_depends_on = ["curve.composite_curve_p1", "curve.composite_curve_p2", "curve.curve_p2", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.curve_p8", "curve.line", "geom.extent3d", "geom.geom_utility_p1", "geom.tol", "nurbs.b_spline_curve_n_lib"]
est_lines = 1369
layer = 25
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "CO-PORTED in surface.cone_p1 (PR #31): SmSurfOfRevolution::STEPInversion (planar-generator branch; the non-planar branch is a stub) -> surface::cone::p1::Cone::rev_step_inversion (private). CO-PORTED in surface.surf_of_revolution_p1 (PR #15): SmSurfOfRevolution::CreateCanonical and ::MakeNurb live in surface::surf_of_revolution::p1 (SurfOfRevolution::create_canonical / make_nurb), covered by the p1 difftest runner. Do not re-port; move or extend them there. 8 fns; largest: SmSurfOfRevolution::CreateOffsetSurface, SmSurfOfRevolution::IsNurbSurfaceSurfOfRevolution, SmSurfOfRevolution::TrimWithDomain, SmSurfOfRevolution::STEPInversion; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_cache_p3"
upstream = ["source/SMLib/src/SmSurfaceCache.cpp"]
rust_module = "surface::surface_cache::p3"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.object", "geom.tree", "nurbs.b_spline_surface_p1", "nurbs.nurbs_srf", "surface.surface_cache_p1", "surface.surface_cache_p2", "surface.surface_p2"]
soft_depends_on = ["geom.extent3d", "geom.pseudo_box", "geom.vector2d", "nurbs.b_spline_surface_p2", "surface.trim_srf_cache"]
est_lines = 1703
layer = 25
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "Review validation: 600 cases, 450 bit-identical, 0 failed, 150 deferred (query.tess 38, surface.surface_cache_p1 8, surface.surface_p3 15, surface.surface_p5 32, surface.surface_p6 57); --perturb detected 445/445; max_rel_err=0. surface_p9 FindTessellationSplits wired with the caller Kernel; remaining deferrals are recorded in the current report. Historical notes: PARTIAL: difftest 600 cases (600 generated), 445 pass bit-identical, 0 failed, 155 deferred (surface.surface_p6 57: SmSurface::CalculateContinuities in tree builds; surface.surface_p1 39: GetFace / SnapToKnots; surface.surface_p5 32: SmSurface::IsSingularity in Bezier approximations; surface.surface_p3 15: GetSingularities in pole search; surface.plane_p1 11; surface.surface_p9 1); --perturb 445/445 detected; every Build and Get case defers on CalculateContinuities, so the first-generation node loop of BuildTreeBase, the BuildTree cleanup and GetTree are not yet compared against C++ (only SubdivideNode, SubdivideToTolerances and FindUVNodes on hand-built start nodes are); start nodes over planes are generated too (an SmPlane is an SmBSplineSurface); wired UNPORTED(surface.surface_cache_p3) in surface.trim_srf_cache (BuildTree, FindUVNodes, SubdivideNode) and surface.surface_cache_p1 (GetTree); not wired: the bare-tree patch data reads in geom.tree (GetFirstBezierPatch), geom.grid (SmSurfaceGridElement::Init) and surface.surface_p2 (GetPolarBox) need a patch hand-over from the surface cache to the tree (DISPATCH GAP comments, Unported tagged with the owning units surface.surface_cache_p1 / nurbs.b_spline_surface_p1; see findings.md); after merging main: wired UNPORTED(surface.surface_cache_p3) GetTree in intersect.surface_tracer (FindInteriorCurves now takes &mut SurfaceCache and calls SurfaceCache::get_tree; its counts unchanged, 398 pass / 29 deferred), and re-tagged the three surface.surface_p7 sites to surface.surface_p1 (the SmSP/SmSSGlobalSolver constructors must hand the solvers the caches holding the node patches; GetTree via surface_tree waits on SmSurface::CacheMakeOrValidate for a cache store; surface_p7 unchanged, 3039 pass / 621 deferred); trim_srf_cache test updated: ImplantVertexuse away from poles now completes (FindUVNodes + Evaluate1stDerivatives both ported); 7 fns; largest: SmSurfaceCache::SubdivideNode, SmSurfaceCache::BuildTreeBase, SmSurfaceCache::SubdivideToTolerances, SmSurfaceCache::BuildTree; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(2), query.tess(1), surface.surface_p6(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.volume_p2"
upstream = ["source/SMLib/src/SmVolume.cpp"]
rust_module = "surface::volume::p2"
depends_on = ["geom.extent1d", "geom.extent3d", "geom.local_solve_nd", "geom.pseudo_box", "geom.solution_array", "geom.vector3d", "surface.volume_p1", "topology.database_io"]
soft_depends_on = ["geom.transform", "surface.b_spline_volume", "surface.bend_volume", "surface.twist_volume", "surface.unbend_volume"]
est_lines = 1490
layer = 25
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "difftest partial: 11220 cases (9220 fixtures incl. 5014 bend and 2290 unbend cases + 2000 generated), 10922 pass, 298 deferred (curve.curve_p9 162: bend IsCurveInParamDomainSimple -> SmCurve::IsOnPositiveSideOfPlanes; surface.surface_p8 136: unbend IsCurveInParamDomainSimple -> SmCurve::HasPlaneCrossings), max_rel_err 0; 100k-seed run clean; --perturb SENSITIVE; after surface.bend_volume (PR #22): bend overrides (EvaluateBoundingBoxSimple, GlobalPointSolveSimple, LocalPointSolveSimple, ReadFromDB) dispatched, SmBendVolume::ReadFromDB reads the base data (removes the bend unit's deferred read_db case), shim builds default and component bends (kinds 6, 7); the bend and unbend ReadDb FFI guards reuse this unit's strict text grammar; after surface.unbend_volume (PR #20): its CO-PORTED SmVolume::EvaluatePoint / IsPointInParamDomain replaced by this unit's, unbend overrides and SmUnbendVolume::ReadFromDB wired (shim builds component unbends); wired UNPORTED(surface.volume_p2) in geom.transform, surface.twist_volume, curve.crv_in_volume, geom.tol, intersect.point_class (volume branch; not exercised) (geom.transform and surface.twist_volume promoted to green). 18 fns; largest: SmVolume::EvaluateBoundingBoxSimple, SmVolume::EvaluateBoundingBox, SmVolume::EvaluatePseudoBoxSimple, SmVolume::InvMapPoint; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p7"
upstream = ["source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p7"
depends_on = ["geom.a_object", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.local_solve_nd", "geom.object", "geom.polar_box", "geom.pseudo_box", "geom.solution_array", "geom.tree", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_p1", "surface.surface_cache_p1", "surface.surface_p2"]
soft_depends_on = ["curve.curve_cache", "curve.curve_p2", "geom.axis2_placement", "geom.geom_utility_p2", "geom.local_solve1d", "geom.tol", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "surface.surface_cache_p3"]
est_lines = 2406
layer = 26
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 3660 cases (660 fixture: EvaluateNormal at poles/folds/pinched corners, IsClosed on a rational cylinder and upstream Surface.sms, sm_LoadGuesses with the my_test_surface_closest_point points, GoodDrop/CheckSeam branches, a separated-surface GlobalSurfaceSolve, zero/NaN/tiny projection vectors; 3000 generated over B-splines (incl. 1e-4/1e4 scales), planes and curve-bounded surfaces), 3039 pass bit-identical, 621 deferred (all surface.surface_p1: surface cache for the global solves/projection, SmCSNormalizeENFO, the FindDegenParamForDirection EFO, IsFlatCorner, EvaluateSTEP, GetFace in the B-spline bbox); --perturb SENSITIVE 3039/3039. CO-PORTED from surface.surface_p1: SmSurface::Evaluate1stDerivatives, Evaluate2ndDerivatives, EvaluateDirectionalDerivs -> surface::surface::p7. Back-edges wired (12 UNPORTED(surface.surface_p7) sites, then intersect.surface_tracer's and intersect.point_class's EvaluateNormal after they merged + a mislabelled UNPORTED(surface.surface_p5) IsClosed in b_spline_surface::p1 + the co-ported wrappers' stubs); re-run all pass: crv_on_surf +185, tangent_field +132, surface_cache_p1 +107, surface_cache_p2 +28, curve_bounded_surface +25, intersect.surface_tracer +22, b_spline_surface_p1 +15, intersect.surface_intersector_p1 +10 newly compared cases, none promoted. (CO-PORTED in intersect.surface_intersector_p1 (PR #33): SmSurface::IsClosed (default tolerance, no continuity; SmPlane override) -> private helper surface_is_closed in intersect::surface_intersector::p1; replace it with the real Surface::is_closed; replaced by Surface::is_closed in PR #24, which also points its Evaluate1stDerivatives/EvaluateDirectionalDerivs/EvaluateNormal at surface::surface::p7.) SurfaceEvaluate gained evaluate_normal (default = SmSurface body). 23 fns; largest: SmSurface::EvaluateNormal, SmSurface::FindDegenParamForDirection, SmSurface::LocalCurveSolve, SmSurface::IsClosed; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(26), intersect.adv_surface_intersector(1), intersect.surface_intersector_p5(1), topology.face_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_tracer"
upstream = ["source/SMLib/inc/SmSurfaceTracer.h", "source/SMLib/src/SmSurfaceTracer.cpp"]
rust_module = "intersect::surface_tracer"
depends_on = ["curve.hermite_curve", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_cache_p1"]
soft_depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.curve_p3", "curve.curve_p4", "curve.curve_p6", "geom.a_object", "geom.geom_utility_p1", "geom.object", "geom.tree", "nurbs.b_spline_curve_p2", "surface.surface_cache_p3", "surface.surface_p2", "surface.surface_p7"]
est_lines = 1900
layer = 27
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 427 cases (27 fixture: closed loops, open arcs, sub-domain, tangent plane, boundary iso solution, saddle singularity, tiny/huge scales, every FlushCurve branch, start point dedup and TestPoint removal + 400 generated over B-spline (incl. rational) and SmPlane surfaces), 398 pass bit-identical (max_rel_err 0), 29 deferred (surface.surface_p1 29: smsurf_GetSurfaceCache before DoTrace; the 23 surface.surface_p7 cases, SmSurface::EvaluateNormal in FlushCurve with a followed curve on B-spline surfaces, compare since PR #24 wired it, 22 pass and 1 moved to the cache); 5000-seed run clean, --perturb SENSITIVE; the shim's SectionTracer subclass (plane-section hooks, mirrored in the runner) drives the base class; DoTrace/FindBoundaryStartPoints/FindInteriorCurves take the surface cache as an argument until smsurf_GetSurfaceCache can hand one out; no UNPORTED(intersect.surface_tracer) stubs existed; 23 fns; largest: SmSurfaceTracer::TraceCurve, SmSurfaceTracer::FlushCurve, SmSurfaceTracer::FindInteriorCurves, SmSurfaceTracer::FindBoundaryStartPoints; cycle back-edges (call into later units; stub or co-port): intersect.surface_drop_curve(1), intersect.surface_drop_lib_p3(1), intersect.surface_silhouette(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.plane_p2"
upstream = ["source/SMLib/src/SmPlane.cpp"]
rust_module = "surface::plane::p2"
depends_on = ["curve.curve_p2", "curve.line", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.matrix", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "surface.plane_p1", "surface.surface_p2", "surface.surface_p7", "topology.database_io"]
soft_depends_on = ["curve.curve_p8", "curve.ellipse_p1", "geom.geom_utility_p2", "nurbs.b_spline_curve_p1", "surface.surf_of_revolution_p1"]
est_lines = 1627
layer = 27
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 2218 cases (218 fixture: 25 derived from SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon (rectangle/hexagon edges and circumcircle trimmed to the rectangle plane, the 1e10 far rectangle), 102 edge cases (plane/plane: infinite, bounded, touching, disjoint, parallel, coincident with/without NURB, near-parallel, huge/tiny, sub-domains; trim of segments/arcs/B-splines/rational arcs incl. along-edge and tangent cases; MakeNewPlaneEllipse zero radii/tangent/corner/opposite-normal/partial arcs; Transform identity/rotate/iso/aniso/zero scale; TrimWithDomain; IsNurbSurfacePlane flat/twisted/skewed/rational/cylinder; ReadFromDB ASCII+binary v30/v33/truncated/bad rat), 91 review adversarial cases (plane/plane at 1e-8..1e-6 rad either side of the 1e-16 cross-product threshold, uv-scaled, parallel with one NURB, coincident with flipped Y; zero, huge, negative and SM_USE_DEFAULT tolerances, including negative/USE_DEFAULT through IntersectWithPlane and GlobalSurfaceIntersect; degenerate domains; IsNurbSurfacePlane C0 kinks/folds/degenerate edges/tiny+huge scale/reversed normal; Transform negative-iso/near-identity/nearly-iso scales; trims of dim-2 B-splines, segments along an edge or through a corner, zero/negative tol; ellipses with negative or >360 intervals, non-unit or non-perpendicular axes, zero/negative tol) + 2000 generated over 1e-4/1/1e5 scales), 2209 pass bit-identical (max_rel_err 0), 9 deferred (intersect.surface_intersector_p5 9: SmSurfaceIntersector::DoIntersection in the general SmSurface::GlobalSurfaceIntersect after coincident planes or for a B-spline other; the SmAdvSurfaceIntersector is built since intersect.adv_surface_intersector merged); 60k-seed run clean; perturbation 2209/2209. The runner converts the tolerance with approx_tol3d as the shim does (SmApproxTol3d: |tol|, SM_USE_DEFAULT -> zone tol / 2; see findings.md). Builds on PR #24 (surface.surface_p7: SmSurface::EvaluateNormal for IsNurbSurfacePlane). Wired UNPORTED(surface.plane_p2) in surface.surface_p2 (Transform/TrimWithDomain/ReadFromDB/IntersectWithPlane/GlobalSurfaceIntersect plane dispatch), nurbs.b_spline_surface_p2 (CopyAndAddAnalytics returns the recognised plane; the cone recogniser is UNPORTED(surface.cone_p2)) and surface.surf_of_revolution_p1 (ported the IntersectWithPlane body below the plane box: 31 deferred -> 0, GREEN). A bare Plane has no owner: its CalculateBoundingBox zone tolerance is SM_ZONE_TOL_3D (a plane with a face through Surface::global_surface_intersect returns Unported on SmFace::GetTolerance, topology.face_p2: GetFace is Surface::face since surface.surface_p1). The SurfOfRevolution special case of SmPlane::GlobalSurfaceIntersect was added when merging main. 10 fns; largest: SmPlane::MakeNewPlaneEllipse, SmPlane::IntersectWithPlane, SmPlane::TrimCurveToPlaneDomain, SmPlane::IsNurbSurfacePlane; cycle back-edges (call into later units; stub or co-port): surface.cone_p3(1), surface.sphere(1), surface.surf_of_extrusion_p2(1), surface.surface_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p4"
upstream = ["source/SMLib/inc/SmSurface.h", "source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p4"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.local_solve_nd", "geom.matrix", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p2", "surface.surface_p7"]
soft_depends_on = ["curve.crv_on_surf", "curve.line", "surface.plane_p1", "surface.surface_cache_p1"]
est_lines = 2270
layer = 27
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "12 fns; largest: sm_ClassifyCurveSurfaceXSectPoint, SmSSNormalizeENFO::Evaluate, SmCSNormalizeENFO::Evaluate, SmSSINormalizeENFO::Evaluate; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(10), surface.surface_p3(3), intersect.point_class(2), query.face_p2(1), surface.surface_point_solve_p3(1), topology.edge(1), topology.face_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.sphere"
upstream = ["source/SMLib/inc/SmSphere.h", "source/SMLib/src/SmSphere.cpp"]
rust_module = "surface::sphere"
depends_on = ["curve.curve_p2", "curve.ellipse_p1", "curve.ellipse_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.geom_utility_p1", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.cone_p1", "surface.surf_of_revolution_p1", "surface.surf_of_revolution_p2", "surface.surf_of_revolution_p3", "surface.surface_p2", "topology.database_io"]
soft_depends_on = ["curve.curve_p4", "geom.geom_utility_p2", "nurbs.b_spline_curve_p2", "surface.plane_p1", "surface.plane_p2"]
est_lines = 2861
layer = 28
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "34 fns; largest: SmSphere::CreateTrimmedCircleSegments, SmSphere::IntersectWithSphere, SmSphere::IsNurbSurfaceSphere, SmSphere::IntersectWithCone; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surf_of_extrusion_p2"
upstream = ["source/SMLib/src/SmSurfOfExtrusion.cpp"]
rust_module = "surface::surf_of_extrusion::p2"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.cone_p1", "surface.plane_p1", "surface.surf_of_extrusion_p1", "surface.surface_p2", "topology.database_io"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p6", "curve.curve_p7", "nurbs.b_spline_curve_p2", "surface.plane_p2", "surface.surf_of_revolution_p1"]
est_lines = 1420
layer = 28
tests = ["prog_test:my_test_surface_cover_domains", "prog_test:my_test_tsurf_creation", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus", "SM_API_test:TestSmCreatePlane", "SM_API_test:TestSmCreateSwungPrimitive"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "7 fns; largest: SmSurfOfExtrusion::IntersectWithPlane, SmSurfOfExtrusion::IsNurbSurfaceSurfOfExtrusion, SmSurfOfExtrusion::IntersectWithCylinder, SmSurfOfExtrusion::IntersectWithSurfOfExtrusion; cycle back-edges (call into later units; stub or co-port): intersect.curve_class_p1(3), intersect.curve_class_p4(1), intersect.point_class(1); unit-SCC #22 (220 units); 216 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p5"
upstream = ["source/SMLib/inc/SmSurface.h", "source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p5"
depends_on = ["curve.curve_p2", "curve.iso_curve", "geom.extent1d", "geom.extent2d", "geom.global_solver", "geom.local_solve_nd", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p2", "surface.surface_p4", "surface.surface_p7"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p3", "curve.curve_p4", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2"]
est_lines = 2321
layer = 28
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "16 fns; largest: sm_FilterSolution, SmSurface::LocalPointSolve_0, SmSurface::DropPoint, sm_SpLocalSolve; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(10), surface.surface_p3(5), topology.face_p2(2), surface.surface_point_solve_p3(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.cone_p3"
upstream = ["source/SMLib/src/SmCone.cpp"]
rust_module = "surface::cone::p3"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.geom_utility_p1", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p1", "surface.cone_p1", "surface.cone_p2", "surface.surf_of_revolution_p1", "surface.surf_of_revolution_p3", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p4", "curve.ellipse_p1", "curve.ellipse_p2", "curve.line", "geom.geom_utility_p2", "geom.vector2d", "nurbs.b_spline_curve_p2", "surface.plane_p1", "surface.plane_p2", "surface.sphere"]
est_lines = 1939
layer = 29
tests = ["prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section", "prog_test:my_test_section", "prog_test:my_test_edge_geometry_repairs", "pt_TestFiles/shovel.srf"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmCone::IntersectWithPlane, SmCone::IntersectWithCone, sm_AddEllipseIntervalsTrimmedToTwoCones, SmCone::GlobalSurfaceIntersect; cycle back-edges (call into later units; stub or co-port): surface.surf_of_extrusion_p2(1), surface.surface_p11(1); unit-SCC #22 (220 units); 144 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p1"
upstream = ["source/SMLib/inc/SmSTEPSurface.h", "source/SMLib/inc/SmSurface.h", "source/SMLib/src/SmSTEPSurface.cpp", "source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p1"
depends_on = ["geom.a_object", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.object", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.tree", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p1", "surface.surface_cache_p1", "surface.surface_cache_p3", "surface.surface_p2", "topology.database_io"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p7", "curve.iso_curve", "curve.line", "geom.context", "geom.geom_utility_p1", "geom.polar_box", "nurbs.b_spline_curve_n_lib", "surface.cone_p1", "surface.curve_bounded_surface", "surface.plane_p1", "surface.sphere", "surface.surf_of_extrusion_p1", "surface.surf_of_revolution_p1", "surface.torus", "surface.trim_srf_cache"]
est_lines = 2458
layer = 29
tests = ["SM_API_test:TestSmPrincipalDirectionPairing", "prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL (PR #43): difftest 806 cases (6 fixture + 800 generated), 764 pass bit-identical, 42 deferred (surface.surface_p6 17: CalculateContinuities in every surface cache build (Cache, BBox of curve-bounded/STEP surfaces, DomCont of non-STEP surfaces); curve.iso_curve 13: ApproximateSize of non-B-spline kinds; surface.surface_p5 12: IsSingularity), --perturb 764/764; SmSTEPSurface ported here; a polar box of a curve-bounded or STEP surface is refused (upstream recurses without bound, UB-84); the Evaluate1stDerivatives / Evaluate2ndDerivatives / EvaluateDirectionalDerivs co-ports of surface.surface_p7 (PR #24) moved here (surface::surface::p1, generic over SurfaceEvaluate); shim guards GetDomainWithContinuity without a surface cache (upstream reads it through NULL) with SM_ERR. No UNPORTED(surface.surface_p1) stubs remain; the call sites this unit cannot wire are DISPATCH GAPs whose errors name the real blocker: grid expand_hierarchy (the element holds a handle and no store turns it into the Surface; smsurf_GetSurfaceCache, surface.surface_p2), the p7 SP/SS solver patch reads and sm_IsNodeValid (a Tree does not reach its owning cache; surface.surface_cache_p1), ApproximateSize and the iso_curve/crv_on_surf readers of non-B-spline surfaces (the curves hold an SmBSplineSurface; curve.iso_curve / curve.crv_on_surf); a polar box of a curve-bounded/STEP surface is refused (UB-84). CO-PORTED in surface.surf_of_revolution_p3 (PR #29): SmSurface::ConvertDomainFromNURBSToSTEP for surfaces of revolution; on merging with this unit both now share surface::surface::p1::convert_domain_from_nurbs_to_step_with (SurfOfRevolution::convert_domain_from_nurbs_to_step and the Revolved trait call it). CO-PORTED in intersect.surface_intersector_p1 (PR #33): SmSurface::EvaluateDirectionalDerivs, SmSurface::Evaluate1stDerivatives (one-line Evaluate wrappers) -> private helpers in intersect::surface_intersector::p1. CO-PORTED in surface.surface_p9 (PR #6): SmCSIGlobalSolver members the LocalSolve body reads (the curve being intersected, the surface cache holding the node patches, and the kernel) -> optional borrowed fields `curve`, `surface_cache`, `kernel` on surface::surface::p1::CsiGlobalSolver (the constructor is unchanged; LocalSolve lives in surface::surface::p9). 75 fns; largest: SmSurface::CacheMakeOrValidate, SmSurface::IsDegenerateCurve, SmSurface::CreateSilhouetteCurves, SmSurface::IsDegeneratePoint; cycle back-edges (call into later units; stub or co-port): surface.offset_surface(3), mass.integrator(2), surface.srf_in_volume(2), intersect.surface_silhouette(1), intersect.surface_tracer(1), topology.face_p4(1); unit-SCC #22 (220 units); 320 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p6"
upstream = ["source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p6"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.local_solve_nd", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p2", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7"]
soft_depends_on = ["curve.curve_p3", "curve.curve_p4", "curve.curve_p6", "curve.iso_curve", "curve.line", "nurbs.b_spline_curve_p2"]
est_lines = 2150
layer = 29
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "8 fns; largest: SmSurface::SimpleCoincidenceChecker, SmDerivSurfDefinition::GetSampleValues, sm_SCLocalSolve, SmSurface::ClassifyIntersectingRangeSolution; cycle back-edges (call into later units; stub or co-port): surface.surface_p1(5); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.point_class"
upstream = ["source/SMLib/inc/SmPointClass.h", "source/SMLib/inc/SmSpaceBend.h", "source/SMLib/inc/SmSpaceUnbend.h", "source/SMLib/src/SmLineSegClass.cpp", "source/SMLib/src/SmPointClass.cpp", "source/SMLib/src/SmSpaceBend.cpp", "source/SMLib/src/SmSpaceUnbend.cpp"]
rust_module = "intersect::point_class"
depends_on = ["curve.curve_p2", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p6", "geom.extent1d", "geom.extent2d", "surface.surface_p1", "surface.surface_p4", "surface.surface_p7", "surface.volume_p1", "surface.volume_p2"]
est_lines = 909
layer = 30
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 2511 cases (511 fixture: Combine precedence matrix, LoadFromIntersection kinds/offsets up to 9/8/7, curve and real SmEllipse/SmCircle projections, every class with a NULL object, tolerance sentinels incl. -SM_USE_DEFAULT; 2000 generated scripts), 2197 pass bit-identical, 314 deferred (surface.surface_p4 216, topology.vertex 49, topology.edge 27, topology.face_p2 15, topology.face_p4 4, topology.edgeuse_p1 3); review fixes: constructor stores its SmZoneTol3d as is, MergeIntoObject calls SmVertex::SetTolerance (SM_USE_OLDTOL), base SmTopology tolerance/IsConnectedTo for kinds without overrides, curve tolerance via Curve::edge; back-edges wired: surface.volume_p2 (SmVolume::GlobalPointSolve / EvaluatePoint; volume branch not exercised by the shim), SmTol point-classification overloads (geom.tol note), surface.trim_srf_cache face_point_classify now blocked only by query.face_p2. 53 fns; largest: SmPointClassification::MergeIntoObject, SmPointClassification::ComputePointParameters, SmPointClassification::Combine, SmPointClassification::GetGap3d; cycle back-edges (call into later units; stub or co-port): topology.vertex(8), topology.edge(7), topology.edgeuse_p1(5), topology.brep_p9(3), topology.face_p2(3), topology.face_p4(3), topology.brep_p4(2), topology.loopuse(2), topology.shell(1), topology.topology(1), topology.vertexuse(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.srf_in_volume"
upstream = ["source/SMLib/inc/SmSrfInVolume.h", "source/SMLib/src/SmSrfInVolume.cpp"]
rust_module = "surface::srf_in_volume"
depends_on = ["geom.object", "geom.vector3d", "surface.surface_p1", "surface.surface_p2", "surface.volume_p1", "surface.volume_p2", "topology.database_io"]
soft_depends_on = ["geom.axis2_placement", "geom.extent2d", "geom.vector2d"]
est_lines = 779
layer = 30
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "31 fns; largest: SmSrfInVolume::Evaluate, SmSrfInVolume::SmSrfInVolume, SmSrfInVolume::ReadFromDB, SmSrfInVolume::STEPInversion; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p10"
upstream = ["source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p10"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_cache_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p5"]
soft_depends_on = ["curve.curve_p3", "curve.curve_p4", "curve.curve_p6", "curve.iso_curve", "curve.line", "geom.object", "geom.polar_box", "geom.tree", "surface.surface_p4", "surface.surface_p6", "surface.surface_p7"]
est_lines = 2172
layer = 30
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "2 fns; largest: sm_GlobalCurveIntersectCombineSolutions, SmLSIGlobalSolver::LocalSolve; cycle back-edges (call into later units; stub or co-port): intersect.surface_drop_lib_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p3"
upstream = ["source/SMLib/inc/SmSurface.h", "source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p3"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.local_solve_nd", "geom.matrix", "geom.object", "geom.vector2d", "geom.vector3d", "surface.surface_p1", "surface.surface_p2", "surface.surface_p7"]
soft_depends_on = ["geom.geom_utility_p1", "geom.solution_array", "geom.tol", "nurbs.b_spline_surface_p1", "surface.plane_p1"]
est_lines = 1794
layer = 30
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "13 fns; largest: SmSurface::CoverCoincidentSurface, SmSurface::GetSingularities, SmSurface::LocalSurfaceSurfaceIntersect, SmFindPSNormalENFO::Evaluate; cycle back-edges (call into later units; stub or co-port): topology.face_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p1"
upstream = ["source/SMLib/inc/SmCurveClass.h", "source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p1"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.point_class", "surface.surface_p2"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p3", "curve.curve_p6", "geom.a_object", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_surface_p1", "surface.surface_p1", "surface.surface_p4", "surface.surface_p5"]
est_lines = 2087
layer = 31
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "partial (PR #47): difftest 2088 cases (2013 generated/usage + 75 adversarial review fixtures), 1908 pass, 0 fail, 180 deferred (surface.surface_p4 54, surface.surface_p6 52, surface.surface_p1 27, surface.surface_p5 20, topology.face_p2 10, topology.edge 9, intersect.curve_class_p4 6, topology.vertex 2; on merging main, SmTol::GetZoneTol3d(SmSurface), smsurf_GetSurfaceCache and SmSurface::ApproximateSize wired to surface.surface_p1, moving 52 cases to surface.surface_p6 CalculateContinuities; still UNPORTED(surface.surface_p1): SmTol::MapTo2d(.., SmCurve, SmSurface) and SmCrvOnSurf over a non-B-spline surface), max_rel_err 0; --perturb 1908/1908 detected; 71 fns; largest: sm_ApplyPointSolution, sm_SetXSectEdgeThroughPoint, sm_MakeConsistentClassifications, sm_SetXSectCurveThroughPoint; cycle back-edges (call into later units; stub or co-port): topology.edge(14), topology.face_p2(4), topology.edgeuse_p1(3), boolean.topology_intersector_p1(2), topology.vertex(2), query.face_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_drop_lib_p1"
upstream = ["source/SMLib/src/SmSurfaceDropLib.cpp"]
rust_module = "intersect::surface_drop_lib::p1"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p3", "surface.surface_p7"]
soft_depends_on = ["curve.hermite_curve", "geom.geom_utility_p1"]
est_lines = 1478
layer = 31
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "15 fns; largest: SmSurface::DropIsoCurve, SmDropPt::TestSpanAccuracy, SmDropPt::CheckSeamJump, SmDropPt::IsMovingAlongBoundary; cycle back-edges (call into later units; stub or co-port): intersect.surface_drop_curve(3); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_silhouette"
upstream = ["source/SMLib/inc/SmSurfaceSilhouette.h", "source/SMLib/src/SmSurfaceSilhouette.cpp"]
rust_module = "intersect::surface_silhouette"
depends_on = ["geom.extent2d", "geom.polar_box", "geom.vector2d", "geom.vector3d", "intersect.surface_tracer", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p7", "geom.geom_utility_p1", "geom.pseudo_box", "geom.tol", "surface.surface_cache_p1", "surface.surface_p3", "surface.surface_p7"]
est_lines = 979
layer = 31
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "partial (PR #45): difftest 709 cases (incl. 37 review adversarial fixtures), 546 pass, 163 deferred (surface.surface_p3 163: SmSurface::EvaluateNormalSection / EvaluateGeometric; the 6 surface.plane_p1 deferrals (SmBSplineSurface::CalculateBoundingBox on a plane, a stub in surface_cache/p1.rs) pass since the surface.surface_p1 merge, PR #43). SmSurface::EvaluateNormal and DropVectors wired to surface.surface_p7. 8 fns; largest: SmSurfaceSilhouette::ComputePointValues, SmSurfaceSilhouette::LocalPointSolve, SmFindSilSingEFO::Evaluate, SmSurfaceSilhouette::BranchMayContainAnswers; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.offset_surface"
upstream = ["source/SMLib/inc/SmOffsetSurface.h", "source/SMLib/src/SmOffsetSurface.cpp"]
rust_module = "surface::offset_surface"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.polar_box", "geom.pseudo_box", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p3", "surface.surface_p7", "topology.database_io"]
soft_depends_on = ["geom.axis2_placement", "geom.tol", "nlib.srf_adv_p1", "nlib.srf_basic"]
est_lines = 1787
layer = 31
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "37 fns; largest: SmOffsetSurface::EvaluatePlainOrSimple, SmOffsetSurface::CalculateBoundingBox, sm_ExtendSurface, SmOffsetSurface::EvaluatePoint; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p11"
upstream = ["source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p11"
depends_on = ["curve.crv_on_surf", "curve.curve_cache", "curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.global_solver", "geom.local_solve_nd", "geom.object", "geom.polar_box", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_cache_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p3", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7", "surface.surface_p9"]
soft_depends_on = ["curve.composite_curve_p1", "curve.composite_curve_p2", "curve.curve_p4", "curve.curve_p8", "curve.iso_curve", "geom.extent3d", "geom.geom_utility_p1", "geom.tree", "surface.plane_p1"]
est_lines = 1789
layer = 31
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmSurface::LocalSurfaceIntersect, SmSSGlobalSolver::LocalSolve, SmSurface::LiftCurve, SmCSGlobalSolver::LocalSolve; cycle back-edges (call into later units; stub or co-port): surface.surface_p8(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_p8"
upstream = ["source/SMLib/src/SmSurface.cpp"]
rust_module = "surface::surface::p8"
depends_on = ["curve.curve_p2", "curve.iso_curve", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.object", "geom.polar_box", "geom.pseudo_box", "geom.solution_array", "geom.tol", "geom.tree", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "surface.surface_cache_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p3", "surface.surface_p4", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7"]
soft_depends_on = ["curve.curve_cache", "curve.curve_p4", "curve.curve_p6", "curve.curve_p8", "curve.line", "geom.geom_utility_p1", "nurbs.b_spline_curve_n_lib", "surface.surface_cache_p3", "surface.surface_p10"]
est_lines = 2374
layer = 31
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "10 fns; largest: SmSurface::GlobalLineIntersect, SmSurface::CoincidenceCheck, SmSurface::GlobalCurveIntersect, SmSurface::InvertPointNearSingularity; cycle back-edges (call into later units; stub or co-port): intersect.surface_drop_lib_p1(2), intersect.surface_drop_lib_p3(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p7"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p7"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p4", "curve.curve_p6", "geom.vector2d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1"]
est_lines = 2248
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "14 fns; largest: SmCurveClassification::TestForPartialCoincidentEdges, SmCurveClassification::ClassifyFaceInterval, sm_SetDoFilletingGeometry, SmCurveClassification::AreCoincidentMaybe; cycle back-edges (call into later units; stub or co-port): topology.edge(9), topology.vertex(3), query.face_p1(2), query.face_p2(1), topology.face_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.ray_tracer"
upstream = ["source/SMLib/inc/SmRayTracer.h", "source/SMLib/src/SmRayTracer.cpp"]
rust_module = "intersect::ray_tracer"
depends_on = ["geom.context", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.geom_utility_p1", "geom.grid", "geom.object", "geom.pseudo_box", "geom.vector2d", "geom.vector3d", "intersect.point_class", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p2", "curve.line", "geom.polar_box", "geom.solution_array", "geom.tol", "geom.tree", "surface.surface_cache_p3", "surface.surface_p1", "surface.surface_p3", "surface.surface_p7", "surface.surface_p8"]
est_lines = 1246
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "13 fns; largest: SmLSI3LocalSolver::LocalSolve, SmRayTracer::FireRay, sm_FindAdditionalTangentGuess, sm_FindPolyHit; cycle back-edges (call into later units; stub or co-port): query.poly(7), topology.topology(2), query.face_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_drop_curve"
upstream = ["source/SMLib/inc/SmSurfaceDropCurve.h", "source/SMLib/src/SmSurfaceDropCurve.cpp"]
rust_module = "intersect::surface_drop_curve"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.surface_tracer", "nurbs.b_spline_curve_p1", "surface.surface_cache_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p5"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_cache", "curve.curve_p4", "curve.curve_p6", "curve.curve_p8", "curve.curve_p9", "curve.hermite_curve", "curve.line", "geom.a_object", "geom.geom_utility_p1", "geom.object", "intersect.surface_drop_lib_p1", "nurbs.b_spline_curve_p2", "surface.surface_p4", "surface.surface_p7"]
est_lines = 2014
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "17 fns; largest: SmSurfaceDropCurve::FindBoundaryStartPoints, SmSurfaceDropCurve::ComputeNextPoint, SmSurfaceDropCurve::ComputePointValues, SmSurfaceDropCurve::DoTrace; cycle back-edges (call into later units; stub or co-port): intersect.surface_drop_lib_p3(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_drop_lib_p2"
upstream = ["source/SMLib/src/SmSurfaceDropLib.cpp"]
rust_module = "intersect::surface_drop_lib::p2"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.geom_utility_p1", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.surface_drop_lib_p1", "surface.surface_p1", "surface.surface_p5", "surface.surface_p7"]
soft_depends_on = ["curve.curve_p2", "geom.object", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p3", "surface.surface_p4"]
est_lines = 1080
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmDropPt::SetProperties, SmDropPt::GetNextPoint, sm_AddToCurve, sm_FlushCrv; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_intersector_p1"
upstream = ["source/SMLib/inc/SmSurfaceIntersector.h", "source/SMLib/src/SmSurfaceIntersector.cpp"]
rust_module = "intersect::surface_intersector::p1"
depends_on = ["curve.hermite_curve", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p3", "curve.curve_p4", "curve.curve_p6", "geom.object", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p1", "surface.surface_p11", "surface.surface_p3", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7"]
est_lines = 1816
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 1510 cases (10 inline edge cases + 1500 generated programs over planes, open/rational/closed-tube B-spline surfaces, self-intersection, sub/cut/disjoint/degenerate/fillet domains, scales 1e-6..1e5), 1416 pass bit-identical (max_rel_err 0), 94 deferred (surface.surface_p3 48, surface.surface_p11 36, surface.surface_p5 6, surface.surface_p1 4) after surface.surface_p7 wired EvaluateNormal, PR #24 (before: 1406 pass, 104 deferred); --perturb SENSITIVE 1416/1416. IsClosed, EvaluateNormal and Evaluate1stDerivatives go through surface::surface::p7 (PR #24; its co-port of IsClosed was replaced). EvaluateLawPoint has no cases (needs SmFilletLaw, SmOffsetSurface). Wired SmTsectPnt into Surface::point_based_surface_intersect (surface.surface_p2). 40 fns; largest: SmSurfaceIntersector::TestSpanAccuracy, sm_IsPointOnCurve, SmSurfaceIntersector::AddStartPoint, SmSurfaceIntersector::RefinePoint; cycle back-edges (call into later units; stub or co-port): blend.fillet_executive_p1(1), blend.fillet_intersector(1), intersect.adv_surface_intersector(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.topology_solver_p1"
upstream = ["source/SMLib/inc/SmTopologySolver.h", "source/SMLib/src/SmTopologySolver.cpp"]
rust_module = "intersect::topology_solver::p1"
depends_on = ["curve.curve_p2", "geom.extent3d", "geom.global_solver", "geom.object", "geom.solution_array", "geom.tol", "geom.tree", "geom.vector3d", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p8", "curve.curve_p9", "geom.extent1d", "geom.geom_utility_p1", "geom.vector2d", "intersect.point_class", "surface.surface_cache_p1", "surface.surface_cache_p2", "surface.surface_p1", "surface.surface_p4", "surface.surface_p8"]
est_lines = 1838
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 3532 cases (532 fixture: SM_API_test TestSmCreateRectangle / TestSmCreateRegularPolygon edges, my_test_drop_point, my_test_reversed_line_join lines, every operation on degenerate boxes / coincident and unit-distance vertices, tiny and huge circles, ray and at-distance tolerance limits, sub-domain edges, review adversarial cases (ray behind start, signed directed, at-distance 1e7, projected/directed MayContainAnswer, curve and edge solves), zero and tiny option vectors; 3000 generated), 3161 pass bit-identical, 0 failed, 371 deferred (curve.curve_p9 151: GlobalCurveSolve of non-intersecting curve/edge solves; intersect.topology_solver_p2 87: SmTopologySolver::LocalSolve reached from SolveTrees; topology.edge 85: edge parameter intervals in solution comparisons; topology.brep_p1 48: object zone tolerances of ray-fire solutions and ellipse solves); --perturb SENSITIVE. Solvers read vertices, edges, faces and shape membership through the TopologyObjects trait (the difftest backs it with free-standing SmVertex/SmEdge objects); a B-rep implementation belongs with the BrepCache trees (intersect.topology_solver_p2, topology.vertex, topology.edge, topology.face_p2). SmTLSPointFace and sm_GetFaceSilhouettes are ported but stubbed at surface.surface_p8/surface.surface_p4/surface.surface_p1/query.face_p1/query.face_p2 and not difftested. Upstream issues UB-85, UB-86, WR-62 (WR-62 unconfirmed: single-call fixtures defer at SmTol::GetZoneTol3d). The curve_global_curve_solve stub gets both intervals, operation, tolerance, best answer, option vectors and SM_SR_ALL as upstream passes them; face_silhouettes calls surface_cache (surface.surface_p2) through TopologyObjects::surface; face_point_classify must return the class even when PointClassify fails (callers ignore its status). FFI refuses short option vectors only for the MayContainAnswer ray and the curve solvers (findings.md). 55 fns; largest: SmTopologySolver::MayContainAnswer, SmTLSPointFace::SolveIt, SmTLSPointVertex::SolveIt, SmTLSCurveCurve::SolveIt; cycle back-edges (call into later units; stub or co-port): topology.face_p2(6), topology.edge(5), topology.vertex(4), query.face_p1(1), query.face_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "surface.surface_point_solve_p1"
upstream = ["source/SMLib/src/SmSurfacePointSolve.cpp"]
rust_module = "surface::surface_point_solve::p1"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_p1", "surface.surface_p1", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p6", "geom.geom_utility_p1", "geom.geom_utility_p2", "geom.object", "geom.tol", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7"]
est_lines = 1771
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "49 fns; largest: SmSurfPtGlobalSolver::RefineGuessPolygonLeg, WellBehavedControlNet, SmSurfPtGlobalSolver::FindPolygonTriangleGuess, SmSurfPtGlobalSolver::CheckGuessForSeams; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; PARTIAL (PR #58): difftest 1035 cases (135 inline on upstream Surface.sms with the my_test_surface_closest_point points, 900 generated: planes, B-splines incl. closed / rational / bilinear / zigzag / huge / tiny nets, curve-bounded and STEP-wrapped surfaces, sub-domains, the 5 solver operations, test points on, near and off the surface), 976 pass bit-identical, 59 deferred (surface.surface_p5 32, surface.surface_p4 27); --perturb SENSITIVE"
[[unit]]
id = "topology.brep_data"
upstream = ["source/SMLib/inc/SmBrepData.h", "source/SMLib/src/SmBrepData.cpp"]
rust_module = "topology::brep_data"
depends_on = ["geom.attribute", "geom.object", "geom.tol", "topology.database_io"]
soft_depends_on = ["curve.composite_curve_p1", "curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_p1", "surface.offset_surface", "surface.surface_p2"]
est_lines = 1466
layer = 32
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "17 fns; largest: SmBrepData::ReadFromDB, SmBrepData::ReadCurveFromDB, SmBrepData::ReadSurfaceFromDB, SmEUData::ReadFromDB; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; PARTIAL (PR #25): difftest 2379 cases (358 upstream .smb fixtures: 186 ReadFromFile, 170 ReadFromDB v30, 2 part-file B-reps at v32; 21 edge-case fixtures; 2000 generated ASCII/binary B-rep, curve, surface, file and constructor cases for versions 29-50), 2324 pass bit-identical, 55 deferred (surface.offset_surface 46, surface.cone_p1 7: SmCone/SmCylinder records are read in full but have no SurfaceKind variant yet (DISPATCH GAP), surface.surf_of_extrusion_p2 2; SmPlane::ReadFromDB wired by surface.plane_p2 PR #40); --perturb SENSITIVE"
[[unit]]
id = "topology.proto_topology_p1"
upstream = ["source/SMLib/inc/SmAssembly.h", "source/SMLib/inc/SmAssemblyInstance.h", "source/SMLib/inc/SmCopyBrepMap.h", "source/SMLib/inc/SmOwningTopology.h", "source/SMLib/inc/SmProtoTopology.h", "source/SMLib/src/SmAssembly.cpp", "source/SMLib/src/SmAssemblyInstance.cpp", "source/SMLib/src/SmCopyBrepMap.cpp", "source/SMLib/src/SmOwningTopology.cpp", "source/SMLib/src/SmProtoTopology.cpp", "source/SM_API/src/SmApiGeneral.cpp"]
rust_module = "topology::proto_topology::p1"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.axis2_placement", "geom.extent1d", "geom.object", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class", "surface.surface_p2", "topology.topology"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p6", "geom.solution_array"]
est_lines = 2746
layer = 32
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "180 fns; largest: sm_AreOverlapping, SmProtoTopologyManager::CanCombineEdgeDefinitions, SmProtoTopologyManager::RemoveCoincidentNoEdgeProtoVertex, sm_TransformIndependentObject; entry points: SmApiRotate, SmApiScale, SmApiScaleByPt, SmApiTransform, SmApiTranslate; cycle back-edges (call into later units; stub or co-port): query.poly(9), topology.edge(7), query.face_p2(4), blend.fillet_geom_p1(3), topology.edgeuse_p1(3), topology.vertex(3), topology.shell(2), boolean.topology_intersector_p1(1), topology.brep_p1(1), topology.brep_p2(1), topology.brep_p3(1), topology.brep_p4(1), topology.brep_p5(1), topology.face_p4(1), topology.vertexuse(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "intersect.adv_surface_intersector"
upstream = ["source/SMLib/inc/SmAdvSurfaceIntersector.h", "source/SMLib/src/SmAdvSurfaceIntersector.cpp"]
rust_module = "intersect::adv_surface_intersector"
depends_on = ["curve.conic", "geom.extent2d", "geom.extent3d", "geom.global_solver", "geom.pseudo_box", "geom.solution_array", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "surface.surface_cache_p1", "surface.surface_p2"]
soft_depends_on = ["geom.geom_utility_p1", "geom.object", "geom.polar_box", "geom.tree", "surface.surface_p11", "surface.surface_p7"]
est_lines = 1646
layer = 33
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 1931 cases (398 review fixtures: adversarial singular-point programs; 27 inline edge cases from the ComputeSingularityPoint docs + 6 LocalSolve/SolveIt cases on leaves >4x apart in size (DropPointsToTangentPlane) + 1500 generated programs: singular points with shape-tensor geometry, Dupin indicatrices, SolveIt/LocalSolve/SolveBranch/FindBestSubdivisionNode/BranchIsGaussSeparate/FindInteriorCurves over hand-built surface cache trees), 1915 pass bit-identical, 16 deferred (surface.surface_p11 16: LocalSurfaceIntersect in FindInteriorCurves); wired the surface.surface_p7 stubs (DropPointsToTangentPlane, non-planar EvaluateNormal; CreateParallelProjectionCurves now stops at intersect.surface_intersector_p5 DoIntersection); wired UNPORTED(intersect.adv_surface_intersector) in surface.surface_p2 (GlobalSurfaceIntersect, PointBasedSurfaceIntersect now stop at intersect.surface_intersector_p5 / _p4); base SolveBranch exposed as geom::global_solver::solve_branch; 11 fns; largest: SmAdvSurfaceIntersector::ComputeSingularityPoint, SmAdvSurfaceIntersector::FindInteriorCurves, SmAdvSurfaceIntersector::LocalSolve, SmAdvSurfaceIntersector::MakeDupin; cycle back-edges (call into later units; stub or co-port): intersect.surface_intersector_p2(2), blend.fillet_intersector(1), intersect.surface_intersector_p4(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p2"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p2"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p7", "intersect.point_class", "surface.surface_p2"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p3", "geom.extent2d", "intersect.surface_intersector_p1", "surface.surface_p3", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7", "surface.surface_p8"]
est_lines = 1928
layer = 33
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "13 fns; largest: sm_RefineCCIToSurfaces, SmCurveClassification::ReSet, SmCurveClassification::EditIntervalMax, SmCurveClassification::EditIntervalMin; cycle back-edges (call into later units; stub or co-port): topology.edge(3), topology.face_p2(2), topology.brep_p1(1), topology.edgeuse_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_drop_lib_p3"
upstream = ["source/SMLib/src/SmSurfaceDropLib.cpp"]
rust_module = "intersect::surface_drop_lib::p3"
depends_on = ["curve.curve_cache", "curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "intersect.surface_drop_lib_p1", "intersect.surface_drop_lib_p2", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p1", "surface.surface_p2", "surface.surface_p3", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p4", "geom.vector2d", "nurbs.b_spline_surface_p1"]
est_lines = 2062
layer = 33
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "1 fns; largest: SmSurface::DropCurve; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_intersector_p2"
upstream = ["source/SMLib/src/SmSurfaceIntersector.cpp"]
rust_module = "intersect::surface_intersector::p2"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.matrix", "geom.solution_array", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p8", "geom.extent3d", "geom.object", "geom.tol", "nurbs.b_spline_curve_n_lib", "surface.surface_cache_p1", "surface.surface_cache_p2", "surface.surface_p3", "surface.surface_p5", "surface.surface_p7"]
est_lines = 1677
layer = 33
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "6 fns; largest: SmSurfaceIntersector::ClassifyBoundaryStartPointIntersection, SmSurfaceIntersector::ComputePointValues, SmSurfaceIntersector::DoBoundaryPlaneTest, SmSurfaceIntersector::FlushCurve; unit-SCC #22 (220 units); 150 upstream test entry points reach this unit; difftest PR #42: 1660 cases (1508 pass, 152 deferred: blend.fillet_executive_p1(11), surface.surface_p3(36), surface.surface_p5(105)); EvaluateNormal wired to surface.surface_p7; shim covers SmPlane, SmBSplineSurface, SmCurveBoundedSurface; fixtures from my_test_planar_section (shovel.srf) plus 38 + 105 review adversarial cases; FlushCurve unguarded (decreasing knots compare the CreateCanonical SM_ERR path); gap walk capped at MAX_GAP_SAMPLES (see plan/findings.md)"
[[unit]]
id = "surface.surface_point_solve_p2"
upstream = ["source/SMLib/src/SmSurfacePointSolve.cpp"]
rust_module = "surface::surface_point_solve::p2"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_p1", "surface.surface_p2", "surface.surface_point_solve_p1"]
soft_depends_on = ["geom.geom_utility_p1", "geom.object", "surface.surface_p1", "surface.surface_p5", "surface.surface_p8"]
est_lines = 1882
layer = 33
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "19 fns; largest: SmSurfPtGlobalSolver::FindPolygonGuess, SmSurfPtGlobalSolver::Solve, SmSurfPtGlobalSolver::RefineGuess, SmSurfPtSolveStepper::Step; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.edgeuse_p1"
upstream = ["source/SMLib/inc/SmEdgeuse.h", "source/SMLib/inc/SmFaceuse.h", "source/SMLib/src/SmEdgeuse.cpp", "source/SMLib/src/SmFaceuse.cpp"]
rust_module = "topology::edgeuse::p1"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.matrix", "geom.object", "geom.tol", "geom.vector3d", "surface.surface_p2", "topology.proto_topology_p1", "topology.topology"]
soft_depends_on = ["geom.vector2d", "nurbs.b_spline_curve_p1", "surface.surface_p1", "surface.surface_p5", "surface.surface_p7"]
est_lines = 1157
layer = 33
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "57 fns; largest: SmEdgeuse::SetUVTrimCurve, SmEdgeuse::CalcMaxEdgeFaceGap, SmFaceuse::CollectAdjacentFaceuses, SmFindStepOffENFO::Evaluate; cycle back-edges (call into later units; stub or co-port): heal.gap(14), topology.edge(13), topology.loopuse(9), topology.vertexuse(4), topology.face_p2(2), topology.shell(2), topology.edgeuse_p3(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p3"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p3"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p2", "intersect.curve_class_p7", "intersect.point_class"]
soft_depends_on = ["curve.curve_p6", "geom.geom_utility_p1"]
est_lines = 1986
layer = 34
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "9 fns; largest: SmCurveClassification::InsertPointClass, SmCurveClassification::FindInterval, SmCurveClassification::MergePointClass, sm_ChangeEdgePointClassToNearVertex; cycle back-edges (call into later units; stub or co-port): topology.edge(8), topology.vertex(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p4"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p4"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p2", "intersect.curve_class_p7", "intersect.point_class", "surface.surface_p7"]
soft_depends_on = ["geom.periodic_extent1d", "surface.surface_p1", "surface.surface_p2", "surface.surface_p4", "surface.surface_p5"]
est_lines = 2022
layer = 34
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmCurveClassification::GetLoopCrossings, SmCurveInterval::GetIvlBound_EdgeuseObj, SmCurveClassification::SmCurveClassification, sm_SqueezeOutSmallestInterval; cycle back-edges (call into later units; stub or co-port): topology.edge(4), topology.face_p2(4), topology.edgeuse_p1(3), heal.face_props(2), topology.vertexuse(2), topology.edgeuse_p3(1), topology.loopuse(1), topology.vertex(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_intersector_p3"
upstream = ["source/SMLib/src/SmSurfaceIntersector.cpp"]
rust_module = "intersect::surface_intersector::p3"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "intersect.surface_intersector_p2", "nurbs.b_spline_curve_p1", "surface.surface_p2"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.curve_p6", "geom.geom_utility_p1", "geom.object", "intersect.surface_drop_lib_p1", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "surface.surface_cache_p1", "surface.surface_p1", "surface.surface_p5", "surface.surface_p7", "surface.surface_p8"]
est_lines = 1932
layer = 34
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmSurfaceIntersector::FindBoundaryStartPoints, SmSurfaceIntersector::TestPoint, SmSurfaceIntersector::ComputeNextPoint, sm_UpdateTsectPoint; unit-SCC #22 (220 units); 150 upstream test entry points reach this unit; PARTIAL (PR #56): difftest 1527 cases (17 inline edge cases, 10 fixture cases from my_test_planar_section on shovel.srf, 1500 generated programs: plane/plane traces at angles down to 1e-6 with through, start and end points, random programs on planes, B-spline and curve-bounded surfaces, boundary start point searches, scales 1e-6..1e5), 851 pass bit-identical (max_rel_err 0), 676 deferred (surface.surface_p11 353, surface.surface_p3 135, surface.surface_p8 79, surface.plane_p1 64, surface.surface_p5 28, blend.fillet_executive_p1 13, surface.surface_p6 4); --perturb SENSITIVE 851/851. UNPORTED stubs: SmSurface::GlobalCurveIntersect (surface.surface_p8), SmSurface::DropAndTrimCurve (intersect.surface_drop_lib_p1), SmSurface::IsSingularity of non-planes (surface.surface_p5). The face edge branch (static constexpr bGWCAddEdgeThroughPoints = FALSE) and the bStopAtSingularity = FALSE code are dead upstream and not ported, so the planned topology back-edges (topology.edge, topology.edgeuse_p1, topology.edgeuse_p3, topology.face_p4) are not needed. find_boundary_start_points fetches caches with smsurf_GetSurfaceCache (tree build reaches surface.surface_p6); find_boundary_start_points_with_caches takes them from the caller."
[[unit]]
id = "surface.surface_point_solve_p3"
upstream = ["source/SMLib/src/SmSurfacePointSolve.cpp"]
rust_module = "surface::surface_point_solve::p3"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.object", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p4", "surface.surface_point_solve_p1", "surface.surface_point_solve_p2"]
soft_depends_on = ["curve.curve_p3", "curve.curve_p5", "curve.iso_curve", "geom.solution_array", "geom.tol"]
est_lines = 1282
layer = 34
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmSurfPtSolveStepper::FindNextStep, SmSurfPtSolveStepper::CheckCrease, SmSurface::LocalPointSolve_1, SmSurfPtSolveStepper::FindBoundarySolution; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p6"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p6"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p2", "intersect.curve_class_p3", "intersect.curve_class_p4", "intersect.curve_class_p7", "intersect.point_class"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p6", "nurbs.b_spline_curve_n_lib"]
est_lines = 2213
layer = 35
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmCurveClassification::MergeInterval, SmCurveClassification::InsertCurveInterval, SmCurveClassification::Homogenize, SmCurveClassification::FixEndPointClass; cycle back-edges (call into later units; stub or co-port): topology.edge(5), topology.vertex(5), topology.face_p4(2), topology.brep_p3(1), topology.brep_p5(1), topology.brep_p9(1), topology.edgeuse_p1(1), topology.face_p2(1), topology.vertexuse(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_intersector_p4"
upstream = ["source/SMLib/src/SmSurfaceIntersector.cpp"]
rust_module = "intersect::surface_intersector::p4"
depends_on = ["geom.extent2d", "geom.extent3d", "geom.solution_array", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "intersect.surface_intersector_p2", "intersect.surface_intersector_p3"]
soft_depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.hermite_curve", "geom.a_object", "geom.extent1d", "geom.object", "geom.tol", "geom.tree", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p3", "surface.surface_cache_p1", "surface.surface_p11", "surface.surface_p2", "surface.surface_p5", "surface.surface_p7"]
est_lines = 1570
layer = 35
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmSurfaceIntersector::TraceCurve, SmSurfaceIntersector::DoPointIntersection, SmSurfaceIntersector::DoLawIntersection, SmSurfaceIntersector::FindInteriorCurves; unit-SCC #22 (220 units); 150 upstream test entry points reach this unit"
[[unit]]
id = "intersect.topology_solver_p2"
upstream = ["source/SMLib/inc/SmTopologySolver.h", "source/SMLib/src/SmTopologySolver.cpp"]
rust_module = "intersect::topology_solver::p2"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.global_solver", "geom.object", "geom.solution_array", "geom.tol", "geom.tree", "geom.vector3d", "intersect.curve_class_p1", "intersect.topology_solver_p1"]
soft_depends_on = ["curve.curve_p6", "geom.a_object", "geom.extent3d", "geom.vector2d", "intersect.curve_class_p4", "intersect.point_class", "surface.surface_p1", "surface.surface_p2", "surface.surface_p4", "surface.surface_p7", "surface.surface_p8"]
est_lines = 1391
layer = 35
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "15 fns; largest: SmTLSCurveFace::SolveIt, SmTopologySolver::BrepCurveSolve, SmTLSFaceFace::SolveIt, SmTopologySolver::ShapeCurveSolve; cycle back-edges (call into later units; stub or co-port): topology.brep_cache(9), topology.edge(5), topology.face_p2(4), query.face_p2(2), topology.vertex(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.face_p2"
upstream = ["source/SMLib/inc/SmFace.h", "source/SMLib/src/SmFace.cpp"]
rust_module = "topology::face::p2"
depends_on = ["curve.crv_on_surf", "curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p2", "surface.surface_p7", "topology.edgeuse_p1", "topology.topology"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p6", "geom.context", "intersect.curve_class_p4", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "surface.surface_p1", "surface.surface_p5"]
est_lines = 1827
layer = 35
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "32 fns; largest: sm_FixUVTrimCurves, SmFace::GetPointsInFace, SmODEIsoCurveLengthIFEO::Evaluate, SmFace::CreateCurvesByTrimming; cycle back-edges (call into later units; stub or co-port): topology.edge(9), topology.vertexuse(5), topology.vertex(4), topology.loopuse(3), mass.integrator(2), query.face_p2(2), topology.edgeuse_p3(2), heal.gap(1), query.face_p3(1), topology.face_p1(1); unit-SCC #22 (220 units); hazards: clock,rng; 319 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p5"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p5"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p2", "intersect.curve_class_p3", "intersect.curve_class_p6", "intersect.curve_class_p7", "intersect.point_class", "surface.surface_p2"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p1", "curve.curve_p4", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p1", "surface.surface_p4", "surface.surface_p5"]
est_lines = 2017
layer = 36
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "7 fns; largest: sm_InsertSolutions, SmCurveClassification::IntersectVertices, SmCurveClassification::MergeClassifications, SmCurveClassification::ExtractGeometry; cycle back-edges (call into later units; stub or co-port): topology.edge(6), topology.vertex(5), boolean.topology_intersector_p1(2), heal.gap(1), topology.edgeuse_p1(1), topology.vertexuse(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.surface_intersector_p5"
upstream = ["source/SMLib/src/SmSurfaceIntersector.cpp"]
rust_module = "intersect::surface_intersector::p5"
depends_on = ["geom.extent3d", "geom.global_solver", "geom.solution_array", "geom.tol", "intersect.surface_intersector_p1", "intersect.surface_intersector_p2", "intersect.surface_intersector_p3", "intersect.surface_intersector_p4"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p4", "geom.a_object", "geom.object", "geom.tree", "geom.vector3d", "surface.surface_cache_p1", "surface.surface_cache_p3", "surface.surface_p2"]
est_lines = 622
layer = 36
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "1 fns; largest: SmSurfaceIntersector::DoIntersection; unit-SCC #22 (220 units); 150 upstream test entry points reach this unit"
[[unit]]
id = "topology.edgeuse_p2"
upstream = ["source/SMLib/src/SmEdgeuse.cpp"]
rust_module = "topology::edgeuse::p2"
depends_on = ["geom.extent1d", "geom.extent2d", "geom.local_solve_nd", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "surface.surface_p2", "topology.edgeuse_p1", "topology.face_p2", "topology.topology"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p2", "curve.curve_p6", "geom.tol", "nurbs.b_spline_curve_p1", "surface.surface_p1", "surface.surface_p4", "surface.surface_p7"]
est_lines = 600
layer = 36
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "8 fns; largest: SmEdgeuse::EvaluateBinormalStepOff, SmEdgeuse::CheckAndSetUVTrimCurve, SmEdgeuse::IsTangentSector, SmEdgeuse::IsConvexRadialSector; cycle back-edges (call into later units; stub or co-port): topology.edge(9), heal.gap(5), topology.edgeuse_p3(4), blend.fillet_geom_p1(1), topology.brep_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.shell"
upstream = ["source/SMLib/inc/SmRegion.h", "source/SMLib/inc/SmShell.h", "source/SMLib/src/SmRegion.cpp", "source/SMLib/src/SmShell.cpp"]
rust_module = "topology::shell"
depends_on = ["geom.extent3d", "geom.object", "geom.solution_array", "geom.vector3d", "topology.edgeuse_p1", "topology.proto_topology_p1", "topology.topology"]
soft_depends_on = ["geom.context", "geom.tol", "intersect.point_class", "intersect.topology_solver_p2", "nurbs.b_spline_curve_p1"]
est_lines = 750
layer = 36
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "37 fns; largest: SmShell::RayFire, SmShell::TransferChildrenTo, SmShell::GetWireEdges, SmRegion::OrderShells; cycle back-edges (call into later units; stub or co-port): topology.edge(5), query.face_p1(2), topology.brep_p1(2), query.brep(1), topology.brep_p2(1), topology.topology_traverser(1), topology.vertex(1), topology.vertexuse(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p8"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p8"
depends_on = ["curve.crv_on_surf", "curve.curve_p2", "geom.extent2d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p3", "intersect.curve_class_p5", "intersect.point_class", "surface.surface_p2", "surface.volume_p1"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p8", "curve.line", "geom.extent1d", "nurbs.b_spline_surface_p1", "surface.plane_p1", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7", "surface.surface_p8", "surface.volume_p2"]
est_lines = 1900
layer = 37
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmCurveClassification::Intersect3DDiscontinuities, SmCurveClassification::Intersect3DDiscontinuties, SmCurveClassification::IntersectUVDiscontinuties, SmCurveClassification::IntersectNaturalBounds; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "intersect.curve_class_p9"
upstream = ["source/SMLib/src/SmCurveClass.cpp"]
rust_module = "intersect::curve_class::p9"
depends_on = ["curve.crv_on_surf", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p3", "intersect.curve_class_p5", "intersect.point_class", "surface.surface_p2"]
soft_depends_on = ["curve.curve_cache", "curve.curve_p2", "curve.curve_p6", "curve.curve_p8", "geom.a_object", "geom.context", "geom.extent2d", "geom.tree", "geom.vector2d", "nurbs.b_spline_curve_p1", "surface.surface_cache_p1", "surface.surface_cache_p3", "surface.surface_p5"]
est_lines = 1220
layer = 37
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "2 fns; largest: SmCurveClassification::IntersectTSBound, SmCurveClassification::IntersectEdges; cycle back-edges (call into later units; stub or co-port): topology.edge(5), topology.edgeuse_p1(4), topology.face_p2(3), topology.loopuse(2), topology.topology(2), topology.vertexuse(2), heal.gap(1), topology.edgeuse_p3(1), topology.vertex(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.vertexuse"
upstream = ["source/SMLib/inc/SmVertexuse.h", "source/SMLib/src/SmVertexuse.cpp"]
rust_module = "topology::vertexuse"
depends_on = ["geom.a_object", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p7", "topology.edgeuse_p1", "topology.face_p2", "topology.topology"]
soft_depends_on = ["curve.curve_p2", "surface.surface_p1", "surface.surface_p2", "surface.surface_p3", "surface.surface_p4", "surface.surface_p5", "topology.shell"]
est_lines = 1429
layer = 37
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "29 fns; largest: SmVertexuse::ComputeUVSector, SmVertexuse::ComputeUVPoint, SmVertexuse::CalcVertexFaceGap, SmVertexuse::Notify; cycle back-edges (call into later units; stub or co-port): heal.gap(11), topology.edge(6), topology.vertex(5), topology.loopuse(4), blend.fillet_geom_p1(1), topology.edgeuse_p3(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "topology.vertex"
upstream = ["source/SMLib/inc/SmVertex.h", "source/SMLib/src/SmVertex.cpp"]
rust_module = "topology::vertex"
depends_on = ["geom.object", "geom.tol", "geom.vector3d", "topology.edgeuse_p1", "topology.proto_topology_p1", "topology.topology", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p5", "geom.context", "geom.extent1d", "topology.face_p2", "topology.shell"]
est_lines = 824
layer = 38
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "38 fns; largest: SmVertex::IsTopologicalVertex, SmVertex::Notify, SmVertex::IsConnectedTo, SmVertex::GetMaxUpDimGap3d; cycle back-edges (call into later units; stub or co-port): topology.edge(12), heal.gap(4), topology.loopuse(2), blend.fillet_geom_p1(1), topology.face_p3(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "topology.loopuse"
upstream = ["source/SMLib/inc/SmLoop.h", "source/SMLib/inc/SmLoopuse.h", "source/SMLib/src/SmLoop.cpp", "source/SMLib/src/SmLoopuse.cpp"]
rust_module = "topology::loopuse"
depends_on = ["geom.a_object", "geom.extent1d", "geom.object", "geom.tol", "geom.vector3d", "topology.edgeuse_p1", "topology.face_p2", "topology.topology", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p2", "geom.extent2d", "geom.vector2d", "nurbs.b_spline_curve_p1", "surface.surface_p2", "surface.surface_p5", "surface.surface_p7", "topology.proto_topology_p1", "topology.shell", "topology.vertex"]
est_lines = 892
layer = 39
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "48 fns; largest: SmLoopuse::IsClosed3d, SmLoop::GetUVCornerBoundaries, SmLoop::FlipLoopOrientation, SmLoopuse::IsMissingSeamAtVertices; cycle back-edges (call into later units; stub or co-port): topology.edge(6), topology.edgeuse_p3(1), topology.face_p3(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p8"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p8"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p2", "topology.loopuse"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p8", "curve.line", "intersect.point_class", "nurbs.b_spline_curve_p1", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7", "surface.surface_p8", "topology.face_p2", "topology.vertex"]
est_lines = 1768
layer = 40
tests = ["SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus", "SM_API_test:TestSmCreatePlane", "SM_API_test:TestSmCreateSwungPrimitive", "SM_API_test:TestSmCreatePlanarFaces", "prog_test:my_test_tracks_nested_geometry_and_resets"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "7 fns; largest: SmBrep::MakeFacesWithCurves, SmBrep::CreateFaceInRegionFromSurface, SmBrep::CreateFacesWithCurves, SmBrep::CreateFacesFromSurface; cycle back-edges (call into later units; stub or co-port): topology.trimming_tools(13), topology.brep_p1(11), topology.brep_p7(3), topology.brep_p3(2), topology.brep_p4(2), topology.brep_p5(2), topology.brep_p9(2), query.face_p1(1), topology.brep_p6(1), topology.face_p3(1); unit-SCC #22 (220 units); 186 upstream test entry points reach this unit"
[[unit]]
id = "topology.edge"
upstream = ["source/SMLib/inc/SmEdge.h", "source/SMLib/src/SmEdge.cpp"]
rust_module = "topology::edge"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.object", "geom.tol", "geom.vector3d", "surface.surface_p2", "surface.surface_p7", "topology.edgeuse_p1", "topology.edgeuse_p2", "topology.face_p2", "topology.proto_topology_p1", "topology.topology", "topology.vertexuse"]
soft_depends_on = ["geom.context", "geom.vector2d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "surface.surface_p1", "surface.surface_p5", "topology.loopuse", "topology.shell", "topology.vertex"]
est_lines = 2213
layer = 40
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "60 fns; largest: SmEdge::IsTopological, SmEdge::FindRadialSector, SmEdge::GetBlendEdgeuse, SmEdge::OrientEdgeSequence; cycle back-edges (call into later units; stub or co-port): heal.gap(12), topology.edgeuse_p3(3), query.edge(2), topology.brep_p2(2), blend.fillet_geom_p1(1), topology.brep_p1(1), topology.face_p1(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_custom_solver"
upstream = ["source/SMLib/inc/SmFilletCustomSolver.h", "source/SMLib/src/SmFilletCustomSolver.cpp"]
rust_module = "blend::fillet_custom_solver"
depends_on = ["geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.surface_p7", "topology.edgeuse_p1"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p2", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "geom.geom_utility_p2", "geom.matrix", "geom.tol", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.offset_surface", "surface.surf_of_extrusion_p1", "surface.surface_p1", "surface.surface_p2", "surface.surface_p4", "surface.surface_p5", "topology.edge", "topology.face_p2"]
est_lines = 1236
layer = 41
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "8 fns; largest: SmEiffelTowerFS::LoadInitialValues, SmSecantConstantRadiusFS::LoadInitialValues, SmEiffelTowerCrossSectionFSG::CreateSurface, SmEiffelTowerFS::LoadJacobian; cycle back-edges (call into later units; stub or co-port): blend.fillet_solver_p1(8), blend.fillet_standard_solver_p2(2); unit-SCC #22 (220 units); only 3 of 1236 lines survive RTA (reached via virtual dispatch to classes no in-scope entry point constructs); low priority / likely deferrable; 317 upstream test entry points reach this unit"
[[unit]]
id = "query.edge"
upstream = ["source/SMLib/src/SmEdge.cpp"]
rust_module = "query::edge"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent3d", "geom.solution_array", "geom.vector3d", "topology.edge", "topology.edgeuse_p1"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p6", "curve.curve_p9", "geom.polar_box", "geom.pseudo_box", "geom.tol", "surface.surface_p2", "topology.edgeuse_p2", "topology.face_p2", "topology.vertex"]
est_lines = 1025
layer = 41
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmEdge::RadialSectorClassify, SmEdge::RadialSectorOfCurveClassify, SmEdge::CalculateBoundingBox, SmEdge::CalculateTightBoundingBox; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.edgeuse_p3"
upstream = ["source/SMLib/src/SmEdgeuse.cpp"]
rust_module = "topology::edgeuse::p3"
depends_on = ["curve.crv_on_surf", "curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "surface.surface_p1", "surface.surface_p2", "surface.surface_p5", "topology.edge", "topology.edgeuse_p1"]
soft_depends_on = ["geom.axis2_placement", "geom.geom_utility_p1", "intersect.surface_drop_lib_p1", "intersect.surface_drop_lib_p3", "nurbs.b_spline_curve_n_lib", "surface.surface_p3", "surface.surface_p4", "surface.surface_p7", "topology.face_p2", "topology.vertex"]
est_lines = 2273
layer = 41
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmEdgeuse::CreateUVTrimCurve, SmEdgeuse::EvaluateBinormal, SmEdgeuse::GetOrCreateUVTrimCurve, SmEdgeuse::NormalizedEvaluate; cycle back-edges (call into later units; stub or co-port): heal.gap(2); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.trimming_tools"
upstream = ["source/SMLib/inc/SmTrimmingTools.h", "source/SMLib/src/SmTrimmingTools.cpp"]
rust_module = "topology::trimming_tools"
depends_on = ["curve.curve_p2", "geom.assert_array", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.point_set", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "topology.edgeuse_p1", "topology.face_p2", "topology.loopuse"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.curve_p6", "curve.curve_p9", "geom.context", "geom.tools", "intersect.curve_class_p1", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surface_p2", "surface.surface_p4", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7", "topology.brep_p8", "topology.proto_topology_p1", "topology.shell", "topology.vertexuse"]
est_lines = 2878
layer = 41
tests = ["SM_API_test:TestSmOrderCurves", "SM_API_test:TestSmCurves", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestSmCreatePlanarFaces", "prog_test:my_test_single_periodic_vertexuse", "SM_API_test:TestSmPlanarFacesFailureCleanup"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "49 fns; largest: SmTrimmingTools::OrderCurvesIntoLoops, SmTrimmingTools::FindOuterLoops, SmTrimmingTools::CheckLoop, SmTrimmingTools::CheckFace; cycle back-edges (call into later units; stub or co-port): topology.face_p3(4), topology.edge(2), topology.face_p1(2), topology.face_p4(2), topology.brep_p2(1), topology.brep_p7(1); unit-SCC #22 (220 units); 168 upstream test entry points reach this unit"
[[unit]]
id = "heal.gap"
upstream = ["source/SMLib/inc/SmGap.h", "source/SMLib/src/SmGap.cpp"]
rust_module = "heal::gap"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p2", "topology.edgeuse_p1", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p6", "geom.extent2d", "intersect.curve_class_p4", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p1", "surface.surface_p5", "topology.edge", "topology.edgeuse_p3", "topology.face_p2", "topology.vertex"]
est_lines = 1475
layer = 42
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "119 fns; largest: SmGapFunction::BuildSampleSet, SmCrvSrfGapFunction::Evaluate, SmCrvCrvGapFunction::Evaluate, SmSrfCrvGapFunction::Evaluate; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "query.loop"
upstream = ["source/SMLib/src/SmLoop.cpp"]
rust_module = "query::loop"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.tol", "geom.vector3d", "topology.loopuse"]
soft_depends_on = ["curve.curve_p3", "curve.curve_p5", "curve.curve_p6", "geom.geom_utility_p1", "geom.solution_array", "surface.surface_p2", "surface.surface_p3", "topology.edge", "topology.edgeuse_p1", "topology.edgeuse_p3", "topology.face_p2"]
est_lines = 830
layer = 42
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "1 fns; largest: SmLoop::ContainsUVPoint; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.face_p4"
upstream = ["source/SMLib/src/SmFace.cpp"]
rust_module = "topology::face::p4"
depends_on = ["curve.crv_on_surf", "curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.curve_class_p7", "intersect.point_class", "topology.edgeuse_p1", "topology.face_p2", "topology.loopuse", "topology.topology", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["geom.context", "intersect.curve_class_p2", "intersect.curve_class_p4", "surface.surface_p1", "surface.surface_p2", "surface.surface_p3", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7", "surface.surface_p8", "topology.edge", "topology.edgeuse_p3", "topology.shell"]
est_lines = 1812
layer = 42
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "10 fns; largest: SmFace::HasSeamProblem, SmFace::FindVertexSector, SmFace::GlobalLineIntersect, SmFace::IsConnectedTo; cycle back-edges (call into later units; stub or co-port): heal.face_props(2), query.face_p2(2), query.face_p3(2); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "query.face_p2"
upstream = ["source/SMLib/inc/SmProtoTopology.h", "source/SMLib/src/SmFace.cpp", "source/SMLib/src/SmProtoTopology.cpp"]
rust_module = "query::face::p2"
depends_on = ["geom.a_object", "geom.extent2d", "geom.object", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class", "topology.face_p2", "topology.face_p4"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p4", "geom.vector2d", "intersect.curve_class_p2", "intersect.curve_class_p5", "intersect.curve_class_p7", "intersect.curve_class_p9", "nurbs.b_spline_surface_p1", "query.loop", "surface.surface_cache_p3", "surface.surface_p1", "surface.surface_p2", "topology.edge", "topology.vertex"]
est_lines = 1161
layer = 43
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "7 fns; largest: SmFace::PointClassify, SmFace::CurveOnClassify, sm_ClassifyParamOnFaces, SmProtoVertex::ContainsPoint; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p10"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p10"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.vertex"]
soft_depends_on = ["geom.context", "geom.extent2d", "geom.geom_utility_p1", "intersect.topology_solver_p2", "nurbs.b_spline_curve_p1", "surface.surface_p1", "topology.brep_data", "topology.edgeuse_p2", "topology.face_p2", "topology.face_p4", "topology.loopuse", "topology.vertexuse"]
est_lines = 1890
layer = 43
tests = ["prog_test:my_test_single_periodic_vertexuse", "SM_API_test:TestSmAdvancedStitch", "SM_API_test:TestSmEdgeCurveOwnership", "SM_API_test:TestSmGetClosestPoint", "SM_API_test:TestSmGetEdges", "SM_API_test:TestSmGetFaces"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmBrep::MakeTopologyFromData, SmBrep::ProjectAndTrim, SmBrep::TestClosureSplitRegion, SmBrep::RemoveAllTopology; cycle back-edges (call into later units; stub or co-port): topology.brep_p1(10), topology.brep_p2(4), topology.brep_p5(4), topology.brep_p4(2), query.brep(1), topology.brep_p6(1), topology.face_p1(1); unit-SCC #22 (220 units); 179 upstream test entry points reach this unit"
[[unit]]
id = "topology.face_p3"
upstream = ["source/SMLib/src/SmFace.cpp"]
rust_module = "topology::face::p3"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.edgeuse_p3", "topology.face_p2", "topology.face_p4", "topology.loopuse", "topology.topology", "topology.vertex"]
soft_depends_on = ["curve.composite_curve_p1", "curve.curve_p4", "curve.curve_p6", "intersect.curve_class_p1", "intersect.curve_class_p3", "intersect.curve_class_p4", "intersect.curve_class_p5", "intersect.point_class", "surface.surface_p1", "surface.surface_p3", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7", "surface.surface_p8", "topology.edgeuse_p2", "topology.vertexuse"]
est_lines = 1881
layer = 43
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "10 fns; largest: SmFace::CreateUVTrimCurves, SmFace::ComputeLoopOrientation, SmFace::FaceIntersect, SmFace::IsDegenerate; cycle back-edges (call into later units; stub or co-port): query.face_p2(2), query.face_p1(1), topology.brep_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.topology_traverser"
upstream = ["source/SMLib/inc/SmTopologyTraverser.h", "source/SMLib/src/SmTopologyTraverser.cpp"]
rust_module = "topology::topology_traverser"
depends_on = ["geom.solution_array", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["geom.context", "geom.extent2d", "geom.tol", "geom.vector3d", "topology.face_p4", "topology.loopuse", "topology.proto_topology_p1", "topology.shell", "topology.topology"]
est_lines = 784
layer = 43
tests = ["prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl_creation_3d", "prog_test:my_test_tsurf_cyl_creation_fast", "prog_test:my_test_tsurf_creation", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "14 fns; largest: sm_ShellConnectivity, SmTopologyTraverser::IsInnerShell, sm_CollectFaces, SmTopologyTraverser::FaceuseTraversal; cycle back-edges (call into later units; stub or co-port): topology.face_p3(1); unit-SCC #22 (220 units); 200 upstream test entry points reach this unit"
[[unit]]
id = "query.face_p3"
upstream = ["source/SMLib/src/SmFace.cpp"]
rust_module = "query::face::p3"
depends_on = ["curve.crv_on_surf", "curve.curve_p2", "curve.line", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "query.face_p2", "surface.surface_p2", "surface.surface_p7", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p4", "topology.loopuse", "topology.topology"]
soft_depends_on = ["intersect.curve_class_p1", "intersect.curve_class_p2", "intersect.curve_class_p7", "intersect.point_class", "query.edge", "query.loop", "surface.surface_p1", "surface.surface_p4", "surface.surface_p5", "topology.edgeuse_p3", "topology.vertex", "topology.vertexuse"]
est_lines = 1620
layer = 44
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "4 fns; largest: SmFace::SectorClassifyCurveOn, sms_FindAndClassifyLoopBisector, SmFace::CalculateTightBoundingBox, sm_FaceClassifyUVLine; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "query.poly"
upstream = ["source/SMLib/inc/SmGraphicsExtern.h", "source/SMLib/inc/SmPoly.h", "source/SMLib/inc/SmPolyMerge.h", "source/SMLib/src/SmPoly.cpp", "source/SMLib/src/SmPolyBrepData.cpp", "source/SM_API/src/SmApiGeneral.cpp"]
rust_module = "query::poly"
depends_on = ["geom.a_object", "geom.axis2_placement", "geom.extent3d", "geom.object", "geom.point_set", "geom.tol", "geom.vector2d", "geom.vector3d", "topology.proto_topology_p1", "topology.topology"]
soft_depends_on = ["geom.extent2d", "geom.geom_utility_p1", "geom.geom_utility_p2", "geom.pseudo_box", "surface.surface_p2", "topology.face_p2", "topology.face_p3", "topology.vertex"]
est_lines = 2119
layer = 44
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "127 fns; largest: SmPolyLoop::ContainsPoint, SmPolyFace::GetNormal, SmPolyEdge::IsDegenerate, SmPolyBrep::Transform; unit-SCC #22 (220 units); hazards: ptr-hash; 319 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p7"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p7"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "nurbs.b_spline_curve_p1", "surface.surface_p1", "surface.surface_p2", "topology.brep_p10", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.proto_topology_p1", "topology.shell", "topology.topology"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p4", "curve.curve_p6", "geom.context", "geom.extent2d", "geom.tools", "intersect.curve_class_p4", "intersect.curve_class_p5", "intersect.point_class", "surface.surface_p11", "topology.brep_data", "topology.edgeuse_p2", "topology.face_p4", "topology.vertexuse"]
est_lines = 2503
layer = 44
tests = ["prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl_creation_3d", "prog_test:my_test_tsurf_cyl_creation_fast", "prog_test:my_test_tsurf_creation", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "6 fns; largest: SmBrep::MakeFaceWithCurves, SmBrep::GlueEdgesGeneral, SmBrep::MakeFace, SmBrep::ReadFromFile; entry points: SmBrep::ReadFromFile; cycle back-edges (call into later units; stub or co-port): topology.brep_p1(5), topology.brep_p2(4), topology.face_p3(4), boolean.merge_p2(2), topology.brep_p3(2), topology.brep_p6(2), topology.topology_traverser(2), query.face_p2(1), topology.brep_p4(1), topology.brep_p5(1), topology.brep_p9(1); unit-SCC #22 (220 units); 196 upstream test entry points reach this unit"
[[unit]]
id = "topology.face_p1"
upstream = ["source/SMLib/src/SmFace.cpp"]
rust_module = "topology::face::p1"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.periodic_extent1d", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "nurbs.b_spline_curve_p1", "surface.surface_p1", "surface.surface_p2", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p3", "topology.face_p4", "topology.loopuse", "topology.vertexuse"]
soft_depends_on = ["curve.line", "geom.axis2_placement", "geom.context", "geom.geom_utility_p1", "intersect.curve_class_p5", "intersect.curve_class_p7", "intersect.point_class", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p2", "surface.surface_p5", "surface.surface_p7", "topology.edge", "topology.edgeuse_p3", "topology.proto_topology_p1", "topology.trimming_tools", "topology.vertex"]
est_lines = 2171
layer = 44
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "14 fns; largest: SmFace::MoveSeam, SmFace::SplitAtSeam, SmFace::CreateOrientedTrimBoundary, SmFace::CalculateUVDomainFromUVTrimCurves; cycle back-edges (call into later units; stub or co-port): heal.gap(1), topology.brep_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "query.face_p1"
upstream = ["source/SMLib/src/SmFace.cpp", "source/SMLib/src/SmRegion.cpp", "source/SMLib/src/SmShell.cpp", "source/SM_API/src/SmApiCurves.cpp"]
rust_module = "query::face::p1"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "intersect.point_class", "query.face_p2", "query.face_p3", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p4", "topology.shell"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p6", "geom.extent1d", "geom.extent2d", "geom.vector2d", "query.edge", "surface.surface_p1", "surface.surface_p4", "surface.surface_p5", "topology.vertex"]
est_lines = 465
layer = 45
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "6 fns; largest: SmFace::Point3DClassify, SmFace::EdgeCurveOnClassify, SmFace::CalculateBoundingBox, SmShell::CalculateBoundingBox; entry points: SmApiEvaluateCurve; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "query.face_p4"
upstream = ["source/SMLib/src/SmFace.cpp"]
rust_module = "query::face::p4"
depends_on = ["geom.context", "geom.object", "intersect.curve_class_p1", "query.face_p3", "topology.face_p2", "topology.loopuse", "topology.topology"]
soft_depends_on = ["geom.vector3d", "intersect.curve_class_p2", "intersect.curve_class_p4", "intersect.point_class", "topology.vertex"]
est_lines = 1432
layer = 45
tests = ["prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal", "prog_test:my_test_missing_poles_refreshes_all_faces", "SM_API_test:TestSmHealBrep", "SM_API_test:TestSmHeal", "prog_test:my_test_MakeFace", "pt_TestFiles/MakeFace/ApproximateSphere.smp"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "1 fns; largest: SmFace::ClassifyLoops; cycle back-edges (call into later units; stub or co-port): heal.face_props(7); unit-SCC #22 (220 units); 59 upstream test entry points reach this unit"
[[unit]]
id = "query.tess"
upstream = ["source/SMLib/inc/SmTess.h", "source/SMLib/src/SmTess.cpp"]
rust_module = "query::tess"
depends_on = ["geom.attribute", "geom.extent2d", "geom.object", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_p1", "query.poly", "surface.surface_cache_p1", "surface.surface_cache_p2", "surface.surface_cache_p3", "surface.trim_srf_cache"]
soft_depends_on = ["geom.extent1d", "geom.tree", "surface.surface_p2", "surface.surface_p7", "topology.face_p2"]
est_lines = 838
layer = 45
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "21 fns; largest: SmTessSrfCache::BuildTree, SmTessSrfCache::MarkFaceContainment, SmTessSrfCache::ImplantUVSegment, SmTessSrfCache::BuildTreeWithSubdivision; unit-SCC #22 (220 units); only 8 of 838 lines survive RTA (reached via virtual dispatch to classes no in-scope entry point constructs); low priority / likely deferrable; 319 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p1"
upstream = ["source/SMLib/inc/SmBrep.h", "source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p1"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.context", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.edgeuse_p3", "topology.face_p2", "topology.loopuse", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p1", "curve.curve_p3", "curve.curve_p5", "curve.curve_p6", "geom.extent3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_n_lib_p2", "surface.surface_p1", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7", "surface.surface_p8", "topology.face_p1", "topology.face_p3"]
est_lines = 2454
layer = 45
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "50 fns; largest: SmBrep::HealBrep, SmBrep::CreateCornerBlend, SmBrep::CreateEdgeEdgeBlend, sm_MakeVertexSplitUVTrimCurve; cycle back-edges (call into later units; stub or co-port): query.brep(3), heal.heal_data_p1(2); unit-SCC #22 (220 units); hazards: ptr-hash; 319 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p6"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p6"
depends_on = ["geom.context", "geom.object", "geom.tol", "geom.vector3d", "topology.edge", "topology.edgeuse_p1", "topology.edgeuse_p2", "topology.edgeuse_p3", "topology.face_p3", "topology.loopuse", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.topology_traverser", "topology.vertex"]
soft_depends_on = ["geom.extent1d", "geom.extent2d", "geom.extent3d", "intersect.point_class", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "surface.surface_p1", "surface.surface_p2", "topology.face_p1", "topology.vertexuse"]
est_lines = 1479
layer = 45
tests = ["prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl_creation_3d", "prog_test:my_test_tsurf_cyl_creation_fast", "prog_test:my_test_tsurf_creation", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "3 fns; largest: SmBrep::TestClosureSplitRegion, SmBrep::MakeFaceTopology, SmBrep::CopyEdges; cycle back-edges (call into later units; stub or co-port): topology.brep_p1(3), topology.brep_p2(2), topology.brep_p5(2), query.brep(1); unit-SCC #22 (220 units); 196 upstream test entry points reach this unit"
[[unit]]
id = "heal.face_props"
upstream = ["source/SMLib/inc/SmFaceProps.h", "source/SMLib/inc/SmLoopProps.h", "source/SMLib/src/SmFaceProps.cpp", "source/SMLib/src/SmLoopProps.cpp"]
rust_module = "heal::face_props"
depends_on = ["geom.tol", "geom.vector3d", "intersect.curve_class_p1", "topology.face_p2", "topology.loopuse"]
soft_depends_on = ["geom.extent2d", "geom.object", "intersect.curve_class_p2", "query.face_p4", "surface.surface_p2", "surface.surface_p3", "surface.surface_p7", "topology.edgeuse_p1", "topology.face_p4", "topology.vertex", "topology.vertexuse"]
est_lines = 1410
layer = 46
tests = ["prog_test:my_test_trimming_tools", "SM_API_test:TestSmTrimSurfaceWith3dCurves", "prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal", "prog_test:my_test_missing_poles_refreshes_all_faces", "SM_API_test:TestSmHealBrep"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "25 fns; largest: SmFaceProps::SetProps_Stage3, SmFaceProps::SetProps_Stage2, SmLoopProps::SetProps, SmFaceProps::ReSet; unit-SCC #22 (220 units); 100 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_cache"
upstream = ["source/SMLib/inc/SmBrepCache.h", "source/SMLib/src/SmBrepCache.cpp"]
rust_module = "topology::brep_cache"
depends_on = ["geom.extent3d", "geom.object", "geom.tree", "geom.vector3d", "topology.brep_p1", "topology.edge"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p6", "geom.a_object", "geom.tol", "surface.surface_p1", "surface.surface_p2", "topology.face_p2", "topology.face_p4", "topology.vertex"]
est_lines = 389
layer = 46
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "10 fns; largest: SmBrepCache::BuildTrees, SmBrepCache::ReSizeTrees, SmBrepCache::SmBrepCache, SmBrepCache::~SmBrepCache; cycle back-edges (call into later units; stub or co-port): query.poly(10), query.face_p1(2), query.brep(1), query.edge(1); unit-SCC #22 (220 units); only 145 of 389 lines survive RTA (reached via virtual dispatch to classes no in-scope entry point constructs); low priority / likely deferrable; 319 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p4"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p4"
depends_on = ["geom.context", "geom.extent2d", "geom.object", "geom.vector2d", "topology.brep_p1", "topology.edge", "topology.edgeuse_p1", "topology.face_p1", "topology.face_p2", "topology.loopuse", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p2", "geom.vector3d", "surface.surface_p1", "surface.surface_p2", "surface.surface_p7", "topology.edgeuse_p2", "topology.edgeuse_p3", "topology.face_p3", "topology.face_p4", "topology.topology_traverser"]
est_lines = 2113
layer = 46
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmBrep::DeleteEdge, SmBrep::ShrinkGeometry, SmBrep::~SmBrep, SmBrep::DeleteVertex; cycle back-edges (call into later units; stub or co-port): topology.brep_p2(3), heal.stitch_p1(2), heal.stitch_p2(1), query.brep(1); unit-SCC #22 (220 units); hazards: tbb; 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p9"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p9"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.context", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.tol", "geom.vector3d", "intersect.point_class", "surface.surface_p2", "topology.brep_p1", "topology.edge", "topology.edgeuse_p1", "topology.face_p1", "topology.face_p2", "topology.face_p3", "topology.loopuse", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p5", "geom.axis2_placement", "geom.vector2d", "intersect.surface_drop_lib_p1", "intersect.surface_drop_lib_p3", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "surface.surface_p1", "surface.surface_p3", "surface.surface_p5", "topology.edgeuse_p2", "topology.face_p4"]
est_lines = 2443
layer = 46
tests = ["prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl_creation_3d", "prog_test:my_test_tsurf_cyl_creation_fast", "prog_test:my_test_tsurf_creation", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "6 fns; largest: SmBrep::MakeEdgeInFaceWithVU, SmBrep::FindInfiniteRegion, SmBrep::MakeVertexSplitEdge, SmBrep::MakeVertexLoop; cycle back-edges (call into later units; stub or co-port): topology.brep_p2(9), query.brep(1), query.face_p1(1); unit-SCC #22 (220 units); 200 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p2"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p2"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.context", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p2", "topology.brep_cache", "topology.brep_p1", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p3", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p6", "curve.curve_p8", "geom.tree", "geom.vector2d", "intersect.curve_class_p2", "intersect.curve_class_p4", "intersect.curve_class_p5", "intersect.curve_class_p7", "intersect.topology_solver_p2", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "surface.plane_p1", "surface.surface_p1", "surface.surface_p11", "surface.surface_p4", "topology.edgeuse_p2", "topology.edgeuse_p3", "topology.face_p1", "topology.face_p4"]
est_lines = 2443
layer = 47
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "23 fns; largest: SmBrep::MateLaminaEdgeToSurface, SmBrep::MergeCurvesOnSurface, SmBrep::Notify, SmBrep::LocalCurveSector; cycle back-edges (call into later units; stub or co-port): query.brep(2), query.edge(2), query.face_p1(2), query.face_p2(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p5"
upstream = ["source/SMLib/src/SmBrep.cpp"]
rust_module = "topology::brep::p5"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p2", "topology.brep_p1", "topology.brep_p4", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p4", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p5", "curve.curve_p6", "geom.axis2_placement", "geom.context", "geom.extent2d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_p1", "surface.surface_p1", "topology.edgeuse_p3", "topology.face_p3"]
est_lines = 2193
layer = 47
tests = ["prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl_creation_3d", "prog_test:my_test_tsurf_cyl_creation_fast", "prog_test:my_test_tsurf_creation", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "14 fns; largest: SmBrep::RemoveTopologicalEdgesAndVertices, SmBrep::CombineCoincidentVertices, SmBrep::DeleteTopologicalVertex, SmBrep::GlueVertices; cycle back-edges (call into later units; stub or co-port): topology.brep_p3(8), topology.brep_p2(5), heal.stitch_p1(3), topology.brep_p9(3), heal.stitch_p2(2); unit-SCC #22 (220 units); hazards: ptr-iter; 200 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_geom_p1"
upstream = ["source/SMLib/inc/SmFilletGeom.h", "source/SMLib/src/SmFilletGeom.cpp"]
rust_module = "blend::fillet_geom::p1"
depends_on = ["curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.point_class", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p2", "topology.brep_p1", "topology.brep_p2", "topology.edge", "topology.edgeuse_p1", "topology.edgeuse_p2", "topology.proto_topology_p1", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.hermite_curve", "geom.context", "geom.geom_utility_p1", "intersect.curve_class_p1", "intersect.surface_drop_lib_p3", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "query.face_p1", "surface.surface_p1", "surface.surface_p11", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7", "surface.surface_p8", "topology.face_p1", "topology.face_p2", "topology.shell"]
est_lines = 2113
layer = 48
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "111 fns; largest: sm_ExamineNFixFilletGeoms, sm_TwoPntsIntersection, SmFilletEdge::FindFilletBrepEdge, sm_InterpolateEndptsAndTangents; cycle back-edges (call into later units; stub or co-port): blend.fillet_solver_p1(6), blend.fillet_solver_p2(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "heal.heal_data_p2"
upstream = ["source/SMLib/inc/SmEdgeProps.h", "source/SMLib/inc/SmHealProbArray.h", "source/SMLib/inc/SmVertexProps.h", "source/SMLib/src/SmEdgeProps.cpp", "source/SMLib/src/SmHealData.cpp", "source/SMLib/src/SmVertexProps.cpp"]
rust_module = "heal::heal_data::p2"
depends_on = ["geom.extent1d", "geom.tol", "heal.face_props", "topology.edge", "topology.vertex"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p4", "geom.extent3d", "geom.hash_table", "geom.object", "geom.vector3d", "heal.gap", "topology.brep_p2", "topology.edgeuse_p1", "topology.face_p3", "topology.topology", "topology.vertexuse"]
est_lines = 2160
layer = 48
tests = ["prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal", "prog_test:my_test_missing_poles_refreshes_all_faces", "SM_API_test:TestSmHealBrep", "SM_API_test:TestSmHeal", "prog_test:my_test_MakeFace", "pt_TestFiles/MakeFace/ApproximateSphere.smp"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "52 fns; largest: SmHealData::SetupEmptyProbArrays, SmHealData::Fix_TolSizes, SmHealData::Cache_CoinVertices, SmEdgeProps::SetProps; unit-SCC #22 (220 units); 59 upstream test entry points reach this unit"
[[unit]]
id = "mass.integrator"
upstream = ["source/SMLib/inc/SmIntegrator.h", "source/SMLib/src/SmBrep.cpp", "source/SMLib/src/SmEdge.cpp", "source/SMLib/src/SmFace.cpp", "source/SMLib/src/SmIntegrator.cpp", "source/SM_API/src/SmApiQueries.cpp"]
rust_module = "mass::integrator"
depends_on = ["geom.a_object", "geom.extent3d", "geom.object", "geom.vector3d", "topology.brep_p1", "topology.brep_p2", "topology.edge", "topology.edgeuse_p1", "topology.face_p1", "topology.face_p2"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p5", "geom.attribute", "geom.context", "geom.extent1d", "geom.extent2d", "geom.tol", "nurbs.b_spline_curve_p1", "topology.shell", "topology.vertex"]
est_lines = 1031
layer = 48
tests = ["prog_test:my_test_curve_interface", "prog_test:my_test_methods", "SM_API_test:TestSmCreateSkinPrimitive", "prog_test:my_test_bsplinecurve", "prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "25 fns; largest: SmBrep::ComputePreciseProperties, SmODEIntegrator::RungeKuttaODEIntegrate, SmFace::ComputePreciseProperties, SmApiBrepComputeMassProperties; entry points: SmApiBrepComputeArea, SmApiBrepComputeMassProperties, SmApiBrepComputeVolume, SmApiEdgeComputeLength, SmApiFaceComputeArea, SmApiFaceComputeCentroid; cycle back-edges (call into later units; stub or co-port): query.brep(2), query.face_p1(2); unit-SCC #22 (220 units); 146 upstream test entry points reach this unit"
[[unit]]
id = "query.brep"
upstream = ["source/SMLib/inc/SmPolyDecimate.h", "source/SMLib/src/SmBrep.cpp", "source/SMLib/src/SmPolyDecimate.cpp", "source/SM_API/src/SmApiSurfaces.cpp"]
rust_module = "query::brep"
depends_on = ["geom.attribute", "geom.extent3d", "geom.object", "geom.solution_array", "geom.vector3d", "intersect.point_class", "topology.brep_p1", "topology.brep_p2"]
soft_depends_on = ["geom.extent2d", "geom.tol", "intersect.topology_solver_p2", "query.edge", "query.face_p1", "query.face_p3", "surface.surface_p1", "surface.surface_p2", "surface.surface_p7", "topology.edge", "topology.face_p2", "topology.vertex"]
est_lines = 517
layer = 48
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "17 fns; largest: SmBrep::Point3DClassify, SmBrep::CalculateBoundingBox, SmBrep::CalculateTightBoundingBox, SmApiEvaluateSurfaceDerivatives; entry points: SmApiEvaluateSurfaceDerivatives, SmApiEvaluateSurfaceNormal, SmApiEvaluateSurfacePoint; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "topology.brep_p3"
upstream = ["source/SMLib/src/SmBrep.cpp", "source/SM_API/src/SmApiQueries.cpp"]
rust_module = "topology::brep::p3"
depends_on = ["curve.curve_p2", "geom.context", "geom.extent1d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p1", "surface.surface_p1", "surface.surface_p2", "topology.brep_p1", "topology.brep_p2", "topology.brep_p4", "topology.brep_p9", "topology.edge", "topology.edgeuse_p1", "topology.edgeuse_p2", "topology.face_p1", "topology.face_p2", "topology.loopuse", "topology.proto_topology_p1", "topology.shell", "topology.topology", "topology.topology_traverser", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["curve.crv_on_surf", "curve.curve_p1", "curve.curve_p5", "geom.extent2d", "geom.vector2d", "intersect.topology_solver_p2", "nurbs.b_spline_surface_n_lib_p1", "surface.offset_surface", "surface.surface_p11", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7", "topology.edgeuse_p3", "topology.face_p3", "topology.face_p4", "topology.trimming_tools"]
est_lines = 2503
layer = 48
tests = ["prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl_creation_3d", "prog_test:my_test_tsurf_cyl_creation_fast", "prog_test:my_test_tsurf_creation", "SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOutputStatus"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "11 fns; largest: SmBrep::MergeBrep, SmBrep::OrientTrimmedSurfaces, SmBrep::DeleteFace, SmBrep::SqueezeEdge; entry points: SmApiBrepCopy; cycle back-edges (call into later units; stub or co-port): blend.fillet_geom_p1(2), query.brep(1); unit-SCC #22 (220 units); hazards: ptr-hash; 200 upstream test entry points reach this unit"
[[unit]]
id = "topology.proto_topology_p2"
upstream = ["source/SMLib/src/SmProtoTopology.cpp"]
rust_module = "topology::proto_topology::p2"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class", "topology.edge", "topology.face_p2", "topology.proto_topology_p1", "topology.topology"]
soft_depends_on = ["curve.curve_p1", "geom.extent2d", "geom.vector2d", "intersect.curve_class_p7", "surface.surface_p2", "surface.surface_p5", "topology.brep_p5", "topology.edgeuse_p3", "topology.face_p1"]
est_lines = 2091
layer = 48
tests = ["prog_test:my_test_analytic_tsurf_creation", "prog_test:my_test_get_loop_crossings", "SM_API_test:TestSmBoolean2DPlanarUnion", "prog_test:my_test_bbu", "SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "18 fns; largest: SmProtoTopologyManager::UpdateFaces, SmProtoTopologyManager::UpdateEdges, SmEdgeDefinition::Imprint, SmProtoTopologyManager::CanCombineVertexDefinitions; cycle back-edges (call into later units; stub or co-port): query.face_p2(1); unit-SCC #22 (220 units); 112 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_solver_p1"
upstream = ["source/SMLib/inc/SmFilletSolver.h", "source/SMLib/src/SmFilletSolver.cpp"]
rust_module = "blend::fillet_solver::p1"
depends_on = ["blend.fillet_geom_p1", "curve.curve_p2", "curve.iso_curve", "geom.extent1d", "geom.extent2d", "geom.matrix", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex"]
soft_depends_on = ["blend.fillet_custom_solver", "curve.curve_p6", "intersect.curve_class_p1", "intersect.curve_class_p3", "intersect.point_class", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_p1", "surface.cone_p1", "surface.cone_p2", "surface.surface_p1", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7", "surface.surface_p8", "topology.brep_p1", "topology.edgeuse_p2", "topology.edgeuse_p3", "topology.face_p2", "topology.loopuse", "topology.proto_topology_p1", "topology.shell", "topology.vertexuse"]
est_lines = 1861
layer = 49
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "91 fns; largest: SmFilletSolver::SplitFilletGeomAtSideEdge, SmFilletSphereSolveENFO::Evaluate, sm_ComputeSupportEdge, SmRailUVCurveIntersectENFO::Evaluate; cycle back-edges (call into later units; stub or co-port): blend.fillet_standard_solver_p1(7), blend.fillet_geom_p5(5), blend.fillet_geom_p6(4), blend.fillet_geom_p2(3), blend.fillet_corner_p1(2), blend.fillet_executive_p1(2), blend.fillet_geom_p3(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "blend.hcr"
upstream = ["source/SMLib/inc/SmHCR.h", "source/SMLib/src/SmHCR.cpp"]
rust_module = "blend::hcr"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent3d", "geom.solution_array", "geom.tol", "geom.tree", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class", "intersect.ray_tracer", "surface.surface_p2", "topology.brep_p1", "topology.edge", "topology.edgeuse_p1", "topology.face_p2"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p5", "curve.curve_p6", "curve.curve_p9", "geom.a_object", "geom.context", "geom.extent2d", "geom.grid", "geom.object", "intersect.curve_class_p2", "intersect.curve_class_p3", "intersect.curve_class_p4", "intersect.curve_class_p7", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "query.brep", "surface.surface_p1", "topology.brep_p2", "topology.brep_p3", "topology.brep_p4", "topology.brep_p5", "topology.edgeuse_p3", "topology.face_p1", "topology.face_p4", "topology.loopuse", "topology.shell", "topology.topology", "topology.vertex", "topology.vertexuse"]
est_lines = 1875
layer = 49
tests = ["SM_API_test:TestSmCreateSilhouetteCurves", "prog_test:my_test_tsurface_point_extrema", "prog_test:my_test_one_tess", "prog_test:my_test_tsurface_tsurface_solve", "prog_test:my_test_ppu", "prog_test:my_sweep_null_region_counts"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "14 fns; largest: SmHCR::ComputeEdgeVisibility, SmHCR::ComputeSilhouettes, SmHCR::IntersectCurveWithSilhouettes, SmHCR::ComputeGlobalVisibility; unit-SCC #22 (220 units); hazards: ptr-hash,ptr-iter; 89 upstream test entry points reach this unit"
[[unit]]
id = "heal.heal_data_p1"
upstream = ["source/SMLib/src/SmHealData.cpp", "source/SM_API/src/SmApiHeal.cpp"]
rust_module = "heal::heal_data::p1"
depends_on = ["heal.heal_data_p2", "topology.brep_p1", "topology.topology"]
soft_depends_on = ["geom.context", "geom.hash_table", "geom.object", "heal.face_props", "topology.brep_p5", "topology.brep_p6", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p3", "topology.shell", "topology.topology_traverser"]
est_lines = 922
layer = 49
tests = ["prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal", "prog_test:my_test_missing_poles_refreshes_all_faces", "SM_API_test:TestSmHealBrep", "SM_API_test:TestSmHeal", "prog_test:my_test_MakeFace", "pt_TestFiles/MakeFace/ApproximateSphere.smp"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "11 fns; largest: SmHealData::Cache_FaceProps_Stage3, SmHealData::Cache_FaceProps_Stage2, SmHealData::Fix_BadSheets, SmHealData::HealBrep; entry points: SmApiHealBrep; cycle back-edges (call into later units; stub or co-port): heal.heal_data_p3(1); unit-SCC #22 (220 units); 59 upstream test entry points reach this unit"
[[unit]]
id = "heal.stitch_p1"
upstream = ["source/SMLib/inc/SmStitch.h", "source/SMLib/src/SmStitch.cpp", "source/SM_API/src/SmApiBrep.cpp"]
rust_module = "heal::stitch::p1"
depends_on = ["curve.curve_p2", "curve.curve_p6", "geom.context", "geom.extent1d", "geom.extent3d", "geom.object", "geom.tree", "geom.vector3d", "topology.brep_p1", "topology.brep_p5", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p4", "topology.topology", "topology.vertex"]
soft_depends_on = ["geom.tol", "query.brep", "topology.brep_p2", "topology.brep_p7", "topology.brep_p9", "topology.edgeuse_p3", "topology.face_p1"]
est_lines = 2037
layer = 49
tests = ["prog_test:my_test_single_periodic_vertexuse", "SM_API_test:TestSmAdvancedStitch", "SM_API_test:TestSmEdgeCurveOwnership", "SM_API_test:TestSmGetClosestPoint", "SM_API_test:TestSmGetEdges", "SM_API_test:TestSmGetFaces"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "19 fns; largest: SmStitch::StitchVertexPairs, SmStitch::DoSimpleFaceStitch, SmStitchCallback::SelectTopologyToKeep, SmStitch::StitchEdgesOfVertices; entry points: SmApiSimpleFaceStitch, SmApiStitch, SmApiStitchAdvanced, SmApiStitchIntoShell, SmApiStitchIntoSolid, SmApiUnifyNormals; cycle back-edges (call into later units; stub or co-port): heal.stitch_p2(3), boolean.merge_p2(2), sweep.topology_sweep(1); unit-SCC #22 (220 units); 179 upstream test entry points reach this unit"
[[unit]]
id = "primitive.primitive_creation_p1"
upstream = ["source/SMLib/inc/SmPrimitiveCreation.h", "source/SMLib/src/SmPrimitiveCreation.cpp"]
rust_module = "primitive::primitive_creation::p1"
depends_on = ["curve.curve_p2", "curve.line", "geom.axis2_placement", "geom.context", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.cone_p1", "surface.plane_p1", "surface.surf_of_extrusion_p1", "surface.surface_p2", "topology.brep_p1", "topology.brep_p5", "topology.brep_p8", "topology.edge", "topology.edgeuse_p1", "topology.face_p2"]
soft_depends_on = ["curve.curve_p3", "curve.curve_p5", "curve.curve_p6", "curve.curve_p8", "curve.ellipse_p1", "geom.vector2d", "intersect.surface_drop_lib_p3", "nlib.crv_basic", "nlib.crv_common", "nlib.geom", "nlib.srf_basic", "nlib.srf_common", "nlib.srf_nurb", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "surface.sphere", "surface.surface_p3", "surface.surface_p7", "surface.torus", "topology.brep_p3", "topology.brep_p4", "topology.brep_p7", "topology.face_p4", "topology.shell", "topology.topology"]
est_lines = 2322
layer = 49
tests = ["SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestSmCreatePlane", "SM_API_test:TestSmCreateSwungPrimitive", "prog_test:my_test_tracks_nested_geometry_and_resets", "SM_API_test:TestSmAdvancedStitch", "SM_API_test:TestSmEdgeCurveOwnership"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "19 fns; largest: SmPrimitiveCreation::Boolean2D, SmPrimitiveCreation::CreateLinearSweep, SmPrimitiveCreation::CreateSphereNoPole, sm_CreateAnalyticRotationalSweep; cycle back-edges (call into later units; stub or co-port): boolean.topology_intersector_p1(5), sweep.topology_sweep(4), boolean.topology_intersector_p2(3); unit-SCC #22 (220 units); 131 upstream test entry points reach this unit"
[[unit]]
id = "query.api_queries"
upstream = ["source/SM_API/src/SmApiQueries.cpp"]
rust_module = "query::api_queries"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.point_class", "intersect.topology_solver_p2", "query.brep", "query.edge", "topology.brep_p1", "topology.edge"]
soft_depends_on = ["curve.curve_p1", "geom.tools", "query.face_p1", "query.face_p2", "query.face_p3", "surface.surface_p2", "surface.surface_p5", "topology.brep_p2", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p4", "topology.loopuse", "topology.shell", "topology.vertex"]
est_lines = 809
layer = 49
tests = ["SM_API_test:TestSmIntersectCurveSurface", "SM_API_test:TestSmGetClosestPoint", "SM_API_test:TestSmGetEdges", "SM_API_test:TestSmGetFaces", "SM_API_test:TestSmFindFaces", "SM_API_test:TestSmFindEdge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "27 fns; largest: SmApiBrepRelationship, SmApiSurfaceClosestPoint, SmApiFaceGetBoundaryLoops, SmApiFaceClosestPoint; entry points: SmApiBrepBoundingBox, SmApiBrepClosestPoint, SmApiBrepClosestPointAll, SmApiBrepDistance, SmApiBrepIsManifoldSolid, SmApiBrepRelationship, SmApiCurveClosestPoint, SmApiCurveClosestPointAll, SmApiEdgeBoundingBox, SmApiEdgeClassifyParameter, SmApiEdgeClosestPoint, SmApiEdgeParameterRange, SmApiEdgeTangent, SmApiFaceBoundingBox, SmApiFaceClassifyUV, SmApiFaceClosestPoint, SmApiFaceGetBoundaryLoops, SmApiFaceInternalPoint, SmApiFindEdge, SmApiFindFaces, SmApiGetClosestPoint, SmApiGetEdges, SmApiGetFaces, SmApiSurfaceClosestPoint, SmApiVertexGetPoint; 24 upstream test entry points reach this unit"
[[unit]]
id = "topology.proto_topology_p3"
upstream = ["source/SMLib/src/SmProtoTopology.cpp"]
rust_module = "topology::proto_topology::p3"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "intersect.curve_class_p1", "topology.edge", "topology.proto_topology_p1", "topology.proto_topology_p2", "topology.topology"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p6", "curve.curve_p8", "intersect.curve_class_p4", "intersect.curve_class_p5", "intersect.curve_class_p7", "intersect.point_class", "topology.brep_p3", "topology.brep_p4", "topology.brep_p5", "topology.vertex"]
est_lines = 1577
layer = 49
tests = ["prog_test:my_test_analytic_tsurf_creation", "prog_test:my_test_get_loop_crossings", "SM_API_test:TestSmBoolean2DPlanarUnion", "prog_test:my_test_bbu", "SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "7 fns; largest: SmProtoTopologyManager::ResolveOverlappingProtoEdges, SmProtoTopologyManager::GlueCoincidentBrepVertices, SmProtoTopologyManager::SplitIntersectingProtoEdges, SmProtoTopologyManager::FindOrCreateProtoEdge; cycle back-edges (call into later units; stub or co-port): boolean.topology_intersector_p1(2), boolean.topology_intersector_p2(1), query.brep(1), query.face_p2(1); unit-SCC #22 (220 units); 112 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_intersector"
upstream = ["source/SMLib/inc/SmFilletIntersector.h", "source/SMLib/src/SmFilletIntersector.cpp"]
rust_module = "blend::fillet_intersector"
depends_on = ["blend.fillet_geom_p1", "blend.fillet_solver_p1", "curve.crv_on_surf", "curve.hermite_curve", "geom.extent1d", "geom.extent2d", "geom.vector2d", "geom.vector3d", "intersect.adv_surface_intersector", "intersect.surface_intersector_p1", "surface.surface_p2", "topology.edge"]
soft_depends_on = ["curve.curve_p2", "curve.curve_p3", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "nurbs.b_spline_curve_p1", "surface.surface_p1", "topology.edgeuse_p1"]
est_lines = 1708
layer = 50
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "12 fns; largest: SmFilletIntersector::ComputeNextPoint, SmFilletIntersector::FlushCurve, SmFilletIntersector::TestSpanAccuracy, sm_FlushCrv; cycle back-edges (call into later units; stub or co-port): blend.fillet_solver_p2(2), blend.fillet_solver_p4(2), blend.fillet_solver_p3(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_solver_p5"
upstream = ["source/SMLib/src/SmFilletSolver.cpp"]
rust_module = "blend::fillet_solver::p5"
depends_on = ["blend.fillet_geom_p1", "blend.fillet_solver_p1", "curve.curve_p2", "geom.object", "geom.solution_array", "intersect.curve_class_p1", "surface.offset_surface", "topology.edge"]
soft_depends_on = ["curve.curve_p1", "geom.extent1d", "geom.tol", "geom.vector3d", "intersect.curve_class_p2", "intersect.curve_class_p4", "intersect.point_class", "query.face_p2", "surface.surf_of_revolution_p1", "surface.surf_of_revolution_p2", "surface.surface_p2", "topology.edgeuse_p1", "topology.edgeuse_p2", "topology.face_p2", "topology.vertex"]
est_lines = 848
layer = 50
tests = ["SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge", "SM_API_test:TestSmVariableRadiusFillet", "SM_API_test:TestSmSetBevelCorners"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "2 fns; largest: SmFilletSolver::ProcessRollOver, SmFilletSolver::TestRollOver; cycle back-edges (call into later units; stub or co-port): blend.fillet_solver_p3(3), blend.fillet_geom_p2(2), blend.fillet_geom_p3(2), blend.fillet_geom_p5(2), blend.fillet_solver_p2(2), blend.fillet_executive_p1(1); unit-SCC #22 (220 units); 25 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_standard_solver_p1"
upstream = ["source/SMLib/inc/SmFilletStandardSolver.h", "source/SMLib/src/SmFilletStandardSolver.cpp"]
rust_module = "blend::fillet_standard_solver::p1"
depends_on = ["blend.fillet_solver_p1", "curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.offset_surface", "surface.surface_p1", "surface.surface_p2", "surface.surface_p7", "topology.edgeuse_p1"]
soft_depends_on = ["blend.fillet_custom_solver", "curve.curve_p1", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "geom.matrix", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_n_lib_p2", "surface.surface_p3", "surface.surface_p4", "surface.surface_p5", "topology.edge", "topology.edgeuse_p3", "topology.face_p2", "topology.loopuse"]
est_lines = 2336
layer = 50
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "51 fns; largest: SmCircularCrossSectionFSG::CreateSurfaceFromCurves, SmBlendCurveCrossSectionFSG::CreateSurfaceFromCurves, SmConstantDistanceFS::LoadJacobian, SmConstantDistanceFS::LoadInitialValues; cycle back-edges (call into later units; stub or co-port): blend.fillet_executive_p1(7); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "boolean.topology_intersector_p1"
upstream = ["source/SMLib/inc/SmTopologyIntersector.h", "source/SMLib/src/SmTopologyIntersector.cpp"]
rust_module = "boolean::topology_intersector::p1"
depends_on = ["curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.point_class", "topology.edge", "topology.face_p2", "topology.face_p4", "topology.proto_topology_p1", "topology.proto_topology_p2", "topology.proto_topology_p3", "topology.vertex"]
soft_depends_on = ["curve.curve_p6", "curve.curve_p8", "geom.context", "intersect.curve_class_p4", "intersect.curve_class_p5", "intersect.curve_class_p6", "intersect.topology_solver_p2", "nurbs.b_spline_curve_p1", "query.edge", "query.face_p1", "query.face_p2", "surface.surface_p2", "surface.surface_p5", "surface.surface_p7", "surface.surface_p8", "topology.brep_p1", "topology.brep_p3", "topology.brep_p5", "topology.brep_p7", "topology.brep_p9", "topology.edgeuse_p1", "topology.face_p1", "topology.face_p3"]
est_lines = 2491
layer = 50
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "38 fns; largest: SmTopologyIntersector::EdgeFaceIntersect, SmTopologyIntersector::FaceFaceIntersect, SmTopologyIntersector::FixupMidPointClassMates, SmTopologyIntersector::FaceFaceCoincidence; unit-SCC #22 (220 units); hazards: ptr-hash,ptr-iter; 317 upstream test entry points reach this unit"
[[unit]]
id = "heal.heal_data_p3"
upstream = ["source/SMLib/src/SmHealData.cpp"]
rust_module = "heal::heal_data::p3"
depends_on = ["geom.context", "heal.face_props", "heal.heal_data_p1", "heal.heal_data_p2", "topology.brep_p5", "topology.edge", "topology.face_p2", "topology.loopuse", "topology.topology"]
soft_depends_on = ["geom.object", "geom.tol", "geom.vector3d", "intersect.curve_class_p2", "intersect.curve_class_p5", "intersect.curve_class_p7", "surface.surface_p2", "surface.surface_p3", "surface.surface_p7", "topology.brep_p1", "topology.brep_p3", "topology.brep_p4", "topology.brep_p8", "topology.edgeuse_p1", "topology.face_p1", "topology.face_p4", "topology.shell", "topology.vertex", "topology.vertexuse"]
est_lines = 1967
layer = 50
tests = ["prog_test:my_test_closed_sphere_properties", "prog_test:my_test_squeeze_edge_tracks_removal", "prog_test:my_test_missing_poles_refreshes_all_faces", "SM_API_test:TestSmHealBrep", "SM_API_test:TestSmHeal", "prog_test:my_test_MakeFace", "pt_TestFiles/MakeFace/ApproximateSphere.smp"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "9 fns; largest: SmHealData::HealTgts, SmHealData::Fix_SplitEdgesAtSeam, SmHealData::Fix_DegenFaces, SmHealData::UpdateTargetLists; unit-SCC #22 (220 units); 59 upstream test entry points reach this unit"
[[unit]]
id = "heal.stitch_p2"
upstream = ["source/SMLib/src/SmStitch.cpp"]
rust_module = "heal::stitch::p2"
depends_on = ["curve.curve_p2", "curve.curve_p6", "geom.extent1d", "geom.extent3d", "geom.object", "geom.tol", "geom.tree", "geom.vector3d", "heal.stitch_p1", "topology.brep_p1", "topology.edge", "topology.face_p3", "topology.vertex"]
soft_depends_on = ["geom.context", "query.brep", "topology.brep_p2", "topology.brep_p3", "topology.brep_p5", "topology.brep_p7"]
est_lines = 1906
layer = 50
tests = ["prog_test:my_test_single_periodic_vertexuse", "SM_API_test:TestSmAdvancedStitch", "SM_API_test:TestSmEdgeCurveOwnership", "SM_API_test:TestSmGetClosestPoint", "SM_API_test:TestSmGetEdges", "SM_API_test:TestSmGetFaces"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmStitch::DoStitching, SmStitch::StitchVertexPairs, SmStitch::SplitEdgesWithVertices, SmStitch::StitchIntoSolid; unit-SCC #22 (220 units); 179 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_solver_p4"
upstream = ["source/SMLib/src/SmFilletSolver.cpp"]
rust_module = "blend::fillet_solver::p4"
depends_on = ["blend.fillet_geom_p1", "blend.fillet_intersector", "blend.fillet_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.solution_array", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "geom.axis2_placement", "geom.geom_utility_p1", "intersect.surface_intersector_p4", "nurbs.b_spline_curve_p2", "surface.surface_p7", "topology.edgeuse_p3", "topology.vertex", "topology.vertexuse"]
est_lines = 1404
layer = 51
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "2 fns; largest: SmFilletSolver::CalcFilletGeom, SmFilletSolver::ComputePointValues; cycle back-edges (call into later units; stub or co-port): blend.fillet_solver_p2(3), blend.fillet_solver_p3(2), blend.fillet_geom_p3(1), blend.fillet_geom_p4(1), blend.fillet_geom_p5(1); unit-SCC #22 (220 units); 150 upstream test entry points reach this unit"
[[unit]]
id = "boolean.topology_intersector_p2"
upstream = ["source/SMLib/src/SmTopologyIntersector.cpp"]
rust_module = "boolean::topology_intersector::p2"
depends_on = ["boolean.topology_intersector_p1", "curve.curve_p2", "geom.extent1d", "geom.tol", "intersect.curve_class_p1", "intersect.point_class", "topology.edge", "topology.face_p2", "topology.face_p4", "topology.proto_topology_p1", "topology.proto_topology_p3", "topology.vertex"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p6", "geom.extent3d", "geom.object", "geom.solution_array", "geom.vector3d", "nurbs.b_spline_curve_p1", "query.edge", "query.face_p1", "surface.surface_p6", "surface.surface_p8", "topology.brep_p1", "topology.brep_p3", "topology.brep_p4", "topology.brep_p5", "topology.brep_p7", "topology.face_p1", "topology.face_p3"]
est_lines = 2195
layer = 51
tests = ["prog_test:my_test_analytic_tsurf_creation", "prog_test:my_test_get_loop_crossings", "SM_API_test:TestSmBoolean2DPlanarUnion", "SM_API_test:TestSmFilletPreview", "prog_test:my_test_bbu", "SM_API_test:TestSmSurfaceSurfaceFillet"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "14 fns; largest: SmTopologyIntersector::IntersectTopology, SmTopologyIntersector::EdgeFaceCoincidence, SmTopologyIntersector::FixupSplitVertexPair, SmTopologyIntersector::IntersectInsertRelate; unit-SCC #22 (220 units); hazards: ptr-hash,tbb; 118 upstream test entry points reach this unit"
[[unit]]
id = "offset.offset_geometry_creation"
upstream = ["source/SMLib/inc/SmOffsetGeometryCreation.h", "source/SMLib/src/SmOffsetGeometryCreation.cpp"]
rust_module = "offset::offset_geometry_creation"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_p2", "surface.offset_surface", "surface.surface_p1", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex"]
soft_depends_on = ["blend.fillet_solver_p1", "blend.fillet_standard_solver_p1", "curve.crv_on_surf", "curve.curve_p1", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.curve_p8", "geom.extent2d", "geom.extent3d", "geom.geom_utility_p1", "geom.geom_utility_p2", "geom.vector2d", "intersect.surface_drop_lib_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "query.edge", "surface.surface_p11", "surface.surface_p7", "surface.surface_p8", "topology.brep_p1", "topology.brep_p2", "topology.edgeuse_p2", "topology.edgeuse_p3", "topology.face_p2", "topology.face_p4", "topology.topology", "topology.vertexuse"]
est_lines = 2652
layer = 51
tests = ["SM_API_test:TestSmOffsetBrepFull", "SM_API_test:TestSmShellBrepFull", "prog_test:airfoil_offset", "prog_test:my_local_op", "prog_test:my_local_op_regression", "prog_test:my_test_offset", "pt_TestFiles/Fillet/nurb_box.smb", "pt_TestFiles/Solids/box.smb", "pt_TestFiles/Solids/cylinder.smb", "pt_TestFiles/offset_nurb.sms"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "15 fns; largest: SmOffsetGeometryCreation::EdgeuseOffset, SmOffsetGeometryCreation::TrimExtendedEdge, SmOffsetGeometryCreation::ExtendTrimEdges, SmOffsetGeometryCreation::MateEdges; cycle back-edges (call into later units; stub or co-port): offset.offset_executive_p1(9); unit-SCC #26 (2 units); 11 upstream test entry points reach this unit"
[[unit]]
id = "sweep.topology_sweep"
upstream = ["source/SMLib/inc/SmSweepGeometryCreation.h", "source/SMLib/inc/SmTopologySweep.h", "source/SMLib/src/SmSweepGeometryCreation.cpp", "source/SMLib/src/SmTopologySweep.cpp"]
rust_module = "sweep::topology_sweep"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.context", "geom.extent1d", "geom.object", "geom.vector3d", "heal.stitch_p1", "topology.brep_p1", "topology.brep_p3", "topology.brep_p5", "topology.edge", "topology.edgeuse_p1", "topology.face_p4", "topology.loopuse", "topology.shell", "topology.topology", "topology.vertex"]
soft_depends_on = ["geom.a_object", "geom.attribute", "geom.extent3d", "geom.tol", "heal.stitch_p2", "query.brep", "surface.surface_p1", "surface.surface_p2", "topology.brep_p10", "topology.brep_p2", "topology.brep_p6", "topology.brep_p7", "topology.brep_p9", "topology.edgeuse_p3", "topology.face_p2", "topology.face_p3", "topology.topology_traverser", "topology.vertexuse"]
est_lines = 2456
layer = 51
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "51 fns; largest: SmTopologySweep::DoSweep, SmTopologySweep::SweepEdgeHigh, SmTopologySweep::SweepFaceSame, SmSweepStitchCallback::SelectTopologyToKeep; cycle back-edges (call into later units; stub or co-port): blend.hcr(5), boolean.merge_p1(1), boolean.merge_p2(1), boolean.merge_p3(1), boolean.merge_p4(1), boolean.topology_intersector_p1(1), sweep.rotational_sweep_geometry(1), sweep.trans_sweep_geometry(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "boolean.topology_intersector_p3"
upstream = ["source/SMLib/src/SmTopologyIntersector.cpp"]
rust_module = "boolean::topology_intersector::p3"
depends_on = ["boolean.topology_intersector_p1", "boolean.topology_intersector_p2", "curve.curve_p2", "geom.extent3d", "geom.tol", "intersect.curve_class_p1", "intersect.point_class", "topology.edge", "topology.edgeuse_p1", "topology.face_p2"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p6", "geom.extent1d", "geom.object", "geom.vector3d", "intersect.curve_class_p3", "intersect.curve_class_p4", "intersect.curve_class_p5", "intersect.curve_class_p6", "intersect.curve_class_p7", "intersect.surface_drop_lib_p1", "nurbs.b_spline_curve_p1", "query.face_p1", "query.face_p2", "surface.surface_p1", "surface.surface_p2", "topology.brep_p4", "topology.face_p4", "topology.loopuse"]
est_lines = 1849
layer = 52
tests = ["prog_test:my_test_bbu", "SM_API_test:TestSmSurfaceSurfaceFillet", "SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge", "SM_API_test:TestSmBooleanLists", "SM_API_test:TestKernelMergeBrepsInvalidInput"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "3 fns; largest: SmTopologyIntersector::MergeCurveClasses, SmTopologyIntersector::MergeCoincidentSurfaces, SmTopologyIntersector::MergeCurveOnSurfaces; unit-SCC #22 (220 units); 110 upstream test entry points reach this unit"
[[unit]]
id = "sweep.rotational_sweep_geometry"
upstream = ["source/SMLib/inc/SmRotationalSweepGeometry.h", "source/SMLib/src/SmRotationalSweepGeometry.cpp"]
rust_module = "sweep::rotational_sweep_geometry"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.object", "geom.solution_array", "geom.vector3d", "nurbs.b_spline_surface_p1", "surface.surface_p2", "sweep.topology_sweep", "topology.edge"]
soft_depends_on = ["curve.curve_p4", "curve.curve_p8", "curve.line", "geom.extent2d", "geom.geom_utility_p1", "geom.tol", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_p2", "surface.surface_p6", "surface.surface_p7", "topology.brep_p1", "topology.face_p2", "topology.vertex"]
est_lines = 1542
layer = 52
tests = ["prog_test:my_sweep_null_region_counts", "prog_test:my_test_dosweep_null_region", "SM_API_test:TestNonManifoldSweepDistinctTarget", "SM_API_test:TestNonManifoldSweepNullEntry", "SM_API_test:TestNonManifoldSweepStaleEntry", "SM_API_test:TestSmCreateLinearSweepCylinder"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "16 fns; largest: SmRotationalSweepGeometry::EdgeSweepHigher, SmRotationalSweepGeometry::CheckCurveSweep, sm_CheckEdgeOnAxis, SmRotationalSweepGeometry::EdgeSweepSame; unit-SCC #22 (220 units); 45 upstream test entry points reach this unit"
[[unit]]
id = "sweep.trans_sweep_geometry"
upstream = ["source/SMLib/inc/SmTransSweepGeometry.h", "source/SMLib/src/SmTransSweepGeometry.cpp"]
rust_module = "sweep::trans_sweep_geometry"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent2d", "geom.vector3d", "surface.surface_p2", "sweep.topology_sweep", "topology.edge"]
soft_depends_on = ["curve.curve_p7", "curve.line", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "nurbs.b_spline_curve_p1", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.surface_p7", "topology.brep_p1", "topology.face_p2", "topology.vertex"]
est_lines = 817
layer = 52
tests = ["prog_test:my_sweep_null_region_counts", "prog_test:my_test_dosweep_null_region", "SM_API_test:TestNonManifoldSweepDistinctTarget", "SM_API_test:TestNonManifoldSweepNullEntry", "SM_API_test:TestNonManifoldSweepStaleEntry", "SM_API_test:TestSmCreateLinearSweepCylinder"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "11 fns; largest: SmTranslationalSweepGeometry::CheckCurveSweep, SmTranslationalSweepGeometry::EdgeSweepHigher, SmTranslationalSweepGeometry::EdgeSweepSame, SmTranslationalSweepGeometry::FaceSweepSame; unit-SCC #22 (220 units); 45 upstream test entry points reach this unit"
[[unit]]
id = "boolean.merge_p1"
upstream = ["source/SMLib/inc/SmMerge.h", "source/SMLib/src/SmMerge.cpp"]
rust_module = "boolean::merge::p1"
depends_on = ["boolean.topology_intersector_p1", "geom.a_object", "geom.attribute", "geom.extent3d", "geom.object", "geom.tol", "geom.vector3d", "intersect.point_class", "topology.brep_p1", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.proto_topology_p1", "topology.shell", "topology.vertex"]
soft_depends_on = ["boolean.topology_intersector_p2", "boolean.topology_intersector_p3", "curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "query.brep", "surface.surface_p1", "surface.surface_p2", "topology.brep_p4", "topology.brep_p5", "topology.brep_p9", "topology.face_p3", "topology.face_p4", "topology.topology"]
est_lines = 993
layer = 53
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "24 fns; largest: SmMerge::BooleanPostProcess, SmMerge::FixFoundFaceCoincidence, sm_FindBrepRegionOfOtherFace, SmMerge::PropagateOtherSrcRegionAttribs; cycle back-edges (call into later units; stub or co-port): blend.fillet_executive_p1(1); unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "primitive.primitive_creation_p3"
upstream = ["source/SMLib/src/SmPrimitiveCreation.cpp"]
rust_module = "primitive::primitive_creation::p3"
depends_on = ["curve.composite_curve_p1", "curve.curve_p2", "geom.a_object", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.geom_utility_p1", "geom.object", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "primitive.primitive_creation_p1", "sweep.topology_sweep", "topology.brep_p1", "topology.brep_p5", "topology.brep_p8", "topology.face_p2"]
soft_depends_on = ["boolean.topology_intersector_p2", "curve.composite_curve_p2", "curve.curve_p1", "curve.curve_p3", "curve.curve_p5", "curve.curve_p6", "curve.curve_p7", "curve.ellipse_p1", "geom.context", "heal.stitch_p1", "heal.stitch_p2", "intersect.curve_class_p1", "intersect.curve_class_p4", "intersect.point_class", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "query.face_p1", "query.face_p2", "surface.surf_of_revolution_p2", "surface.surface_p2", "surface.surface_p5", "surface.surface_p7", "sweep.rotational_sweep_geometry", "sweep.trans_sweep_geometry", "topology.brep_p3", "topology.face_p3", "topology.face_p4", "topology.shell"]
est_lines = 1842
layer = 53
tests = ["SM_API_test:TestSmCreateSwungPrimitive", "SM_API_test:TestSmCreateSkinFromFaces", "SM_API_test:TestSmCreateSkinPrimitive", "SM_API_test:TestSmCurveSweep", "SM_API_test:TestSmPipeSweep", "SM_API_test:TestSmCurveSweepFromFaces"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "8 fns; largest: SmPrimitiveCreation::CreateCurveSweep, sm_CreateRuledSurfaceFromOffsetCurve, SmPrimitiveCreation::CreateLinearSweep, SmPrimitiveCreation::CreateRotationalSweep; 60 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_executive_p3"
upstream = ["source/SMLib/src/SmFilletExecutive.cpp"]
rust_module = "blend::fillet_executive::p3"
depends_on = ["blend.fillet_solver_p1", "boolean.merge_p1", "boolean.topology_intersector_p1", "geom.context", "geom.object", "geom.tol", "geom.vector3d", "heal.stitch_p1", "topology.brep_p1", "topology.brep_p3", "topology.edge"]
soft_depends_on = ["blend.fillet_geom_p1", "blend.fillet_solver_p4", "blend.fillet_solver_p5", "boolean.topology_intersector_p2", "curve.curve_p2", "geom.a_object", "geom.attribute", "heal.stitch_p2", "surface.surface_p2", "topology.brep_p2", "topology.brep_p4", "topology.edgeuse_p1", "topology.face_p1", "topology.face_p3", "topology.topology", "topology.vertex"]
est_lines = 1608
layer = 54
tests = ["SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge", "SM_API_test:TestSmVariableRadiusFillet", "SM_API_test:TestSmSetBevelCorners"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "3 fns; largest: SmFilletExecutive::DoFilleting, SmFilletExecutive::CreateFilletBrep, SmFilletExecutive::DoFillet; cycle back-edges (call into later units; stub or co-port): blend.fillet_corner_p1(13), blend.fillet_executive_p1(12), blend.fillet_executive_p2(2), blend.fillet_geom_p4(2), blend.fillet_corner_p3(1), blend.fillet_geom_p6(1); unit-SCC #22 (220 units); 25 upstream test entry points reach this unit"
[[unit]]
id = "boolean.merge_p2"
upstream = ["source/SMLib/src/SmMerge.cpp"]
rust_module = "boolean::merge::p2"
depends_on = ["boolean.merge_p1", "boolean.topology_intersector_p1", "boolean.topology_intersector_p2", "geom.extent3d", "geom.object", "geom.vector3d", "heal.stitch_p1", "topology.brep_p1", "topology.brep_p2", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.face_p4", "topology.loopuse"]
soft_depends_on = ["curve.curve_p2", "geom.tol", "heal.stitch_p2", "query.edge", "query.face_p1", "surface.surface_p2", "topology.brep_p3", "topology.brep_p5", "topology.brep_p6", "topology.brep_p7", "topology.edgeuse_p3", "topology.face_p3", "topology.shell", "topology.vertex", "topology.vertexuse"]
est_lines = 1967
layer = 54
tests = ["prog_test:my_test_bbu", "SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge", "SM_API_test:TestSmBooleanLists", "SM_API_test:TestKernelMergeBrepsInvalidInput", "SM_API_test:TestApiMergeBrepsInvalidOperation"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmMerge::MergeAddedTopology, SmMerge::MakeFaceuse, SmMerge::MergeEdge, SmMerge::SmMerge; cycle back-edges (call into later units; stub or co-port): blend.fillet_executive_p1(1); unit-SCC #22 (220 units); 105 upstream test entry points reach this unit"
[[unit]]
id = "boolean.merge_p5"
upstream = ["source/SMLib/src/SmMerge.cpp"]
rust_module = "boolean::merge::p5"
depends_on = ["boolean.merge_p1", "boolean.merge_p2", "boolean.topology_intersector_p1", "geom.object", "intersect.point_class", "topology.edge"]
soft_depends_on = ["curve.curve_p2", "geom.a_object", "geom.extent1d", "geom.tol", "geom.vector3d", "query.brep", "topology.brep_cache", "topology.brep_p1", "topology.brep_p4", "topology.edgeuse_p1", "topology.face_p2", "topology.shell", "topology.topology", "topology.topology_traverser", "topology.vertex"]
est_lines = 475
layer = 55
tests = ["prog_test:my_test_bbu", "SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge", "SM_API_test:TestSmBooleanLists", "SM_API_test:TestKernelMergeBrepsInvalidInput", "SM_API_test:TestApiMergeBrepsInvalidOperation"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "1 fns; largest: SmMerge::ProcessWiresAndShellVertices; unit-SCC #22 (220 units); 105 upstream test entry points reach this unit"
[[unit]]
id = "boolean.merge_p4"
upstream = ["source/SMLib/src/SmMerge.cpp"]
rust_module = "boolean::merge::p4"
depends_on = ["boolean.merge_p1", "boolean.merge_p2", "boolean.merge_p5", "boolean.topology_intersector_p1", "boolean.topology_intersector_p2", "geom.a_object", "geom.attribute", "geom.context", "geom.object", "intersect.point_class", "topology.brep_p1", "topology.brep_p2", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.shell"]
soft_depends_on = ["curve.curve_p2", "geom.extent1d", "geom.tol", "geom.vector3d", "query.brep", "topology.brep_cache", "topology.brep_p3", "topology.brep_p4", "topology.brep_p5", "topology.brep_p7", "topology.brep_p9", "topology.face_p4", "topology.topology", "topology.topology_traverser", "topology.vertex"]
est_lines = 2590
layer = 56
tests = ["prog_test:my_test_bbu", "SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge", "SM_API_test:TestSmBooleanLists", "SM_API_test:TestKernelMergeBrepsInvalidInput", "SM_API_test:TestApiMergeBrepsInvalidOperation"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "1 fns; largest: SmMerge::ManifoldBoolean; unit-SCC #22 (220 units); 105 upstream test entry points reach this unit"
[[unit]]
id = "boolean.merge_p3"
upstream = ["source/SMLib/src/SmMerge.cpp"]
rust_module = "boolean::merge::p3"
depends_on = ["boolean.merge_p2", "boolean.merge_p4", "boolean.merge_p5", "boolean.topology_intersector_p1", "geom.context", "geom.object", "topology.brep_p1", "topology.brep_p3"]
soft_depends_on = ["boolean.topology_intersector_p2", "geom.a_object", "geom.attribute", "geom.tol", "primitive.primitive_creation_p1", "surface.surface_p1", "surface.surface_p2", "topology.brep_p2", "topology.brep_p4", "topology.brep_p5", "topology.brep_p7", "topology.brep_p8", "topology.shell", "topology.topology_traverser"]
est_lines = 1152
layer = 57
tests = ["SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge", "SM_API_test:TestSmBooleanLists", "SM_API_test:TestKernelMergeBrepsInvalidInput", "SM_API_test:TestApiMergeBrepsInvalidOperation", "SM_API_test:TestMergeBrepsOperation"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "5 fns; largest: SmMerge::PiecewiseMerge, SmMerge::BooleanLists, SmMerge::BooleanTrees, SmMerge::merge_breps; unit-SCC #22 (220 units); 102 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_executive_p1"
upstream = ["source/SMLib/inc/SmFilletExecutive.h", "source/SMLib/src/SmFilletExecutive.cpp", "source/SM_API/src/SmApiBrep.cpp", "source/SM_API/src/SmApiFillets.cpp"]
rust_module = "blend::fillet_executive::p1"
depends_on = ["blend.fillet_executive_p3", "blend.fillet_geom_p1", "blend.fillet_solver_p1", "blend.fillet_standard_solver_p1", "boolean.merge_p1", "boolean.merge_p3", "curve.curve_p2", "geom.a_object", "geom.attribute", "geom.context", "geom.extent1d", "geom.object", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p1", "surface.surface_p2", "topology.brep_p1", "topology.brep_p4", "topology.brep_p5", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.shell", "topology.vertex"]
soft_depends_on = ["boolean.topology_intersector_p1", "curve.curve_cache", "geom.extent2d", "geom.tol", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "surface.surface_p7", "topology.brep_p2", "topology.brep_p3", "topology.brep_p8", "topology.face_p1", "topology.proto_topology_p1", "topology.topology", "topology.vertexuse"]
est_lines = 2063
layer = 58
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "73 fns; largest: SmFilletExecutive::DoPiecewiseMerge, SmFilletExecutive::TestAndConvertBigRadFillet, SmFilletExecutive::SetFilletParameters, SmFilletExecutive::RemoveTopoEdges; entry points: SmApiChamferFillet, SmApiCircularFillet, SmApiFilletEdges, SmApiFilletEdgesPerEdge, SmApiSetBevelCorners, SmApiSurfaceSurfaceFillet, SmApiVariableRadiusFillet; cycle back-edges (call into later units; stub or co-port): blend.fillet_corner_p1(6), blend.fillet_executive_p2(3), blend.fillet_standard_solver_p2(3), blend.fillet_corner_p3(2), blend.fillet_corner_p2(1), blend.fillet_geom_p2(1), blend.fillet_geom_p5(1), blend.fillet_geom_p6(1); unit-SCC #22 (220 units); hazards: ptr-iter; 319 upstream test entry points reach this unit"
[[unit]]
id = "boolean.api_brep"
upstream = ["source/SM_API/src/SmApiBrep.cpp"]
rust_module = "boolean::api_brep"
depends_on = ["boolean.merge_p3"]
soft_depends_on = ["boolean.merge_p1", "boolean.merge_p2", "boolean.merge_p4", "geom.context", "topology.brep_p2"]
est_lines = 410
layer = 58
tests = ["SM_API_test:TestSmMaterialCensus", "SM_API_test:TestSmPiecewiseMerge", "SM_API_test:TestSmBooleanLists", "SM_API_test:TestApiMergeBrepsInvalidOperation", "SM_API_test:TestMergeBrepsOperation", "SM_API_test:TestSmMergeBreps"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "12 fns; largest: SmApiMergeBreps, SmApiBoolean, SmApiBooleanDifference, SmApiBooleanIntersection; entry points: SmApiBoolean, SmApiBooleanDifference, SmApiBooleanIntersection, SmApiBooleanLists, SmApiBooleanMerge, SmApiBooleanTrees, SmApiBooleanUnion, SmApiBooleanWithOptions, SmApiMergeBreps; 13 upstream test entry points reach this unit"
[[unit]]
id = "primitive.primitive_creation_p2"
upstream = ["source/SMLib/src/SmPrimitiveCreation.cpp"]
rust_module = "primitive::primitive_creation::p2"
depends_on = ["curve.composite_curve_p1", "curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent3d", "geom.solution_array", "geom.tol", "geom.vector3d", "nurbs.b_spline_curve_p1", "primitive.primitive_creation_p1", "primitive.primitive_creation_p3", "topology.brep_p1", "topology.brep_p4", "topology.brep_p5", "topology.brep_p8", "topology.edge"]
soft_depends_on = ["boolean.merge_p2", "boolean.merge_p3", "boolean.merge_p4", "curve.composite_curve_p2", "curve.curve_p3", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.curve_p9", "curve.ellipse_p1", "geom.a_object", "geom.context", "geom.extent2d", "geom.object", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_p1", "surface.surface_p2", "surface.surface_p5", "surface.surface_p7", "topology.brep_p10", "topology.brep_p2", "topology.brep_p3", "topology.brep_p7", "topology.face_p2", "topology.face_p3", "topology.face_p4", "topology.shell", "topology.vertex"]
est_lines = 2258
layer = 58
tests = ["SM_API_test:TestSmCreateSkinPrimitive", "SM_API_test:TestSmPipeSweep", "SM_API_test:TestSmCurveSweepFromFaces", "SM_API_test:TestSmCurveSweepFailureCleanup", "SM_API_test:TestSmCreateDraftSweep", "SM_API_test:TestSmTaperExtrude"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "12 fns; largest: SmPrimitiveCreation::CreateTaperExtrude, SmPrimitiveCreation::CreateSweepAlongPlanarPath, sm_CreateSkinPrimitiveInternal, SmPrimitiveCreation::CreateCone; 45 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_corner_p1"
upstream = ["source/SMLib/inc/SmFilletCorner.h", "source/SMLib/src/SmFilletCorner.cpp"]
rust_module = "blend::fillet_corner::p1"
depends_on = ["blend.fillet_executive_p1", "blend.fillet_geom_p1", "blend.fillet_solver_p1", "blend.fillet_standard_solver_p1", "curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_surface_p1", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["boolean.merge_p1", "boolean.topology_intersector_p2", "boolean.topology_intersector_p3", "curve.curve_p1", "curve.curve_p5", "curve.line", "geom.a_object", "geom.attribute", "geom.geom_utility_p1", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_p2", "surface.plane_p1", "surface.surface_p4", "surface.surface_p5", "surface.surface_p6", "surface.surface_p7", "topology.brep_p4", "topology.brep_p7", "topology.edgeuse_p3", "topology.face_p2", "topology.proto_topology_p1"]
est_lines = 1971
layer = 59
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "55 fns; largest: SmFilletCorner::MakeConstantRadiusFillet, SmFilletCorner::MakeFaceBrep, SmFilletCorner::InsertIntersectionTopology, sm_CreateSrfOfRevolution; cycle back-edges (call into later units; stub or co-port): blend.fillet_geom_p3(3), blend.fillet_geom_p5(1); unit-SCC #22 (220 units); hazards: ptr-hash; 319 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_solver_p2"
upstream = ["source/SMLib/src/SmFilletSolver.cpp"]
rust_module = "blend::fillet_solver::p2"
depends_on = ["blend.fillet_executive_p1", "blend.fillet_geom_p1", "blend.fillet_solver_p1", "curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.local_solve_nd", "geom.object", "geom.solution_array", "geom.vector3d", "intersect.point_class", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.surf_of_revolution_p1", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex"]
soft_depends_on = ["curve.curve_p1", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.line", "geom.tol", "geom.vector2d", "intersect.curve_class_p1", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_surface_p1", "nurbs.b_spline_surface_p2", "surface.offset_surface", "surface.plane_p1", "surface.surf_of_revolution_p2", "surface.surf_of_revolution_p3", "surface.surface_p8", "topology.edgeuse_p3", "topology.face_p2", "topology.proto_topology_p1", "topology.vertexuse"]
est_lines = 1939
layer = 59
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "10 fns; largest: SmFilletSolver::CreateCliffRollOverSideFG, SmFilletSolver::CalcTorusFilletGeom, sm_FindRolloverSideEdge, SmFilletSolver::CalcCylinderFilletGeom; cycle back-edges (call into later units; stub or co-port): blend.fillet_geom_p2(3), blend.fillet_geom_p5(2), blend.fillet_executive_p2(1), blend.fillet_geom_p6(1); unit-SCC #22 (220 units); 150 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_solver_p3"
upstream = ["source/SMLib/src/SmFilletSolver.cpp"]
rust_module = "blend::fillet_solver::p3"
depends_on = ["blend.fillet_geom_p1", "blend.fillet_solver_p1", "curve.curve_p2", "curve.iso_curve", "geom.extent1d", "geom.extent2d", "geom.local_solve_nd", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.curve_class_p1", "intersect.surface_intersector_p1", "surface.offset_surface", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex"]
soft_depends_on = ["blend.fillet_executive_p1", "blend.fillet_standard_solver_p1", "curve.curve_p1", "geom.a_object", "geom.local_solve1d", "intersect.point_class", "surface.surface_p4", "surface.surface_p6", "topology.edgeuse_p2", "topology.face_p2", "topology.loopuse", "topology.vertexuse"]
est_lines = 1112
layer = 59
tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_projection", "prog_test:my_test_surface_interface", "prog_test:my_test_ssi", "prog_test:my_test_tsurf_section", "prog_test:my_test_planar_section"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "7 fns; largest: SmFilletSolver::StepSolve, SmFilletSolver::ProcessFullRollOver, SmFilletSolver::SplitAndTrimFilletSurface, sm_RefineRailCurveClassification; cycle back-edges (call into later units; stub or co-port): blend.fillet_solver_p2(6), blend.fillet_geom_p5(2), blend.fillet_geom_p2(1); unit-SCC #22 (220 units); 150 upstream test entry points reach this unit"
[[unit]]
id = "offset.offset_executive_p1"
upstream = ["source/SMLib/inc/SmOffsetExecutive.h", "source/SMLib/src/SmOffsetExecutive.cpp"]
rust_module = "offset::offset_executive::p1"
depends_on = ["curve.curve_p2", "geom.axis2_placement", "geom.extent1d", "geom.extent2d", "geom.extent3d", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "offset.offset_geometry_creation", "surface.offset_surface", "surface.plane_p1", "surface.surface_p2", "topology.brep_p1", "topology.edge", "topology.edgeuse_p1", "topology.face_p2", "topology.vertex"]
soft_depends_on = ["boolean.merge_p2", "boolean.merge_p3", "boolean.topology_intersector_p2", "curve.curve_p5", "curve.curve_p6", "geom.a_object", "geom.geom_utility_p1", "geom.tol", "heal.stitch_p2", "intersect.topology_solver_p2", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_p1", "primitive.primitive_creation_p1", "primitive.primitive_creation_p2", "surface.surface_p1", "surface.surface_p4", "surface.surface_p7", "topology.brep_p2", "topology.brep_p3", "topology.brep_p4", "topology.brep_p5", "topology.brep_p7", "topology.brep_p8", "topology.brep_p9", "topology.edgeuse_p2", "topology.edgeuse_p3", "topology.face_p3", "topology.face_p4", "topology.vertexuse"]
est_lines = 2107
layer = 59
tests = ["SM_API_test:TestSmOffsetBrepFull", "SM_API_test:TestSmShellBrepFull", "prog_test:airfoil_offset", "prog_test:my_local_op", "prog_test:my_local_op_regression", "prog_test:my_test_offset", "pt_TestFiles/Fillet/nurb_box.smb", "pt_TestFiles/Solids/box.smb", "pt_TestFiles/Solids/cylinder.smb", "pt_TestFiles/offset_nurb.sms"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "29 fns; largest: SmOffsetExecutive::BuildOffsetOfFaceuse, SmOffsetExecutive::BuildOffsetOfEdgeuses, SmOffsetExecutive::PiecewiseMerge, SmOffsetExecutive::BuildOffsetOfVertex; unit-SCC #26 (2 units); hazards: ptr-hash; 11 upstream test entry points reach this unit"
[[unit]]
id = "primitive.api_primitives"
upstream = ["source/SM_API/src/SmApiPrimitives.cpp"]
rust_module = "primitive::api_primitives"
depends_on = ["geom.vector3d", "primitive.primitive_creation_p1", "primitive.primitive_creation_p2", "surface.cone_p1", "surface.plane_p1"]
soft_depends_on = ["curve.line", "geom.axis2_placement", "geom.context", "geom.extent2d", "geom.object", "primitive.primitive_creation_p3", "surface.torus", "topology.brep_p1", "topology.brep_p3", "topology.brep_p4", "topology.brep_p5", "topology.brep_p8"]
est_lines = 885
layer = 59
tests = ["SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestSmCreatePlane", "SM_API_test:TestSmCreateSwungPrimitive", "SM_API_test:TestSmAdvancedStitch", "SM_API_test:TestSmEdgeCurveOwnership", "SM_API_test:TestSmGetClosestPoint"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "24 fns; largest: SmApiCreatePyramid, SmApiCreateCone, SmApiCreateCylinder, SmApiCreateCylindricalBox; entry points: SmApiCreateBlendPrimitive, SmApiCreateBox, SmApiCreateCone, SmApiCreateConeEllipticEnds, SmApiCreateCylinder, SmApiCreateCylindricalBox, SmApiCreatePartialCone, SmApiCreatePartialCylinder, SmApiCreatePartialSphere, SmApiCreatePartialTorus, SmApiCreatePlanarCircle, SmApiCreatePlane, SmApiCreatePyramid, SmApiCreateSphere, SmApiCreateSphereNoPole, SmApiCreateSwungPrimitive, SmApiCreateTorus; 84 upstream test entry points reach this unit"
[[unit]]
id = "sweep.api_brep"
upstream = ["source/SM_API/src/SmApiBrep.cpp"]
rust_module = "sweep::api_brep"
depends_on = ["primitive.primitive_creation_p2", "primitive.primitive_creation_p3"]
soft_depends_on = ["curve.curve_p2", "geom.context", "geom.object", "geom.vector3d", "primitive.primitive_creation_p1", "topology.brep_p1", "topology.brep_p3", "topology.brep_p4"]
est_lines = 529
layer = 59
tests = ["SM_API_test:TestSmCurveSweep", "SM_API_test:TestSmPipeSweep", "SM_API_test:TestSmCurveSweepFromFaces", "SM_API_test:TestSmCurveSweepFailureCleanup", "SM_API_test:TestSmCreateDraftSweep", "SM_API_test:TestSmTaperExtrude"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "12 fns; largest: SmApiCreateDraftSweep, SmApiCreateLinearSweep, SmApiCreateCurveSweep, SmApiCreateCurveSweepFromEdges; entry points: SmApiCreateCurveSweep, SmApiCreateCurveSweepFromEdges, SmApiCreateCurveSweepFromFaces, SmApiCreateDraftSweep, SmApiCreateLinearSweep, SmApiCreateLinearSweepWithRepetitions, SmApiCreatePipeSweep, SmApiCreateRotationalSweep, SmApiCreateRotationalSweepWithRepetitions, SmApiCreateSweepAlongPlanarPath, SmApiCreateTaperExtrude; 15 upstream test entry points reach this unit"
[[unit]]
id = "sweep.api_surfaces"
upstream = ["source/SM_API/src/SmApiPrimitives.cpp", "source/SM_API/src/SmApiSurfaces.cpp"]
rust_module = "sweep::api_surfaces"
depends_on = []
soft_depends_on = ["curve.curve_p2", "geom.context", "geom.object", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "primitive.primitive_creation_p1", "primitive.primitive_creation_p2", "primitive.primitive_creation_p3", "surface.surface_p1", "topology.brep_p1", "topology.brep_p3", "topology.brep_p4"]
est_lines = 381
layer = 59
tests = ["SM_API_test:TestSmCreateRuledSurface", "SM_API_test:TestSmCreateSkinSurface", "SM_API_test:TestSmCreateExtrude", "SM_API_test:TestSmCreateSkinFromFaces", "SM_API_test:TestSmCreateSkinPrimitive", "SM_API_test:TestSmCreateSurfaceRevolution"]
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "partial (PR #37): difftest cases=882 passed=831 deferred=51 (blocked_by primitive.primitive_creation_p2(11), primitive.primitive_creation_p3(40): SmApiCreateSkinPrimitive / SmApiCreateSkinFromFaces / SmApiCreateSurfaceRevolution validate and copy inputs, then stub SmPrimitiveCreation::CreateSkinPrimitive / CreateSkinFromFaces / CreateRotationalSweep); extrude, sweep, ruled and skin bit-identical; 9 fns; largest: SmApiCreateSkinPrimitive, SmApiCreateSurfaceRevolution, SmApiCreateSkin, SmApiCreateSkinFromFaces; entry points: SmApiCreateExtrude, SmApiCreateRuledSurface, SmApiCreateSkin, SmApiCreateSkinFromFaces, SmApiCreateSkinPrimitive, SmApiCreateSurfaceRevolution, SmApiCreateSweep; 15 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_geom_p3"
upstream = ["source/SMLib/src/SmFilletGeom.cpp"]
rust_module = "blend::fillet_geom::p3"
depends_on = ["blend.fillet_geom_p1", "blend.fillet_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.vector3d", "intersect.surface_intersector_p1", "surface.offset_surface", "topology.edge", "topology.edgeuse_p1", "topology.proto_topology_p1", "topology.vertex"]
soft_depends_on = ["blend.fillet_corner_p1", "blend.fillet_executive_p1", "blend.fillet_intersector", "curve.curve_p1", "curve.curve_p4", "curve.curve_p6", "geom.geom_utility_p1", "geom.tol", "geom.vector2d", "intersect.surface_intersector_p4", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p1", "topology.vertexuse"]
est_lines = 1032
layer = 60
tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFillet", "SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "6 fns; largest: SmFilletGeom::ReCalcFilletGeom, SmFilletGeom::TopologySplit, SmFilletEdge::CalcFilletIntFillet, SmFilletVertex::CalcMateGeom; cycle back-edges (call into later units; stub or co-port): blend.fillet_geom_p5(9), blend.fillet_geom_p2(7), blend.fillet_geom_p6(4), blend.fillet_geom_p4(2), blend.fillet_solver_p2(2), blend.fillet_corner_p2(1); unit-SCC #22 (220 units); 31 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_geom_p4"
upstream = ["source/SMLib/src/SmFilletGeom.cpp"]
rust_module = "blend::fillet_geom::p4"
depends_on = ["blend.fillet_corner_p1", "blend.fillet_geom_p1", "blend.fillet_solver_p1", "geom.a_object", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex"]
soft_depends_on = ["blend.fillet_executive_p1", "boolean.merge_p1", "boolean.topology_intersector_p2", "boolean.topology_intersector_p3", "curve.curve_p2", "curve.curve_p3", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "curve.curve_p8", "geom.attribute", "geom.axis2_placement", "geom.extent3d", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_n_lib_p1", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "surface.plane_p1", "surface.surf_of_revolution_p1", "surface.surface_p1", "surface.surface_p11", "surface.surface_p4", "surface.surface_p5", "topology.brep_p1", "topology.brep_p7", "topology.face_p2", "topology.face_p4", "topology.trimming_tools", "topology.vertexuse"]
est_lines = 2074
layer = 60
tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFillet", "SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "8 fns; largest: sm_CreateUVCurve, SmFilletGeom::MakeFaceBrep, SmFilletGeom::InsertIntersectionTopology, SmFilletVertex::CalcRailIntExtendedEdgeuse; cycle back-edges (call into later units; stub or co-port): blend.fillet_geom_p2(4), blend.fillet_geom_p6(4); unit-SCC #22 (220 units); 31 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_geom_p6"
upstream = ["source/SMLib/src/SmFilletGeom.cpp"]
rust_module = "blend::fillet_geom::p6"
depends_on = ["blend.fillet_geom_p1", "blend.fillet_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p2", "topology.brep_p3", "topology.edge", "topology.edgeuse_p1", "topology.topology", "topology.vertex"]
soft_depends_on = ["blend.fillet_corner_p1", "blend.fillet_executive_p1", "blend.fillet_solver_p2", "boolean.merge_p1", "boolean.topology_intersector_p1", "curve.curve_p6", "curve.hermite_curve", "geom.context", "geom.geom_utility_p1", "intersect.curve_class_p1", "intersect.point_class", "intersect.surface_drop_lib_p3", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "surface.offset_surface", "surface.surface_p11", "surface.surface_p4", "surface.surface_p7", "topology.edgeuse_p3", "topology.face_p2", "topology.loopuse", "topology.topology_traverser", "topology.vertexuse"]
est_lines = 1813
layer = 60
tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFillet", "SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "17 fns; largest: SmFilletGeom::TrimOriginalSurfaces, SmFilletEdge::CalcBlendingRail, SmFilletEdge::CalcSetBackRail, JoinTwoFilletVertsByCurves; unit-SCC #22 (220 units); 31 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_standard_solver_p2"
upstream = ["source/SMLib/src/SmFilletStandardSolver.cpp"]
rust_module = "blend::fillet_standard_solver::p2"
depends_on = ["blend.fillet_executive_p1", "blend.fillet_geom_p1", "blend.fillet_solver_p1", "blend.fillet_solver_p3", "blend.fillet_standard_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.local_solve_nd", "geom.matrix", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1"]
soft_depends_on = ["blend.fillet_intersector", "curve.curve_p1", "curve.curve_p4", "curve.curve_p5", "curve.curve_p6", "geom.geom_utility_p1", "geom.tol", "intersect.curve_class_p4", "intersect.surface_intersector_p4", "nurbs.b_spline_surface_p1", "query.face_p2", "surface.surface_p1", "surface.surface_p4", "surface.surface_p5", "surface.surface_p7", "topology.edgeuse_p3", "topology.face_p2", "topology.loopuse", "topology.vertex", "topology.vertexuse"]
est_lines = 1989
layer = 60
tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "17 fns; largest: SmConstantRadiusFS::LoadInitialValues, SmVariableRadiusFS::LoadJacobian, SmVariableRadiusFS::ReCalcFilletGeom, SmSurfaceSurfaceFS::CalcFilletGeom; cycle back-edges (call into later units; stub or co-port): blend.fillet_geom_p5(1); unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
[[unit]]
id = "offset.offset_executive_p2"
upstream = ["source/SMLib/src/SmOffsetExecutive.cpp", "source/SM_API/src/SmApiBrep.cpp"]
rust_module = "offset::offset_executive::p2"
depends_on = ["geom.context", "geom.object", "offset.offset_executive_p1", "offset.offset_geometry_creation", "surface.surface_p2", "topology.brep_p1", "topology.brep_p2", "topology.brep_p3", "topology.brep_p4", "topology.edgeuse_p1", "topology.face_p2", "topology.shell", "topology.topology"]
soft_depends_on = ["boolean.merge_p2", "boolean.merge_p4", "geom.extent2d", "geom.tol", "heal.stitch_p2", "topology.brep_p5", "topology.brep_p7", "topology.brep_p8", "topology.edge", "topology.edgeuse_p2", "topology.face_p1", "topology.face_p3", "topology.proto_topology_p1"]
est_lines = 1846
layer = 60
tests = ["SM_API_test:TestSmOffsetBrepFull", "SM_API_test:TestSmShellBrepFull", "prog_test:airfoil_offset", "prog_test:my_local_op", "prog_test:my_local_op_regression", "prog_test:my_test_offset", "pt_TestFiles/Fillet/nurb_box.smb", "pt_TestFiles/Solids/box.smb", "pt_TestFiles/Solids/cylinder.smb", "pt_TestFiles/offset_nurb.sms"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "6 fns; largest: SmOffsetExecutive::DoExtendedOffset, SmOffsetExecutive::DoSolidOffset, SmOffsetExecutive::ShellBrep, SmApiShellBrepFull; entry points: SmApiOffsetBrepFull, SmApiShellBrepFull; 11 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_corner_p3"
upstream = ["source/SMLib/src/SmFilletCorner.cpp"]
rust_module = "blend::fillet_corner::p3"
depends_on = ["blend.fillet_corner_p1", "blend.fillet_executive_p1", "blend.fillet_geom_p1", "blend.fillet_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.object", "geom.vector3d", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex"]
soft_depends_on = ["blend.fillet_geom_p3", "blend.fillet_geom_p4", "curve.curve_p6", "geom.tol", "intersect.surface_drop_lib_p3", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_curve_p3", "nurbs.b_spline_surface_n_lib_p2", "nurbs.b_spline_surface_p1", "topology.edgeuse_p2", "topology.edgeuse_p3", "topology.face_p2", "topology.proto_topology_p1", "topology.vertexuse"]
est_lines = 1697
layer = 61
tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge", "SM_API_test:TestSmVariableRadiusFillet"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "14 fns; largest: SmFilletNx2Corner::AdjustTangentCorner, SmFilletCorner::Create, SmFilletCorner::CreateCornerPatch, SmFilletNx2Corner::AdjustTopology; cycle back-edges (call into later units; stub or co-port): blend.fillet_corner_p2(11), blend.fillet_geom_p2(1), blend.fillet_geom_p5(1), blend.fillet_geom_p6(1); unit-SCC #22 (220 units); 26 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_executive_p2"
upstream = ["source/SMLib/inc/SmFilletExecutive.h", "source/SMLib/src/SmFilletExecutive.cpp"]
rust_module = "blend::fillet_executive::p2"
depends_on = ["blend.fillet_executive_p1", "blend.fillet_geom_p1", "blend.fillet_solver_p1", "blend.fillet_standard_solver_p1", "blend.fillet_standard_solver_p2", "boolean.merge_p1", "geom.context", "geom.extent1d", "geom.object", "geom.vector3d", "nurbs.b_spline_curve_p1", "topology.brep_p1", "topology.edge"]
soft_depends_on = ["blend.fillet_corner_p1", "blend.fillet_geom_p4", "blend.fillet_solver_p2", "blend.fillet_solver_p3", "blend.fillet_solver_p4", "boolean.topology_intersector_p1", "boolean.topology_intersector_p2", "curve.curve_p2", "curve.curve_p8", "geom.a_object", "geom.solution_array", "geom.tol", "geom.vector2d", "nurbs.b_spline_curve_n_lib", "surface.offset_surface", "surface.surface_p2", "topology.brep_p2", "topology.brep_p3", "topology.brep_p4", "topology.edgeuse_p1", "topology.proto_topology_p1", "topology.topology"]
est_lines = 1152
layer = 61
tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFillet", "SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "12 fns; largest: SmFilletExecutive::SurfaceSurfaceFillet, SmFilletExecutive::DoSurfaceFilleting, SmFilletExecutive::SetFilletParameters, SmFilletExecutive::CollectTangentEdgeSequence; cycle back-edges (call into later units; stub or co-port): blend.fillet_geom_p6(1); unit-SCC #22 (220 units); 31 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_geom_p2"
upstream = ["source/SMLib/src/SmFilletGeom.cpp"]
rust_module = "blend::fillet_geom::p2"
depends_on = ["blend.fillet_corner_p1", "blend.fillet_geom_p1", "blend.fillet_geom_p6", "blend.fillet_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.offset_surface", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex", "topology.vertexuse"]
soft_depends_on = ["blend.fillet_executive_p2", "blend.fillet_solver_p2", "curve.curve_p3", "curve.curve_p6", "geom.extent2d", "intersect.point_class", "intersect.surface_drop_lib_p3", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_surface_p1", "surface.plane_p1", "surface.plane_p2", "surface.surface_p11", "surface.surface_p4", "topology.edgeuse_p3", "topology.face_p2"]
est_lines = 2077
layer = 62
tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_point", "prog_test:my_test_matrix", "prog_test:my_test_reversed_line_join", "SM_API_test:TestSmCreateRectangle", "SM_API_test:TestSmCreateRegularPolygon"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "10 fns; largest: SmFilletVertex::CalcRailIntEdgeuse, SmFilletEdge::CalcRailRailInterpolation, sm_SrfSrfIntersection, SmFilletVertex::CalcVertOnCrossSection; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_geom_p5"
upstream = ["source/SMLib/src/SmFilletGeom.cpp"]
rust_module = "blend::fillet_geom::p5"
depends_on = ["blend.fillet_corner_p1", "blend.fillet_geom_p1", "blend.fillet_geom_p2", "blend.fillet_geom_p4", "blend.fillet_geom_p6", "blend.fillet_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.extent2d", "geom.object", "geom.solution_array", "geom.vector2d", "geom.vector3d", "nurbs.b_spline_curve_p1", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.proto_topology_p1", "topology.topology", "topology.vertex"]
soft_depends_on = ["blend.fillet_executive_p1", "curve.curve_p1", "curve.curve_p4", "curve.curve_p6", "curve.curve_p9", "curve.hermite_curve", "geom.tol", "nurbs.b_spline_curve_n_lib", "nurbs.b_spline_curve_p2", "surface.offset_surface", "surface.plane_p1", "surface.surface_p11", "surface.surface_p7", "topology.face_p2", "topology.vertexuse"]
est_lines = 1952
layer = 63
tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFillet", "SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "13 fns; largest: SmFilletGeom::TrimCliffRails, SmFilletGeom::TrimRailCurves, SmFilletEdge::CalcCrossSection, SmFilletVertex::CalcFilletIntFillet; cycle back-edges (call into later units; stub or co-port): blend.fillet_corner_p2(1); unit-SCC #22 (220 units); 31 upstream test entry points reach this unit"
[[unit]]
id = "blend.fillet_corner_p2"
upstream = ["source/SMLib/inc/SmFilletCorner.h", "source/SMLib/src/SmFilletCorner.cpp"]
rust_module = "blend::fillet_corner::p2"
depends_on = ["blend.fillet_corner_p1", "blend.fillet_geom_p1", "blend.fillet_geom_p2", "blend.fillet_solver_p1", "curve.curve_p2", "geom.extent1d", "geom.object", "geom.solution_array", "geom.tol", "geom.vector2d", "geom.vector3d", "intersect.surface_intersector_p1", "nurbs.b_spline_curve_p1", "surface.surface_p2", "topology.edge", "topology.edgeuse_p1", "topology.vertex"]
soft_depends_on = ["blend.fillet_executive_p1", "blend.fillet_executive_p2", "blend.fillet_geom_p3", "blend.fillet_geom_p4", "blend.fillet_geom_p5", "blend.fillet_geom_p6", "blend.fillet_standard_solver_p2", "curve.curve_p1", "geom.extent2d", "geom.geom_utility_p1", "nurbs.b_spline_curve_p2", "nurbs.b_spline_surface_p2", "surface.offset_surface", "surface.surface_p1", "surface.surface_p4", "surface.surface_p7", "topology.edgeuse_p3", "topology.face_p2", "topology.proto_topology_p1", "topology.vertexuse"]
est_lines = 1892
layer = 64
tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFillet", "SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet", "SM_API_test:TestSmFilletEdges", "SM_API_test:TestSmFilletEdgesPerEdge"]
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "16 fns; largest: SmFilletCorner::MakeVariableRadiusFillet, SmFilletNx1ClosedCorner::AdjustTangentCorner, SmFilletCorner::MakeAnalyticCornerSurface, SmFilletConvexNxNCorner::AdjustTopology; unit-SCC #22 (220 units); 31 upstream test entry points reach this unit"
[[unit]]
id = "audit.recursion"
upstream = []
rust_module = "(crate-wide)"
depends_on = ["blend.fillet_corner_p2", "blend.fillet_corner_p3", "blend.hcr", "boolean.api_brep", "heal.heal_data_p3", "intersect.curve_class_p8", "intersect.surface_drop_curve", "intersect.surface_intersector_p5", "intersect.surface_silhouette", "mass.integrator", "offset.offset_executive_p2", "primitive.api_curves", "primitive.api_primitives", "query.api_queries", "query.tess", "surface.b_spline_volume_n_lib", "surface.cone_p3", "surface.srf_in_volume", "surface.surf_of_extrusion_p2", "surface.surface_point_solve_p3", "sweep.api_brep", "sweep.api_surfaces"]
soft_depends_on = []
est_lines = 0
layer = 65
tests = []
status = "todo"
claimed_by = ""
claimed_at = ""
notes = "Not a port: audit every recursive path in crates/solidcore (direct and mutual recursion, incl. via Curve/Surface dispatch) and give each a depth bound returning SolidError, or convert to an explicit-stack loop only where iteration order stays identical (difftest must not change). Motivation: wasm32 has no stack guard page, so overflow corrupts memory. See AGENTS.md (recursion) and plan/findings.md (nested reads). Depends on all sink units so it runs last."