Merge pull request #676 from brett19/plan/status-refresh

plan: refresh STATUS.md, unit notes and findings status index
This commit is contained in:
bherbruck
2026-10-23 22:16:27 +00:00
committed by GitHub
87 changed files with 1596 additions and 1376 deletions
File diff suppressed because it is too large Load Diff
+110 -1293
View File
File diff suppressed because it is too large Load Diff
+51
View File
@@ -17891,3 +17891,54 @@ cases stay deferred. It adds only `StaticScene::object_zone_tol_3d`, which turns
difftest case. The unit test `slice_keeps_a_coincident_pair_on_the_sheet_same_side_only`
pins the rule. A slice of a solid with a face in the sheet will differ from the pinned
C++ here by design, until the pin takes the fork's fix (ee2a67b).
## Status index (2026-10-23, main CI `e33985411`)
This file is append-only, so older headings keep the status they had when written. This
index records what has changed since; check here before acting on an older entry. Unit
statuses are from the difftest reports of main CI run 40029966086 (`e33985411`).
**Headings that say "partial" for units that are now green (39).** By line number at
`e33985411`; each of these units now passes every compared case with nothing deferred:
299 `geom.extent3d`, 402 `geom.tol`, 472 `geom.tree`, 582 `geom.attribute`, 840
`geom.object`, 1055 `geom.grid`, 1139 `nlib.crv_basic`, 1171 `geom.transform`, 1189
`geom.a_object`, 1262 `curve.hermite_curve`, 1281 `nlib.crv_tool_p1`, 3665
`surface.surface_p6`, 4190 `topology.edgeuse_p1`, 4549 `intersect.curve_class_p2`, 4710
`intersect.surface_intersector_p5`, 4777 `topology.proto_topology_p1`, 5300
`topology.vertexuse`, 5434 `topology.loopuse`, 5499 `intersect.surface_drop_lib_p1`,
5586 `topology.vertex`, 5655 `surface.surface_p10`, 5743 `heal.gap`, 5828
`intersect.surface_drop_curve`, 5968 `topology.brep_cache`, 6017
`topology.trimming_tools`, 6148 `topology.edgeuse_p3`, 6228
`sweep.rotational_sweep_geometry`, 6459 `heal.heal_data_p2`, 6580
`intersect.curve_class_p2`, 7346 `surface.surface_p11`, 8774
`blend.fillet_standard_solver_p1`, 8915 `blend.fillet_geom_p1`, 11246 `query.face_p1`,
12060 `heal.stitch_p1`, 12099 `blend.fillet_standard_solver_p2`, 12346
`sweep.topology_sweep`, 12440 `primitive.primitive_creation_p3`, 13179 `heal.stitch_p2`,
16001 `blend.fillet_solver_p3`. (`intersect.curve_class_p2` has two such headings.)
The 30 other "partial" headings belong to units that are still partial; see
`plan/STATUS.md` for their blockers.
**Entries that are resolved but not marked as such in their heading:**
- "PR #463: 27 Rust-vs-C++ mismatches newly reachable once `SmSurface::DropCurve` is
wired": all 27 resolved. The 23 `topology.edgeuse_p3` `EvaluateBinormal` cases by
PR #581, `blend.fillet_solver_p4` `gen0512` by PR #584, and the 3 nested UV-trim-curve
cases (`topology.face_p3` `cyl_bspline_uv_trim_*`, `boolean.merge_p2`
`make_faceuse_sphere`) by PR #586. None is in `crates/difftest/known_mismatches.toml`
any more.
- "topology.brep_p4 / topology.brep_p5: StitchAndOrient's second pass, and the glue
stub that hides 36 heal.stitch_p2 differences": resolved by the PR #441 follow-up
(`GlueEdgesGeneral` now takes the glued edge off `Brep::edge_list`); see the later
`primitive.api_primitives` entry of 2026-10-22. `heal.stitch_p2` is green (556/556).
- "surface.surface_p11 / surface.surface_p1: surface cache history decides
`LiftCurve`'s C1 domain off the surface domain (upstream:cache-history)": resolved by
PR #571 (issue #568), which models the lazy surface cache tree; the
`upstream:cache-history` deferral is gone (see "surface cache history modelled").
- "query.face_p3 `bisector`: `LoopObjectCurves` has no `vertex_face_gap`" and
"query.face_p1 `gen0160`": both bodies say "Resolved"; the headings do not.
`query.face_p1` is green.
**Wording.** The entry "intersect.topology_solver_p2 static face solves: answering
`GetNaturalUVDomain` exposes 9 mismatches" (still open) names two internal tracking
labels. Read the first as the proposal to give the runner's `StaticHandle` a
`natural_uv_domain`, and the second as the missing face-aware `SurfaceSolveContext`
(global solves on a face's surface should use that face's trimmed surface cache).
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "partial"
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; CO-PORTED in blend.fillet_corner_p3 (PR #256): SmFilletCorner members and constructor, GetCornerType/GetName -> blend::fillet_corner::p3::{FilletCorner, FilletCorner::new, FilletCornerKind}; its stubs there: CreateEndPatch, MakeFaceBrep, CalcCornerVertGeom (sm_TestG1Continuity and SmFilletNx1Corner::CheckNx1Degeneracy wired by PR #266); CO-PORTED in blend.fillet_executive_p3 (PR #244): read-only CornerView (GetFilletedVertex, GetCornerType, GetName); CO-PORTED in blend.fillet_corner_p1 (PR #266) onto blend::fillet_corner::p3::FilletExecutiveData: SmFilletExecutive::m_vExtendedSurfacesMap -> extended_surfaces_map PARTIAL (landed in batch #531 from PR #266): difftest 174 cases, 145 passed, 0 failed, 29 deferred (146 passed / 28 deferred after #268). [2026-10-23 (PR #605): the shared inexact check defers on ImportTypes::inexact_surface (faces not carried exactly), so cone/sphere/extrusion faces compare values; surface.surface_p2 7, surface.surf_of_extrusion_p2 14 and harness 3 deferrals gone: PARTIAL blend.fillet_corner_p1 cases=174 passed=170 failed=0 deferred=4 max_rel_err=0e0 with_values=164 no_values=6 vacuous=0 blocked_by=blend.fillet_corner_p1(1),blend.fillet_geom_p3(3)]"
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_corner_p1 cases=174 passed=170 failed=0 deferred=4 blocked_by=blend.fillet_corner_p1(1),blend.fillet_geom_p3(3). 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; CO-PORTED in blend.fillet_corner_p3 (PR #256): SmFilletCorner members and constructor, GetCornerType/GetName -> blend::fillet_corner::p3::{FilletCorner, FilletCorner::new, FilletCornerKind}; its stubs there: CreateEndPatch, MakeFaceBrep, CalcCornerVertGeom (sm_TestG1Continuity and SmFilletNx1Corner::CheckNx1Degeneracy wired by PR #266); CO-PORTED in blend.fillet_executive_p3 (PR #244): read-only CornerView (GetFilletedVertex, GetCornerType, GetName); CO-PORTED in blend.fillet_corner_p1 (PR #266) onto blend::fillet_corner::p3::FilletExecutiveData: SmFilletExecutive::m_vExtendedSurfacesMap -> extended_surfaces_map PARTIAL (landed in batch #531 from PR #266): difftest 174 cases, 145 passed, 0 failed, 29 deferred (146 passed / 28 deferred after #268). [2026-10-23 (PR #605): the shared inexact check defers on ImportTypes::inexact_surface (faces not carried exactly), so cone/sphere/extrusion faces compare values; surface.surface_p2 7, surface.surf_of_extrusion_p2 14 and harness 3 deferrals gone: PARTIAL blend.fillet_corner_p1 cases=174 passed=170 failed=0 deferred=4 max_rel_err=0e0 with_values=164 no_values=6 vacuous=0 blocked_by=blend.fillet_corner_p1(1),blend.fillet_geom_p3(3)]"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFil
status = "partial"
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; CO-PORTED in blend.fillet_corner_p3 (PR #256): the constructors of SmFillet1x1Corner, SmFilletNx1ClosedCorner, SmFilletNx1Corner, SmFillet3x2MixedConvexityCorner, SmFilletNx2Corner, SmFilletNxNCorner -> blend::fillet_corner::p3::FilletCorner::new (FilletCornerKind); its stubs there: sm_FindConcaveEdgeuses, MakeAnalyticCornerSurface, AdjustConcaveCornerTopology, SmFilletConvexNxNCorner::AdjustTopology, SmFilletNx1ClosedCorner::AdjustTangentCorner PARTIAL (PR #268, bluecmd; landed by batch/finish-1): sm_FindConcaveEdgeuses, SmFilletNx2Corner::AdjustConcaveCornerTopology, SmFilletCorner::UpdateSplitFace and the Nx1-closed/Nx2 GetTangentFilletSolver overrides ported in blend::fillet_corner::p2 (Kernel threaded as on main; UpdateSplitFace takes the corners slice that resolves a fillet edge's corner for ShouldSwapFaces). Not yet ported (still UNPORTED(blend.fillet_corner_p2) in fillet_corner::p3 and fillet_geom::p3/p5): MakeVariableRadiusFillet, MakeAnalyticCornerSurface, RecordFilletError, SmFilletConvexNxNCorner::AdjustTopology, SmFilletNx1ClosedCorner::AdjustTangentCorner. The shim's stale p3_check_split guard (-3 for ShouldSwapFaces) is replaced by blend.fillet_geom_p6's NULL-dereference guard (-2). difftest: 468 cases, 286 passed, 0 failed, 179 deferred, 3 rejected (the 5 former classify_face_point mismatches now defer at intersect.surface_drop_lib_p3, see findings.md). [2026-10-23 (PR #605): the shared inexact check (blend_fillet_corner_p1.rs) defers on ImportTypes::inexact_surface, so cone/sphere/extrusion faces compare values; surface.surface_p2 38, surface.surf_of_extrusion_p2 94 and harness 7 deferrals gone: PARTIAL blend.fillet_corner_p2 cases=468 passed=446 failed=0 deferred=19 max_rel_err=0e0 with_values=440 no_values=6 vacuous=0 rejected=3 blocked_by=blend.fillet_corner_p2(1),blend.fillet_executive_p1(1),blend.fillet_geom_p5(17)]"
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_corner_p2 cases=468 passed=446 failed=0 deferred=19 rejected=3 blocked_by=blend.fillet_corner_p2(1),blend.fillet_executive_p1(1),blend.fillet_geom_p5(17). 16 fns; largest: SmFilletCorner::MakeVariableRadiusFillet, SmFilletNx1ClosedCorner::AdjustTangentCorner, SmFilletCorner::MakeAnalyticCornerSurface, SmFilletConvexNxNCorner::AdjustTopology; unit-SCC #22 (220 units); 31 upstream test entry points reach this unit; CO-PORTED in blend.fillet_corner_p3 (PR #256): the constructors of SmFillet1x1Corner, SmFilletNx1ClosedCorner, SmFilletNx1Corner, SmFillet3x2MixedConvexityCorner, SmFilletNx2Corner, SmFilletNxNCorner -> blend::fillet_corner::p3::FilletCorner::new (FilletCornerKind); its stubs there: sm_FindConcaveEdgeuses, MakeAnalyticCornerSurface, AdjustConcaveCornerTopology, SmFilletConvexNxNCorner::AdjustTopology, SmFilletNx1ClosedCorner::AdjustTangentCorner PARTIAL (PR #268, bluecmd; landed by batch/finish-1): sm_FindConcaveEdgeuses, SmFilletNx2Corner::AdjustConcaveCornerTopology, SmFilletCorner::UpdateSplitFace and the Nx1-closed/Nx2 GetTangentFilletSolver overrides ported in blend::fillet_corner::p2 (Kernel threaded as on main; UpdateSplitFace takes the corners slice that resolves a fillet edge's corner for ShouldSwapFaces). Not yet ported (still UNPORTED(blend.fillet_corner_p2) in fillet_corner::p3 and fillet_geom::p3/p5): MakeVariableRadiusFillet, MakeAnalyticCornerSurface, RecordFilletError, SmFilletConvexNxNCorner::AdjustTopology, SmFilletNx1ClosedCorner::AdjustTangentCorner. The shim's stale p3_check_split guard (-3 for ShouldSwapFaces) is replaced by blend.fillet_geom_p6's NULL-dereference guard (-2). difftest: 468 cases, 286 passed, 0 failed, 179 deferred, 3 rejected (the 5 former classify_face_point mismatches now defer at intersect.surface_drop_lib_p3, see findings.md). [2026-10-23 (PR #605): the shared inexact check (blend_fillet_corner_p1.rs) defers on ImportTypes::inexact_surface, so cone/sphere/extrusion faces compare values; surface.surface_p2 38, surface.surf_of_extrusion_p2 94 and harness 7 deferrals gone: PARTIAL blend.fillet_corner_p2 cases=468 passed=446 failed=0 deferred=19 max_rel_err=0e0 with_values=440 no_values=6 vacuous=0 rejected=3 blocked_by=blend.fillet_corner_p2(1),blend.fillet_executive_p1(1),blend.fillet_geom_p5(17)]"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmCircularFillet",
status = "partial"
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; PARTIAL (PR #256, built on PR #252 = #147 + #192): 1005 cases (308 upstream-file fixtures from TestFiles/pt_TestFiles/Fillet, 400 generated, 60 review cases with SmPlane user surfaces, 156 review cases with real SmLine 3x2 edge curves, 81 with real SmCircle 3x2 edge curves), 560 passed, 390 deferred (blend.fillet_corner_p1 111, blend.fillet_corner_p2 126, blend.fillet_executive_p1 6, blend.fillet_geom_p5 13, blend.fillet_geom_p6 33, intersect.surface_drop_lib_p3 78, surface.cone_p1 11, surface.surf_of_extrusion_p2 12), 55 rejected (40 of them review joins that succeed without an original face, where upstream would delete harness objects); every patch builder past its state checks is deferred (MakeAnalyticCornerSurface / CreateEndPatch / DropCurve), so no CreateCornerBlend default-patch values are compared; SmFilletSolver::SplitFilletGeomAtSideEdge (ported in blend.fillet_solver_p1 on FilletGeomRef) is stubbed in AdjustTangentCorner as UNPORTED(blend.fillet_geom_p6), its first blocker; the 3x2 curve join dispatches on the curve kind (SmLine/SmEllipse JoinWith overrides), as upstream's virtual JoinWith does; no CreateCornerPatch implementation compares surface output yet (corner_p1/p2 porters must extend the runner); UPDATE (PR #247, blend.fillet_geom_p6): GetRailIndexOfVertex reaches part 6 and AdjustTangentCorner's GetRailVertex / SetPointClass / GetCommonEdges after the split are ported up to CalcCornerVertGeom (UNPORTED(blend.fillet_corner_p1)); the SplitFilletGeomAtSideEdge stub is retagged UNPORTED(blend.fillet_solver_p1) (its port works on FilletGeomRef). The shim's tangent pre-check now mirrors the split loop (GetRailIndexOfVertex, DropPoint, IsValueOnBoundary) and stops only where a geometry would be split (refusing the uninitialised lRailIdx / bSuccess cases). Re-run: 1005 cases, 592 pass, 0 failed, 358 deferred (blend.fillet_solver_p1 1), 55 rejected; --perturb SENSITIVE 592/592; UPDATE 2026-10-20 (PR #266 wires sm_TestG1Continuity / SmFilletNx1Corner::CheckNx1Degeneracy): 1005 cases, 618 passed, 332 deferred (blend.fillet_corner_p1 1, blend.fillet_corner_p2 126, blend.fillet_executive_p1 6, blend.fillet_geom_p5 13, blend.fillet_geom_p6 33, intersect.surface_drop_lib_p3 80, surface.cone_p1 18, surface.sphere 8, surface.surf_of_extrusion_p2 30, topology.brep_p10 17), 55 rejected; exactly 58 deferred-to-pass transitions against main's report, no other change UPDATE (batch/finish-1, PR #268 landed on main): 1005 cases, 791 passed, 0 failed, 157 deferred, 57 rejected."
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_corner_p3 cases=1005 passed=799 failed=0 deferred=126 rejected=80 blocked_by=blend.fillet_corner_p2(107),blend.fillet_executive_p1(6),blend.fillet_geom_p5(13). 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; PARTIAL (PR #256, built on PR #252 = #147 + #192): 1005 cases (308 upstream-file fixtures from TestFiles/pt_TestFiles/Fillet, 400 generated, 60 review cases with SmPlane user surfaces, 156 review cases with real SmLine 3x2 edge curves, 81 with real SmCircle 3x2 edge curves), 560 passed, 390 deferred (blend.fillet_corner_p1 111, blend.fillet_corner_p2 126, blend.fillet_executive_p1 6, blend.fillet_geom_p5 13, blend.fillet_geom_p6 33, intersect.surface_drop_lib_p3 78, surface.cone_p1 11, surface.surf_of_extrusion_p2 12), 55 rejected (40 of them review joins that succeed without an original face, where upstream would delete harness objects); every patch builder past its state checks is deferred (MakeAnalyticCornerSurface / CreateEndPatch / DropCurve), so no CreateCornerBlend default-patch values are compared; SmFilletSolver::SplitFilletGeomAtSideEdge (ported in blend.fillet_solver_p1 on FilletGeomRef) is stubbed in AdjustTangentCorner as UNPORTED(blend.fillet_geom_p6), its first blocker; the 3x2 curve join dispatches on the curve kind (SmLine/SmEllipse JoinWith overrides), as upstream's virtual JoinWith does; no CreateCornerPatch implementation compares surface output yet (corner_p1/p2 porters must extend the runner); UPDATE (PR #247, blend.fillet_geom_p6): GetRailIndexOfVertex reaches part 6 and AdjustTangentCorner's GetRailVertex / SetPointClass / GetCommonEdges after the split are ported up to CalcCornerVertGeom (UNPORTED(blend.fillet_corner_p1)); the SplitFilletGeomAtSideEdge stub is retagged UNPORTED(blend.fillet_solver_p1) (its port works on FilletGeomRef). The shim's tangent pre-check now mirrors the split loop (GetRailIndexOfVertex, DropPoint, IsValueOnBoundary) and stops only where a geometry would be split (refusing the uninitialised lRailIdx / bSuccess cases). Re-run: 1005 cases, 592 pass, 0 failed, 358 deferred (blend.fillet_solver_p1 1), 55 rejected; --perturb SENSITIVE 592/592; UPDATE 2026-10-20 (PR #266 wires sm_TestG1Continuity / SmFilletNx1Corner::CheckNx1Degeneracy): 1005 cases, 618 passed, 332 deferred (blend.fillet_corner_p1 1, blend.fillet_corner_p2 126, blend.fillet_executive_p1 6, blend.fillet_geom_p5 13, blend.fillet_geom_p6 33, intersect.surface_drop_lib_p3 80, surface.cone_p1 18, surface.sphere 8, surface.surf_of_extrusion_p2 30, topology.brep_p10 17), 55 rejected; exactly 58 deferred-to-pass transitions against main's report, no other change UPDATE (batch/finish-1, PR #268 landed on main): 1005 cases, 791 passed, 0 failed, 157 deferred, 57 rejected."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmCircularFillet", "SM_API_test:TestSmChamferFillet",
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PR #244: 3/3 control-flow bodies, complete continuations; difftest 291 cases: 116 state/error-path passes, 0 failures, 175 deferred (executive_p1 46, topology.brep_p4 111 and query.brep 18 since PR #267 wired ProcessSmoothEdgeSequences and the merged topology.brep_p2 SetTolerance; executive_p2 129 before); with_values=116 no_values=0; 0 successful geometry/topology parity cases. Includes 7 actual upstream API examples, Rust setup deferred to executive_p1. 19 core tests +4 FFI guard tests. 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 UPDATE (PR #204, topology.brep_p3): ExecutiveAccess::merge_brep and orient_trimmed_surfaces are required methods (their UNPORTED(topology.brep_p3) defaults are removed); the owner of the B-reps implements them with topology::brep::p3::merge_brep / orient_trimmed_surfaces (the difftest Access of this unit and of blend.fillet_executive_p2 under the kernel's identities, with_kernel_callbacks, the merged B-rep enrolled in the same domain first; copy maps and face lists of handles are refused, the fixtures have none). p3_tests' adapter already implemented both. Report unchanged (291 cases, 116 pass, 0 fail, 175 deferred).; UPDATE (PR #247): ExecutiveAccess::trim_original_surfaces is a required adapter delegating to blend::fillet_geom::p6::FilletBrep::trim_original_surfaces (as insert_geom_topology for p4); no case reaches it, re-run unchanged ; PR #260: ErrorInfo::default's edge type is SM_FE_UNKNOWN (14), as SmFilletErrorInfo::set(), not 0 (no p3 output reads it)"
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_executive_p3 cases=291 passed=245 failed=0 deferred=46 blocked_by=blend.fillet_executive_p1(46). PR #244: 3/3 control-flow bodies, complete continuations; difftest 291 cases: 116 state/error-path passes, 0 failures, 175 deferred (executive_p1 46, topology.brep_p4 111 and query.brep 18 since PR #267 wired ProcessSmoothEdgeSequences and the merged topology.brep_p2 SetTolerance; executive_p2 129 before); with_values=116 no_values=0; 0 successful geometry/topology parity cases. Includes 7 actual upstream API examples, Rust setup deferred to executive_p1. 19 core tests +4 FFI guard tests. 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 UPDATE (PR #204, topology.brep_p3): ExecutiveAccess::merge_brep and orient_trimmed_surfaces are required methods (their UNPORTED(topology.brep_p3) defaults are removed); the owner of the B-reps implements them with topology::brep::p3::merge_brep / orient_trimmed_surfaces (the difftest Access of this unit and of blend.fillet_executive_p2 under the kernel's identities, with_kernel_callbacks, the merged B-rep enrolled in the same domain first; copy maps and face lists of handles are refused, the fixtures have none). p3_tests' adapter already implemented both. Report unchanged (291 cases, 116 pass, 0 fail, 175 deferred).; UPDATE (PR #247): ExecutiveAccess::trim_original_surfaces is a required adapter delegating to blend::fillet_geom::p6::FilletBrep::trim_original_surfaces (as insert_geom_topology for p4); no case reaches it, re-run unchanged ; PR #260: ErrorInfo::default's edge type is SM_FE_UNKNOWN (14), as SmFilletErrorInfo::set(), not 0 (no p3 output reads it)"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFil
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL (edited by PR #264 blend.fillet_geom_p5, difftest re-run with identical results: sm_CreateUVCurve's surface solves name the surface via UvSurfaceHandle; calc_fillet_int_2_fillets names its two curves via blend.fillet_geom_p1's CurveObjectHandle; srf_srf_intersection / SrfSrfCurves are pub(super)): difftest 398 cases (98 fixture incl. 42 review adversarial sm_CreateUVCurve cases and 6 MakeFaceBrep solver-tolerance cases, 300 generated), 362 pass, 0 failed, 36 deferred (blend.fillet_geom_p6 36: JoinTwoFilletVertsByCurves in MakeFaceBrep, SmFilletEdge::CalcBlendingRail, GetRailIndexOfVertexuse); sm_CreateUVCurve compared fully (bit-identical); sm_SrfSrfIntersection (blend.fillet_geom_p2, wired by that unit) in the vertex calculators and the plane branch of sm_CreateUVCurve are not reached by the shim's models; RegisterExistingSSI (ported in boolean.topology_intersector_p2) stays stubbed as UNPORTED(blend.fillet_executive_p1) because it runs on the executive's intersector; InsertIntersectionTopology unit tests only (needs the fillet executive, blend.fillet_executive_p1). Only sm_CreateUVCurve compares real values; MakeFaceBrep, CalcBlendingGeom and the three vertex calculators compare early exits only (everything after JoinTwoFilletVertsByCurves or sm_SrfSrfIntersection is deferred, and the p1 model cannot put an original face on a fillet edge, so CalcRailIntExtendedEdgeuse never passes NER(pSideFace)): the porter of blend.fillet_geom_p6 must extend this runner. Built on PR #147 (blend.fillet_geom_p1) and PR #192 (blend.fillet_solver_p1), both merged. Was: 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 UPDATE (PR #204, topology.brep_p3): FilletBrep::make_face_brep takes k: &mut Kernel (topology::brep::p7::make_face_with_curves / trim_surface_with_model_space_curves make topology.brep_p3 wire edges); runner and unit test pass &mut k; the runner file is rustfmt'd. Report unchanged (370 cases, 340 pass, 0 fail, 30 deferred).; UPDATE (PR #247, blend.fillet_geom_p6): GetRailIndexOfVertexuse, JoinTwoFilletVertsByCurves, CalcBlendingRail and RecordFilletError wired to part 6 (MakeFaceBrep's 3D curve list is Option<Curve>, as the join appends). The runner's MakeFace B-rep now has the void infinite region SmBrep() makes (Brep::new_with_infinite_region; before, TrimSurfaceWithModelSpaceCurves stopped at NER(pRegion) where C++ goes on). Fix: CalcBlendingGeom reads m_vRails[i] as its loop reaches it (a NULL second rail after a failing first rail is SM_ERR, not SM_ERR_NULL_POINTER; 2 fixtures in review.json). Re-run: 400 cases, 382 pass, 0 failed, 18 deferred (topology.brep_p3 18); --seeds 2000: 2038 pass, 0 failed, 60 deferred; --perturb SENSITIVE 382/382 TOUCHED (blend.fillet_solver_p4, PR #212): FilletBrep::calc_blending_geom_of_solver (CalcBlendingGeom with the geometry's solver given), used by CalcFilletGeom."
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_geom_p4 cases=400 passed=396 failed=0 deferred=4 blocked_by=topology.face_p2(4). PARTIAL (edited by PR #264 blend.fillet_geom_p5, difftest re-run with identical results: sm_CreateUVCurve's surface solves name the surface via UvSurfaceHandle; calc_fillet_int_2_fillets names its two curves via blend.fillet_geom_p1's CurveObjectHandle; srf_srf_intersection / SrfSrfCurves are pub(super)): difftest 398 cases (98 fixture incl. 42 review adversarial sm_CreateUVCurve cases and 6 MakeFaceBrep solver-tolerance cases, 300 generated), 362 pass, 0 failed, 36 deferred (blend.fillet_geom_p6 36: JoinTwoFilletVertsByCurves in MakeFaceBrep, SmFilletEdge::CalcBlendingRail, GetRailIndexOfVertexuse); sm_CreateUVCurve compared fully (bit-identical); sm_SrfSrfIntersection (blend.fillet_geom_p2, wired by that unit) in the vertex calculators and the plane branch of sm_CreateUVCurve are not reached by the shim's models; RegisterExistingSSI (ported in boolean.topology_intersector_p2) stays stubbed as UNPORTED(blend.fillet_executive_p1) because it runs on the executive's intersector; InsertIntersectionTopology unit tests only (needs the fillet executive, blend.fillet_executive_p1). Only sm_CreateUVCurve compares real values; MakeFaceBrep, CalcBlendingGeom and the three vertex calculators compare early exits only (everything after JoinTwoFilletVertsByCurves or sm_SrfSrfIntersection is deferred, and the p1 model cannot put an original face on a fillet edge, so CalcRailIntExtendedEdgeuse never passes NER(pSideFace)): the porter of blend.fillet_geom_p6 must extend this runner. Built on PR #147 (blend.fillet_geom_p1) and PR #192 (blend.fillet_solver_p1), both merged. Was: 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 UPDATE (PR #204, topology.brep_p3): FilletBrep::make_face_brep takes k: &mut Kernel (topology::brep::p7::make_face_with_curves / trim_surface_with_model_space_curves make topology.brep_p3 wire edges); runner and unit test pass &mut k; the runner file is rustfmt'd. Report unchanged (370 cases, 340 pass, 0 fail, 30 deferred).; UPDATE (PR #247, blend.fillet_geom_p6): GetRailIndexOfVertexuse, JoinTwoFilletVertsByCurves, CalcBlendingRail and RecordFilletError wired to part 6 (MakeFaceBrep's 3D curve list is Option<Curve>, as the join appends). The runner's MakeFace B-rep now has the void infinite region SmBrep() makes (Brep::new_with_infinite_region; before, TrimSurfaceWithModelSpaceCurves stopped at NER(pRegion) where C++ goes on). Fix: CalcBlendingGeom reads m_vRails[i] as its loop reaches it (a NULL second rail after a failing first rail is SM_ERR, not SM_ERR_NULL_POINTER; 2 fixtures in review.json). Re-run: 400 cases, 382 pass, 0 failed, 18 deferred (topology.brep_p3 18); --seeds 2000: 2038 pass, 0 failed, 60 deferred; --perturb SENSITIVE 382/382 TOUCHED (blend.fillet_solver_p4, PR #212): FilletBrep::calc_blending_geom_of_solver (CalcBlendingGeom with the geometry's solver given), used by CalcFilletGeom."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmFilletPreview", "SM_API_test:TestSmSurfaceSurfaceFil
status = "partial"
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; PR #247 partial: 400 generated cases (edge on edge, fillet end, set-back rail, blending rail, ShouldSwapFaces, JoinTwoFilletVertsByCurves, SmFilletGeom::Copy, the rail lookups and SetUpRailPoint, sm_MoveTSP, RailEdgeuseIntersect, RecordFilletError), 304 pass bit-identical, 0 failed, 96 deferred (harness:analytic-geometry-export 61: ops evaluating cone/cylinder/torus/revolution faces or analytic edges the B-rep export carries as their B-spline part; topology.face_p4 11: sm_ClassifyFacePoint's face queries (the stub owner moved from topology.face_p3 when that unit landed); blend.fillet_executive_p1 9: NoteFilletError; blend.fillet_solver_p2 8: RailEdgeuseIntersect; intersect.surface_drop_lib_p3 7: DropCurve), max_rel_err=0, no absolute floors; --seeds 3000: 2396 pass, 604 deferred, 0 failed; --perturb SENSITIVE 304/304; --fuzz 2000 FUZZ-PASS. After topology.face_p4 (PR #239) landed: 315 pass, 0 failed, 85 deferred (its 11 sm_ClassifyFacePoint cases compare bit-identical); --perturb SENSITIVE 315/315. Built on #242 (blend.fillet_geom_p3, which merges #147 and #192; re-merged at eb6560b7). No co-ports: the corner members part 6 reads come from blend::fillet_corner::p3::FilletCorner (#256) and the solver lookup is blend::fillet_geom::p4::solver_of. TrimOriginalSurfaces is not compared against the C++, kernel-tested only (needs a fillet B-rep and executive topology-intersector mates the shim does not build); the curve-classification branch of ShouldSwapFaces is not generated. Wired UNPORTED(blend.fillet_geom_p6) in blend/fillet_geom/p3.rs (CalcEdgeOnEdge, CalcFilletEnd, CalcSetBackRail through CalcCornerEdgeGeom; sm_MoveTSP in ReCalcFilletGeom), p2.rs (GetRailIndexOfSideEU, RailEdgeuseIntersect, ShouldSwapFaces), p4.rs (GetRailIndexOfVertexuse, JoinTwoFilletVertsByCurves, CalcBlendingRail, RecordFilletError), fillet_corner/p3.rs (GetRailVertex) and fillet_executive/p3.rs (TrimOriginalSurfaces adapter); p4 deferred 36 -> 0 on part 6, corner_p3 33 -> 0. GetRailIndexOfVertexuse takes an Option and keeps upstream's NER(pFVU). Not wired: GetRailIndexOfVertexuse, GetRailVertex, SetUpRailPoint in blend/fillet_solver/p1.rs (split_fillet_geom_at_side_edge, split_fillet_geom): those take the solver's opaque FilletGeomRef and a plain pseudo Brep, not a FilletBrep, as for p3's TopologySplit. Found on the way: surface.surface_p2's sm_IntersectAndSplit passed no curve handle, so near-duplicate plane roots were not merged as upstream and LiftCurve split UV curves ~1e-10 off (findings.md); main's #444 fixed it the same way and this PR now uses main's fix. Moved onto #303 (blend.fillet_solver_p1 green: FilletGeomRef replaced by pseudo-B-rep FilletGeomIds; merge e67e390e): wired the solver's p6 calls (GetRailIndexOfVertexuse and GetRailVertex in SplitFilletGeomAtSideEdge, GetRailVertex/SetUpRailPoint in SplitFilletGeom) and SmFilletGeom::TopologySplit (blend.fillet_geom_p3); FilletBrep::rail_edgeuse_intersect drops its FilletGeomRef argument, re_calc_fillet_geom its geometry_id resolver. Numbers unchanged: 400 cases, 315 pass, 0 failed, 85 deferred; blend.fillet_corner_p3's geom_p6(33) deferrals now run (592 pass, 0 failed); adjust_tangent_corner's SplitFilletGeomAtSideEdge is wired through a new CornerEnv::solvers table; its one case (gen0067) is now rejected: the model's geometries have no solver and upstream dereferences NULL (shim refuses; corner_p3 592 pass, 357 deferred, 56 rejected). After merging main 5c3adfbe (#264 blend.fillet_geom_p5): 400 cases, 309 pass, 0 failed, 91 deferred; 6 generated cases (gen0044/0056/0093/0147/0281/0380) moved from pass to deferred at SmSurface::DropCurve (intersect.surface_drop_lib_p3), reached now that #264's p1/p2 solves name their objects as upstream does; TopologySplit's MakeRailEdgeuse/MakeFilletEdge call p5's (FilletBrep::make_rail_edgeuse_on)."
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_geom_p6 cases=400 passed=322 failed=0 deferred=78 blocked_by=blend.fillet_executive_p1(9),blend.fillet_geom_p1(8),harness:analytic-geometry-export(61). 17 fns; largest: SmFilletGeom::TrimOriginalSurfaces, SmFilletEdge::CalcBlendingRail, SmFilletEdge::CalcSetBackRail, JoinTwoFilletVertsByCurves; unit-SCC #22 (220 units); 31 upstream test entry points reach this unit; PR #247 partial: 400 generated cases (edge on edge, fillet end, set-back rail, blending rail, ShouldSwapFaces, JoinTwoFilletVertsByCurves, SmFilletGeom::Copy, the rail lookups and SetUpRailPoint, sm_MoveTSP, RailEdgeuseIntersect, RecordFilletError), 304 pass bit-identical, 0 failed, 96 deferred (harness:analytic-geometry-export 61: ops evaluating cone/cylinder/torus/revolution faces or analytic edges the B-rep export carries as their B-spline part; topology.face_p4 11: sm_ClassifyFacePoint's face queries (the stub owner moved from topology.face_p3 when that unit landed); blend.fillet_executive_p1 9: NoteFilletError; blend.fillet_solver_p2 8: RailEdgeuseIntersect; intersect.surface_drop_lib_p3 7: DropCurve), max_rel_err=0, no absolute floors; --seeds 3000: 2396 pass, 604 deferred, 0 failed; --perturb SENSITIVE 304/304; --fuzz 2000 FUZZ-PASS. After topology.face_p4 (PR #239) landed: 315 pass, 0 failed, 85 deferred (its 11 sm_ClassifyFacePoint cases compare bit-identical); --perturb SENSITIVE 315/315. Built on #242 (blend.fillet_geom_p3, which merges #147 and #192; re-merged at eb6560b7). No co-ports: the corner members part 6 reads come from blend::fillet_corner::p3::FilletCorner (#256) and the solver lookup is blend::fillet_geom::p4::solver_of. TrimOriginalSurfaces is not compared against the C++, kernel-tested only (needs a fillet B-rep and executive topology-intersector mates the shim does not build); the curve-classification branch of ShouldSwapFaces is not generated. Wired UNPORTED(blend.fillet_geom_p6) in blend/fillet_geom/p3.rs (CalcEdgeOnEdge, CalcFilletEnd, CalcSetBackRail through CalcCornerEdgeGeom; sm_MoveTSP in ReCalcFilletGeom), p2.rs (GetRailIndexOfSideEU, RailEdgeuseIntersect, ShouldSwapFaces), p4.rs (GetRailIndexOfVertexuse, JoinTwoFilletVertsByCurves, CalcBlendingRail, RecordFilletError), fillet_corner/p3.rs (GetRailVertex) and fillet_executive/p3.rs (TrimOriginalSurfaces adapter); p4 deferred 36 -> 0 on part 6, corner_p3 33 -> 0. GetRailIndexOfVertexuse takes an Option and keeps upstream's NER(pFVU). Not wired: GetRailIndexOfVertexuse, GetRailVertex, SetUpRailPoint in blend/fillet_solver/p1.rs (split_fillet_geom_at_side_edge, split_fillet_geom): those take the solver's opaque FilletGeomRef and a plain pseudo Brep, not a FilletBrep, as for p3's TopologySplit. Found on the way: surface.surface_p2's sm_IntersectAndSplit passed no curve handle, so near-duplicate plane roots were not merged as upstream and LiftCurve split UV curves ~1e-10 off (findings.md); main's #444 fixed it the same way and this PR now uses main's fix. Moved onto #303 (blend.fillet_solver_p1 green: FilletGeomRef replaced by pseudo-B-rep FilletGeomIds; merge e67e390e): wired the solver's p6 calls (GetRailIndexOfVertexuse and GetRailVertex in SplitFilletGeomAtSideEdge, GetRailVertex/SetUpRailPoint in SplitFilletGeom) and SmFilletGeom::TopologySplit (blend.fillet_geom_p3); FilletBrep::rail_edgeuse_intersect drops its FilletGeomRef argument, re_calc_fillet_geom its geometry_id resolver. Numbers unchanged: 400 cases, 315 pass, 0 failed, 85 deferred; blend.fillet_corner_p3's geom_p6(33) deferrals now run (592 pass, 0 failed); adjust_tangent_corner's SplitFilletGeomAtSideEdge is wired through a new CornerEnv::solvers table; its one case (gen0067) is now rejected: the model's geometries have no solver and upstream dereferences NULL (shim refuses; corner_p3 592 pass, 357 deferred, 56 rejected). After merging main 5c3adfbe (#264 blend.fillet_geom_p5): 400 cases, 309 pass, 0 failed, 91 deferred; 6 generated cases (gen0044/0056/0093/0147/0281/0380) moved from pass to deferred at SmSurface::DropCurve (intersect.surface_drop_lib_p3), reached now that #264's p1/p2 solves name their objects as upstream does; TopologySplit's MakeRailEdgeuse/MakeFilletEdge call p5's (FilletBrep::make_rail_edgeuse_on)."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "partial"
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; PARTIAL (PR #179; review integration in PR #208): difftest cases=1292 passed=973 failed=0 deferred=319 (blend.fillet_solver_p2 37, _p4 61, blend.fillet_standard_solver_p2 59, curve.crv_on_surf 162: SmCrvOnSurf over an SmPlane is a dispatch gap), max_rel_err 0; all 33 former standard-solver p1 deferrals now compare after wiring five ConstantRadiusAssistedFs virtuals to its available p1 methods. The Rust runner retains both mutated point records before status propagation; six native review4 fixtures cover delta surface/derivative writes and zero-chord partial output. Three Rust virtual-dispatch regressions cover query values, both-rail Jacobians and offsets retained on later errors; FlushCurve of 2+ points is not run in C++ (dereferences the unset m_pExecutive and NULL fillet geometry rails) and is covered by unit tests only Earlier re-verification after merging main (surface.offset_surface green): FilletSolverOps::rail_surface_evaluate_1st_derivatives (GetSurface(rail)->Evaluate1stDerivatives) now evaluates the ported SmOffsetSurface of ConstantRadiusAssistedFs (no UNPORTED(surface.offset_surface) left); cases=1213 passed=803 failed=0 deferred=410, --perturb 803/803. Earlier review fixes: FilletSolverOps::step_solve takes rdStep in/out and its flags as an out-param kept on failure; 73 review fixtures (fixtures/blend.fillet_intersector/review_cases.json); cases=1286 passed=875 failed=0 deferred=411 (_p3 120: rv_next_clipped_step pins the C++ rescaled step). PR #236 (blend.fillet_solver_p3): FilletSolverOps::step_solve is required; ConstantRadiusAssistedFs calls FilletSolver::step_solve with itself as the solver (its overrides kept) and copies the flags back on an error too; the 120 _p3 deferrals: 59 pass, 61 defer at blend.fillet_standard_solver_p1; cases=1286 passed=934 failed=0 deferred=352. PR #236 round 4: the constant-radius solver's FilletSolverOps overrides (GetJacobianSize, SetupOffsetValues, OffsetRadiiCanChange, LoadJacobian, GetType, GetSolverType = SM_FS_CONST_RADIUS, the class the shim builds) call blend.fillet_standard_solver_p1, and the runner writes the Delta/Values points back (filled by reference upstream); the 94 _standard_solver_p1 deferrals: 33 pass, 59 defer at _standard_solver_p2 (LoadInitialValues), 2 at _p4; cases=1286 passed=967 failed=0 deferred=319. Qualification after #236 in PR #208: PARTIAL blend.fillet_intersector cases=1292 passed=973 failed=0 deferred=319 max_rel_err=0e0 with_values=973 no_values=0 blocked_by=blend.fillet_solver_p2(37),blend.fillet_solver_p4(61),blend.fillet_standard_solver_p2(59),curve.crv_on_surf(162). PR #307 historical qualification, before the current-main refresh (not fresh merged-tree results): 1286 native cases, 1037 bit-identical passes, 0 failures, 249 deferred (blend.fillet_solver_p1 33, _p2 37, _p3 120, _p4 59); --perturb SENSITIVE 1037/1037. Concrete-Surface CrvOnSurf wires the former SmCrvOnSurf-over-SmPlane dispatch gap, adding 162 passing cases over the reviewed PR #179 baseline (875 passes, 411 deferred). Current unit status remains partial; the qualifications above describe their respective historical trees. UPDATE (batch/finish-3, blend.fillet_solver_p4 PR #212): ComputePointValues reaches FilletSolver::compute_point_values; DoPointIntersection dispatches to the overrides (FilletIntersector::do_point_intersection / FilletDispatch over intersect::surface_intersector::p4::IntersectorVirtuals)."
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_intersector cases=1292 passed=1291 failed=0 deferred=0 known_mismatch=1. 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; PARTIAL (PR #179; review integration in PR #208): difftest cases=1292 passed=973 failed=0 deferred=319 (blend.fillet_solver_p2 37, _p4 61, blend.fillet_standard_solver_p2 59, curve.crv_on_surf 162: SmCrvOnSurf over an SmPlane is a dispatch gap), max_rel_err 0; all 33 former standard-solver p1 deferrals now compare after wiring five ConstantRadiusAssistedFs virtuals to its available p1 methods. The Rust runner retains both mutated point records before status propagation; six native review4 fixtures cover delta surface/derivative writes and zero-chord partial output. Three Rust virtual-dispatch regressions cover query values, both-rail Jacobians and offsets retained on later errors; FlushCurve of 2+ points is not run in C++ (dereferences the unset m_pExecutive and NULL fillet geometry rails) and is covered by unit tests only Earlier re-verification after merging main (surface.offset_surface green): FilletSolverOps::rail_surface_evaluate_1st_derivatives (GetSurface(rail)->Evaluate1stDerivatives) now evaluates the ported SmOffsetSurface of ConstantRadiusAssistedFs (no UNPORTED(surface.offset_surface) left); cases=1213 passed=803 failed=0 deferred=410, --perturb 803/803. Earlier review fixes: FilletSolverOps::step_solve takes rdStep in/out and its flags as an out-param kept on failure; 73 review fixtures (fixtures/blend.fillet_intersector/review_cases.json); cases=1286 passed=875 failed=0 deferred=411 (_p3 120: rv_next_clipped_step pins the C++ rescaled step). PR #236 (blend.fillet_solver_p3): FilletSolverOps::step_solve is required; ConstantRadiusAssistedFs calls FilletSolver::step_solve with itself as the solver (its overrides kept) and copies the flags back on an error too; the 120 _p3 deferrals: 59 pass, 61 defer at blend.fillet_standard_solver_p1; cases=1286 passed=934 failed=0 deferred=352. PR #236 round 4: the constant-radius solver's FilletSolverOps overrides (GetJacobianSize, SetupOffsetValues, OffsetRadiiCanChange, LoadJacobian, GetType, GetSolverType = SM_FS_CONST_RADIUS, the class the shim builds) call blend.fillet_standard_solver_p1, and the runner writes the Delta/Values points back (filled by reference upstream); the 94 _standard_solver_p1 deferrals: 33 pass, 59 defer at _standard_solver_p2 (LoadInitialValues), 2 at _p4; cases=1286 passed=967 failed=0 deferred=319. Qualification after #236 in PR #208: PARTIAL blend.fillet_intersector cases=1292 passed=973 failed=0 deferred=319 max_rel_err=0e0 with_values=973 no_values=0 blocked_by=blend.fillet_solver_p2(37),blend.fillet_solver_p4(61),blend.fillet_standard_solver_p2(59),curve.crv_on_surf(162). PR #307 historical qualification, before the current-main refresh (not fresh merged-tree results): 1286 native cases, 1037 bit-identical passes, 0 failures, 249 deferred (blend.fillet_solver_p1 33, _p2 37, _p3 120, _p4 59); --perturb SENSITIVE 1037/1037. Concrete-Surface CrvOnSurf wires the former SmCrvOnSurf-over-SmPlane dispatch gap, adding 162 passing cases over the reviewed PR #179 baseline (875 passes, 411 deferred). Current unit status remains partial; the qualifications above describe their respective historical trees. UPDATE (batch/finish-3, blend.fillet_solver_p4 PR #212): ComputePointValues reaches FilletSolver::compute_point_values; DoPointIntersection dispatches to the overrides (FilletIntersector::do_point_intersection / FilletDispatch over intersect::surface_intersector::p4::IntersectorVirtuals)."
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_parallel_projection", "prog_test:my_test_tsurf_proje
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PR #466 (continues froglemonade2's PR #249, closed for capacity; their commits kept). All 10 fns ported (sm_FindRolloverSideEdge and CreateCliffRollOverSideFG in full). The solver's geometries are #303's FilletGeomId in the executive's pseudo B-rep (pseudo: &mut FilletBrep); PR #249's FilletGeomRef index mapping is gone. Stubs left: SmFilletEdge::MakeFilletEdge / CalcEdgeOnEdge, GetFilletCornerOfVertex / NoteFilletError (blend.fillet_executive_p1, todo), the edge-use PreInsert/PostInsert (justified, as blend.fillet_solver_p1) and SmTemporaryRadiusChange (blend.fillet_executive_p2, justified: findings.md 'blend.fillet_solver_p2: SmTemporaryRadiusChange needs the executive's handles'). Back-edges wired (all 17 UNPORTED(blend.fillet_solver_p2) on main): blend.fillet_geom_p1 (sm_CreateCubicRailRailInterpolant), _p2 (RailRailIntersect, PointOnPlaneSolve x2), _p3 (CalcCone/TorusFilletGeom), _p6 (RailEdgeuseIntersect), blend.fillet_intersector (PointOnPlaneSolve), blend.fillet_executive_p3 (ExecutiveAccess::solver_corner, now required), blend.fillet_solver_p1 (the PointOnPlaneSolve virtual's base default), blend.fillet_solver_p3 (GetFilletCorner x2, RailEdgeuseIntersect x3, CreateCliffRollOverSideFG; promoted to green), blend.fillet_solver_p5 recovery (sm_FindRolloverSideEdge, CreateCliffRollOverSideFG); the geom tables stay main's &mut [FilletSolver] with base virtuals (findings 'back-edges into the solver from blend.fillet_geom'). Difftest 311 cases (11 fixtures in fixtures/blend.fillet_solver_p2/cases.json, 300 generated named gen<i>_<op>): 256 pass (max_rel_err 6.4e-16, with_values 256), 0 failed, 55 deferred (intersect.surface_drop_lib_p3 45: GetOrCreateUVTrimCurve of the side edge use in RailEdgeuseIntersect; blend.fillet_executive_p1 10: RecordFilletError's NoteFilletError); --perturb SENSITIVE 256/256 (main e685b418; --green 254 units, 0 failed). Earlier (PR #249 @ ed0acf35): 311 / 222 / 0 / 89, fuzz 2000 with 0 differs. Follow-up: a library-solver case set (EiffelTowerFs / SecantConstantRadiusFs)."
notes = "main CI e33985411 (2026-10-23): PARTIAL blend.fillet_solver_p2 cases=311 passed=301 failed=0 deferred=10 blocked_by=blend.fillet_executive_p1(10). PR #466 (continues froglemonade2's PR #249, closed for capacity; their commits kept). All 10 fns ported (sm_FindRolloverSideEdge and CreateCliffRollOverSideFG in full). The solver's geometries are #303's FilletGeomId in the executive's pseudo B-rep (pseudo: &mut FilletBrep); PR #249's FilletGeomRef index mapping is gone. Stubs left: SmFilletEdge::MakeFilletEdge / CalcEdgeOnEdge, GetFilletCornerOfVertex / NoteFilletError (blend.fillet_executive_p1, todo), the edge-use PreInsert/PostInsert (justified, as blend.fillet_solver_p1) and SmTemporaryRadiusChange (blend.fillet_executive_p2, justified: findings.md 'blend.fillet_solver_p2: SmTemporaryRadiusChange needs the executive's handles'). Back-edges wired (all 17 UNPORTED(blend.fillet_solver_p2) on main): blend.fillet_geom_p1 (sm_CreateCubicRailRailInterpolant), _p2 (RailRailIntersect, PointOnPlaneSolve x2), _p3 (CalcCone/TorusFilletGeom), _p6 (RailEdgeuseIntersect), blend.fillet_intersector (PointOnPlaneSolve), blend.fillet_executive_p3 (ExecutiveAccess::solver_corner, now required), blend.fillet_solver_p1 (the PointOnPlaneSolve virtual's base default), blend.fillet_solver_p3 (GetFilletCorner x2, RailEdgeuseIntersect x3, CreateCliffRollOverSideFG; promoted to green), blend.fillet_solver_p5 recovery (sm_FindRolloverSideEdge, CreateCliffRollOverSideFG); the geom tables stay main's &mut [FilletSolver] with base virtuals (findings 'back-edges into the solver from blend.fillet_geom'). Difftest 311 cases (11 fixtures in fixtures/blend.fillet_solver_p2/cases.json, 300 generated named gen<i>_<op>): 256 pass (max_rel_err 6.4e-16, with_values 256), 0 failed, 55 deferred (intersect.surface_drop_lib_p3 45: GetOrCreateUVTrimCurve of the side edge use in RailEdgeuseIntersect; blend.fillet_executive_p1 10: RecordFilletError's NoteFilletError); --perturb SENSITIVE 256/256 (main e685b418; --green 254 units, 0 failed). Earlier (PR #249 @ ed0acf35): 311 / 222 / 0 / 89, fuzz 2000 with 0 differs. Follow-up: a library-solver case set (EiffelTowerFs / SecantConstantRadiusFs)."
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.composite_curve_p1 cases=3096 passed=3096 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.composite_curve_p2 cases=676 passed=676 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
claimed_by = "swarm-curve.crv_in_volume-a1"
claimed_at = "2026-10-13T01:00:34Z"
notes = "difftest 2030 cases, all pass (PR #437: GetKnots classifies through intersect::curve_class::p8::volume_discontinuity_intervals with the caller Kernel and returns its written knots with a failing status; was 1855 pass, 175 deferred on intersect.curve_class_p4; 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 Re-run (PR #137, constructor stub retagged UNPORTED(intersect.curve_class_p2): SmCurveClassification::ReSet): 2030 cases, 1855 pass, 175 deferred (intersect.curve_class_p2 175), 0 failed, --perturb SENSITIVE 1855/1855."
notes = "main CI e33985411 (2026-10-23): PASS curve.crv_in_volume cases=2030 passed=2030 failed=0 deferred=0. difftest 2030 cases, all pass (PR #437: GetKnots classifies through intersect::curve_class::p8::volume_discontinuity_intervals with the caller Kernel and returns its written knots with a failing status; was 1855 pass, 175 deferred on intersect.curve_class_p4; 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 Re-run (PR #137, constructor stub retagged UNPORTED(intersect.curve_class_p2): SmCurveClassification::ReSet): 2030 cases, 1855 pass, 175 deferred (intersect.curve_class_p2 175), 0 failed, --perturb SENSITIVE 1855/1855."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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)"
notes = "main CI e33985411 (2026-10-23): PASS curve.curve_cache cases=642 passed=642 failed=0 deferred=0. 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)"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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) Review PR #106 recertification: 3021 cases, 3021 pass, 0 deferred, 0 failed, max_rel_err=0.0; deferred: none. CO-PORTED in topology.brep_p3 (PR #204): Curve::notify_key / set_notify_key, the identity a curve object is notified under (upstream passes the SmCurve pointer); Clone (the copy constructor) gives the copy none. Report unchanged. UPDATE (PR #204, Codex re-check of 98fec50f): the curve's identity is a GeometryIdentity (key and issuing domain): Curve::notify_identity / set_notify_identity, notify_key reads its key. UPDATE (PR #204, Codex re-check of d61f8d48): Curve::notify_identity and the public set_notify_identity are removed; the identity is a crate-private IdentitySlot filled only by the issuing context (Curve::notify_key reads it; Clone gives an empty one). Report unchanged."
notes = "main CI e33985411 (2026-10-23): PASS curve.curve_p2 cases=3029 passed=3029 failed=0 deferred=0. 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) Review PR #106 recertification: 3021 cases, 3021 pass, 0 deferred, 0 failed, max_rel_err=0.0; deferred: none. CO-PORTED in topology.brep_p3 (PR #204): Curve::notify_key / set_notify_key, the identity a curve object is notified under (upstream passes the SmCurve pointer); Clone (the copy constructor) gives the copy none. Report unchanged. UPDATE (PR #204, Codex re-check of 98fec50f): the curve's identity is a GeometryIdentity (key and issuing domain): Curve::notify_identity / set_notify_identity, notify_key reads its key. UPDATE (PR #204, Codex re-check of d61f8d48): Curve::notify_identity and the public set_notify_identity are removed; the identity is a crate-private IdentitySlot filled only by the issuing context (Curve::notify_key reads it; Clone gives an empty one). Report unchanged."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.curve_p7 cases=3066 passed=3066 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.curve_p8 cases=3068 passed=3068 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.ellipse_p1 cases=2031 passed=2031 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.ellipse_p2 cases=2107 passed=2107 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.hyperbola cases=2062 passed=2062 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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"
notes = "main CI e33985411 (2026-10-23): PASS curve.line cases=2103 passed=2103 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
claimed_by = "swarm-geom.a_object-a1"
claimed_at = "2026-10-12T20:54:39Z"
notes = "PARTIAL: re-run in PR #154 (topology.shell, region lookup from PR #80): 2040 cases, 1909 pass, 0 failed, 131 deferred (query.brep 131), max_rel_err 0; the 37 SmRegion::IsVoid cases pass through notify_with_regions. Earlier: 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 (query.brep 131: SmBrep::CalculateBoundingBox reached through the now-ported SmBrepCache (PR #115); 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; UNCOVERED (PR #154 review): geom_a_object.cpp never calls SmRegion::SetIsVoid, so other_solid = false (a_object.rs region propagation, SmAObject.cpp:310) is compared only on the solid side GREEN after query.brep (PR #329): the B-rep box is ported, so the cache builds; 0 deferred."
notes = "main CI e33985411 (2026-10-23): PASS geom.a_object cases=2040 passed=2040 failed=0 deferred=0. PARTIAL: re-run in PR #154 (topology.shell, region lookup from PR #80): 2040 cases, 1909 pass, 0 failed, 131 deferred (query.brep 131), max_rel_err 0; the 37 SmRegion::IsVoid cases pass through notify_with_regions. Earlier: 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 (query.brep 131: SmBrep::CalculateBoundingBox reached through the now-ported SmBrepCache (PR #115); 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; UNCOVERED (PR #154 review): geom_a_object.cpp never calls SmRegion::SetIsVoid, so other_solid = false (a_object.rs region propagation, SmAObject.cpp:310) is compared only on the solid side GREEN after query.brep (PR #329): the B-rep box is ported, so the cache builds; 0 deferred."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
claimed_by = "swarm-geom.attribute-a1"
claimed_at = "2026-10-12T19:38:43Z"
notes = "GREEN: PR #80 region lookup integration; 2029/2029 native comparisons, zero failures/deferrals, max_rel_err=0; all 2029 perturbations detected. merge_with_regions resolves actual typed regions and optional B-rep identities through RegionLookup; the legacy merge entry point explicitly requires context for merge-region attributes. Earlier port 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); region_type::VOID / INFINITE arms of merge-with-regions (PR #154 review): script ops 32 SetIsVoid(0/1/2) and 33 MakeInfinite (the object becomes the infinite region of a fresh SmBrep; skipped once any attribute exists) mirrored by RegionScene::set_is_void / make_infinite; generated cases that create merge-region attributes first draw those ops, so the add_region classification is compared on the void, UNSURE and infinite sides (mutating the INFINITE arm fails generated cases). Missing region context is Unported(topology.shell), not InvalidInput"
notes = "main CI e33985411 (2026-10-23): PASS geom.attribute cases=2029 passed=2029 failed=0 deferred=0. GREEN: PR #80 region lookup integration; 2029/2029 native comparisons, zero failures/deferrals, max_rel_err=0; all 2029 perturbations detected. merge_with_regions resolves actual typed regions and optional B-rep identities through RegionLookup; the legacy merge entry point explicitly requires context for merge-region attributes. Earlier port 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); region_type::VOID / INFINITE arms of merge-with-regions (PR #154 review): script ops 32 SetIsVoid(0/1/2) and 33 MakeInfinite (the object becomes the infinite region of a fresh SmBrep; skipped once any attribute exists) mirrored by RegionScene::set_is_void / make_infinite; generated cases that create merge-region attributes first draw those ops, so the add_region classification is compared on the void, UNSURE and infinite sides (mutating the INFINITE arm fails generated cases). Missing region context is Unported(topology.shell), not InvalidInput"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmOrderCurves", "SM_API_test:TestSmCurves", "prog_test
status = "partial"
claimed_by = "swarm-geom.tools-a1"
claimed_at = "2026-10-12T20:43:12Z"
notes = "difftest: 913 cases, 781 pass, 132 deferred (topology.brep_p1 32, query.brep 32, curve.curve_p2 68; topology.vertex 60 wired by topology.vertex PR #96); 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 PR #125: FindFace reads the existing Brep::tolerance getter rather than deferring GetTolerance; 913 cases, 781 compared bit-identical, 132 deferred, perturb 781/781. UPDATE after topology.brep_p1 (PR #145): SmBrep::GetEdges wired (FindEdge / FindFace). The runner used to run the Rust FindEdge/FindFace on an empty Brep (the C++ read the .smb), which was the real cause of the 32 disagreements seen when wiring; it now imports the file's B-rep through topology.brep_p1's export, and the 64 FindEdge/FindFace cases defer on this unit's own SmCurve::DropPoint stub (curve.curve_p6, 32) and the B-rep cache bounding box (query.brep, 32): not yet compared. Re-run 913 cases, 781 pass, 0 fail, 132 deferred (curve.curve_p2 68, curve.curve_p6 32, query.brep 32). UPDATE (PR #72, topology.brep_p8): FindCoincidentEdge's curve owner/evaluation/DropPoint/CurveMaxDistanceBetween and FindEdge's DropPoint wired to curve.curve_p2/p6 (green); the coincident-edge runner cases now run on the file B-rep. Re-run 913 cases, 881 pass, 0 fail, 32 deferred (query.brep 32)."
notes = "main CI e33985411 (2026-10-23): PARTIAL geom.tools cases=915 passed=883 failed=0 deferred=32 blocked_by=topology.face_p2(32). difftest: 913 cases, 781 pass, 132 deferred (topology.brep_p1 32, query.brep 32, curve.curve_p2 68; topology.vertex 60 wired by topology.vertex PR #96); 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 PR #125: FindFace reads the existing Brep::tolerance getter rather than deferring GetTolerance; 913 cases, 781 compared bit-identical, 132 deferred, perturb 781/781. UPDATE after topology.brep_p1 (PR #145): SmBrep::GetEdges wired (FindEdge / FindFace). The runner used to run the Rust FindEdge/FindFace on an empty Brep (the C++ read the .smb), which was the real cause of the 32 disagreements seen when wiring; it now imports the file's B-rep through topology.brep_p1's export, and the 64 FindEdge/FindFace cases defer on this unit's own SmCurve::DropPoint stub (curve.curve_p6, 32) and the B-rep cache bounding box (query.brep, 32): not yet compared. Re-run 913 cases, 781 pass, 0 fail, 132 deferred (curve.curve_p2 68, curve.curve_p6 32, query.brep 32). UPDATE (PR #72, topology.brep_p8): FindCoincidentEdge's curve owner/evaluation/DropPoint/CurveMaxDistanceBetween and FindEdge's DropPoint wired to curve.curve_p2/p6 (green); the coincident-edge runner cases now run on the file B-rep. Re-run 913 cases, 881 pass, 0 fail, 32 deferred (query.brep 32)."
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PR #599 (G3 item 5, 2026-10-23): the runner passes the partner classification (the one the shim's SetFilletData names) to merge_interval_with, so the 10 intersect.curve_class_p7 GetOtherClassification deferrals pass with values (142 each): 4438 cases, 4326 pass, 0 failed, 112 deferred (intersect.curve_class_p6 92 MergeInterval imprinting, topology.vertex 20 SetPoint). PR #296 (runner imports the shim's SmApiCreateBox B-rep via heal.stitch_p1 export): 4438 cases, 4316 pass, 0 fail, 122 deferred (intersect.curve_class_p6 92 MergeInterval imprinting, topology.vertex 20 SetPoint, intersect.curve_class_p7 10), --perturb 4316/4316. After intersect.curve_class_p2 (PR #85) wired GetPointObjZoneTol3d into MergeInterval (now takes k and geometry): 4438 cases, 4216 pass, 0 failed, 222 deferred (topology.edge 80, topology.face_p2 60, intersect.curve_class_p6 52 = MergeInterval imprinting not ported in this unit, topology.vertex 20, intersect.curve_class_p7 10). PR #138: partial; 4438 cases, 3933 passes (3927 bit-identical kernel comparisons and 6 expected FFI rejection checks), 0 failures, 505 deferred, no absolute floors. InsertCurveInterval, Homogenize and FixEndPointClass preserve upstream control flow with p2/p4/p7 dependency calls; MergeInterval implements early exits only and defers topology mutation at p2 GetPointObjZoneTol3d. Native fixtures use real 3D lines, circles, ellipses, quadratic and constant B-splines plus box topology. Nonempty homogenization/endpoint repair and topology mutation are not certified; generic topology tolerance lookups also retain existing adapter deferrals. Native regression tests run locally: 27440 isolated operation/geometry/flag/classification probes, 96 partition/SSS/boundary probes, 660 mismatched fillet-partner probes checking Rust and raw C++ guards independently, caller-point and projection regressions; project CI unchanged. Audit reuses p1 types and p3 helpers; p2/p4/p7 remain explicit dependencies, with no duplicate co-ports. Maintainer review: require homogenized partner counts for fillet merges (UB-136); reuse p3 boundary-location helper; ignore ordinary squeeze errors while retaining the no-progress guard (HANG-14). 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 Merge of PR #65: AreCoincidentMaybe wired to p7; difftest now 4438 cases, 4097 passed, 0 failed, 341 deferred.. REVIEW FLAG (PR #85 review, 2026-10-16): this unit is partial while 52 deferred cases are its own unported MergeInterval imprinting (no UNPORTED marker, not a back-edge); finish that remainder (see findings intersect.curve_class_p2). fix/cc-topology-handles (2026-10-22): MergeInterval's vertex/edge/vertex fillet branch now calls p7 sm_SetDoFilletingGeometry (todo 7, status ignored) through merge_interval_with(.., other); merge_interval (no partner) keeps a GetOtherClassification deferral (intersect.curve_class_p7). The imprinting tail (SmCurveClass.cpp 17212-18276: end points, closed/degenerate test, MergePointClass vertex/edge imprinting, face splits) still defers: it needs a mutable B-rep context that ClassGeometry (shared ref) cannot give, the same gap as point_class merge_into_object vs merge_into_brep. fix/cc-topology-handles iter 2: the MergeInterval imprinting tail (SmCurveClass.cpp:17212-18276, ~1060 lines: MergePointClass, face split, edge imprint) needs a mutable classification context (ClassGeometry gives only &Brep); merge_into_brep is the mutable model for one point. Next porter: add a mutable adapter (topology_entity_mut) and thread it through merge_interval and its callers (boolean.topology_intersector_p3)."
notes = "PR #599 (2026-10-23): the runner passes the partner classification (the one the shim's SetFilletData names) to merge_interval_with, so the 10 intersect.curve_class_p7 GetOtherClassification deferrals pass with values (142 each): 4438 cases, 4326 pass, 0 failed, 112 deferred (intersect.curve_class_p6 92 MergeInterval imprinting, topology.vertex 20 SetPoint). PR #296 (runner imports the shim's SmApiCreateBox B-rep via heal.stitch_p1 export): 4438 cases, 4316 pass, 0 fail, 122 deferred (intersect.curve_class_p6 92 MergeInterval imprinting, topology.vertex 20 SetPoint, intersect.curve_class_p7 10), --perturb 4316/4316. After intersect.curve_class_p2 (PR #85) wired GetPointObjZoneTol3d into MergeInterval (now takes k and geometry): 4438 cases, 4216 pass, 0 failed, 222 deferred (topology.edge 80, topology.face_p2 60, intersect.curve_class_p6 52 = MergeInterval imprinting not ported in this unit, topology.vertex 20, intersect.curve_class_p7 10). PR #138: partial; 4438 cases, 3933 passes (3927 bit-identical kernel comparisons and 6 expected FFI rejection checks), 0 failures, 505 deferred, no absolute floors. InsertCurveInterval, Homogenize and FixEndPointClass preserve upstream control flow with p2/p4/p7 dependency calls; MergeInterval implements early exits only and defers topology mutation at p2 GetPointObjZoneTol3d. Native fixtures use real 3D lines, circles, ellipses, quadratic and constant B-splines plus box topology. Nonempty homogenization/endpoint repair and topology mutation are not certified; generic topology tolerance lookups also retain existing adapter deferrals. Native regression tests run locally: 27440 isolated operation/geometry/flag/classification probes, 96 partition/SSS/boundary probes, 660 mismatched fillet-partner probes checking Rust and raw C++ guards independently, caller-point and projection regressions; project CI unchanged. Audit reuses p1 types and p3 helpers; p2/p4/p7 remain explicit dependencies, with no duplicate co-ports. Maintainer review: require homogenized partner counts for fillet merges (UB-136); reuse p3 boundary-location helper; ignore ordinary squeeze errors while retaining the no-progress guard (HANG-14). 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 Merge of PR #65: AreCoincidentMaybe wired to p7; difftest now 4438 cases, 4097 passed, 0 failed, 341 deferred.. REVIEW FLAG (PR #85 review, 2026-10-16): this unit is partial while 52 deferred cases are its own unported MergeInterval imprinting (no UNPORTED marker, not a back-edge); finish that remainder (see findings intersect.curve_class_p2). fix/cc-topology-handles (2026-10-22): MergeInterval's vertex/edge/vertex fillet branch now calls p7 sm_SetDoFilletingGeometry (todo 7, status ignored) through merge_interval_with(.., other); merge_interval (no partner) keeps a GetOtherClassification deferral (intersect.curve_class_p7). The imprinting tail (SmCurveClass.cpp 17212-18276: end points, closed/degenerate test, MergePointClass vertex/edge imprinting, face splits) still defers: it needs a mutable B-rep context that ClassGeometry (shared ref) cannot give, the same gap as point_class merge_into_object vs merge_into_brep. fix/cc-topology-handles iter 2: the MergeInterval imprinting tail (SmCurveClass.cpp:17212-18276, ~1060 lines: MergePointClass, face split, edge imprint) needs a mutable classification context (ClassGeometry gives only &Brep); merge_into_brep is the mutable model for one point. Next porter: add a mutable adapter (topology_entity_mut) and thread it through merge_interval and its callers (boolean.topology_intersector_p3)."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "After intersect.curve_class_p2 (PR #85) merged and the fuzz fix (cache recipe UVs from ComputeUVPoint with the cache attached and the face point test off): 438 cases, 287 pass, 0 fail, 149 deferred (topology.edge 115, curve.crv_on_surf 24, intersect.curve_class_p2 10), 2 rejected. PARTIAL (PR #151; review rerun at numerical checkpoint df4756ac): 425 Linux differential cases (41 fixtures + 384 generated), 226 pass, 197 deferred (intersect.curve_class_p2 163, curve.crv_on_surf 24, intersect.curve_class_p4 10), 2 native setup rejections, zero failures, max_rel_err 0, no floors. FindUVNodes uses upstream FALSE pole default; collapsed/v-split caches and positive endpoint classification are covered. Required topology handles share ClassGeometry with landed part 5; both query back-edges call real p9 methods. Interior partition insertion and earlier query ReSet remain deferred; uncached edge-loop UV reaches topology.edgeuse_p3. Nonzero edge/face gap integration has a Rust threshold regression only. No open dependency PR is bundled. Final PR checks validate later ignored-UV-status and exact pole-predicate follow-ups. Op 1 state 2 (cache flagged modified) runs with the shim Brep in edit mode so the cache is used as given: with editing off SmCacheMgrTSrf rebuilds it first (cache units), which fails on a loopless face (fuzz regression). See plan/findings.md for coverage and seed handoff. 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 UPDATE 2026-10-23 (branch claude/edge-handles): the runner's IntersectEdges target edges are real wire edges of a Rust B-rep built as the shim builds them (create_wire_edge_from_curve over the edge curve or the shared source line, edge::set_tolerance(zone, false, true)), resolved through ClassGeometry::topology_entity: PARTIAL intersect.curve_class_p9 cases=438 passed=435 failed=0 deferred=1 max_rel_err=0e0 with_values=435 no_values=0 vacuous=0 rejected=2 blocked_by=topology.edge(1) (was 115 topology.edge deferrals; the remaining one is a rectangle loop edge of trim_rectangle_crossing, which has no Rust B-rep face). UPDATE 2026-10-23 (PR #667): wire edges of the rectangle boundary loop are created in the runner's Brep and recorded in wire_edges, resolving the trim_rectangle_crossing deferral: PASS intersect.curve_class_p9 cases=438 passed=436 failed=0 deferred=0 max_rel_err=0e0 with_values=436 no_values=0 vacuous=0 rejected=2. GREEN."
notes = "main CI e33985411 (2026-10-23): PASS intersect.curve_class_p9 cases=438 passed=436 failed=0 deferred=0 rejected=2. After intersect.curve_class_p2 (PR #85) merged and the fuzz fix (cache recipe UVs from ComputeUVPoint with the cache attached and the face point test off): 438 cases, 287 pass, 0 fail, 149 deferred (topology.edge 115, curve.crv_on_surf 24, intersect.curve_class_p2 10), 2 rejected. PARTIAL (PR #151; review rerun at numerical checkpoint df4756ac): 425 Linux differential cases (41 fixtures + 384 generated), 226 pass, 197 deferred (intersect.curve_class_p2 163, curve.crv_on_surf 24, intersect.curve_class_p4 10), 2 native setup rejections, zero failures, max_rel_err 0, no floors. FindUVNodes uses upstream FALSE pole default; collapsed/v-split caches and positive endpoint classification are covered. Required topology handles share ClassGeometry with landed part 5; both query back-edges call real p9 methods. Interior partition insertion and earlier query ReSet remain deferred; uncached edge-loop UV reaches topology.edgeuse_p3. Nonzero edge/face gap integration has a Rust threshold regression only. No open dependency PR is bundled. Final PR checks validate later ignored-UV-status and exact pole-predicate follow-ups. Op 1 state 2 (cache flagged modified) runs with the shim Brep in edit mode so the cache is used as given: with editing off SmCacheMgrTSrf rebuilds it first (cache units), which fails on a loopless face (fuzz regression). See plan/findings.md for coverage and seed handoff. 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 UPDATE 2026-10-23 (branch claude/edge-handles): the runner's IntersectEdges target edges are real wire edges of a Rust B-rep built as the shim builds them (create_wire_edge_from_curve over the edge curve or the shared source line, edge::set_tolerance(zone, false, true)), resolved through ClassGeometry::topology_entity: PARTIAL intersect.curve_class_p9 cases=438 passed=435 failed=0 deferred=1 max_rel_err=0e0 with_values=435 no_values=0 vacuous=0 rejected=2 blocked_by=topology.edge(1) (was 115 topology.edge deferrals; the remaining one is a rectangle loop edge of trim_rectangle_crossing, which has no Rust B-rep face). UPDATE 2026-10-23 (PR #667): wire edges of the rectangle boundary loop are created in the runner's Brep and recorded in wire_edges, resolving the trim_rectangle_crossing deferral: PASS intersect.curve_class_p9 cases=438 passed=436 failed=0 deferred=0 max_rel_err=0e0 with_values=436 no_values=0 vacuous=0 rejected=2. GREEN."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "partial"
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; PARTIAL: 2429 cases, 2384 bit-identical, 0 failed, 45 deferred (surface.surface_p11 20, surface.surface_p4 8, surface.surface_p6 8, surface.surface_p8 4, topology.brep_p1 2, topology.edge 3); max_rel_err=0; no absolute floors; all 15 owned functions have Rust bodies (shared local constructors reuse p1); 600 generated traversal cases, 2 traversal fixtures, 180 CurveVertex fixtures and 1647 static/face/operation/request/tolerance/scale/subdivision fixtures; native setup, point-node storage and invalid-cast class probes are separate tests; face bodies still reach explicit surface/query callees, nonempty Shape construction is not covered; --perturb SENSITIVE 2384/2384; full validation with current official main: 142 units, 89 green, 53 partial, 0 failed; fmt, strict plain/CPP Clippy, workspace/native tests, wasm and license/source checks pass [surface.surface_p6 wired (PR #92): 2429 cases, 2384 pass, 45 deferred (intersect.surface_silhouette 8, surface.surface_p11 20, surface.surface_p4 8, surface.surface_p8 4, topology.brep_p1 2, topology.edge 3)] surface.surface_p11 (PR #120, after merging main with surface.surface_p3): cases=2429 passed=2396 failed=0 deferred=33 (curve.iso_curve 12, intersect.surface_tracer 8 (SmSurfaceTracer::DoTrace, inherited by SmSurfaceSilhouette; the stub in Surface::create_silhouette_curves is tagged with its owner), surface.surface_p8 6, topology.brep_p1 4, topology.edge 3); the runner maps face/surface solution objects to -2 as the shim does (first reached now that face/face normalize solves run); --perturb SENSITIVE. Re-run (PR #118, after surface.surface_p8 was wired): 2429 cases, 2396 pass, 33 deferred (curve.iso_curve 12, intersect.curve_class_p4 4, intersect.surface_tracer 8, topology.brep_p1 6, topology.edge 3), 0 failed; --perturb SENSITIVE 2396/2396; the 2 surface.surface_p8 deferrals are gone. UPDATE after topology.brep_p1 (PR #145): re-run 2429 cases, 2396 pass, 0 fail, 33 deferred (curve.iso_curve 12, intersect.surface_tracer 8, intersect.curve_class_p4 4, intersect.topology_solver_p1 4, topology.edge 3, geom.solution_array 2; the former topology.brep_p1 deferrals are the self-tagged SmTol::GetZoneTol3d(SmObject*) stubs). Re-run (PR #137, classified_curve_intervals passes zone_tol3d(tol) as upstream's SmZoneTol3d conversion): 2429 cases, 2396 pass, 33 deferred (curve.iso_curve 12, intersect.curve_class_p2 4, intersect.surface_tracer 8, topology.brep_p1 6, topology.edge 3), 0 failed; --perturb SENSITIVE 2396/2396. UPDATE 2026-10-23 (branch claude/edge-handles): the 3 topology.edge deferrals (SmEdge::GetInterval in IdenticalSolutions) now pass through the TopologySolver ParameterDomains resolver: PARTIAL intersect.topology_solver_p2 cases=2429 passed=2401 failed=0 deferred=28 max_rel_err=0e0 with_values=2401 no_values=0 vacuous=0 blocked_by=query.face_p2(8),surface.surface_p2(12),topology.face_p2(8). PR #599 (2026-10-23): StaticScene::object_zone_tol_3d resolves the shim's handles, so the 2 geom.tol GetZoneTol3d deferrals pass. The 12 GetNaturalUVDomain deferrals are kept on purpose: answering them makes 9 face solves disagree (C++ solves over the face-owned trimmed surface cache, Rust over a fresh plain cache; plan/findings.md)."
notes = "main CI e33985411 (2026-10-23): PARTIAL intersect.topology_solver_p2 cases=2429 passed=2401 failed=0 deferred=28 blocked_by=query.face_p2(8),surface.surface_p2(12),topology.face_p2(8). 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; PARTIAL: 2429 cases, 2384 bit-identical, 0 failed, 45 deferred (surface.surface_p11 20, surface.surface_p4 8, surface.surface_p6 8, surface.surface_p8 4, topology.brep_p1 2, topology.edge 3); max_rel_err=0; no absolute floors; all 15 owned functions have Rust bodies (shared local constructors reuse p1); 600 generated traversal cases, 2 traversal fixtures, 180 CurveVertex fixtures and 1647 static/face/operation/request/tolerance/scale/subdivision fixtures; native setup, point-node storage and invalid-cast class probes are separate tests; face bodies still reach explicit surface/query callees, nonempty Shape construction is not covered; --perturb SENSITIVE 2384/2384; full validation with current official main: 142 units, 89 green, 53 partial, 0 failed; fmt, strict plain/CPP Clippy, workspace/native tests, wasm and license/source checks pass [surface.surface_p6 wired (PR #92): 2429 cases, 2384 pass, 45 deferred (intersect.surface_silhouette 8, surface.surface_p11 20, surface.surface_p4 8, surface.surface_p8 4, topology.brep_p1 2, topology.edge 3)] surface.surface_p11 (PR #120, after merging main with surface.surface_p3): cases=2429 passed=2396 failed=0 deferred=33 (curve.iso_curve 12, intersect.surface_tracer 8 (SmSurfaceTracer::DoTrace, inherited by SmSurfaceSilhouette; the stub in Surface::create_silhouette_curves is tagged with its owner), surface.surface_p8 6, topology.brep_p1 4, topology.edge 3); the runner maps face/surface solution objects to -2 as the shim does (first reached now that face/face normalize solves run); --perturb SENSITIVE. Re-run (PR #118, after surface.surface_p8 was wired): 2429 cases, 2396 pass, 33 deferred (curve.iso_curve 12, intersect.curve_class_p4 4, intersect.surface_tracer 8, topology.brep_p1 6, topology.edge 3), 0 failed; --perturb SENSITIVE 2396/2396; the 2 surface.surface_p8 deferrals are gone. UPDATE after topology.brep_p1 (PR #145): re-run 2429 cases, 2396 pass, 0 fail, 33 deferred (curve.iso_curve 12, intersect.surface_tracer 8, intersect.curve_class_p4 4, intersect.topology_solver_p1 4, topology.edge 3, geom.solution_array 2; the former topology.brep_p1 deferrals are the self-tagged SmTol::GetZoneTol3d(SmObject*) stubs). Re-run (PR #137, classified_curve_intervals passes zone_tol3d(tol) as upstream's SmZoneTol3d conversion): 2429 cases, 2396 pass, 33 deferred (curve.iso_curve 12, intersect.curve_class_p2 4, intersect.surface_tracer 8, topology.brep_p1 6, topology.edge 3), 0 failed; --perturb SENSITIVE 2396/2396. UPDATE 2026-10-23 (branch claude/edge-handles): the 3 topology.edge deferrals (SmEdge::GetInterval in IdenticalSolutions) now pass through the TopologySolver ParameterDomains resolver: PARTIAL intersect.topology_solver_p2 cases=2429 passed=2401 failed=0 deferred=28 max_rel_err=0e0 with_values=2401 no_values=0 vacuous=0 blocked_by=query.face_p2(8),surface.surface_p2(12),topology.face_p2(8). PR #599 (2026-10-23): StaticScene::object_zone_tol_3d resolves the shim's handles, so the 2 geom.tol GetZoneTol3d deferrals pass. The 12 GetNaturalUVDomain deferrals are kept on purpose: answering them makes 9 face solves disagree (C++ solves over the face-owned trimmed surface cache, Rust over a fresh plain cache; plan/findings.md)."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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"
notes = "main CI e33985411 (2026-10-23): PASS nlib.crv_geom cases=1725 passed=1725 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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"
notes = "main CI e33985411 (2026-10-23): PASS nlib.crv_nurb cases=2886 passed=2886 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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"
notes = "main CI e33985411 (2026-10-23): PASS nlib.crv_tool_p2 cases=2126 passed=2126 failed=0 deferred=0. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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) Review PR #106 recertification: 2282 cases, 2282 pass, 0 deferred, 0 failed, max_rel_err=0.0; deferred: none."
notes = "main CI e33985411 (2026-10-23): PASS nurbs.b_spline_curve_n_lib cases=2326 passed=2326 failed=0 deferred=0. 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) Review PR #106 recertification: 2282 cases, 2282 pass, 0 deferred, 0 failed, max_rel_err=0.0; deferred: none."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
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)"
notes = "main CI e33985411 (2026-10-23): PASS nurbs.b_spline_curve_p2 cases=2334 passed=2334 failed=0 deferred=0. 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)"
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
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 Re-run with surface.surface_p5's back-edges wired (PR #50): cases=665 passed=638 failed=0 deferred=27 max_rel_err=0e0 blocked_by=surface.surface_p3(27). GREEN (PR #52, after merging surface_p4/#49 and surface_p5/#50): GetSingularities wired, 665/665 pass, 0 deferred."
notes = "main CI e33985411 (2026-10-23): PASS nurbs.b_spline_surface_n_lib_p1 cases=699 passed=699 failed=0 deferred=0. 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 Re-run with surface.surface_p5's back-edges wired (PR #50): cases=665 passed=638 failed=0 deferred=27 max_rel_err=0e0 blocked_by=surface.surface_p3(27). GREEN (PR #52, after merging surface_p4/#49 and surface_p5/#50): GetSingularities wired, 665/665 pass, 0 deferred."
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestSmCreatePlane"
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL (PR #160): difftest 1981 cases (481 fixture: 54 from SM_API_test TestSmPrimitives/TestSmBrep/TestSmSurfaces/TestSmIntersectors/TestSmBrepCopy/TestSmErrorCodes, 211 edge cases, 216 review adversarial cases; 1500 generated): 1445 pass bit-identical (full surface records of the plane/cylinder/cone/torus surface overloads, the rest B-rep input validation and the pyramid base-edge statuses; base line geometry is never compared because every successful base defers at topology.brep_p8), 536 deferred (primitive.primitive_creation_p1 136, primitive.primitive_creation_p2 282, primitive.primitive_creation_p3 31, topology.brep_p8 87), max_rel_err 0, perturb 1445/1445 detected; torus surface crash guard applies only when both radii exceed SM_EFF_ZERO (the C++ gate); SmApiCreateBlendPrimitive not difftested (needs a B-rep with faces); C++ crash/hang inputs fenced off by the ffi guard (UB-198..181, HANG-31); 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 NOTE (PR #204, topology.brep_p3): the nine UNPORTED(topology.brep_p3) SmBrep::SmBrep markers (create_box, create_pyramid, ...) are left as they are: brep::p3::new_brep needs k: &mut Kernel, these public functions take no kernel (upstream's SmApiCreate* take no context), and every case stops at primitive.primitive_creation_p1 right after; wiring them means adding a kernel parameter to the API (left to the overseer / this unit). UPDATE (PR #204, overseer decision on the NOTE above): the nine SmBrep::SmBrep markers are wired kernel-free: new SmBrep() is topology::Brep::new_with_infinite_region (the topology part of topology.brep_p3's constructor), so the context zone tolerance / size settings and the SM_NO_CONSTRUCTION notification are not applied (module Deviations; the same deviation as blend.fillet_geom_p1's FilletBrep::new). Every case still stops at primitive.primitive_creation_p1..p3 / topology.brep_p8 right after. base line geometry is never compared because every successful base defers at topology.brep_p8), 536 deferred (surface.sphere 1, topology.brep_p3 448, topology.brep_p8 87), max_rel_err 0, perturb 1445/1445 detected; PR #213 review integration (main e5f3e441): plane/disc APIs call p1 with caller Kernel and native no-face SM_ERR checks, all 13 p1 tags removed; new-Brep helpers defer at the first actual SmBrep::SmBrep dependency, while blend constructs p1 on its existing B-rep; refreshed native report keeps 1445 exact comparisons and 536 deferrals, with no native primitive-topology certification; UPDATE 2026-10-23 (branch claude/edge-handles): the 46 curve.curve_p2 SmCurve::GetNaturalInterval deferrals (IdenticalSolutions of CpGlobalSolver solutions on CacheObject curve handles in ray fires) resolve to the curve the solver's curve tree decomposes: PARTIAL primitive.api_primitives cases=1981 passed=1621 failed=0 deferred=360 max_rel_err=0e0 with_values=1621 no_values=0 vacuous=0 blocked_by=cpp-guard:ub-119(5),query.face_p2(140),surface.trim_srf_cache(105),topology.edgeuse_p3(46),topology.face_p2(64)."
notes = "main CI e33985411 (2026-10-23): PARTIAL primitive.api_primitives cases=1981 passed=1623 failed=0 deferred=358 blocked_by=cpp-guard:ub-119(5),surface.trim_srf_cache(133),topology.edgeuse_p3(46),topology.face_p2(62),topology.face_p4(112). PARTIAL (PR #160): difftest 1981 cases (481 fixture: 54 from SM_API_test TestSmPrimitives/TestSmBrep/TestSmSurfaces/TestSmIntersectors/TestSmBrepCopy/TestSmErrorCodes, 211 edge cases, 216 review adversarial cases; 1500 generated): 1445 pass bit-identical (full surface records of the plane/cylinder/cone/torus surface overloads, the rest B-rep input validation and the pyramid base-edge statuses; base line geometry is never compared because every successful base defers at topology.brep_p8), 536 deferred (primitive.primitive_creation_p1 136, primitive.primitive_creation_p2 282, primitive.primitive_creation_p3 31, topology.brep_p8 87), max_rel_err 0, perturb 1445/1445 detected; torus surface crash guard applies only when both radii exceed SM_EFF_ZERO (the C++ gate); SmApiCreateBlendPrimitive not difftested (needs a B-rep with faces); C++ crash/hang inputs fenced off by the ffi guard (UB-198..181, HANG-31); 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 NOTE (PR #204, topology.brep_p3): the nine UNPORTED(topology.brep_p3) SmBrep::SmBrep markers (create_box, create_pyramid, ...) are left as they are: brep::p3::new_brep needs k: &mut Kernel, these public functions take no kernel (upstream's SmApiCreate* take no context), and every case stops at primitive.primitive_creation_p1 right after; wiring them means adding a kernel parameter to the API (left to the overseer / this unit). UPDATE (PR #204, overseer decision on the NOTE above): the nine SmBrep::SmBrep markers are wired kernel-free: new SmBrep() is topology::Brep::new_with_infinite_region (the topology part of topology.brep_p3's constructor), so the context zone tolerance / size settings and the SM_NO_CONSTRUCTION notification are not applied (module Deviations; the same deviation as blend.fillet_geom_p1's FilletBrep::new). Every case still stops at primitive.primitive_creation_p1..p3 / topology.brep_p8 right after. base line geometry is never compared because every successful base defers at topology.brep_p8), 536 deferred (surface.sphere 1, topology.brep_p3 448, topology.brep_p8 87), max_rel_err 0, perturb 1445/1445 detected; PR #213 review integration (main e5f3e441): plane/disc APIs call p1 with caller Kernel and native no-face SM_ERR checks, all 13 p1 tags removed; new-Brep helpers defer at the first actual SmBrep::SmBrep dependency, while blend constructs p1 on its existing B-rep; refreshed native report keeps 1445 exact comparisons and 536 deferrals, with no native primitive-topology certification; UPDATE 2026-10-23 (branch claude/edge-handles): the 46 curve.curve_p2 SmCurve::GetNaturalInterval deferrals (IdenticalSolutions of CpGlobalSolver solutions on CacheObject curve handles in ray fires) resolve to the curve the solver's curve tree decomposes: PARTIAL primitive.api_primitives cases=1981 passed=1621 failed=0 deferred=360 max_rel_err=0e0 with_values=1621 no_values=0 vacuous=0 blocked_by=cpp-guard:ub-119(5),query.face_p2(140),surface.trim_srf_cache(105),topology.edgeuse_p3(46),topology.face_p2(64)."
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestSmCreatePlane"
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL (PR #213 review, 2026-10-20, canonical main e5f3e441): 773 cases, 689 passed, 0 failed, 75 deferred (boolean.topology_intersector_p2 10, topology.brep_p3 6, topology.brep_p8 59), 9 rejected, max_rel_err=0, no absolute floors. Both MakeFaceWithCurves adapters now call topology::brep::p7 with caller region/domain, loops, 3D/UV curves and orientations. Constructors now forward caller NotifyEnv records/attributes/keys required by current p7; the primitive fixture creates a real infinite region for current p9 validation. StitchAndOrient, Transform (scale=None, scale_tolerances=true), and RemoveTopologicalEdgesAndVertices (no keep lists, caller NotifyEnv forwarded) call topology::brep::p5. IntersectInsertRelate and DeleteFaces still require a retained session adapting Boolean2D to merge_p4 ArenaPair: common-pair identities, relations, and operand-qualified notifications must survive both stages; their downstream mutations are not certified. Boolean2D uses EFF_ZERO_DEG (0.0001 degrees); kernel tests pin angular rejection/state restoration and plane-domain coverage before intersection. 32 new boolean cases compare non-planar/offset/tilted rejection and empty paths; 10 valid coplanar cases defer at IntersectInsertRelate. Four rear-X-tilt cone inputs and 44 nonempty line/circle/arc/skew-line sweeps defer at face construction, using both B-spline and real analytic generators. Four negative full-circle sweeps are rejected by an exact cylinder-branch preflight after a native nontermination was confirmed in AdjustSTEPUVDomain (plan/upstream-issues.md); negative line/open-arc sweeps remain accepted. Bottom cylindrical-box points preserve signed zero. Primitive topology, caps and downstream boolean mutations remain uncertified. 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; CO-PORTED in sweep.api_brep (PR #110): SmSweepOptions -> solidcore::primitive::primitive_creation::SweepOptions (crates/solidcore/src/primitive/primitive_creation.rs, parent module of p1..p3; the type comes from SmPrimitiveCreation.h) Review integration (PR #213): merge_p3 BooleanLists delegates planar operations to PrimitiveCreation::boolean_2d with fresh operand marks and caller notifications. Boolean2D still needs a retained ArenaPair intersector/relations session with an operand-qualified notification/key namespace for both Breps; its primary-only NotifyEnv and typed common-pair lists are not that adapter. The existing merge_p4 ArenaPair adapter is present, not missing. Failed circle construction maps non-Unported geometry errors to SM_ERR. API UPDATED in primitive.primitive_creation_p3 (PR #233), after main 4db3d660: create_cylindrical_box, create_sphere_no_pole and boolean_2d take caller NotifyEnv for their p7 face-construction tails; notification key_of supplies face identities. UPDATE 2026-10-23 (branch claude/edge-handles): the 4 curve.curve_p2 GetNaturalInterval deferrals resolve (curve-solver ParameterDomains); two of them (linear_circle_cap1_distance0, linear_analytic_circle_cap1_distance0) then compared face counts from the B-rep arena (4, including two face records with no face use) against the shim's SmBrep::GetFaces (2); the runner now counts faces, edges and vertices through topology::brep::p1::faces/edges/vertices as the shim does (findings.md). PARTIAL primitive.primitive_creation_p1 cases=773 passed=740 failed=0 deferred=24 max_rel_err=0e0 with_values=740 no_values=0 vacuous=0 rejected=9 blocked_by=boolean.topology_intersector_p2(10),surface.trim_srf_cache(8),topology.edgeuse_p3(2),topology.face_p2(4)."
notes = "main CI e33985411 (2026-10-23): PARTIAL primitive.primitive_creation_p1 cases=773 passed=740 failed=0 deferred=24 rejected=9 blocked_by=boolean.topology_intersector_p2(10),surface.trim_srf_cache(8),topology.edgeuse_p3(2),topology.face_p2(4). PARTIAL (PR #213 review, 2026-10-20, canonical main e5f3e441): 773 cases, 689 passed, 0 failed, 75 deferred (boolean.topology_intersector_p2 10, topology.brep_p3 6, topology.brep_p8 59), 9 rejected, max_rel_err=0, no absolute floors. Both MakeFaceWithCurves adapters now call topology::brep::p7 with caller region/domain, loops, 3D/UV curves and orientations. Constructors now forward caller NotifyEnv records/attributes/keys required by current p7; the primitive fixture creates a real infinite region for current p9 validation. StitchAndOrient, Transform (scale=None, scale_tolerances=true), and RemoveTopologicalEdgesAndVertices (no keep lists, caller NotifyEnv forwarded) call topology::brep::p5. IntersectInsertRelate and DeleteFaces still require a retained session adapting Boolean2D to merge_p4 ArenaPair: common-pair identities, relations, and operand-qualified notifications must survive both stages; their downstream mutations are not certified. Boolean2D uses EFF_ZERO_DEG (0.0001 degrees); kernel tests pin angular rejection/state restoration and plane-domain coverage before intersection. 32 new boolean cases compare non-planar/offset/tilted rejection and empty paths; 10 valid coplanar cases defer at IntersectInsertRelate. Four rear-X-tilt cone inputs and 44 nonempty line/circle/arc/skew-line sweeps defer at face construction, using both B-spline and real analytic generators. Four negative full-circle sweeps are rejected by an exact cylinder-branch preflight after a native nontermination was confirmed in AdjustSTEPUVDomain (plan/upstream-issues.md); negative line/open-arc sweeps remain accepted. Bottom cylindrical-box points preserve signed zero. Primitive topology, caps and downstream boolean mutations remain uncertified. 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; CO-PORTED in sweep.api_brep (PR #110): SmSweepOptions -> solidcore::primitive::primitive_creation::SweepOptions (crates/solidcore/src/primitive/primitive_creation.rs, parent module of p1..p3; the type comes from SmPrimitiveCreation.h) Review integration (PR #213): merge_p3 BooleanLists delegates planar operations to PrimitiveCreation::boolean_2d with fresh operand marks and caller notifications. Boolean2D still needs a retained ArenaPair intersector/relations session with an operand-qualified notification/key namespace for both Breps; its primary-only NotifyEnv and typed common-pair lists are not that adapter. The existing merge_p4 ArenaPair adapter is present, not missing. Failed circle construction maps non-Unported geometry errors to SM_ERR. API UPDATED in primitive.primitive_creation_p3 (PR #233), after main 4db3d660: create_cylindrical_box, create_sphere_no_pole and boolean_2d take caller NotifyEnv for their p7 face-construction tails; notification key_of supplies face identities. UPDATE 2026-10-23 (branch claude/edge-handles): the 4 curve.curve_p2 GetNaturalInterval deferrals resolve (curve-solver ParameterDomains); two of them (linear_circle_cap1_distance0, linear_analytic_circle_cap1_distance0) then compared face counts from the B-rep arena (4, including two face records with no face use) against the shim's SmBrep::GetFaces (2); the runner now counts faces, edges and vertices through topology::brep::p1::faces/edges/vertices as the shim does (findings.md). PARTIAL primitive.primitive_creation_p1 cases=773 passed=740 failed=0 deferred=24 max_rel_err=0e0 with_values=740 no_values=0 vacuous=0 rejected=9 blocked_by=boolean.topology_intersector_p2(10),surface.trim_srf_cache(8),topology.edgeuse_p3(2),topology.face_p2(4)."
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmCreateSkinPrimitive", "SM_API_test:TestSmPipeSweep",
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "CO-PORTED in sweep.api_brep (PR #110): SmSweepOptions -> solidcore::primitive::primitive_creation::SweepOptions (crates/solidcore/src/primitive/primitive_creation.rs, parent module of p1..p3); 12 fns; largest: SmPrimitiveCreation::CreateTaperExtrude, SmPrimitiveCreation::CreateSweepAlongPlanarPath, sm_CreateSkinPrimitiveInternal, SmPrimitiveCreation::CreateCone; 45 upstream test entry points reach this unit; PR #250: all twelve owned functions ported through PrimitiveCreationAccess (extends p3's PrimitiveAccess; Unported defaults for B-rep services of unported units), with full tails after unavailable calls. Difftest 328 cases: 129 bit-identical passes (entry-point early exits: cone height/turn/side/axis with the editing flag left on, degenerate sphere/torus radii, full turns through p1, skins of fewer than two profiles with their cleared lists and ownership report, curve sweeps of nothing), 179 deferrals (topology.brep_p3 81, topology.brep_p8 78, topology.brep_p1 20), 20 guarded rejections (UB-215, HANG-35, UB-50, UB-247), 0 failures; no absolute floors; perturb 129/129; fuzz 1000 clean. PR #250 review (2026-10-20): the taper's FFI guard replays FixChainCurvesList (both input passes; the reversed pass only where upstream may take it; with caps 2/3, where upstream may reverse, a closed chain whose short curve meets one over 100 times longer at a corner sharper than 3e-5 rad is refused for the offset end cap's double free, UB-50; with caps 1/3 curves that close a loop while an end meets no other end or more than one, UB-247); review_duplicate_curves.json keeps 31 tapers that run natively; ComputeCrvsNormal failures zero the normal as upstream; api_primitives' sphere/cone/torus stubs wired to their next unported call (topology.brep_p3) and the blend retagged to topology.brep_p8. Construction tails (partial sweeps, taper, pipe, planar path, skin faces, blend) are not certified. PR #250 second review (2026-10-21): SmBrep::SetTolerance, IsManifoldSolid and SmMerge::BooleanTrees wired (topology.brep_p2, boolean.merge_p3); merged #233 f810c60a and main ca3bbd2b. New upstream issues UB-215, HANG-35, WR-191, UB-247. Caller must supply a concrete PrimitiveCreationAccess. See fixtures/primitive.primitive_creation_p2/README.md and plan/findings.md. PrimitiveAccess forwards caller notifications into the shared SweepStore constructor/merge services. Wire (2026-10-23, with primitive.primitive_creation_p3): PrimitiveAccess's B-rep face services and axis classification are real defaults; the runner adapter keeps a tag store and untagged curves. Difftest 328 cases: 196 bit-identical passes (was 146), 0 failed, 112 deferred (was 162; topology.brep_p8 71 -> 0, now topology.brep_p3 81, topology.face_p4 14, surface.trim_srf_cache 6, topology.face_p2 5, curve.curve_p2 3, query.face_p1 3), 20 rejected. Runner on the production adapter (2026-10-23): entry points run through primitive::primitive_creation::model::PrimitiveModel (scratch B-reps, face copies, production face keys) instead of a one-B-rep fixture. Difftest 328 cases: 194 bit-identical passes, 0 failed, 114 deferred (surface.trim_srf_cache 51, boolean.merge_p2 34 via PrimitiveModel::new_merge, topology.face_p4 14, curve.curve_p2 7, topology.face_p2 5, query.face_p1 3), 20 rejected; 10 cases that waited for SmBrep::SmBrep now pass, 12 earlier passes relied on fixture face keys the B-rep caches cannot resolve and now defer (plan/findings.md)."
notes = "main CI e33985411 (2026-10-23): PARTIAL primitive.primitive_creation_p2 cases=328 passed=195 failed=0 deferred=113 rejected=20 blocked_by=boolean.merge_p2(34),surface.trim_srf_cache(57),topology.face_p2(8),topology.face_p4(14). CO-PORTED in sweep.api_brep (PR #110): SmSweepOptions -> solidcore::primitive::primitive_creation::SweepOptions (crates/solidcore/src/primitive/primitive_creation.rs, parent module of p1..p3); 12 fns; largest: SmPrimitiveCreation::CreateTaperExtrude, SmPrimitiveCreation::CreateSweepAlongPlanarPath, sm_CreateSkinPrimitiveInternal, SmPrimitiveCreation::CreateCone; 45 upstream test entry points reach this unit; PR #250: all twelve owned functions ported through PrimitiveCreationAccess (extends p3's PrimitiveAccess; Unported defaults for B-rep services of unported units), with full tails after unavailable calls. Difftest 328 cases: 129 bit-identical passes (entry-point early exits: cone height/turn/side/axis with the editing flag left on, degenerate sphere/torus radii, full turns through p1, skins of fewer than two profiles with their cleared lists and ownership report, curve sweeps of nothing), 179 deferrals (topology.brep_p3 81, topology.brep_p8 78, topology.brep_p1 20), 20 guarded rejections (UB-215, HANG-35, UB-50, UB-247), 0 failures; no absolute floors; perturb 129/129; fuzz 1000 clean. PR #250 review (2026-10-20): the taper's FFI guard replays FixChainCurvesList (both input passes; the reversed pass only where upstream may take it; with caps 2/3, where upstream may reverse, a closed chain whose short curve meets one over 100 times longer at a corner sharper than 3e-5 rad is refused for the offset end cap's double free, UB-50; with caps 1/3 curves that close a loop while an end meets no other end or more than one, UB-247); review_duplicate_curves.json keeps 31 tapers that run natively; ComputeCrvsNormal failures zero the normal as upstream; api_primitives' sphere/cone/torus stubs wired to their next unported call (topology.brep_p3) and the blend retagged to topology.brep_p8. Construction tails (partial sweeps, taper, pipe, planar path, skin faces, blend) are not certified. PR #250 second review (2026-10-21): SmBrep::SetTolerance, IsManifoldSolid and SmMerge::BooleanTrees wired (topology.brep_p2, boolean.merge_p3); merged #233 f810c60a and main ca3bbd2b. New upstream issues UB-215, HANG-35, WR-191, UB-247. Caller must supply a concrete PrimitiveCreationAccess. See fixtures/primitive.primitive_creation_p2/README.md and plan/findings.md. PrimitiveAccess forwards caller notifications into the shared SweepStore constructor/merge services. Wire (2026-10-23, with primitive.primitive_creation_p3): PrimitiveAccess's B-rep face services and axis classification are real defaults; the runner adapter keeps a tag store and untagged curves. Difftest 328 cases: 196 bit-identical passes (was 146), 0 failed, 112 deferred (was 162; topology.brep_p8 71 -> 0, now topology.brep_p3 81, topology.face_p4 14, surface.trim_srf_cache 6, topology.face_p2 5, curve.curve_p2 3, query.face_p1 3), 20 rejected. Runner on the production adapter (2026-10-23): entry points run through primitive::primitive_creation::model::PrimitiveModel (scratch B-reps, face copies, production face keys) instead of a one-B-rep fixture. Difftest 328 cases: 194 bit-identical passes, 0 failed, 114 deferred (surface.trim_srf_cache 51, boolean.merge_p2 34 via PrimitiveModel::new_merge, topology.face_p4 14, curve.curve_p2 7, topology.face_p2 5, query.face_p1 3), 20 rejected; 10 cases that waited for SmBrep::SmBrep now pass, 12 earlier passes relied on fixture face keys the B-rep caches cannot resolve and now defer (plan/findings.md)."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmIntersectCurveSurface", "SM_API_test:TestSmGetCloses
status = "partial"
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 PORTED (PR #125): public query orchestration and structured results in query::api_queries, including the wired query.face_p2 classifier. Native SmApi* oracle on concrete lines, circles, ellipses, cubic/C0 B-splines, planes, patches, rational cylinders/spheres, analytic surfaces of revolution, boxes, vertex loops and holed faces. Difftest: 1203 cases (403 fixed + 800 fixed-seed generated), 587 pass bit-identical, 0 failed, 616 deferred: query.brep 335, query.face_p1 12, query.face_p3 45, surface.surface_point_solve_p3 61, topology.brep_p1 114, topology.brep_p2 42, topology.edgeuse_p3 7. No absolute floors; perturb detects 587/587. The 25 native null contracts are FFI tests, not synthetic Rust differential passes. Five FFI tests cover layout/constructor safety, null contracts and missing-curve guards; 396 isolated missing-curve probes finish without a crash or timeout. Two core tests cover GetPoint parameter advances and ignored ordinary evaluation failures. Face closest-point adapter builds caches after validating its face handle. Cases cover all five B-rep relationship classes, operand reversal, C0 left tangents, zero-edge loops, holes and 21 fully compared analytic seam/axis drops. Topology imports restore exact native types, upward face-use links, trim flags and ownership. Curve/B-rep solves retain SM_ZONE_TOL_3D; surface grouping uses the surface zone tolerance and caller Kernel. No incoming UNPORTED(query.api_queries) sites. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 1203 cases, 646 pass, 557 deferred (query.brep 335, query.face_p1 12, query.face_p3 45, surface.surface_p8 2, topology.brep_p1 114, topology.brep_p2 42, topology.edgeuse_p3 7), 0 failed, max_rel_err 0. UPDATE after topology.brep_p1 (PR #145): SmBrep::GetVertices/GetEdges/GetFaces wired; the shim export now carries the B-rep's native face/edge/vertex list order and the runner imports it (SmApiGetEdges/GetFaces indices, the cause of the 14 permutation disagreements seen when wiring). Re-run 1203 cases, 731 pass (83 more than main's 648), 0 fail, 472 deferred (query.brep 335, query.face_p3 45, topology.brep_p2 42, curve.curve_p6 31: the FindEdge cases now reach geom.tools' own DropPoint stub, query.face_p1 12, topology.edgeuse_p3 7). Re-run in PR #238 (query.face_p1 wired into face_bounding_box; after merging main with #145): 1203 cases, 743 pass, 460 deferred (query.brep 335, query.face_p3 45, topology.brep_p2 42, curve.curve_p6 31, intersect.surface_drop_lib_p3 7), 0 failed. Re-run after merging query.face_p3 (PR #132: SmFace::CalculateTightBoundingBox wired, 2026-10-20): 1203 cases, 748 pass, 0 failed, 455 deferred (query.brep 335, topology.brep_p2 42, curve.curve_p6 31, intersect.surface_drop_lib_p3 28, curve.crv_on_surf 10, topology.face_p2 9), max_rel_err 0. UPDATE after topology.brep_p2 (PR #149) wired SmBrep::IsManifoldSolid: 1203 cases, 773 pass, 0 fail, 430 deferred (query.brep 335, query.face_p3 45, curve.curve_p6 31, query.face_p1 12, topology.edgeuse_p3 7), max_rel_err 0. Re-run in PR #149 (merge with main through 39ceb995, #283): 1203 cases, 785 pass, 0 fail, 418 deferred (query.brep 335, query.face_p3 45, curve.curve_p6 31, intersect.surface_drop_lib_p3 7): main's 42 topology.brep_p2 deferrals (SmBrep::IsManifoldSolid) pass. UPDATE 2026-10-23 (branch claude/edge-handles): the 110 curve.curve_p2 SmCurve::GetNaturalInterval deferrals (IdenticalSolutions in CcGlobalSolver / CpGlobalSolver on the runner's Object curve handles) resolve through the curve solvers' tree-owner ParameterDomains; most now stop at the next blocker: PARTIAL query.api_queries cases=1203 passed=988 failed=0 deferred=215 max_rel_err=0e0 with_values=988 no_values=0 vacuous=0 blocked_by=topology.edge(31),topology.edgeuse_p3(27),topology.face_p2(157). The 31 topology.edge are SmEdge::GetCurve through query::face::p2::WithMadeTrimCurves, which does not forward topology_entity (Codex-owned file)."
notes = "main CI e33985411 (2026-10-23): PARTIAL query.api_queries cases=1203 passed=988 failed=0 deferred=215 blocked_by=topology.edge(31),topology.edgeuse_p3(27),topology.face_p2(157). 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 PORTED (PR #125): public query orchestration and structured results in query::api_queries, including the wired query.face_p2 classifier. Native SmApi* oracle on concrete lines, circles, ellipses, cubic/C0 B-splines, planes, patches, rational cylinders/spheres, analytic surfaces of revolution, boxes, vertex loops and holed faces. Difftest: 1203 cases (403 fixed + 800 fixed-seed generated), 587 pass bit-identical, 0 failed, 616 deferred: query.brep 335, query.face_p1 12, query.face_p3 45, surface.surface_point_solve_p3 61, topology.brep_p1 114, topology.brep_p2 42, topology.edgeuse_p3 7. No absolute floors; perturb detects 587/587. The 25 native null contracts are FFI tests, not synthetic Rust differential passes. Five FFI tests cover layout/constructor safety, null contracts and missing-curve guards; 396 isolated missing-curve probes finish without a crash or timeout. Two core tests cover GetPoint parameter advances and ignored ordinary evaluation failures. Face closest-point adapter builds caches after validating its face handle. Cases cover all five B-rep relationship classes, operand reversal, C0 left tangents, zero-edge loops, holes and 21 fully compared analytic seam/axis drops. Topology imports restore exact native types, upward face-use links, trim flags and ownership. Curve/B-rep solves retain SM_ZONE_TOL_3D; surface grouping uses the surface zone tolerance and caller Kernel. No incoming UNPORTED(query.api_queries) sites. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 1203 cases, 646 pass, 557 deferred (query.brep 335, query.face_p1 12, query.face_p3 45, surface.surface_p8 2, topology.brep_p1 114, topology.brep_p2 42, topology.edgeuse_p3 7), 0 failed, max_rel_err 0. UPDATE after topology.brep_p1 (PR #145): SmBrep::GetVertices/GetEdges/GetFaces wired; the shim export now carries the B-rep's native face/edge/vertex list order and the runner imports it (SmApiGetEdges/GetFaces indices, the cause of the 14 permutation disagreements seen when wiring). Re-run 1203 cases, 731 pass (83 more than main's 648), 0 fail, 472 deferred (query.brep 335, query.face_p3 45, topology.brep_p2 42, curve.curve_p6 31: the FindEdge cases now reach geom.tools' own DropPoint stub, query.face_p1 12, topology.edgeuse_p3 7). Re-run in PR #238 (query.face_p1 wired into face_bounding_box; after merging main with #145): 1203 cases, 743 pass, 460 deferred (query.brep 335, query.face_p3 45, topology.brep_p2 42, curve.curve_p6 31, intersect.surface_drop_lib_p3 7), 0 failed. Re-run after merging query.face_p3 (PR #132: SmFace::CalculateTightBoundingBox wired, 2026-10-20): 1203 cases, 748 pass, 0 failed, 455 deferred (query.brep 335, topology.brep_p2 42, curve.curve_p6 31, intersect.surface_drop_lib_p3 28, curve.crv_on_surf 10, topology.face_p2 9), max_rel_err 0. UPDATE after topology.brep_p2 (PR #149) wired SmBrep::IsManifoldSolid: 1203 cases, 773 pass, 0 fail, 430 deferred (query.brep 335, query.face_p3 45, curve.curve_p6 31, query.face_p1 12, topology.edgeuse_p3 7), max_rel_err 0. Re-run in PR #149 (merge with main through 39ceb995, #283): 1203 cases, 785 pass, 0 fail, 418 deferred (query.brep 335, query.face_p3 45, curve.curve_p6 31, intersect.surface_drop_lib_p3 7): main's 42 topology.brep_p2 deferrals (SmBrep::IsManifoldSolid) pass. UPDATE 2026-10-23 (branch claude/edge-handles): the 110 curve.curve_p2 SmCurve::GetNaturalInterval deferrals (IdenticalSolutions in CcGlobalSolver / CpGlobalSolver on the runner's Object curve handles) resolve through the curve solvers' tree-owner ParameterDomains; most now stop at the next blocker: PARTIAL query.api_queries cases=1203 passed=988 failed=0 deferred=215 max_rel_err=0e0 with_values=988 no_values=0 vacuous=0 blocked_by=topology.edge(31),topology.edgeuse_p3(27),topology.face_p2(157). The 31 topology.edge are SmEdge::GetCurve through query::face::p2::WithMadeTrimCurves, which does not forward topology_entity (Codex-owned file)."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL (PR #329, takeover of #101 with 0xlillith's permission; #332's runner fixes applied): all 17 fns in query::brep. difftest 1172 cases (572 fixture + 600 generated), 925 pass bit-identical, 0 fail, 247 deferred (geom.tol 74: SmTol::GetZoneTol3d(const SmObject*) on ray hits; topology.face_p2 45; surface.cone_p1 49 / surface.sphere 18 / surface.surf_of_extrusion_p2 41 / harness:analytic-geometry-export 20: analytic geometry the shared export flattens); perturb 923/923; max_rel_err 0. Shared B-rep fixture kinds 7 (SmApiCreateBox solid) and 8 (points and wire segments at given tolerances, up to 600/150) added. Point3DClassify is BrepQuery::point_3d_classify (lazy SM_OC_BREP cache, BrepIdentity) and BrepClassifier (on a private copy for shared B-reps). Back-edges wired: CalculateBoundingBox/Tight/Lock/UnLock (topology.brep_p1/p2/p5/p6/p9/p10, topology.brep_cache, topology.shell, heal.stitch_p1/p2, blend.hcr, mass.integrator, query.api_queries, boolean.merge_p1 SmTemporaryBrepTransform), Point3DClassify (boolean.merge_p1/p4/p5, query.api_queries, topology.proto_topology_p3 through ProtoBrep::brep_point_3d_classify), RayFire (topology.brep_p9 FindInfiniteRegion), LocalCurveSector (topology.shell sector). Remaining DISPATCH GAPs (callee ported, caller API cannot reach it; follow-ups in findings): topology.brep_p10 merge-curves world (topology.brep_p2 API), geom.object SmShape over B-rep keys. topology.brep_p6 stops at an OMITTED marker for its own TestClosureSplitRegion remainder after the real box. UPDATE 2026-10-23 (claude/face-p1-hooks): SmFace::Point3DClassify wired in SmTLSPointFace::SolveIt (topology_solver p1, on a copy of the B-rep TopologyObjects::face_entity names): the 29 query.face_p1 deferrals are gone; cases=1172 passed=1115 failed=0 deferred=57 (curve.curve_p2 9, topology.edgeuse_p3 2, topology.face_p2 46), max_rel_err 0 (Mac Studio run; Linux CI is the gate)."
notes = "main CI e33985411 (2026-10-23): PARTIAL query.brep cases=1172 passed=1115 failed=0 deferred=57 blocked_by=topology.edgeuse_p3(2),topology.face_p2(55). PARTIAL (PR #329, takeover of #101 with 0xlillith's permission; #332's runner fixes applied): all 17 fns in query::brep. difftest 1172 cases (572 fixture + 600 generated), 925 pass bit-identical, 0 fail, 247 deferred (geom.tol 74: SmTol::GetZoneTol3d(const SmObject*) on ray hits; topology.face_p2 45; surface.cone_p1 49 / surface.sphere 18 / surface.surf_of_extrusion_p2 41 / harness:analytic-geometry-export 20: analytic geometry the shared export flattens); perturb 923/923; max_rel_err 0. Shared B-rep fixture kinds 7 (SmApiCreateBox solid) and 8 (points and wire segments at given tolerances, up to 600/150) added. Point3DClassify is BrepQuery::point_3d_classify (lazy SM_OC_BREP cache, BrepIdentity) and BrepClassifier (on a private copy for shared B-reps). Back-edges wired: CalculateBoundingBox/Tight/Lock/UnLock (topology.brep_p1/p2/p5/p6/p9/p10, topology.brep_cache, topology.shell, heal.stitch_p1/p2, blend.hcr, mass.integrator, query.api_queries, boolean.merge_p1 SmTemporaryBrepTransform), Point3DClassify (boolean.merge_p1/p4/p5, query.api_queries, topology.proto_topology_p3 through ProtoBrep::brep_point_3d_classify), RayFire (topology.brep_p9 FindInfiniteRegion), LocalCurveSector (topology.shell sector). Remaining DISPATCH GAPs (callee ported, caller API cannot reach it; follow-ups in findings): topology.brep_p10 merge-curves world (topology.brep_p2 API), geom.object SmShape over B-rep keys. topology.brep_p6 stops at an OMITTED marker for its own TestClosureSplitRegion remainder after the real box. UPDATE 2026-10-23 (claude/face-p1-hooks): SmFace::Point3DClassify wired in SmTLSPointFace::SolveIt (topology_solver p1, on a copy of the B-rep TopologyObjects::face_entity names): the 29 query.face_p1 deferrals are gone; cases=1172 passed=1115 failed=0 deferred=57 (curve.curve_p2 9, topology.edgeuse_p3 2, topology.face_p2 46), max_rel_err 0 (Mac Studio run; Linux CI is the gate)."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "After intersect.curve_class_p2 (PR #85) merged: CurveOnClassify cases now compared (status, modified flag, every interval and its three point classifications; line is SmBSplineCurve::CreateLineSegment on both sides): 1344 cases, 1310 pass, 0 fail, 34 deferred; --perturb 1310/1310. PARTIAL: difftest 1344 cases (1044 fixture: grids over the 13 exactly exported faces of the upstream .smb files Endcap, Mouse, box_with_large_fillet, disk, ellips_ts2, plane_circ, plane_square; points on, near and at the ends of every trim curve at offsets 0..1e-3; target-loop selections on ellips_ts2's face with two inner loops; SM_API_test TestSmCreateRectangle's 10x6 rectangle at the origin and at 1e10 on a real SmPlane; sm_ClassifyParamOnFaces face pairs; SmProtoVertex containment at the tolerance/capture limits; CurveOnClassify; 300 generated incl. tiny/huge B-spline and plane faces, tolerance edits and out-of-domain points), 1309 pass bit-identical (max_rel_err 0), 0 failed, 35 deferred (intersect.curve_class_p2 20: SmCurveClassification::ReSet, the first call of CurveOnClassify, whose body also needs curve_class_p5/p7/p9 and topology.face_p4 GetEdges; intersect.surface_drop_lib_p3 15: SmSurface::DropCurve in GetOrCreateUVTrimCurve of faces without trim curves); --perturb SENSITIVE. Not compared: PointClassify's SmTrimSrfCache branch (the shim deletes the cache a file read leaves; B-rep surfaces carry no object cache in the port) and faces with surfaces of revolution/extrusion/cones/spheres/tori (the shared export carries them as B-spline parts). Built on topology.loopuse (PR #102: loopuse::vertices). Wired: SmProtoVertex::ContainsPoint in ProtoTopologyManager::find_proto_vertex / which_pv_to_combine (topology.proto_topology_p1: 63 cases no longer deferred). Not wired, still UNPORTED(query.face_p2): surface::trim_srf_cache, intersect::ray_tracer, intersect::topology_solver p1 (callers hold object handles without a Brep) and the CurveOnClassify calls of topology::face::p2 / intersect::topology_solver p2 (behind UNPORTED(intersect.curve_class_p4)). CO-PORTED in intersect.curve_class_p5 (PR #150): CurveOnClassify vertex handle mapping -> CurveOnClassifyObjects::vertex and ClassGeometry callback bound; IntersectVertices now calls p5. Existing ReSet and classification stubs are retained. Merge of PR #65: ClassifyFaceInterval (p7) and IntersectVertices (p5) both wired; difftest then 1344 cases, 1271 passed, 0 failed, 73 deferred. [topology.edgeuse_p3 wired (PR #117): SmLoop::ContainsUVPoint takes &mut Brep and calls GetOrCreateUVTrimCurve, so the former topology.face_p2 (38) and topology.edgeuse_p3 (15) deferrals are gone: 1344 cases, 1309 pass, 0 failed, 35 deferred (intersect.curve_class_p2 20, intersect.surface_drop_lib_p3 15)]"
notes = "main CI e33985411 (2026-10-23): PARTIAL query.face_p2 cases=1344 passed=1326 failed=0 deferred=18 blocked_by=query.face_p1(4),topology.edge(14). After intersect.curve_class_p2 (PR #85) merged: CurveOnClassify cases now compared (status, modified flag, every interval and its three point classifications; line is SmBSplineCurve::CreateLineSegment on both sides): 1344 cases, 1310 pass, 0 fail, 34 deferred; --perturb 1310/1310. PARTIAL: difftest 1344 cases (1044 fixture: grids over the 13 exactly exported faces of the upstream .smb files Endcap, Mouse, box_with_large_fillet, disk, ellips_ts2, plane_circ, plane_square; points on, near and at the ends of every trim curve at offsets 0..1e-3; target-loop selections on ellips_ts2's face with two inner loops; SM_API_test TestSmCreateRectangle's 10x6 rectangle at the origin and at 1e10 on a real SmPlane; sm_ClassifyParamOnFaces face pairs; SmProtoVertex containment at the tolerance/capture limits; CurveOnClassify; 300 generated incl. tiny/huge B-spline and plane faces, tolerance edits and out-of-domain points), 1309 pass bit-identical (max_rel_err 0), 0 failed, 35 deferred (intersect.curve_class_p2 20: SmCurveClassification::ReSet, the first call of CurveOnClassify, whose body also needs curve_class_p5/p7/p9 and topology.face_p4 GetEdges; intersect.surface_drop_lib_p3 15: SmSurface::DropCurve in GetOrCreateUVTrimCurve of faces without trim curves); --perturb SENSITIVE. Not compared: PointClassify's SmTrimSrfCache branch (the shim deletes the cache a file read leaves; B-rep surfaces carry no object cache in the port) and faces with surfaces of revolution/extrusion/cones/spheres/tori (the shared export carries them as B-spline parts). Built on topology.loopuse (PR #102: loopuse::vertices). Wired: SmProtoVertex::ContainsPoint in ProtoTopologyManager::find_proto_vertex / which_pv_to_combine (topology.proto_topology_p1: 63 cases no longer deferred). Not wired, still UNPORTED(query.face_p2): surface::trim_srf_cache, intersect::ray_tracer, intersect::topology_solver p1 (callers hold object handles without a Brep) and the CurveOnClassify calls of topology::face::p2 / intersect::topology_solver p2 (behind UNPORTED(intersect.curve_class_p4)). CO-PORTED in intersect.curve_class_p5 (PR #150): CurveOnClassify vertex handle mapping -> CurveOnClassifyObjects::vertex and ClassGeometry callback bound; IntersectVertices now calls p5. Existing ReSet and classification stubs are retained. Merge of PR #65: ClassifyFaceInterval (p7) and IntersectVertices (p5) both wired; difftest then 1344 cases, 1271 passed, 0 failed, 73 deferred. [topology.edgeuse_p3 wired (PR #117): SmLoop::ContainsUVPoint takes &mut Brep and calls GetOrCreateUVTrimCurve, so the former topology.face_p2 (38) and topology.edgeuse_p3 (15) deferrals are gone: 1344 cases, 1309 pass, 0 failed, 35 deferred (intersect.curve_class_p2 20, intersect.surface_drop_lib_p3 15)]"
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "UPDATE after PR #437 (Kernel through Curve::knots, CrvInVolume GetKnots wired): difftest 2420 cases, all pass, 0 deferred (the 13 intersect.curve_class_p4 deferrals are gone); counts below are from before. UPDATE after curve.curve_p9 (PR #13): CalculateTightBoundingBox and IsOnPositiveSideOfPlanes wired; difftest 2420 cases, 2407 pass bit-identical, 0 failed, 13 deferred (intersect.curve_class_p4 13; the 550 curve.curve_p9 deferrals are gone), --perturb SENSITIVE 2407/2407. Counts below are from before. 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"
notes = "main CI e33985411 (2026-10-23): PASS surface.b_spline_volume_n_lib cases=2420 passed=2420 failed=0 deferred=0. UPDATE after PR #437 (Kernel through Curve::knots, CrvInVolume GetKnots wired): difftest 2420 cases, all pass, 0 deferred (the 13 intersect.curve_class_p4 deferrals are gone); counts below are from before. UPDATE after curve.curve_p9 (PR #13): CalculateTightBoundingBox and IsOnPositiveSideOfPlanes wired; difftest 2420 cases, 2407 pass bit-identical, 0 failed, 13 deferred (intersect.curve_class_p4 13; the 550 curve.curve_p9 deferrals are gone), --perturb SENSITIVE 2407/2407. Counts below are from before. 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
claimed_by = ""
claimed_at = ""
notes = "GREEN (PR #226 / issue #207): 20702/20702 Linux differential passes, bit-identical, no deferrals or absolute floors. GetHeight now retains initialized point sentinels when native evaluation statuses are ignored; part-1 state adapters compare this height without requiring a polar curve. Eight new build fixtures cover tiny axes and negative radii with every swap/inside-out combination. Earlier evidence: GREEN: after surface.surf_of_revolution_p2 merged (PR #51): 20694 cases, 20694 pass bit-identical, 0 deferred (the AdjustSTEPUVDomain / STEPInversion back-edges into surface.surf_of_revolution_p2 are wired; Cone::rev_step_inversion calls SurfOfRevolution::step_inversion_with_outputs). Before: 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"
notes = "main CI e33985411 (2026-10-23): PASS surface.cone_p1 cases=20702 passed=20702 failed=0 deferred=0. GREEN (PR #226 / issue #207): 20702/20702 Linux differential passes, bit-identical, no deferrals or absolute floors. GetHeight now retains initialized point sentinels when native evaluation statuses are ignored; part-1 state adapters compare this height without requiring a polar curve. Eight new build fixtures cover tiny axes and negative radii with every swap/inside-out combination. Earlier evidence: GREEN: after surface.surf_of_revolution_p2 merged (PR #51): 20694 cases, 20694 pass bit-identical, 0 deferred (the AdjustSTEPUVDomain / STEPInversion back-edges into surface.surf_of_revolution_p2 are wired; Cone::rev_step_inversion calls SurfOfRevolution::step_inversion_with_outputs). Before: 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"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "GREEN (PR #153): difftest 1550 cases (42 fixture + 308 review adversarial fixture + 1200 generated), 1550 pass bit-identical, 0 failed, 0 deferred, max_rel_err 0, no absolute floors; --perturb SENSITIVE 1550/1550. Real SmCone/SmCylinder inputs (all surface.cone_p1 constructions), offsets on all three branches (no surface, apex truncation, moved copy incl. apex control points), recognition and rebuild after NURB edits (moves, twists, homogeneous rescale, flattening), trims of section circles/ellipses (sub-domains, arcs, off-cone). Back-edges wired: sm_GetEllipseTrimIntervals in surface::cone::p3 (surface.cone_p3 deferred 121 -> 30), SmCone::IsNurbSurfaceCone in BSplineSurface::copy_and_add_analytics (now takes the kernel; a recognised cone returns Unported at a DISPATCH GAP (no SurfaceKind::Cone yet, issue #76 / PR #133), the rest defers on surface.sphere). The prior closed attempt (PR #71) was not reused. 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"
notes = "main CI e33985411 (2026-10-23): PASS surface.cone_p2 cases=1570 passed=1570 failed=0 deferred=0. GREEN (PR #153): difftest 1550 cases (42 fixture + 308 review adversarial fixture + 1200 generated), 1550 pass bit-identical, 0 failed, 0 deferred, max_rel_err 0, no absolute floors; --perturb SENSITIVE 1550/1550. Real SmCone/SmCylinder inputs (all surface.cone_p1 constructions), offsets on all three branches (no surface, apex truncation, moved copy incl. apex control points), recognition and rebuild after NURB edits (moves, twists, homogeneous rescale, flattening), trims of section circles/ellipses (sub-domains, arcs, off-cone). Back-edges wired: sm_GetEllipseTrimIntervals in surface::cone::p3 (surface.cone_p3 deferred 121 -> 30), SmCone::IsNurbSurfaceCone in BSplineSurface::copy_and_add_analytics (now takes the kernel; a recognised cone returns Unported at a DISPATCH GAP (no SurfaceKind::Cone yet, issue #76 / PR #133), the rest defers on surface.sphere). The prior closed attempt (PR #71) was not reused. 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"
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
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 Re-run with surface.surface_p5's back-edges wired (PR #50): cases=535 passed=469 failed=0 deferred=66 max_rel_err=0e0 blocked_by=surface.surface_p3(66). GREEN (PR #52, after merging surface_p4/#49 and surface_p5/#50): 535/535 pass, 0 deferred, --perturb SENSITIVE 535/535."
notes = "main CI e33985411 (2026-10-23): PASS surface.curve_bounded_surface cases=537 passed=537 failed=0 deferred=0. 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 Re-run with surface.surface_p5's back-edges wired (PR #50): cases=535 passed=469 failed=0 deferred=66 max_rel_err=0e0 blocked_by=surface.surface_p3(66). GREEN (PR #52, after merging surface_p4/#49 and surface_p5/#50): 535/535 pass, 0 deferred, --perturb SENSITIVE 535/535."
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
claimed_by = ""
claimed_at = ""
notes = "GREEN (PR #100): difftest 800 generated cases, 800 pass bit-identical, 0 deferred, --perturb 800/800 (every op: CreateCanonical and the constructor with MakeNurb incl. swap/inside-out/partial-domain/explicit-generator, operator==, Copy, CreateOffsetSurface (+rebuild), CreateIsoParametricCurve, ConvertUVFromSTEPToNURBS/NURBSToSTEP, EvaluateSTEP(Point), EvaluateNormal, RebuildSTEPFromNURBParameters, Transform, IsClosed/U/V, STEPInversion, CreateTrimmedCircleSegments, IntersectWithPlane/Sphere/Cone, GlobalSurfaceIntersect with a plane, IsNurbSurfaceSphere). DISPATCH GAP: the sphere is not a SurfaceKind variant (as the torus): SmSphere::GlobalSurfaceIntersect falls back to SmSurface::GlobalSurfaceIntersect with a sphere `this` as Unported (names surface.sphere), Surface::read_from_db reads the record with Sphere::read_from_db and then reports the gap, and the ssi engine defers SurfaceSpec::Sphere on surface.surface_p2. Sphere implements Revolved so SurfOfRevolution::intersect_with_sphere takes it. No UNPORTED(surface.sphere) stubs remain. Not ported (not in the unit's function list): GetCanonical, GlobalPointSolveSTEP, RotationAboutAxisX/Y/Z, AssertValid, WriteToDB, Dump. 34 fns; largest: SmSphere::CreateTrimmedCircleSegments, SmSphere::IntersectWithSphere, SmSphere::IsNurbSurfaceSphere, SmSphere::IntersectWithCone; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
notes = "main CI e33985411 (2026-10-23): PASS surface.sphere cases=816 passed=816 failed=0 deferred=0. GREEN (PR #100): difftest 800 generated cases, 800 pass bit-identical, 0 deferred, --perturb 800/800 (every op: CreateCanonical and the constructor with MakeNurb incl. swap/inside-out/partial-domain/explicit-generator, operator==, Copy, CreateOffsetSurface (+rebuild), CreateIsoParametricCurve, ConvertUVFromSTEPToNURBS/NURBSToSTEP, EvaluateSTEP(Point), EvaluateNormal, RebuildSTEPFromNURBParameters, Transform, IsClosed/U/V, STEPInversion, CreateTrimmedCircleSegments, IntersectWithPlane/Sphere/Cone, GlobalSurfaceIntersect with a plane, IsNurbSurfaceSphere). DISPATCH GAP: the sphere is not a SurfaceKind variant (as the torus): SmSphere::GlobalSurfaceIntersect falls back to SmSurface::GlobalSurfaceIntersect with a sphere `this` as Unported (names surface.sphere), Surface::read_from_db reads the record with Sphere::read_from_db and then reports the gap, and the ssi engine defers SurfaceSpec::Sphere on surface.surface_p2. Sphere implements Revolved so SurfOfRevolution::intersect_with_sphere takes it. No UNPORTED(surface.sphere) stubs remain. Not ported (not in the unit's function list): GetCanonical, GlobalPointSolveSTEP, RotationAboutAxisX/Y/Z, AssertValid, WriteToDB, Dump. 34 fns; largest: SmSphere::CreateTrimmedCircleSegments, SmSphere::IntersectWithSphere, SmSphere::IsNurbSurfaceSphere, SmSphere::IntersectWithCone; unit-SCC #22 (220 units); 319 upstream test entry points reach this unit"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
claimed_by = ""
claimed_at = ""
notes = "PR #213 review regression: 2061 cases, 2061 pass, 0 failed/deferred, max_rel_err=0; six lazy-line fixtures cover virtual NURB construction, owner reparameterization and the IsLinear sample domain captured before GetEnds side effects. UPDATE after curve.curve_p9 (PR #13): sm_IntersectGenerators now calls Curve::global_curve_solve (ProjectedIntersect); difftest 2055 cases, 1999 pass bit-identical, 0 failed, 56 deferred (surface.surface_p4 30, surface.surface_p5 26; the 41 curve.curve_p9 deferrals are gone), --perturb SENSITIVE 1999/1999. Counts below are from before. 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 Re-run with surface.surface_p5's back-edges wired (PR #50): cases=2055 passed=1958 failed=0 deferred=97 max_rel_err=0e0 blocked_by=curve.curve_p9(41),intersect.surface_intersector_p3(26),surface.surface_p4(30). Re-run with surface.surface_point_solve_p3 (PR #106): cases=2055 passed=2002 failed=0 deferred=53 max_rel_err=0.0 blocked_by=surface.surface_p3(51),surface.surface_p8(2). Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 2055 cases, 2053 pass, 2 deferred (surface.surface_p8 2), 0 failed, max_rel_err 0. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 2055 cases, 2055 pass, 0 deferred, 0 failed, max_rel_err 0; green."
notes = "main CI e33985411 (2026-10-23): PASS surface.surf_of_extrusion_p1 cases=2071 passed=2071 failed=0 deferred=0. PR #213 review regression: 2061 cases, 2061 pass, 0 failed/deferred, max_rel_err=0; six lazy-line fixtures cover virtual NURB construction, owner reparameterization and the IsLinear sample domain captured before GetEnds side effects. UPDATE after curve.curve_p9 (PR #13): sm_IntersectGenerators now calls Curve::global_curve_solve (ProjectedIntersect); difftest 2055 cases, 1999 pass bit-identical, 0 failed, 56 deferred (surface.surface_p4 30, surface.surface_p5 26; the 41 curve.curve_p9 deferrals are gone), --perturb SENSITIVE 1999/1999. Counts below are from before. 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 Re-run with surface.surface_p5's back-edges wired (PR #50): cases=2055 passed=1958 failed=0 deferred=97 max_rel_err=0e0 blocked_by=curve.curve_p9(41),intersect.surface_intersector_p3(26),surface.surface_p4(30). Re-run with surface.surface_point_solve_p3 (PR #106): cases=2055 passed=2002 failed=0 deferred=53 max_rel_err=0.0 blocked_by=surface.surface_p3(51),surface.surface_p8(2). Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 2055 cases, 2053 pass, 2 deferred (surface.surface_p8 2), 0 failed, max_rel_err 0. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 2055 cases, 2055 pass, 0 deferred, 0 failed, max_rel_err 0; green."
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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 PR #106: EvaluateSTEP accepts unequal derivative orders as release C++ does; sweep-only boundary iso evaluation is covered by p3's STEP/revolution regressions (the equal-order assertion mismatch is DOC-4). Review PR #106 recertification: 858 cases, 858 pass, 0 deferred, 0 failed, max_rel_err=0.0; deferred: none."
notes = "main CI e33985411 (2026-10-23): PASS surface.surf_of_revolution_p1 cases=894 passed=894 failed=0 deferred=0. 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 PR #106: EvaluateSTEP accepts unequal derivative orders as release C++ does; sweep-only boundary iso evaluation is covered by p3's STEP/revolution regressions (the equal-order assertion mismatch is DOC-4). Review PR #106 recertification: 858 cases, 858 pass, 0 deferred, 0 failed, max_rel_err=0.0; deferred: none."
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "GREEN (shim-skip audit): the runner's hard-coded IntersectWithCone deferral (surface.cone_p1, 'the Rust side cannot build the SmCone operand') was stale: the runner now builds the operand with Cone::create_canonical (bSwapUV/bInsideOut FALSE, as SmCone::CreateCanonical's defaults) and calls intersect_with_cone (Cone implements Revolved). The generator picks a cone for 4/15 intersections (was 1/12), 70% coaxial with the surface (a random axis only reaches the general-intersection early return): 72 cone cases, 17 with intersection curves, 35 coaxial without, 20 early returns. 26705 cases, 26705 bit-identical (max_rel_err 0), 0 failed, 0 deferred; perturbation 26705/26705 detected. Earlier: PARTIAL: after merging main (surface.torus, surface.cone_p1, surface.surface_p1): 26705 cases, 26687 bit-identical, 0 failed, 18 deferred (surface.cone_p1 18: the Rust side cannot build the SmCone operand); after merging surface.sphere (PR #100) the IntersectWithSphere cases build the Rust SmSphere::CreateCanonical operand and run (26 cases now compared); 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 Review PR #106 recertification: 26705 cases, 26661 pass, 44 deferred, 0 failed, max_rel_err=0.0; deferred: surface.cone_p1 18, surface.sphere 26."
notes = "main CI e33985411 (2026-10-23): PASS surface.surf_of_revolution_p3 cases=26731 passed=26731 failed=0 deferred=0. GREEN (shim-skip audit): the runner's hard-coded IntersectWithCone deferral (surface.cone_p1, 'the Rust side cannot build the SmCone operand') was stale: the runner now builds the operand with Cone::create_canonical (bSwapUV/bInsideOut FALSE, as SmCone::CreateCanonical's defaults) and calls intersect_with_cone (Cone implements Revolved). The generator picks a cone for 4/15 intersections (was 1/12), 70% coaxial with the surface (a random axis only reaches the general-intersection early return): 72 cone cases, 17 with intersection curves, 35 coaxial without, 20 early returns. 26705 cases, 26705 bit-identical (max_rel_err 0), 0 failed, 0 deferred; perturbation 26705/26705 detected. Earlier: PARTIAL: after merging main (surface.torus, surface.cone_p1, surface.surface_p1): 26705 cases, 26687 bit-identical, 0 failed, 18 deferred (surface.cone_p1 18: the Rust side cannot build the SmCone operand); after merging surface.sphere (PR #100) the IntersectWithSphere cases build the Rust SmSphere::CreateCanonical operand and run (26 cases now compared); 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 Review PR #106 recertification: 26705 cases, 26661 pass, 44 deferred, 0 failed, max_rel_err=0.0; deferred: surface.cone_p1 18, surface.sphere 26."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "#76 kernel-aware Surface dispatch (PR #313, 2026-10-21): 600 cases, 600 pass, 0 failed, 0 deferred, max_rel_err 0; before 559 pass / 41 deferred. PARTIAL: difftest 600 generated cases (LocalSurfaceIntersect over Bezier patches and planes: crossing, standing, nearly parallel, tiny and huge scales, sub-domains, guesses on boundaries, plane normals (also zero), previous points, boundary testing; IntersectSurfaceBoundaries of coincident and crossing patches and planes), 498 pass bit-identical, 0 failed, 102 deferred (surface.surface_p8 102: sm_IntersectSrfBndryCrv); --perturb SENSITIVE 498/498; SmCSGlobalSolver/SmSSGlobalSolver::LocalSolve are compared through surface.surface_p7's GlobalCurveSolve/GlobalSurfaceSolve cases (first 16 solutions; minimize, maximize, normalize, signed directed minimize, intersect for nodes) and the intersectors; LiftCurve defers at sm_ExtractIsoCurve (surface.surface_p8) and past it has a dispatch gap for non-B-spline surfaces (CrvOnSurf holds a B-spline, findings.md; marked UNPORTED(curve.crv_on_surf)). Coverage acknowledged, not closed: the shim builds only Bezier patches and planes (the leaf solves are not compared on revolution, curve-bounded, Step or SrfInVolume surfaces); SM_SO_3D_SIGNED_DIRECTED_MAXIMIZE is not generated because sm_SCLocalSolve asserts on it (the Rust side returns InvalidInput, the release C++ continues); LiftCurve has no shim or runner after its first line; some passes compare no values; MAX_SUBDIVISION_NODES (2^20) stays (a surface.surface_p1 case at 1e-4 scale needs more than 2^18). Wired UNPORTED(surface.surface_p11): SmSurface::LocalSurfaceIntersect (intersect.surface_intersector_p1, used by adv_surface_intersector/p3/p4/p5), SmCSGlobalSolver/SmSSGlobalSolver::LocalSolve (surface.surface_p7: global_curve_solve/global_surface_solve now take the kernel and handles; intersect.topology_solver_p2 updated), GlobalSurfaceSolve SM_SR_NODES (intersect.surface_intersector_p4 FindInteriorCurves, via global_surface_solve_with). Wired UNPORTED(surface.surface_p3) after merging main: SmSurface::LocalSurfaceSolve. Bounded surface cache subdivision (surface.surface_cache_p3 MAX_SUBDIVISION_NODES, the 3.5 GB abort). Upstream issues UB-121, WR-99; plane boundary curve type mismatch with surface.surface_p9 recorded in findings.md. 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 Re-run (PR #118, sm_IntersectSrfBndryCrv and sm_ExtractIsoCurve wired to surface.surface_p8): 600 cases, 559 pass, 41 deferred (curve.iso_curve 41), 0 failed; --perturb SENSITIVE 559/559; the surface.surface_p8 deferrals are gone.; LiftCurve is now compared through blend.fillet_geom_p6 (PR #247: CalcFilletEnd and CalcBlendingRail lifts of up to ~5000 control points, bit-identical with sm_IntersectAndSplit's curve handle, fixed on main by #444)"
notes = "main CI e33985411 (2026-10-23): PASS surface.surface_p11 cases=806 passed=806 failed=0 deferred=0. #76 kernel-aware Surface dispatch (PR #313, 2026-10-21): 600 cases, 600 pass, 0 failed, 0 deferred, max_rel_err 0; before 559 pass / 41 deferred. PARTIAL: difftest 600 generated cases (LocalSurfaceIntersect over Bezier patches and planes: crossing, standing, nearly parallel, tiny and huge scales, sub-domains, guesses on boundaries, plane normals (also zero), previous points, boundary testing; IntersectSurfaceBoundaries of coincident and crossing patches and planes), 498 pass bit-identical, 0 failed, 102 deferred (surface.surface_p8 102: sm_IntersectSrfBndryCrv); --perturb SENSITIVE 498/498; SmCSGlobalSolver/SmSSGlobalSolver::LocalSolve are compared through surface.surface_p7's GlobalCurveSolve/GlobalSurfaceSolve cases (first 16 solutions; minimize, maximize, normalize, signed directed minimize, intersect for nodes) and the intersectors; LiftCurve defers at sm_ExtractIsoCurve (surface.surface_p8) and past it has a dispatch gap for non-B-spline surfaces (CrvOnSurf holds a B-spline, findings.md; marked UNPORTED(curve.crv_on_surf)). Coverage acknowledged, not closed: the shim builds only Bezier patches and planes (the leaf solves are not compared on revolution, curve-bounded, Step or SrfInVolume surfaces); SM_SO_3D_SIGNED_DIRECTED_MAXIMIZE is not generated because sm_SCLocalSolve asserts on it (the Rust side returns InvalidInput, the release C++ continues); LiftCurve has no shim or runner after its first line; some passes compare no values; MAX_SUBDIVISION_NODES (2^20) stays (a surface.surface_p1 case at 1e-4 scale needs more than 2^18). Wired UNPORTED(surface.surface_p11): SmSurface::LocalSurfaceIntersect (intersect.surface_intersector_p1, used by adv_surface_intersector/p3/p4/p5), SmCSGlobalSolver/SmSSGlobalSolver::LocalSolve (surface.surface_p7: global_curve_solve/global_surface_solve now take the kernel and handles; intersect.topology_solver_p2 updated), GlobalSurfaceSolve SM_SR_NODES (intersect.surface_intersector_p4 FindInteriorCurves, via global_surface_solve_with). Wired UNPORTED(surface.surface_p3) after merging main: SmSurface::LocalSurfaceSolve. Bounded surface cache subdivision (surface.surface_cache_p3 MAX_SUBDIVISION_NODES, the 3.5 GB abort). Upstream issues UB-121, WR-99; plane boundary curve type mismatch with surface.surface_p9 recorded in findings.md. 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 Re-run (PR #118, sm_IntersectSrfBndryCrv and sm_ExtractIsoCurve wired to surface.surface_p8): 600 cases, 559 pass, 41 deferred (curve.iso_curve 41), 0 failed; --perturb SENSITIVE 559/559; the surface.surface_p8 deferrals are gone.; LiftCurve is now compared through blend.fillet_geom_p6 (PR #247: CalcFilletEnd and CalcBlendingRail lifts of up to ~5000 control points, bit-identical with sm_IntersectAndSplit's curve handle, fixed on main by #444)"
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "UPDATE (PR #52, after merging surface_p4/#49 and surface_p5/#50): the five UNPORTED(surface.surface_p3) stubs are wired (GetSingularities, SmFindPSNormalENFO solve, UV-guess LocalSurfaceSurfaceIntersect, CoverCoincidentSurface, EvaluateNormalSection); difftest 3046 cases, 2477 pass bit-identical, 0 failed, 569 deferred (surface.surface_point_solve_p3 528, curve.iso_curve 41); --perturb SENSITIVE 2477/2477. Kernel::default() remains in the IdenticalSolutions overrides and the image-space LocalSurfaceSurfaceIntersect (no kernel threaded there). PARTIAL: difftest 3046 cases (46 fixture: Surface.sms drop-point cases of the upstream closest-point test plus singularity and iso-curve cases; 3000 generated), 1785 pass bit-identical, 1261 deferred (surface.surface_point_solve_p3 512 = LocalPointSolve_1 and the point solves of sm_SpLocalSolve/DropPoint, surface.surface_p3 728 = GetSingularities, SmFindPSNormalENFO::Evaluate and EvaluateNormalSection, curve.iso_curve 21 = SmIsoCurve over non-B-spline surfaces and planes; the 9 cases that waited on surface.surface_p6 now defer to the point solves); a 60000-case run is clean; --perturb SENSITIVE 1785/1785. Covered ops (the generated cases include SmCurve::SurfaceMaxDistanceBetween of line segments and curves over planes, which drives the DropPoint wiring of curve.curve_p2, and plane drops of points above the interior): IsSingularity (poles, pinched corners, the SmPlane override), EvaluateNormalAtSingularity, CreateIsoParametricCurve (B-spline and plane overrides; the base body only runs for curve-bounded surfaces, whose SmIsoCurve needs EvaluateSimple, surface.surface_p1, so it is deferred), LocalPointSolve_0 INTERSECT, DropPoint via DropPointFast, sm_FilterSolution and sm_SpLocalSolve (verbatim C++ copies in the shim; the latter takes the surface sm_GetSurfaceToEvaluate would return), the four IdenticalSolutions overrides. m_bUseNewPointSolvers is TRUE upstream, so LocalPointSolve (LocalPointSolve_1, surface.surface_point_solve_p3) only runs LocalPointSolve_0 for MAXIMIZE, whose Newton solve is SmFindPSNormalENFO (surface.surface_p1/p3). SmCSGlobalSolver and SmCSIGlobalSolver have no struct yet: their IdenticalSolutions are free functions (cs_identical_solutions, csi_identical_solutions). CoverOtherCoincidentSurface has upstream's full signature and fall-through; it waits on CoverCoincidentSurface (surface.surface_p3). Back-edges wired: IsSingularity (nurbs b_spline_surface p1, b_spline_surface_n_lib p1, surface_cache p1, intersect.surface_intersector_p2), LocalPointSolve (nurbs b_spline_surface p1, intersect.surface_intersector_p1/p2), EvaluateNormalAtSingularity (curve_bounded_surface), DropPoint (intersect.surface_intersector_p1, surface.plane_p1), SmSPGlobalSolver/SmLSIGlobalSolver::IdenticalSolutions (p7, p2), SmCSIGlobalSolver::IdenticalSolutions, sm_FilterSolution and LocalPointSolve (surface.surface_p9), LocalPointSolve (intersect.curve_class_p1, surface.surf_of_revolution_p3), CreateIsoParametricCurve (surface.surface_point_solve_p1, surface.surface_cache_p1), IsSingularity (intersect.surface_intersector_p3), LocalPointSolve and DropPoint through SurfaceEvaluate (nurbs.b_spline_curve_n_lib, curve.curve_p2), the STEP-surface local solve of SmSurfOfRevolution::ConvertUVFromNURBSToSTEP (surface.surf_of_revolution_p1). Still UNPORTED(surface.surface_p5): the SmCrvOnSurf branch of curve_p6. 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 Wired callers (PR #50 review): IsSingularity (intersect.surface_intersector_p4, topology.vertexuse), LocalPointSolve (topology.vertexuse, surface.surface_point_solve_p2), the general 3D branch of SmTol::MapTo2d (DropPoint + DropVectors, surface.surface_p1); SmFilletCustomSolver stays Unported (SmOffsetSurface is not a Surface kind: retagged surface.offset_surface). PR #125: drop_point_with_kernel supplies the caller Kernel to fast/global solves for query.api_queries; the existing drop_point signature retains its default-kernel behavior. Revalidated 3046 cases: 2477 bit-identical, 0 failed, 569 deferred; perturb 2477/2477. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 3046 cases, 3025 pass, 21 deferred (surface.surface_p8 21), 0 failed, max_rel_err 0. drop_point now takes the caller's Kernel itself (PR #106 threads it through every caller), so PR #125's drop_point_with_kernel is folded into it. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 3046 cases, 3046 pass, 0 deferred, 0 failed, max_rel_err 0; green."
notes = "main CI e33985411 (2026-10-23): PASS surface.surface_p5 cases=3058 passed=3058 failed=0 deferred=0. UPDATE (PR #52, after merging surface_p4/#49 and surface_p5/#50): the five UNPORTED(surface.surface_p3) stubs are wired (GetSingularities, SmFindPSNormalENFO solve, UV-guess LocalSurfaceSurfaceIntersect, CoverCoincidentSurface, EvaluateNormalSection); difftest 3046 cases, 2477 pass bit-identical, 0 failed, 569 deferred (surface.surface_point_solve_p3 528, curve.iso_curve 41); --perturb SENSITIVE 2477/2477. Kernel::default() remains in the IdenticalSolutions overrides and the image-space LocalSurfaceSurfaceIntersect (no kernel threaded there). PARTIAL: difftest 3046 cases (46 fixture: Surface.sms drop-point cases of the upstream closest-point test plus singularity and iso-curve cases; 3000 generated), 1785 pass bit-identical, 1261 deferred (surface.surface_point_solve_p3 512 = LocalPointSolve_1 and the point solves of sm_SpLocalSolve/DropPoint, surface.surface_p3 728 = GetSingularities, SmFindPSNormalENFO::Evaluate and EvaluateNormalSection, curve.iso_curve 21 = SmIsoCurve over non-B-spline surfaces and planes; the 9 cases that waited on surface.surface_p6 now defer to the point solves); a 60000-case run is clean; --perturb SENSITIVE 1785/1785. Covered ops (the generated cases include SmCurve::SurfaceMaxDistanceBetween of line segments and curves over planes, which drives the DropPoint wiring of curve.curve_p2, and plane drops of points above the interior): IsSingularity (poles, pinched corners, the SmPlane override), EvaluateNormalAtSingularity, CreateIsoParametricCurve (B-spline and plane overrides; the base body only runs for curve-bounded surfaces, whose SmIsoCurve needs EvaluateSimple, surface.surface_p1, so it is deferred), LocalPointSolve_0 INTERSECT, DropPoint via DropPointFast, sm_FilterSolution and sm_SpLocalSolve (verbatim C++ copies in the shim; the latter takes the surface sm_GetSurfaceToEvaluate would return), the four IdenticalSolutions overrides. m_bUseNewPointSolvers is TRUE upstream, so LocalPointSolve (LocalPointSolve_1, surface.surface_point_solve_p3) only runs LocalPointSolve_0 for MAXIMIZE, whose Newton solve is SmFindPSNormalENFO (surface.surface_p1/p3). SmCSGlobalSolver and SmCSIGlobalSolver have no struct yet: their IdenticalSolutions are free functions (cs_identical_solutions, csi_identical_solutions). CoverOtherCoincidentSurface has upstream's full signature and fall-through; it waits on CoverCoincidentSurface (surface.surface_p3). Back-edges wired: IsSingularity (nurbs b_spline_surface p1, b_spline_surface_n_lib p1, surface_cache p1, intersect.surface_intersector_p2), LocalPointSolve (nurbs b_spline_surface p1, intersect.surface_intersector_p1/p2), EvaluateNormalAtSingularity (curve_bounded_surface), DropPoint (intersect.surface_intersector_p1, surface.plane_p1), SmSPGlobalSolver/SmLSIGlobalSolver::IdenticalSolutions (p7, p2), SmCSIGlobalSolver::IdenticalSolutions, sm_FilterSolution and LocalPointSolve (surface.surface_p9), LocalPointSolve (intersect.curve_class_p1, surface.surf_of_revolution_p3), CreateIsoParametricCurve (surface.surface_point_solve_p1, surface.surface_cache_p1), IsSingularity (intersect.surface_intersector_p3), LocalPointSolve and DropPoint through SurfaceEvaluate (nurbs.b_spline_curve_n_lib, curve.curve_p2), the STEP-surface local solve of SmSurfOfRevolution::ConvertUVFromNURBSToSTEP (surface.surf_of_revolution_p1). Still UNPORTED(surface.surface_p5): the SmCrvOnSurf branch of curve_p6. 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 Wired callers (PR #50 review): IsSingularity (intersect.surface_intersector_p4, topology.vertexuse), LocalPointSolve (topology.vertexuse, surface.surface_point_solve_p2), the general 3D branch of SmTol::MapTo2d (DropPoint + DropVectors, surface.surface_p1); SmFilletCustomSolver stays Unported (SmOffsetSurface is not a Surface kind: retagged surface.offset_surface). PR #125: drop_point_with_kernel supplies the caller Kernel to fast/global solves for query.api_queries; the existing drop_point signature retains its default-kernel behavior. Revalidated 3046 cases: 2477 bit-identical, 0 failed, 569 deferred; perturb 2477/2477. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 3046 cases, 3025 pass, 21 deferred (surface.surface_p8 21), 0 failed, max_rel_err 0. drop_point now takes the caller's Kernel itself (PR #106 threads it through every caller), so PR #125's drop_point_with_kernel is folded into it. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 3046 cases, 3046 pass, 0 deferred, 0 failed, max_rel_err 0; green."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL: difftest 2099 cases (99 fixture: CalculateContinuities and CreateNaturalUVTrimCurves on Surface.sms / DropCurveSurface.sms / offset_nurb.sms, planes and cones/cylinders of revolution (also true cones with their apex on the axis), curve-bounded surfaces; IdenticalSolutions on plane pairs; sm_SCLocalSolve boundary curve solves; GetSampleValues input checks; disjoint coincidence boxes; point range solutions + 2000 generated over B-spline (poles, creases, herringbone kinks, rational, tiny/huge scales), plane, revolution and curve-bounded surfaces, B-spline and SmLine curves), 1834 pass bit-identical (max_rel_err 0), 265 deferred after merging surface_p4 and surface_p5 (surface.surface_p3 124, surface.surface_point_solve_p3 141; formerly surface_p4/surface_p5 stubs: DropPoint, LocalPointSolve, GlobalPointSolve, IsSingularity, SmCSIntersectENFO::Evaluate, sm_SpLocalSolve, LocalCurveSolve's SmCSNormalizeENFO); --perturb SENSITIVE; back-edges wired: LocalCurveIntersect (surface.surface_p9), SmSSGlobalSolver::IdenticalSolutions (surface.surface_p7), CreateNaturalUVTrimCurves (nurbs.b_spline_surface_p2, surface.plane_p1), CalculateContinuities (surface.surface_cache_p3, curve.iso_curve: now green); intersect.surface_tracer's DoTrace now runs on the built cache; upstream UB-100 (GetSampleValues NULL tangent reference) refused by the shim. 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 Re-run (PR #52, after merging surface_p4/#49 and surface_p5/#50): 2099 cases, 1939 pass, 160 deferred (surface.surface_point_solve_p3 141, curve.iso_curve 19); the shim now runs a verbatim sm_SpLocalSolve inside sm_SCLocalSolve (was a -2 stop); --perturb SENSITIVE 1939/1939. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 2099 cases, 2098 pass, 1 deferred (surface.surface_p8 1), 0 failed, max_rel_err 0. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 2099 cases, 2099 pass, 0 deferred, 0 failed, max_rel_err 0; green."
notes = "main CI e33985411 (2026-10-23): PASS surface.surface_p6 cases=2103 passed=2103 failed=0 deferred=0. PARTIAL: difftest 2099 cases (99 fixture: CalculateContinuities and CreateNaturalUVTrimCurves on Surface.sms / DropCurveSurface.sms / offset_nurb.sms, planes and cones/cylinders of revolution (also true cones with their apex on the axis), curve-bounded surfaces; IdenticalSolutions on plane pairs; sm_SCLocalSolve boundary curve solves; GetSampleValues input checks; disjoint coincidence boxes; point range solutions + 2000 generated over B-spline (poles, creases, herringbone kinks, rational, tiny/huge scales), plane, revolution and curve-bounded surfaces, B-spline and SmLine curves), 1834 pass bit-identical (max_rel_err 0), 265 deferred after merging surface_p4 and surface_p5 (surface.surface_p3 124, surface.surface_point_solve_p3 141; formerly surface_p4/surface_p5 stubs: DropPoint, LocalPointSolve, GlobalPointSolve, IsSingularity, SmCSIntersectENFO::Evaluate, sm_SpLocalSolve, LocalCurveSolve's SmCSNormalizeENFO); --perturb SENSITIVE; back-edges wired: LocalCurveIntersect (surface.surface_p9), SmSSGlobalSolver::IdenticalSolutions (surface.surface_p7), CreateNaturalUVTrimCurves (nurbs.b_spline_surface_p2, surface.plane_p1), CalculateContinuities (surface.surface_cache_p3, curve.iso_curve: now green); intersect.surface_tracer's DoTrace now runs on the built cache; upstream UB-100 (GetSampleValues NULL tangent reference) refused by the shim. 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 Re-run (PR #52, after merging surface_p4/#49 and surface_p5/#50): 2099 cases, 1939 pass, 160 deferred (surface.surface_point_solve_p3 141, curve.iso_curve 19); the shim now runs a verbatim sm_SpLocalSolve inside sm_SCLocalSolve (was a -2 stop); --perturb SENSITIVE 1939/1939. Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 2099 cases, 2098 pass, 1 deferred (surface.surface_p8 1), 0 failed, max_rel_err 0. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 2099 cases, 2099 pass, 0 deferred, 0 failed, max_rel_err 0; green."
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
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; PARTIAL (PR #66): difftest 1320 cases (180 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; 240 rev_gen cases on real SmSurfOfRevolution surfaces, some STEP-wrapped; all 15 ops: FindRoughGuess, FindPolygonGuess, RefineGuess, RefinePatchByGrid, RefineGuessByGrid, CheckSeams, Solve, AdjustStep, ErrorNorm/IsSingular, Converged, PushingBoundary/ConvergedOnBoundary, SnapToBoundaries, Step, LineSearch, LineSearchBracketted), 1230 pass bit-identical, 90 deferred (surface.surface_p4 63: SmSurface::IsOnSeam, SmSurfaceEval::Normal; surface.surface_p5 27: SmSurface::LocalPointSolve, so every Solve with a rough guess); SmSurface::InvertPointNearSingularity stubbed UNPORTED(surface.surface_p8); --perturb SENSITIVE Re-run (PR #52, after merging surface_p4/#49 and surface_p5/#50): 1320 cases, 1283 pass, 37 deferred (curve.iso_curve 24, surface.surface_point_solve_p3 13). Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 1345 cases, 1341 pass, 4 deferred (surface.surface_p8 4), 0 failed, max_rel_err 0. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 1345 cases, 1345 pass, 0 deferred, 0 failed, max_rel_err 0; green."
notes = "main CI e33985411 (2026-10-23): PASS surface.surface_point_solve_p2 cases=1353 passed=1353 failed=0 deferred=0. 19 fns; largest: SmSurfPtGlobalSolver::FindPolygonGuess, SmSurfPtGlobalSolver::Solve, SmSurfPtGlobalSolver::RefineGuess, SmSurfPtSolveStepper::Step; unit-SCC #22 (220 units); 317 upstream test entry points reach this unit; PARTIAL (PR #66): difftest 1320 cases (180 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; 240 rev_gen cases on real SmSurfOfRevolution surfaces, some STEP-wrapped; all 15 ops: FindRoughGuess, FindPolygonGuess, RefineGuess, RefinePatchByGrid, RefineGuessByGrid, CheckSeams, Solve, AdjustStep, ErrorNorm/IsSingular, Converged, PushingBoundary/ConvergedOnBoundary, SnapToBoundaries, Step, LineSearch, LineSearchBracketted), 1230 pass bit-identical, 90 deferred (surface.surface_p4 63: SmSurface::IsOnSeam, SmSurfaceEval::Normal; surface.surface_p5 27: SmSurface::LocalPointSolve, so every Solve with a rough guess); SmSurface::InvertPointNearSingularity stubbed UNPORTED(surface.surface_p8); --perturb SENSITIVE Re-run (PR #52, after merging surface_p4/#49 and surface_p5/#50): 1320 cases, 1283 pass, 37 deferred (curve.iso_curve 24, surface.surface_point_solve_p3 13). Re-run after merging PR #106 (surface.surface_point_solve_p3 wired, 2026-10-15): 1345 cases, 1341 pass, 4 deferred (surface.surface_p8 4), 0 failed, max_rel_err 0. Re-run after wiring PR #118 (surface.surface_p8 and its back-edges, GlobalPointSolve_0 included): 1345 cases, 1345 pass, 0 deferred, 0 failed, max_rel_err 0; green."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
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)"
notes = "main CI e33985411 (2026-10-23): PASS surface.torus cases=596 passed=596 failed=0 deferred=0. 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)"
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "green"
claimed_by = ""
claimed_at = ""
notes = "UPDATE after PR #437 (Kernel through Curve::knots, CrvInVolume GetKnots wired): difftest 11220 cases, all pass, 0 deferred (the 162 intersect.curve_class_p4 deferrals are gone); counts below are from before. difftest partial: 11220 cases (9220 fixtures incl. 5014 bend and 2290 unbend cases + 2000 generated), 10922 pass, 298 deferred (intersect.curve_class_p4 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 Re-run (PR #118, GlobalCurveIntersect wired; HasPlaneCrossings ignores its status): 11220 cases, 11058 pass, 162 deferred (intersect.curve_class_p4), 0 failed."
notes = "main CI e33985411 (2026-10-23): PASS surface.volume_p2 cases=11220 passed=11220 failed=0 deferred=0. UPDATE after PR #437 (Kernel through Curve::knots, CrvInVolume GetKnots wired): difftest 11220 cases, all pass, 0 deferred (the 162 intersect.curve_class_p4 deferrals are gone); counts below are from before. difftest partial: 11220 cases (9220 fixtures incl. 5014 bend and 2290 unbend cases + 2000 generated), 10922 pass, 298 deferred (intersect.curve_class_p4 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 Re-run (PR #118, GlobalCurveIntersect wired; HasPlaneCrossings ignores its status): 11220 cases, 11058 pass, 162 deferred (intersect.curve_class_p4), 0 failed."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmCurveSweep", "SM_API_test:TestSmPipeSweep", "SM_API_
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "partial (PR #110): difftest cases=573 passed=306 deferred=267 (blocked_by primitive.primitive_creation_p2(80), primitive.primitive_creation_p3(187): every entry point validates and copies its inputs as upstream, then stubs the SmPrimitiveCreation sweep it wraps); compared: NULL curves, curves without Copy (SM_ERR), empty inputs, missing path, non-positive pipe radius, cap selector range; FFI fences off UB-111, UB-112, UB-113, UB-114, HANG-13; 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 UPDATE after topology.brep_p3 (PR #204): the SmBrep::SmBrep stubs are wired to topology::brep::p3::new_brep (entry points take k: &mut Kernel; the constructor writes the context size estimate), which stops at SmRegion::SetIsVoid (topology.shell): 573 cases, 306 pass, 0 failed, 267 deferred (topology.shell 256, primitive.primitive_creation_p2 11). UPDATE (PR #204, after topology.shell was wired into topology.brep_p3): new_brep completes (SetIsVoid), so the 256 topology.shell deferrals now stop at the SmPrimitiveCreation sweep each entry point wraps: 573 cases, 306 pass, 0 failed, 267 deferred (primitive.primitive_creation_p2 80, primitive.primitive_creation_p3 187), case-by-case only the deferral target changed. partial (PR #110): difftest cases=573 passed=306 deferred=267 (blocked_by primitive.primitive_creation_p2(80), topology.brep_p3(187): every entry point validates and copies its inputs as upstream; p3 sweep calls await the earlier SmBrep constructor and a concrete PrimitiveAccess adapter (PR #233)); UPDATE 2026-10-23 (branch claude/edge-handles): the 5 curve.curve_p2 GetNaturalInterval deferrals resolve (curve-solver ParameterDomains): PARTIAL sweep.api_brep cases=573 passed=503 failed=0 deferred=70 max_rel_err=0e0 with_values=503 no_values=0 vacuous=0 blocked_by=boolean.merge_p2(8),boolean.topology_intersector_p2(2),query.face_p2(15),surface.trim_srf_cache(40),topology.brep_p3(1),topology.edgeuse_p3(4)."
notes = "main CI e33985411 (2026-10-23): PARTIAL sweep.api_brep cases=573 passed=514 failed=0 deferred=59 blocked_by=boolean.merge_p2(8),surface.trim_srf_cache(45),topology.edgeuse_p3(6). partial (PR #110): difftest cases=573 passed=306 deferred=267 (blocked_by primitive.primitive_creation_p2(80), primitive.primitive_creation_p3(187): every entry point validates and copies its inputs as upstream, then stubs the SmPrimitiveCreation sweep it wraps); compared: NULL curves, curves without Copy (SM_ERR), empty inputs, missing path, non-positive pipe radius, cap selector range; FFI fences off UB-111, UB-112, UB-113, UB-114, HANG-13; 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 UPDATE after topology.brep_p3 (PR #204): the SmBrep::SmBrep stubs are wired to topology::brep::p3::new_brep (entry points take k: &mut Kernel; the constructor writes the context size estimate), which stops at SmRegion::SetIsVoid (topology.shell): 573 cases, 306 pass, 0 failed, 267 deferred (topology.shell 256, primitive.primitive_creation_p2 11). UPDATE (PR #204, after topology.shell was wired into topology.brep_p3): new_brep completes (SetIsVoid), so the 256 topology.shell deferrals now stop at the SmPrimitiveCreation sweep each entry point wraps: 573 cases, 306 pass, 0 failed, 267 deferred (primitive.primitive_creation_p2 80, primitive.primitive_creation_p3 187), case-by-case only the deferral target changed. partial (PR #110): difftest cases=573 passed=306 deferred=267 (blocked_by primitive.primitive_creation_p2(80), topology.brep_p3(187): every entry point validates and copies its inputs as upstream; p3 sweep calls await the earlier SmBrep constructor and a concrete PrimitiveAccess adapter (PR #233)); UPDATE 2026-10-23 (branch claude/edge-handles): the 5 curve.curve_p2 GetNaturalInterval deferrals resolve (curve-solver ParameterDomains): PARTIAL sweep.api_brep cases=573 passed=503 failed=0 deferred=70 max_rel_err=0e0 with_values=503 no_values=0 vacuous=0 blocked_by=boolean.merge_p2(8),boolean.topology_intersector_p2(2),query.face_p2(15),surface.trim_srf_cache(40),topology.brep_p3(1),topology.edgeuse_p3(4)."
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmCreateRuledSurface", "SM_API_test:TestSmCreateSkinSu
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 UPDATE after topology.brep_p3 (PR #204): SmBrep::SmBrep wired to topology::brep::p3::new_brep (create_skin_primitive/create_skin_from_faces take k: &mut Kernel, create_surface_revolution gained the kernel, upstream API context); 882 cases, 831 pass, 0 failed, 51 deferred (topology.shell 51). UPDATE (PR #204, after topology.shell was wired into topology.brep_p3): new_brep completes, so the 51 topology.shell deferrals now stop at SmPrimitiveCreation: 882 cases, 831 pass, 0 failed, 51 deferred (primitive.primitive_creation_p2 11, primitive.primitive_creation_p3 40), case-by-case only the deferral target changed. partial (PR #37): difftest cases=882 passed=831 deferred=51 (blocked_by primitive.primitive_creation_p2(11), topology.brep_p3(40): SmApiCreateSkinPrimitive / SmApiCreateSkinFromFaces / SmApiCreateSurfaceRevolution validate and copy inputs; p3 construction calls await the earlier SmBrep constructor and a concrete PrimitiveAccess adapter (PR #233)); UPDATE 2026-10-23 (claude/face-p1-hooks): the query.face_p1 (SmFace::Point3DClassify) deferral of upstream.json#14 now runs past it and defers at boolean.topology_intersector_p2; cases=882 passed=862 failed=0 deferred=20 (boolean.topology_intersector_p2 17, surface.trim_srf_cache 3) (Mac Studio run; Linux CI is the gate).; Historical E validation before integration with query.face_p1 hooks: Primitive p3 cleanup/owner bridge follow-up (main 54f5865ee): the API now extracts and detaches the actual first surface using PrimitiveModel's notify_ref owner identities, matching native GetSurfaces/SetOwner(NULL). The runner no longer rejects a genuine successful revolution: retains original status/has and compares owner-clear state, natural UV domain and 25 virtual point evaluations/statuses. 882 cases: 879 exact comparable passes, 0 failures, 3 unchanged downstream deferrals (2 face-owned TrimSrfCache, 1 Point3DClassify), down from 20; all 862 old passing case records and native digests unchanged. All 879 comparable native/Rust output digests agree exactly. Original guards, tolerances and negative cases remain unchanged."
notes = "main CI e33985411 (2026-10-23): PARTIAL sweep.api_surfaces cases=882 passed=879 failed=0 deferred=3 blocked_by=surface.trim_srf_cache(3). 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 UPDATE after topology.brep_p3 (PR #204): SmBrep::SmBrep wired to topology::brep::p3::new_brep (create_skin_primitive/create_skin_from_faces take k: &mut Kernel, create_surface_revolution gained the kernel, upstream API context); 882 cases, 831 pass, 0 failed, 51 deferred (topology.shell 51). UPDATE (PR #204, after topology.shell was wired into topology.brep_p3): new_brep completes, so the 51 topology.shell deferrals now stop at SmPrimitiveCreation: 882 cases, 831 pass, 0 failed, 51 deferred (primitive.primitive_creation_p2 11, primitive.primitive_creation_p3 40), case-by-case only the deferral target changed. partial (PR #37): difftest cases=882 passed=831 deferred=51 (blocked_by primitive.primitive_creation_p2(11), topology.brep_p3(40): SmApiCreateSkinPrimitive / SmApiCreateSkinFromFaces / SmApiCreateSurfaceRevolution validate and copy inputs; p3 construction calls await the earlier SmBrep constructor and a concrete PrimitiveAccess adapter (PR #233)); UPDATE 2026-10-23 (claude/face-p1-hooks): the query.face_p1 (SmFace::Point3DClassify) deferral of upstream.json#14 now runs past it and defers at boolean.topology_intersector_p2; cases=882 passed=862 failed=0 deferred=20 (boolean.topology_intersector_p2 17, surface.trim_srf_cache 3) (Mac Studio run; Linux CI is the gate).; Historical E validation before integration with query.face_p1 hooks: Primitive p3 cleanup/owner bridge follow-up (main 54f5865ee): the API now extracts and detaches the actual first surface using PrimitiveModel's notify_ref owner identities, matching native GetSurfaces/SetOwner(NULL). The runner no longer rejects a genuine successful revolution: retains original status/has and compares owner-clear state, natural UV domain and 25 virtual point evaluations/statuses. 882 cases: 879 exact comparable passes, 0 failures, 3 unchanged downstream deferrals (2 face-owned TrimSrfCache, 1 Point3DClassify), down from 20; all 862 old passing case records and native digests unchanged. All 879 comparable native/Rust output digests agree exactly. Original guards, tolerances and negative cases remain unchanged."
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "green"
claimed_by = "Codex (damgru; PR #115)"
claimed_at = "2026-10-15"
notes = "PARTIAL (PR #115): 663 difftest cases, 662 bit-identical passes, 0 failures, 1 deferred to query.brep (SmBrep::CalculateBoundingBox); no absolute floors. Polygon BuildTrees, constructor/accessors/type checks and ReSizeTrees with real exact vertices/line edges are compared, including shared polygon boundaries, tree split thresholds, empty/degenerate inputs and scales 1e-12..1e50. Exact BuildTrees remains deferred at its first callee; exact face sizing also awaits query.face_p1/topology.face_p4. Cache objects use typed ids and caller-supplied owner keys. All incoming UNPORTED(topology.brep_cache) sites wired to the cache factory/accessors and solver adapter; geom.a_object retains 168 deferrals (131 now query.brep, 37 topology.shell). 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 Re-run after topology.brep_p1 (PR #145) wired SmBrep::GetVertices/GetEdges/GetFaces: 663 cases, 662 pass, 0 failed, 1 deferred (query.brep 1), max_rel_err 0. Re-run in PR #238 (face boxes wired to query::face::p1): 663 cases, 662 pass, 1 deferred (query.brep), 0 failed. GREEN after query.brep (PR #329): the B-rep box is ported, so the cache builds; 0 deferred."
notes = "main CI e33985411 (2026-10-23): PASS topology.brep_cache cases=663 passed=663 failed=0 deferred=0. PARTIAL (PR #115): 663 difftest cases, 662 bit-identical passes, 0 failures, 1 deferred to query.brep (SmBrep::CalculateBoundingBox); no absolute floors. Polygon BuildTrees, constructor/accessors/type checks and ReSizeTrees with real exact vertices/line edges are compared, including shared polygon boundaries, tree split thresholds, empty/degenerate inputs and scales 1e-12..1e50. Exact BuildTrees remains deferred at its first callee; exact face sizing also awaits query.face_p1/topology.face_p4. Cache objects use typed ids and caller-supplied owner keys. All incoming UNPORTED(topology.brep_cache) sites wired to the cache factory/accessors and solver adapter; geom.a_object retains 168 deferrals (131 now query.brep, 37 topology.shell). 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 Re-run after topology.brep_p1 (PR #145) wired SmBrep::GetVertices/GetEdges/GetFaces: 663 cases, 662 pass, 0 failed, 1 deferred (query.brep 1), max_rel_err 0. Re-run in PR #238 (face boxes wired to query::face::p1): 663 cases, 662 pass, 1 deferred (query.brep), 0 failed. GREEN after query.brep (PR #329): the B-rep box is ported, so the cache builds; 0 deferred."
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_single_periodic_vertexuse", "SM_API_test:TestSmAdvan
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "#76 kernel-aware Surface dispatch (PR #313, 2026-10-21): 1404 cases, 922 pass, 0 failed, 482 deferred (surface.sphere 352, topology.face_p2 101, surface.surf_of_extrusion_p2 10, topology.face_p4 9, geom.tol 5, query.brep 5), max_rel_err 0; before 851 pass / 553 deferred. partial: cases=1404 passed=839 failed=0 deferred=565 max_rel_err=0 (surface.cone_p2 424: SmCone::IsNurbSurfaceCone in CopyAndAddAnalytics; topology.face_p2 63: SmFace::GetTolerance inside HealBrep; surface.cone_p1 41 / surface.surf_of_extrusion_p2 10: the Rust read of the file stops at the Surface::read_from_db dispatch gap (the cone_p1 label is a stale stub of surface/surface/p2.rs, not this unit's); topology.brep_p2 19: IsManifoldSolid, and SmBrep::Notify reached through the face use TestClosureSplitRegion of topology.brep_p6; topology.brep_p5 8: RemoveFaces / FindAndSetInfiniteRegion); --perturb SENSITIVE 839/839. Review fixes (PR #130): a non-SmBSplineCurve UV trim copy is not stored on the edge use (SM_CAST_PTR); crafted fixtures cover wire-edge/vertex shells, vertex loops, the analytic edge-curve end check and composite/B-spline UV curves (review_cases.json, 128 cases); adv_cases.json (192 review cases: manifold flags 3/-1, IGES empty shells, shared surfaces and curves with and without borrowed geometry, zone tolerance clamp limits, healer versions, pole/vertex edge uses mid-loop, relinked and overlapping loops, closure after relinking, a dropped UV curve, remove-all with editing disabled). Second review (after main merged topology.brep_p1 #145): dropped the duplicate co-ported m_bEditingEnabled (main's Brep field), new_with_infinite_region sets region_list_head (PreInsert); wired the topology.brep_p1 back-edges (sm_AddAttributes with TopologyEnv::all_attributes = rAllAttributes, HealBrep, GetRegions, GetFaces, GetWireEdges, CreateParallelProjectionCurves, sm_FindSideOfCurve) and topology.brep_p7's two UNPORTED(topology.brep_p10) sites (ReadFromFile, GlueEdgesGeneral). ProjectAndTrim and RemoveAllTopology (editing enabled) still defer at later units. 4 fns; cycle back-edges stubbed: topology.brep_p2 (IsManifoldSolid, MergeCurvesOnSurface, GetShellVertices, sm_GetPointFromSol), topology.brep_p4 (DeleteEdge, DeleteVertex), topology.brep_p5 (RemoveFaces, FindAndSetInfiniteRegion), topology.face_p4 (GetVertices, GetEdges), query.brep (CalculateBoundingBox). Harness-level deferral labels topology.brep_p10 (inexact .smb imports) remain in the topology.vertex, topology.edgeuse_p1/p2 and topology.loopuse runners (see findings) Batch integration (batch/clean-2026-10-19): RemoveFaces and FindAndSetInfiniteRegion() wired to topology::brep::p5 (remove_faces with the B-rep editing flag; find_and_set_infinite_region with the upstream defaults, which defers inside part 5). UPDATE after topology.brep_p2 (PR #149 follow-up): IsManifoldSolid (pBrepData->m_bManifold = IsManifoldSolid()), sm_GetPointFromSol and GetShellVertices are wired to topology::brep::p2; MergeCurvesOnSurface calls topology::brep::p2::merge_curves_on_surface (SmBrep.cpp:25074, header defaults) through an uninhabited MergeCurvesObjects world over the B-rep cache whose constructor is the UNPORTED(query.brep) stub: query.brep (todo) is the real blocker, as for topology.shell's shell_ray_sector (overseer ruling); test_closure_split_region takes the caller's NotifyEnv. 1404 cases, 851 pass, 0 fail, 553 deferred: 12 IsManifoldSolid deferrals now pass (201-16358 values each), 2 defer on topology.face_p2 SmFace::GetTolerance. Unit test healing_runs_and_manifold_is_computed (renamed) checks the UNSURE flag is computed (0 for a sheet). Re-run in PR #149 (review 5578349117 round, merged with main through fb58ea76; topology.brep_p2's UNPORTED stubs wired): 1404 cases, 851 pass, 0 fail, 553 deferred; 12 former topology.brep_p2 deferrals (SmBrep::IsManifoldSolid, Notify) pass (201-897 values), 2 defer on topology.face_p2 SmFace::GetTolerance, 5 Notify deferrals relabel to query.brep."
notes = "main CI e33985411 (2026-10-23): PARTIAL topology.brep_p10 cases=1404 passed=1154 failed=0 deferred=233 rejected=17 blocked_by=intersect.curve_class_p4(150),query.face_p2(1),topology.brep_p1(3),topology.face_p2(7),topology.face_p4(72). #76 kernel-aware Surface dispatch (PR #313, 2026-10-21): 1404 cases, 922 pass, 0 failed, 482 deferred (surface.sphere 352, topology.face_p2 101, surface.surf_of_extrusion_p2 10, topology.face_p4 9, geom.tol 5, query.brep 5), max_rel_err 0; before 851 pass / 553 deferred. partial: cases=1404 passed=839 failed=0 deferred=565 max_rel_err=0 (surface.cone_p2 424: SmCone::IsNurbSurfaceCone in CopyAndAddAnalytics; topology.face_p2 63: SmFace::GetTolerance inside HealBrep; surface.cone_p1 41 / surface.surf_of_extrusion_p2 10: the Rust read of the file stops at the Surface::read_from_db dispatch gap (the cone_p1 label is a stale stub of surface/surface/p2.rs, not this unit's); topology.brep_p2 19: IsManifoldSolid, and SmBrep::Notify reached through the face use TestClosureSplitRegion of topology.brep_p6; topology.brep_p5 8: RemoveFaces / FindAndSetInfiniteRegion); --perturb SENSITIVE 839/839. Review fixes (PR #130): a non-SmBSplineCurve UV trim copy is not stored on the edge use (SM_CAST_PTR); crafted fixtures cover wire-edge/vertex shells, vertex loops, the analytic edge-curve end check and composite/B-spline UV curves (review_cases.json, 128 cases); adv_cases.json (192 review cases: manifold flags 3/-1, IGES empty shells, shared surfaces and curves with and without borrowed geometry, zone tolerance clamp limits, healer versions, pole/vertex edge uses mid-loop, relinked and overlapping loops, closure after relinking, a dropped UV curve, remove-all with editing disabled). Second review (after main merged topology.brep_p1 #145): dropped the duplicate co-ported m_bEditingEnabled (main's Brep field), new_with_infinite_region sets region_list_head (PreInsert); wired the topology.brep_p1 back-edges (sm_AddAttributes with TopologyEnv::all_attributes = rAllAttributes, HealBrep, GetRegions, GetFaces, GetWireEdges, CreateParallelProjectionCurves, sm_FindSideOfCurve) and topology.brep_p7's two UNPORTED(topology.brep_p10) sites (ReadFromFile, GlueEdgesGeneral). ProjectAndTrim and RemoveAllTopology (editing enabled) still defer at later units. 4 fns; cycle back-edges stubbed: topology.brep_p2 (IsManifoldSolid, MergeCurvesOnSurface, GetShellVertices, sm_GetPointFromSol), topology.brep_p4 (DeleteEdge, DeleteVertex), topology.brep_p5 (RemoveFaces, FindAndSetInfiniteRegion), topology.face_p4 (GetVertices, GetEdges), query.brep (CalculateBoundingBox). Harness-level deferral labels topology.brep_p10 (inexact .smb imports) remain in the topology.vertex, topology.edgeuse_p1/p2 and topology.loopuse runners (see findings) Batch integration (batch/clean-2026-10-19): RemoveFaces and FindAndSetInfiniteRegion() wired to topology::brep::p5 (remove_faces with the B-rep editing flag; find_and_set_infinite_region with the upstream defaults, which defers inside part 5). UPDATE after topology.brep_p2 (PR #149 follow-up): IsManifoldSolid (pBrepData->m_bManifold = IsManifoldSolid()), sm_GetPointFromSol and GetShellVertices are wired to topology::brep::p2; MergeCurvesOnSurface calls topology::brep::p2::merge_curves_on_surface (SmBrep.cpp:25074, header defaults) through an uninhabited MergeCurvesObjects world over the B-rep cache whose constructor is the UNPORTED(query.brep) stub: query.brep (todo) is the real blocker, as for topology.shell's shell_ray_sector (overseer ruling); test_closure_split_region takes the caller's NotifyEnv. 1404 cases, 851 pass, 0 fail, 553 deferred: 12 IsManifoldSolid deferrals now pass (201-16358 values each), 2 defer on topology.face_p2 SmFace::GetTolerance. Unit test healing_runs_and_manifold_is_computed (renamed) checks the UNSURE flag is computed (0 for a sheet). Re-run in PR #149 (review 5578349117 round, merged with main through fb58ea76; topology.brep_p2's UNPORTED stubs wired): 1404 cases, 851 pass, 0 fail, 553 deferred; 12 former topology.brep_p2 deferrals (SmBrep::IsManifoldSolid, Notify) pass (201-897 values), 2 defer on topology.face_p2 SmFace::GetTolerance, 5 Notify deferrals relabel to query.brep."
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_tsurf_cyl_creation_2d", "prog_test:my_test_tsurf_cyl
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL, MakeFaceTopology remainder (PR #363): SmBrep::MakeFaceTopology is ported in full, and the mislabelled UNPORTED(topology.face_p3) SetTolerance stop is gone. difftest 587 cases, 521 pass, 0 fail, 66 deferred (intersect.surface_drop_lib_p3 37: DropCurve in CreateUVTrimCurve(s) for trims and radial-sector recovery; topology.brep_p3 18; query.brep 9: CalculateBoundingBox; curve.crv_on_surf 2), max_rel_err 0, no absolute floors. Op 3 (fixtures make_face.json: 89 cases, 50 pass and 39 defer; plus generated cases) runs MakeFaceTopology sequences on kind-5 wire networks. It compares statuses, outputs, mark counters and the whole post-op graph (edge marks excluded, see findings). Downstream: brep_p7 238/78 (was 237/79), boolean.merge_p2 32/13 (was 30/15; MergeContext::SplitMut). With PR #72 merged locally, brep_p8: see the PR description. EARLIER: PARTIAL (PR #169, merged after dependency PR #154): 498 difftest cases, 450 passed, 0 failed, 48 deferred (topology.brep_p2 6: SmBrep::Notify; topology.brep_p1 23: SmBrep::GetInfiniteRegion inside CreateWireEdgeFromCurve, wired to topology.brep_p5 in PR #194, whose copy notifications follow behind a topology.brep_p2 key-routing barrier; topology.face_p3 19: SmFace::SetTolerance), max_rel_err 0, no absolute floors. Of the explicit op-0 cases, 369 return before acquiring a mark (separated mates or lamina); six tiny planes are edgeless and defer after closed traversal at Notify. 56 new open_box sheet cases reach ClosureTraversal and the open return: seeds 0/5 have no lamina edges and mates in the same shell. They compare actual nonzero context increments (MARK +4 per call without a caller lock), lock release, all faceuse marks and shell links over held locks and repeats. Other passing inputs are empty CopyEdges and null-surface MakeFaceTopology. MakeFaceTopology shim always has empty loops/edgeuses/loop-vertices and no explicit region: loop validation and existing-shell branches are not compared; every non-null surface defers at SetTolerance. No nonempty copy, successful face construction or completed split is certified; dependent mutation/classification/cleanup remains deferred. New shell/region identities and shell links use native -3, distinct from null -1. Wired heal.heal_data_p1 using RegionSplitAttempt: only ordinary native status may be ignored, preserving partial outputs; Unported and Rust representation errors propagate. Reused traverser HasLaminaEdge and the latest shell mark-lock API. Sensitivity detects 450/450 perturbations, with zero empty outputs. Four kernel and four native FFI regressions cover status/outputs and prove the open-sheet traversal advances marks. 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 UPDATE after topology.brep_p2 (PR #149): TestClosureSplitRegion's UNPORTED(topology.brep_p2) SmBrep::Notify is wired: the split API (test_closure_split_region / _attempt) takes the caller's NotifyEnv (signature only) and calls brep::p2::notify with PRE_EDIT and SPLIT_IN_BREP(old, old, new), statuses ignored (SmBrep.cpp:27954-5); the new region gets its default SmTopology record when it is made; the split then stops at UNPORTED(query.brep) SmBrep::CalculateBoundingBox. The runner passes a harness RegionNotifyState. Re-run: 498 cases, 450 pass, 0 fail, 48 deferred (topology.brep_p5 23, topology.face_p3 19, query.brep 6: the 6 former SmBrep::Notify deferrals, relabelled only), --perturb SENSITIVE 450/450. Re-run in PR #149 (review 5578349117 round, merged with main through fb58ea76; topology.brep_p2's UNPORTED stubs wired): 498 cases, 450 pass, 0 fail, 48 deferred; the CopyEdges Notify / SetTolerance sites are wired (the 6 SmBrep::Notify deferrals relabel to query.brep CalculateBoundingBox). UPDATE (PR #535): TestClosureSplitRegion remainder (SmBrep.cpp:27966-28583) ported; the OMITTED stop is gone. difftest 587 cases, 545 pass, 0 fail, 42 deferred (intersect.surface_drop_lib_p3 37, curve.crv_on_surf 2, topology.brep_p1 2, geom.tol 1), max_rel_err 0, no absolute floors. Ray fires read the geometry under the caller's key_of (brep::p2::caller_cache_key). Downstream: brep_p10 1075 pass, 312 deferred (+4 pass); the former split stops in fillet_geom_p4, merge_p2, brep_p7, brep_p8 and heal_data_p3 now defer at geom.tol GetZoneTol3d(const SmObject*), topology.face_p2 or DropCurve. See plan/findings.md."
notes = "main CI e33985411 (2026-10-23): PARTIAL topology.brep_p6 cases=595 passed=586 failed=0 deferred=9 blocked_by=topology.edgeuse_p3(9). PARTIAL, MakeFaceTopology remainder (PR #363): SmBrep::MakeFaceTopology is ported in full, and the mislabelled UNPORTED(topology.face_p3) SetTolerance stop is gone. difftest 587 cases, 521 pass, 0 fail, 66 deferred (intersect.surface_drop_lib_p3 37: DropCurve in CreateUVTrimCurve(s) for trims and radial-sector recovery; topology.brep_p3 18; query.brep 9: CalculateBoundingBox; curve.crv_on_surf 2), max_rel_err 0, no absolute floors. Op 3 (fixtures make_face.json: 89 cases, 50 pass and 39 defer; plus generated cases) runs MakeFaceTopology sequences on kind-5 wire networks. It compares statuses, outputs, mark counters and the whole post-op graph (edge marks excluded, see findings). Downstream: brep_p7 238/78 (was 237/79), boolean.merge_p2 32/13 (was 30/15; MergeContext::SplitMut). With PR #72 merged locally, brep_p8: see the PR description. EARLIER: PARTIAL (PR #169, merged after dependency PR #154): 498 difftest cases, 450 passed, 0 failed, 48 deferred (topology.brep_p2 6: SmBrep::Notify; topology.brep_p1 23: SmBrep::GetInfiniteRegion inside CreateWireEdgeFromCurve, wired to topology.brep_p5 in PR #194, whose copy notifications follow behind a topology.brep_p2 key-routing barrier; topology.face_p3 19: SmFace::SetTolerance), max_rel_err 0, no absolute floors. Of the explicit op-0 cases, 369 return before acquiring a mark (separated mates or lamina); six tiny planes are edgeless and defer after closed traversal at Notify. 56 new open_box sheet cases reach ClosureTraversal and the open return: seeds 0/5 have no lamina edges and mates in the same shell. They compare actual nonzero context increments (MARK +4 per call without a caller lock), lock release, all faceuse marks and shell links over held locks and repeats. Other passing inputs are empty CopyEdges and null-surface MakeFaceTopology. MakeFaceTopology shim always has empty loops/edgeuses/loop-vertices and no explicit region: loop validation and existing-shell branches are not compared; every non-null surface defers at SetTolerance. No nonempty copy, successful face construction or completed split is certified; dependent mutation/classification/cleanup remains deferred. New shell/region identities and shell links use native -3, distinct from null -1. Wired heal.heal_data_p1 using RegionSplitAttempt: only ordinary native status may be ignored, preserving partial outputs; Unported and Rust representation errors propagate. Reused traverser HasLaminaEdge and the latest shell mark-lock API. Sensitivity detects 450/450 perturbations, with zero empty outputs. Four kernel and four native FFI regressions cover status/outputs and prove the open-sheet traversal advances marks. 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 UPDATE after topology.brep_p2 (PR #149): TestClosureSplitRegion's UNPORTED(topology.brep_p2) SmBrep::Notify is wired: the split API (test_closure_split_region / _attempt) takes the caller's NotifyEnv (signature only) and calls brep::p2::notify with PRE_EDIT and SPLIT_IN_BREP(old, old, new), statuses ignored (SmBrep.cpp:27954-5); the new region gets its default SmTopology record when it is made; the split then stops at UNPORTED(query.brep) SmBrep::CalculateBoundingBox. The runner passes a harness RegionNotifyState. Re-run: 498 cases, 450 pass, 0 fail, 48 deferred (topology.brep_p5 23, topology.face_p3 19, query.brep 6: the 6 former SmBrep::Notify deferrals, relabelled only), --perturb SENSITIVE 450/450. Re-run in PR #149 (review 5578349117 round, merged with main through fb58ea76; topology.brep_p2's UNPORTED stubs wired): 498 cases, 450 pass, 0 fail, 48 deferred; the CopyEdges Notify / SetTolerance sites are wired (the 6 SmBrep::Notify deferrals relabel to query.brep CalculateBoundingBox). UPDATE (PR #535): TestClosureSplitRegion remainder (SmBrep.cpp:27966-28583) ported; the OMITTED stop is gone. difftest 587 cases, 545 pass, 0 fail, 42 deferred (intersect.surface_drop_lib_p3 37, curve.crv_on_surf 2, topology.brep_p1 2, geom.tol 1), max_rel_err 0, no absolute floors. Ray fires read the geometry under the caller's key_of (brep::p2::caller_cache_key). Downstream: brep_p10 1075 pass, 312 deferred (+4 pass); the former split stops in fillet_geom_p4, merge_p2, brep_p7, brep_p8 and heal_data_p3 now defer at geom.tol GetZoneTol3d(const SmObject*), topology.face_p2 or DropCurve. See plan/findings.md."
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["SM_API_test:TestSmCreatePlanarCircle", "SM_API_test:TestIntersectionOu
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "PARTIAL (PR #72, builds on #204 topology.brep_p3, merged in; see plan/findings.md): all 7 fns ported in topology::brep::p8 (CreateFaceInRegionFromSurface's dead new-algorithm branch omitted). difftest 339 cases (323 built-in: in_region/from_surface on planes and B-spline patches incl. tiny/huge/creased/closed/pinched, natural/sub/outside/sliver domains; faces_from_surface at 6 continuities; planar_face(s) with squares, holes, two outer loops, 3-level nesting, arcs, shuffled/cw/open/non-planar/empty/degenerate-line/gap sets at 2 tolerances; faces_with_curves; make_faces 3D/UV on smooth and creased surfaces with holes and loop points; 16 generated), 41 pass, 0 failed, 298 deferred (topology.face_p3 298: SmFace::SetTolerance, the stop point of the unported remainder of MakeFaceTopology, owned by topology.brep_p6; every face construction reaches it), max_rel_err 0, with_values 41 no_values 0; outputs are the status plus the whole B-rep after the op (graph + geometry); --perturb SENSITIVE 41/41; --fuzz 2000 FUZZ-PASS (rejected 474, malformed 822, ran 704, 0 differs/crashes/panics/timeouts). Wired back-edges: topology.trimming_tools, heal.heal_data_p3, boolean.merge_p3, offset.offset_executive_p1 (CreateFaceFromSurface), primitive.api_primitives (pyramid); also the stale curve.curve_p2/curve_p6 stubs of geom.tools. Remaining UNPORTED(topology.brep_p8): offset_executive CreatePlanarFaceWith3DCurves (continuation needs Boolean2D, primitive.primitive_creation_p1) and the runner-side face constructions of mass.integrator / surface.trim_srf_cache. Callees still stubbed: DeleteEdge/DeleteVertex (topology.brep_p4). 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 UPDATE 2026-10-23 (claude/face-p1-hooks): SmFace::Point3DClassify wired (curve_class p7 ClassifyFaceInterval, topology_solver p1, topology.brep_p9 loop transfer): the 2 query.face_p1 deferrals now pass; cases=339 passed=338 failed=0 deferred=1 (curve.curve_p2 1), max_rel_err 0 (Mac Studio run; Linux CI is the gate)."
notes = "main CI e33985411 (2026-10-23): PARTIAL topology.brep_p8 cases=339 passed=338 failed=0 deferred=1 blocked_by=topology.face_p2(1). PARTIAL (PR #72, builds on #204 topology.brep_p3, merged in; see plan/findings.md): all 7 fns ported in topology::brep::p8 (CreateFaceInRegionFromSurface's dead new-algorithm branch omitted). difftest 339 cases (323 built-in: in_region/from_surface on planes and B-spline patches incl. tiny/huge/creased/closed/pinched, natural/sub/outside/sliver domains; faces_from_surface at 6 continuities; planar_face(s) with squares, holes, two outer loops, 3-level nesting, arcs, shuffled/cw/open/non-planar/empty/degenerate-line/gap sets at 2 tolerances; faces_with_curves; make_faces 3D/UV on smooth and creased surfaces with holes and loop points; 16 generated), 41 pass, 0 failed, 298 deferred (topology.face_p3 298: SmFace::SetTolerance, the stop point of the unported remainder of MakeFaceTopology, owned by topology.brep_p6; every face construction reaches it), max_rel_err 0, with_values 41 no_values 0; outputs are the status plus the whole B-rep after the op (graph + geometry); --perturb SENSITIVE 41/41; --fuzz 2000 FUZZ-PASS (rejected 474, malformed 822, ran 704, 0 differs/crashes/panics/timeouts). Wired back-edges: topology.trimming_tools, heal.heal_data_p3, boolean.merge_p3, offset.offset_executive_p1 (CreateFaceFromSurface), primitive.api_primitives (pyramid); also the stale curve.curve_p2/curve_p6 stubs of geom.tools. Remaining UNPORTED(topology.brep_p8): offset_executive CreatePlanarFaceWith3DCurves (continuation needs Boolean2D, primitive.primitive_creation_p1) and the runner-side face constructions of mass.integrator / surface.trim_srf_cache. Callees still stubbed: DeleteEdge/DeleteVertex (topology.brep_p4). 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 UPDATE 2026-10-23 (claude/face-p1-hooks): SmFace::Point3DClassify wired (curve_class p7 ClassifyFaceInterval, topology_solver p1, topology.brep_p9 loop transfer): the 2 query.face_p1 deferrals now pass; cases=339 passed=338 failed=0 deferred=1 (curve.curve_p2 1), max_rel_err 0 (Mac Studio run; Linux CI is the gate)."
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_surface_closest_point", "prog_test:my_test_drop_poin
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "Cone TrimWithDomain (PR #670, 2026-10-23): the Cone arm of Surface::trim_with_domain runs the inherited SmSurfOfRevolution::TrimWithDomain with the cone ConvertUVFromNURBSToSTEP and iso curves (Cone::trim_with_domain); difftest 2312 cases, 2214 pass, 0 failed, 98 deferred (cpp-crash-guard:UB-137 98); the 12 surface.surface_p2 deferrals pass. G10 (PR #637, 2026-10-23): SetSurface's SmFace::Notify(SM_NO_CHANGE_GEOMETRY) wired (set_surface: empty face environment, null data; set_surface_notified: caller's environment with the surfaces' identities); Surface::split_at makes a missing extrusion NURB (GetOrCreateGwNurbPointer). difftest 2312 cases, 2202 pass, 0 failed, 110 deferred (cpp-crash-guard:UB-137 98, surface.surface_p2 12); all 209 topology.face_p3 deferrals pass. PARTIAL (PR #148): difftest 2312 cases (2260 built-in on the 15 pt_TestFiles B-reps (every op, UV trim curves as read and rebuilt; seam ops with 7 face-property variants on the periodic files) + 36 review crash reproducers + 16 generated), 807 pass bit-identical (max_rel_err 0), 0 failed, 0 both-errored (real passes 807), 1505 deferred (topology.face_p3 1100: SmFace::Notify of every edit, CreateUVTrimCurves; topology.face_p4 307: GetUpwardLoopuses/GetBrep/HasSeamProblem; cpp-crash-guard:UB-137 98: seam calls the shim keeps from upstream's SplitAtSeam crash, never comparable; the guard skips ~99.5% valid MoveSeam+split calls and must be replaced when face_p4 lands); --perturb SENSITIVE 807/807. NormalizedEvaluate/GetOrCreateUVTrimCurve wired to topology.edgeuse_p3 in PR #117 (288 deferred cases now pass). No passing case for UvDomain (with surface), Flip, SetSurface, LoopRoundTrip, RemoveUv, SwapUv, Shrink (all behind face_p3/face_p4); passes are early returns, error paths and guards. The shim normalises analytic geometry to B-splines, so MoveSeam's CopyAndAddAnalytics branch and SwapUV's conic mirrors are not compared. Seam ops take HasSeamProblem's classifications from the C++ shim (Probe op); MergeIntervals wired to intersect.curve_class_p5 (#150); IsCrossedByEdge/HasNearMisses wired to intersect.curve_class_p7 (#65). Back-edges wired: trimming_tools (FlipFaceOrientation, SplitAtSeam), edge, face_p2 points_in_face, mass.integrator (CreateOrientedTrimBoundary); not wirable yet: surface.surface_p3 RemoveUVTrimCurves of owner face (no B-rep there), proto_topology_p2 (ProtoBrep handle). Was: 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 CalculateUVDomainFromUVTrimCurves wired into boolean.topology_intersector_p1 (PR #146). [topology.face_p3 wired (PR #139): 2312 cases, 990 pass, 0 failed, 1322 deferred (topology.face_p4 1044, topology.face_p3 180 at the justified SetSurface CHANGE_GEOMETRY Notify stub, cpp-crash-guard UB-137 98)] UPDATE after topology.brep_p2 (PR #149): the UNPORTED(topology.brep_p2) SmBrep::ReplaceSurface stub of MoveSeam is wired to topology::brep::p2::replace_surface as SmFace.cpp:17602 (ReplaceSurface(this, pJoinedSurface, FALSE, NULL, FALSE): OldSurface::Delete, no modified list, no UV trim curves); still unreached (the preceding SmFace::GetBrep is topology.face_p4): re-run 2312 cases, 519 pass, 0 fail, 1793 deferred, unchanged. Re-run after merging #145 5b1b28ae (main through e1ae2640) into #149: 2312 cases, 807 pass, 0 fail, 1505 deferred (topology.face_p3 1100, topology.face_p4 307, cpp-crash-guard:UB-137 98); ReplaceSurface still unreached. Owner zone-tol cache (surface/owner-zone-tol): 2312 cases, 1967 pass, 0 fail, 345 deferred."
notes = "main CI e33985411 (2026-10-23): PARTIAL topology.face_p1 cases=2315 passed=2217 failed=0 deferred=98 blocked_by=cpp-crash-guard:UB-137(98). Cone TrimWithDomain (PR #670, 2026-10-23): the Cone arm of Surface::trim_with_domain runs the inherited SmSurfOfRevolution::TrimWithDomain with the cone ConvertUVFromNURBSToSTEP and iso curves (Cone::trim_with_domain); difftest 2312 cases, 2214 pass, 0 failed, 98 deferred (cpp-crash-guard:UB-137 98); the 12 surface.surface_p2 deferrals pass. PR #637 (2026-10-23): SetSurface's SmFace::Notify(SM_NO_CHANGE_GEOMETRY) wired (set_surface: empty face environment, null data; set_surface_notified: caller's environment with the surfaces' identities); Surface::split_at makes a missing extrusion NURB (GetOrCreateGwNurbPointer). difftest 2312 cases, 2202 pass, 0 failed, 110 deferred (cpp-crash-guard:UB-137 98, surface.surface_p2 12); all 209 topology.face_p3 deferrals pass. PARTIAL (PR #148): difftest 2312 cases (2260 built-in on the 15 pt_TestFiles B-reps (every op, UV trim curves as read and rebuilt; seam ops with 7 face-property variants on the periodic files) + 36 review crash reproducers + 16 generated), 807 pass bit-identical (max_rel_err 0), 0 failed, 0 both-errored (real passes 807), 1505 deferred (topology.face_p3 1100: SmFace::Notify of every edit, CreateUVTrimCurves; topology.face_p4 307: GetUpwardLoopuses/GetBrep/HasSeamProblem; cpp-crash-guard:UB-137 98: seam calls the shim keeps from upstream's SplitAtSeam crash, never comparable; the guard skips ~99.5% valid MoveSeam+split calls and must be replaced when face_p4 lands); --perturb SENSITIVE 807/807. NormalizedEvaluate/GetOrCreateUVTrimCurve wired to topology.edgeuse_p3 in PR #117 (288 deferred cases now pass). No passing case for UvDomain (with surface), Flip, SetSurface, LoopRoundTrip, RemoveUv, SwapUv, Shrink (all behind face_p3/face_p4); passes are early returns, error paths and guards. The shim normalises analytic geometry to B-splines, so MoveSeam's CopyAndAddAnalytics branch and SwapUV's conic mirrors are not compared. Seam ops take HasSeamProblem's classifications from the C++ shim (Probe op); MergeIntervals wired to intersect.curve_class_p5 (#150); IsCrossedByEdge/HasNearMisses wired to intersect.curve_class_p7 (#65). Back-edges wired: trimming_tools (FlipFaceOrientation, SplitAtSeam), edge, face_p2 points_in_face, mass.integrator (CreateOrientedTrimBoundary); not wirable yet: surface.surface_p3 RemoveUVTrimCurves of owner face (no B-rep there), proto_topology_p2 (ProtoBrep handle). Was: 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 CalculateUVDomainFromUVTrimCurves wired into boolean.topology_intersector_p1 (PR #146). [topology.face_p3 wired (PR #139): 2312 cases, 990 pass, 0 failed, 1322 deferred (topology.face_p4 1044, topology.face_p3 180 at the justified SetSurface CHANGE_GEOMETRY Notify stub, cpp-crash-guard UB-137 98)] UPDATE after topology.brep_p2 (PR #149): the UNPORTED(topology.brep_p2) SmBrep::ReplaceSurface stub of MoveSeam is wired to topology::brep::p2::replace_surface as SmFace.cpp:17602 (ReplaceSurface(this, pJoinedSurface, FALSE, NULL, FALSE): OldSurface::Delete, no modified list, no UV trim curves); still unreached (the preceding SmFace::GetBrep is topology.face_p4): re-run 2312 cases, 519 pass, 0 fail, 1793 deferred, unchanged. Re-run after merging #145 5b1b28ae (main through e1ae2640) into #149: 2312 cases, 807 pass, 0 fail, 1505 deferred (topology.face_p3 1100, topology.face_p4 307, cpp-crash-guard:UB-137 98); ReplaceSurface still unreached. Owner zone-tol cache (surface/owner-zone-tol): 2312 cases, 1967 pass, 0 fail, 345 deferred."
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -9,4 +9,4 @@ tests = ["prog_test:my_test_extent3d", "prog_test:my_test_vector2d", "prog_test:
status = "partial"
claimed_by = ""
claimed_at = ""
notes = "CO-PORTED in topology.topology_traverser (PR #113): SmFace::GetEdges (default arguments) -> topology::topology_traverser::face_edges; 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; CO-PORTED in query.face_p2 (PR #104): SmFace::GetVertices(SmTArray&, ULONG*, SmBoolean, const SmTArray<SmLoop*>*) without attribute filter -> solidcore::query::face::p2::face_vertices PR #163: existing SmFace::GetEdges(defaults) co-port is public topology::topology_traverser::face_edges and reused by boolean.merge_p1; preserve repeats between loops. PARTIAL (port: topology.face_p4): difftest 5506 cases (810 zone-tolerance line cases from the review of PR #239, plus 4680 systematic over the 15 pt_TestFiles B-reps with and without rebuilt UV trim curves + 16 generated), 3957 pass bit-identical, 0 failed, 1549 deferred (geom.tol 1118: SmTol::GetZoneTol3d(const SmObject*) of the face-owned surface in the surface cache's subdivision test (the stub sits in surface.surface_cache_p2's code; main tags it geom.tol), deferred since #147's cache copy keeps the surface's owner (4136 passed before, matching the system tolerance by coincidence); topology.face_p2 292: SmFace::GetTolerance of a face-owned surface in IsClosed / the surface line intersection; intersect.curve_class_p2 50: periodic HasSeamProblem, past part 5's vertex/face gap (the runner's classification objects answer it from a copy of the B-rep) and GetLoopCrossings (intersect.curve_class_p4, wired), at curve_class_p4's own curve_class_p2 stubs; curve.crv_on_surf 80: inside query.face_p3's SectorClassifyCurveOn (sm_FaceClassifyUVLine and SectorClassifyCurveOn are wired since #132 merged; ClassifyProblem is query.face_p1's co-port, re-exported); intersect.surface_drop_lib_p3 9: SmSurface::DropCurve), max_rel_err 0, perturb SENSITIVE. Wired: GetEdges (brep_cache, trimming_tools, face_p1, heal_data_p3, geom.tol, query.face_p2; topology_traverser::face_edges and query::face::p2::face_vertices now delegate to face::p4), GetVertices (heal_data_p3), GetBrep / GetVertices / GetEdges (heal.stitch_p1, 2 cases now pass), GetBrep / GetEdges (topology.brep_p7) and GetVertices / GetEdges (topology.brep_p10, both latent: no case reaches them yet), GetUpwardLoopuses / GetUpwardEdgeuses / GetUpwardVertexuses / GetEdges(outer loop) / GetBrep (topology.face_p3: 823 pass, 654 without), GetEdges / GetVertices (topology.brep_p5) and FindVertexSector (topology.brep_p9, both latent), GetBrep / GetUpwardLoopuses / GetUpwardVertexuses (face_p1), GlobalLineIntersect (topology_traverser::is_inner_shell, on a B-rep copy). Kept UNPORTED(topology.face_p4) markers where the caller has no B-rep or classification-object mapper (generic handles): brep_p5 (FindVertexSector: its FaceEdgeBackend has no kernel), boolean.topology_intersector_p1 (FindVertexSector), point_class (GetBrep, IsConnectedTo), curve_class_p7 (FindVertexSector), trim_srf_cache / surface_p7 / boolean.topology_intersector_p1 (GetBrep, GetVertices, GetEdges), proto_topology_p1 (GetEdges of a ProtoTopology face), and HasSeamProblem in face_p1 (MoveSeam/SplitAtSeam), trimming_tools and heal.face_props::set_props_stage2 (callers with a mapper use FaceProps::set_props_stage2_with). upstream-issues UB-180, WR-176 (HasSeamProblem returns SM_SUCCESS as TRUE), WR-177. Owner zone-tol cache (surface/owner-zone-tol): 5506 cases, 4222 pass, 0 fail, 1284 deferred. UPDATE (wire/brep-p5-find-vertex-sector): topology.brep_p5 MakeEdgeInFace calls find_vertex_sector (and topology.brep_p9 MakeEdgeInFaceWithVU), so partial sphere/cylinder/cone/torus now run past FindVertexSector and defer at topology.brep_p4 SmBrep::DeleteEdge. The generic-handle stubs (intersect.curve_class_p7, boolean.topology_intersector_p1) remain. GlobalLineIntersect over the owning face's trimmed cache (surface/face-line-intersect): 5506 cases, 5141 pass, 0 fail, 365 deferred (the face_p4 shim keeps exactly exported analytic surfaces; analytic polar boxes; sm_IsPointValid via the trimmed cache's PointTest; see findings)."
notes = "main CI e33985411 (2026-10-23): PARTIAL topology.face_p4 cases=5506 passed=5426 failed=0 deferred=80 blocked_by=topology.edge(80). CO-PORTED in topology.topology_traverser (PR #113): SmFace::GetEdges (default arguments) -> topology::topology_traverser::face_edges; 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; CO-PORTED in query.face_p2 (PR #104): SmFace::GetVertices(SmTArray&, ULONG*, SmBoolean, const SmTArray<SmLoop*>*) without attribute filter -> solidcore::query::face::p2::face_vertices PR #163: existing SmFace::GetEdges(defaults) co-port is public topology::topology_traverser::face_edges and reused by boolean.merge_p1; preserve repeats between loops. PARTIAL (port: topology.face_p4): difftest 5506 cases (810 zone-tolerance line cases from the review of PR #239, plus 4680 systematic over the 15 pt_TestFiles B-reps with and without rebuilt UV trim curves + 16 generated), 3957 pass bit-identical, 0 failed, 1549 deferred (geom.tol 1118: SmTol::GetZoneTol3d(const SmObject*) of the face-owned surface in the surface cache's subdivision test (the stub sits in surface.surface_cache_p2's code; main tags it geom.tol), deferred since #147's cache copy keeps the surface's owner (4136 passed before, matching the system tolerance by coincidence); topology.face_p2 292: SmFace::GetTolerance of a face-owned surface in IsClosed / the surface line intersection; intersect.curve_class_p2 50: periodic HasSeamProblem, past part 5's vertex/face gap (the runner's classification objects answer it from a copy of the B-rep) and GetLoopCrossings (intersect.curve_class_p4, wired), at curve_class_p4's own curve_class_p2 stubs; curve.crv_on_surf 80: inside query.face_p3's SectorClassifyCurveOn (sm_FaceClassifyUVLine and SectorClassifyCurveOn are wired since #132 merged; ClassifyProblem is query.face_p1's co-port, re-exported); intersect.surface_drop_lib_p3 9: SmSurface::DropCurve), max_rel_err 0, perturb SENSITIVE. Wired: GetEdges (brep_cache, trimming_tools, face_p1, heal_data_p3, geom.tol, query.face_p2; topology_traverser::face_edges and query::face::p2::face_vertices now delegate to face::p4), GetVertices (heal_data_p3), GetBrep / GetVertices / GetEdges (heal.stitch_p1, 2 cases now pass), GetBrep / GetEdges (topology.brep_p7) and GetVertices / GetEdges (topology.brep_p10, both latent: no case reaches them yet), GetUpwardLoopuses / GetUpwardEdgeuses / GetUpwardVertexuses / GetEdges(outer loop) / GetBrep (topology.face_p3: 823 pass, 654 without), GetEdges / GetVertices (topology.brep_p5) and FindVertexSector (topology.brep_p9, both latent), GetBrep / GetUpwardLoopuses / GetUpwardVertexuses (face_p1), GlobalLineIntersect (topology_traverser::is_inner_shell, on a B-rep copy). Kept UNPORTED(topology.face_p4) markers where the caller has no B-rep or classification-object mapper (generic handles): brep_p5 (FindVertexSector: its FaceEdgeBackend has no kernel), boolean.topology_intersector_p1 (FindVertexSector), point_class (GetBrep, IsConnectedTo), curve_class_p7 (FindVertexSector), trim_srf_cache / surface_p7 / boolean.topology_intersector_p1 (GetBrep, GetVertices, GetEdges), proto_topology_p1 (GetEdges of a ProtoTopology face), and HasSeamProblem in face_p1 (MoveSeam/SplitAtSeam), trimming_tools and heal.face_props::set_props_stage2 (callers with a mapper use FaceProps::set_props_stage2_with). upstream-issues UB-180, WR-176 (HasSeamProblem returns SM_SUCCESS as TRUE), WR-177. Owner zone-tol cache (surface/owner-zone-tol): 5506 cases, 4222 pass, 0 fail, 1284 deferred. UPDATE (wire/brep-p5-find-vertex-sector): topology.brep_p5 MakeEdgeInFace calls find_vertex_sector (and topology.brep_p9 MakeEdgeInFaceWithVU), so partial sphere/cylinder/cone/torus now run past FindVertexSector and defer at topology.brep_p4 SmBrep::DeleteEdge. The generic-handle stubs (intersect.curve_class_p7, boolean.topology_intersector_p1) remain. GlobalLineIntersect over the owning face's trimmed cache (surface/face-line-intersect): 5506 cases, 5141 pass, 0 fail, 365 deferred (the face_p4 shim keeps exactly exported analytic surfaces; analytic polar boxes; sm_IsPointValid via the trimmed cache's PointTest; see findings)."
+41
View File
@@ -4008,3 +4008,44 @@ meantime, whoever merges renumbers the new entry and every reference to it (here
- **Confirmed:** no (the closed non-rail edge: source only; the harness refuses both paths; the closed squeezed edge crashed once in a generated run, not reproduced in isolation).
- **Severity:** crash/UB (use after free).
- **Rust port:** `FilletCorner::squeeze_edge` follows the same loop on ids (no frees), so it returns `NotFound` or deletes consistently; the difftest shim and runner refuse exactly the inputs whose loop reaches a freed vertex use or the dangling survivor, and compare the defined early-error paths (`SM_ERR` for an edge or vertex not in the corner's lists).
## Note: duplicate IDs (2026-10-23)
Parallel PRs gave six IDs to more than one entry. They are not renumbered, because code
comments, shims, unit notes, findings and PRs already cite them; when citing one of these
IDs, add the function name so the entry is unambiguous. Each entry, by its section and
title (other references in the repo in brackets):
- **UB-100:** (a) Surfaces and volumes, `SmDerivSurfDefinition::GetSampleValues` missing
tangent reference [`solidcore-ffi` `surface_surface_p6.rs`, `surface.surface_p6`
notes, findings]; (b) Intersection, `SmPolyBrep::CalculateBoundingBox` null point array
for a pseudo box.
- **UB-185:** (a) Topology, `SmFilletVertex::CalcMateGeom` unbounded recursion through a
cycle of mates [`blend.fillet_geom_p3` notes, `MAX_MATE_DEPTH`]; (b) Numerical
integration (near the end of the file), fillet executive `m_bIsInitialized`
indeterminate before parameter setup [`blend_fillet_executive_p2`/`p3` shims and FFI,
findings].
- **UB-204:** (a) NLib: matrices and polynomials, `SmMatrix(rows, cols)` uninitialised
inline storage used by `SmLocalSolveNd` [difftest `curve_curve_p9.rs`, findings
(#94)]; (b) Surfaces and volumes, `SmFilletSolver::GetSurface` unbounded recursion
through the geometry set [findings, `blend.fillet_solver_p1` pseudo B-rep entry].
- **UB-210:** (a) Topology, `SmBrep::DeleteEdge` reads `pSurvF` outside the merge branch
[`topology/brep/p4.rs`, `topology.brep_p4` notes]; (b) Topology,
`SmFilletEdge::CalcFilletIntFillet` reads the context of a missing fillet corner
[`blend_fillet_geom_p3` shim, runner and fixtures, `blend.fillet_geom_p3` notes].
- **UB-238** (four entries): (a) NLib: knots and basis functions,
`SmBSplineCurve::CreateCanonical` heap corruption for a NaN knot [`solidcore-ffi`
`primitive_api_curves.rs`, fuzz corpus]; (b) Spatial structures and small geometry,
vertex/vertex and edge/edge topology solvers dereference `NULL` in a release
`SM_ASSERT` [`solidcore-ffi` `intersect_topology_solver_p1.rs`]; (c) Curves,
`SetIntersectionCurveThroughPoint` builds UV trim curves from the address of a pointer
slot; (d) Topology, `SmFilletGeom::MakeRailEdgeuse` leaves a deleted vertex use linked
in the fillet vertex [`blend_fillet_geom_p5` shim and FFI, `blend.fillet_geom_p5`
notes, findings].
- **WR-190:** (a) Topology, attributes, solvers, `SmFilletSolver::RecordFilletError`
reports rail 0 for rail 1 [`blend/fillet_solver/p2.rs`]; (b) Curves,
`SmFilletEdge::CalcBlendingRail` builds its Hermite fallback as a degree-2 curve
[`blend/fillet_geom/p6.rs`].
New entries take the next free number after the highest in their series, as the
Numbering paragraph at the top says.