Commit Graph

476 Commits

Author SHA1 Message Date
bherbruck c27ccca4d3 Merge origin/main into unit/intersect.surface_intersector_p4
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 18:42:20 -04:00
bherbruck 5d0e0e57e6 Merge origin/main into unit/query.loop
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 18:02:57 -04:00
bherbruck 3be99cbd74 Merge remote-tracking branch 'origin/main' into merge-topology.edgeuse_p1 2026-10-14 17:20:10 -04:00
bherbruck 085e3f346d Merge remote-tracking branch 'origin/main' into unit/intersect.surface_intersector_p4 2026-10-14 16:44:57 -04:00
bherbruck 53ababc07d intersect.surface_intersector_p4: shim, ffi, difftest runner, fixtures; partial
difftest: 1542 cases, 938 pass bit-identical, 604 deferred (surface.surface_p11 578,
surface.surface_p3 26); --perturb SENSITIVE 938/938.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 16:40:33 -04:00
bherbruck 438ae8df5b Merge remote-tracking branch 'origin/main' into merge-topology.edgeuse_p1 2026-10-14 16:33:23 -04:00
lillith 9dee369570 Merge official main with validated revolution port
Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 22:32:07 +02:00
lillith 1fb5f85b72 WIP: address topology solver review and extend subdivided fixtures
Correct empty auxiliary-list handling, direct callee ownership and the geom.tools back-edge. Add native empty-list regression and 1080 scale/subdivision cases; complete differential validation is pending.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 22:31:40 +02:00
bherbruck 59bc21e093 Merge origin/main (surface.surf_of_extrusion_p2) into unit/surface.surf_of_revolution_p2
Main now carries its own SurfOfRevolution arms (taken). surface.surf_of_extrusion_p2
took WR-66, so this unit's upstream issues become WR-67 (GetControlPolygon
weights) and WR-68 (IsNurbSurfaceSurfOfRevolution status as TRUE).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 16:14:16 -04:00
bherbruck b4a39bbff1 Merge remote-tracking branch 'origin/main' into unit/query.loop
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 16:11:45 -04:00
lillith bc0fa9e8f0 Merge official main and confirm the final topology reports
The shared revolution-dispatch fixes are now in main through PR #57. Preserve
its equivalent match arms and the upstream defect records from both branches.
All required local gates pass: 141 units, 88 green, 53 partial and zero failed;
the three topology reports match the full run byte for byte.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 22:11:07 +02:00
bherbruck dfd4f180a7 Merge origin/main into unit/topology.edgeuse_p1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 15:58:25 -04:00
bherbruck 33bc326471 Merge origin/main (surface.plane_p2, surface_point_solve_p1, surface_intersector_p3, ...) into unit/surface.surf_of_revolution_p2
Surface::global_surface_intersect dispatches to both overrides (#40's SmPlane
arm and this unit's SmSurfOfRevolution arm), base_global_surface_intersect kept
once. SurfOfRevolution::intersect_with_plane now takes the kernel. Main does not
build (SurfOfRevolution arms missing in surface_point_solve_p1 and
surface_intersector_p3), so the fix from PR #68 is applied verbatim.
surf_of_revolution_p2: 1099 pass, 68 deferred.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 15:43:03 -04:00
bherbruck 5265c8b428 Merge origin/main into unit/surface.surf_of_extrusion_p2
Conflicts:
- surface::surface::p2 read_from_db: keep main's PLANE_TYPE reader and
  this PR's SURF_OF_EXTRUSION_TYPE dispatch-gap arm.
- plan/STATUS.md, plan/upstream-issues.md: keep both sides. This PR's
  issues renumbered past main's: UB-85..UB-89 -> UB-91..UB-95,
  WR-63 -> WR-66 (references in modules.toml and findings.md updated).

Wiring: surface.plane_p2 is partial on main, so the
UNPORTED(surface.plane_p2) SmPlane::TrimCurveToPlaneDomain stub in
SurfOfExtrusion::intersect_with_plane is now the real call. difftest
surface.surf_of_extrusion_p2: 1359 cases, 1048 pass (was 971), 0 failed,
311 deferred (plane_p2 133, adv_surface_intersector 97, curve_p9 81).

Main build fix: main did not compile (CI red since the
surface_intersector_p3 / surface_point_solve_p1 merges): four matches
lacked the SurfaceKind::SurfOfRevolution arm. Dispatched as upstream:
IsSingularity and IsOnSeam have no SmSurfOfRevolution/SmBSplineSurface
override (base SmSurface, unported arm); SmSurfacePointSolve's
SM_CAST_PTR(SmBSplineSurface) succeeds for a surface of revolution
(its base); DropToIsoCurve calls the SmSurfOfRevolution override of
CreateIsoParametricCurve.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 15:31:36 -04:00
lillith 626be3c01f Merge the latest official ports and documentation
Preserve both current main findings and the topology contribution's coverage
notes. Main's four missing revolution dispatch arms are addressed by the
maintainer's PR #68; integrate that existing fix before final validation.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 21:25:40 +02:00
lillith 81b7fe16fa Merge main and complete topology request and tolerance coverage
Compare 1304 of 1349 part-2 cases exactly, with 45 explicit foreign-callee
deferrals and no failures. Include all request modes, accepted/rejected operation
enums, zero/tiny tolerances and all five solution-node slots.

Resolve shape topology keys to edge curves and face surfaces, with a regression
distinguishing their handles. Document all owned functions and coverage limits;
keep the PR draft until latest-main integration and all final gates pass.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 21:13:19 +02:00
bherbruck 1c86306ff7 Merge pull request #40 from bherbruck/unit/surface.plane_p2
port: surface.plane_p2
2026-10-14 15:07:50 -04:00
bherbruck 4e66c14326 Merge pull request #56 from bherbruck/unit/intersect.surface_intersector_p3
port: intersect.surface_intersector_p3
2026-10-14 15:02:57 -04:00
bherbruck 659d217b15 Merge pull request #58 from bherbruck/unit/surface.surface_point_solve_p1
port: surface.surface_point_solve_p1
2026-10-14 15:02:02 -04:00
bherbruck 104233074a Merge origin/main (surface.surface_p9) into unit/surface.surf_of_revolution_p2
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 15:00:47 -04:00
bherbruck dd078a5909 Merge origin/main into unit/surface.plane_p2
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:48:29 -04:00
bherbruck 49e5549957 Merge remote-tracking branch 'origin/main' into unit/query.loop 2026-10-14 14:47:28 -04:00
bherbruck 05eefa010b query.loop: port SmLoop::ContainsUVPoint with shim, FFI, runner and fixtures
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:47:28 -04:00
bherbruck dff5704d4f Merge origin/main (intersect.adv_surface_intersector) into unit/surface.surf_of_revolution_p2
#41 ported the base SmSurface::GlobalSurfaceIntersect body inline; it now lives in
base_global_surface_intersect, which Surface::global_surface_intersect calls for
every kind except SurfOfRevolution (its override falls back to it). The 34
fall-back cases now defer on intersect.surface_intersector_p5.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:37:38 -04:00
bherbruck 123c7bb7d1 Merge origin/main into unit/intersect.curve_class_p1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:35:30 -04:00
bherbruck 9931d56386 Merge pull request #6 from 0xlillith/unit/surface.surface_p9
port: surface.surface_p9
2026-10-14 14:34:23 -04:00
lillith 0d6f12ebd6 Compare static topology entrypoints and face dispatch with C++
Add real shell-vertex B-rep fixtures for the five static entrypoints, plus face
membership and missing-callee cases using native face/wire-edge construction.
Part 2 compares 899 of 942 cases exactly, with zero failures and 43 explicit
deferrals. Workspace tests, native fixture preflights and strict C++ Clippy pass.

Guard the upstream EdgeVertex wrong-class operand without invoking its undefined
cast. A native runtime-type probe and a Rust class-guard regression cover it.
Keep the contribution draft pending final coverage, main integration and gates.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 20:31:40 +02:00
bherbruck d764141ad7 Merge origin/main into unit/intersect.curve_class_p1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:27:45 -04:00
bherbruck 2475483f01 Merge origin/main into unit/intersect.curve_class_p1
Resolve conflicts in geom/tol.rs (keep surface.surface_p1's CO-PORTED note and
this unit's classification mappings) and plan/findings.md (keep both).
Handle the new SurfaceKind::SurfOfRevolution (SmBSplineSurface base flag) and
Step variants in out_of_bounds. Wire SmTol::GetZoneTol3d(SmSurface),
smsurf_GetSurfaceCache and SmSurface::ApproximateSize to surface.surface_p1:
2088 cases, 1908 pass, 0 fail, 180 deferred (52 moved to surface.surface_p6).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:27:16 -04:00
bherbruck 9a0f51c281 Merge origin/main into unit/surface.plane_p2
Run the SmAdvSurfaceIntersector from intersect.adv_surface_intersector (#41)
in base_global_surface_intersect, keeping the SmPlane override dispatch.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:24:24 -04:00
lillith 7842bfa043 Merge the volume port and verify the integrated workspace
All local gates pass against the updated main. Full differential validation
evaluates 134 units: 87 green, 47 partial and zero failed. The three part-9/cache
reports remain byte-identical to their focused and committed reports.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 20:21:09 +02:00
bherbruck 7a8a023c18 Merge origin/main into unit/surface.surf_of_extrusion_p2
Conflicts: Surface::read_from_db now reads SmSurfOfRevolution records (main) and keeps
the SmSurfOfExtrusion record read as a DISPATCH GAP naming this unit (was a self-tagged
UNPORTED stub; review item); plan/findings.md keeps both sections.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:21:06 -04:00
bherbruck 33c50c7402 Merge origin/main (surface.volume_p2) into unit/surface.surf_of_revolution_p2
surface.volume_p2 took WR-65, so this unit's upstream issues are renumbered
WR-65 -> WR-66 (GetControlPolygon weights) and WR-66 -> WR-67
(IsNurbSurfaceSurfOfRevolution status as TRUE), with the findings reference.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:19:38 -04:00
bherbruck 8bc48a4271 Merge origin/main into unit/surface.plane_p2
Keep both sides' SurfaceKind arms (Plane overrides from this unit; the
SurfOfRevolution and Step kinds from main). Add the SmPlane::GlobalSurfaceIntersect
SurfOfRevolution case (orders and UV curves swapped, as upstream), which needs
&Kernel on Surface::global_surface_intersect / intersect_with_plane. Wire the
plane box zone tolerance to Surface::face (surface.surface_p1 is partial):
a plane with a face now defers on SmFace::GetTolerance (topology.face_p2).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:16:03 -04:00
bherbruck ee38fe980b Merge pull request #41 from bherbruck/unit/intersect.adv_surface_intersector
port: intersect.adv_surface_intersector
2026-10-14 14:15:42 -04:00
lillith 6838bb1f76 Merge latest main and validate revolution surface dispatch
Use the newly ported revolution surface's virtual iso constructor and B-spline
base. Add 18 direct canonical-cylinder comparisons against the real C++ class.
Refresh cache reports after the upstream dispatch changes and retain explicit
CSI and classification deferrals.

All required local gates pass; full differential validation covers 133 units
with 85 green, 48 partial and zero failed. Part 9 compares 727/778 cases exactly.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 20:10:40 +02:00
bherbruck 2dc31c7c3e Merge origin/main into unit/topology.edgeuse_p1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 14:09:10 -04:00
lillith 6936f62183 Merge main and adapt the topology solver to the surface cache API
Preserve the existing face-silhouette implementation and make it available to
part 2 with the kernel context now required by surface cache construction.
Keep the range-endpoint checkout bridge explicit: an owned cache copy cannot
disable point testing in the shared cache consumed by the point solver.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 19:56:41 +02:00
lillith 94172ba691 Merge main and share the curve/surface solver with surface part 1
Remove the duplicate CSI state, preserve the existing part-1 constructor and
wire its surface/node/point validity helpers. Add 16 real-plane fixtures without
diagonals and refresh differential reports after the main integration.

Part 9 compares 709/760 cases, cache part 2 808/905 and cache part 3 450/600;
all compared values are identical and all remaining deferrals name their owner.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 19:56:28 +02:00
bherbruck 8d2ac236ab Merge origin/main into unit/surface.volume_p2
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 13:53:17 -04:00
lillith 902e4a164a Port topology solver part 2 traversal and local dispatch
Keep this unit draft while the remaining face and brep entrypoint fixtures and
latest-main integration are completed. Compare 779 cases exactly against C++,
with three explicit topology.edge deferrals; exercise point-node storage and
surface-tree handle mapping without changing numerical tolerances.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-14 19:52:49 +02:00
bherbruck db294c4230 Merge origin/main into unit/intersect.adv_surface_intersector
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 13:48:27 -04:00
bherbruck 4b27d8afa3 Merge origin/main into unit/intersect.adv_surface_intersector
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 13:48:20 -04:00
bherbruck d65cb30f8f Merge origin/main into unit/surface.surf_of_extrusion_p2; surface.surf_of_extrusion_p2 partial
Wires the plane/projected-generator box test of IntersectWithPlane now that
surface.surface_p1 provides SmSurface::GetFace; adds disjoint-box fixtures,
the plan status (partial: 923 pass, 373 deferred), findings and upstream
issues UB-85..UB-89, WR-63.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 13:27:47 -04:00
bherbruck b4f6b8666f Merge remote-tracking branch 'origin/main' into unit/topology.edgeuse_p1 2026-10-14 13:25:51 -04:00
bherbruck e7199f7188 topology.edgeuse_p1: port SmEdgeuse/SmFaceuse part 1 with B-rep use records
Edge use and face use queries, mate/radial, UV trim curve slot,
gap entry points, face use collections and the SmEdgeuse.cpp statics.
Co-ports the minimal use records (Region, Faceuse, Loopuse, Edgeuse,
Vertexuse) and gap data into the Brep skeleton; difftest imports
real SmBreps (upstream .smb files, wire edges, faces, the
my_test_topology network) exported by the shim.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 13:25:43 -04:00
bherbruck a972c8978a Merge origin/main into unit/surface.volume_p2
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 13:25:11 -04:00
froglemonade2 971c52ba16 Merge branch 'main' of https://github.com/bherbruck/solidcore into unit/surface.surf_of_revolution_p2
# Conflicts:
#	crates/solidcore/src/surface/surface/p2.rs
#	plan/modules.toml
2026-10-14 19:22:34 +02:00
bherbruck 904057fa59 Merge origin/main into unit/surface.surf_of_revolution_p3
Resolve against surface.surface_p1 (#43) and surface.cone_p1 (#31): keep both
SurfaceKind variants (SurfOfRevolution, Step) in every match, give the
surface of revolution its SmSurface dispatch in surface::surface::p1
(EvaluateSTEP override, inherited SmBSplineSurface bodies), share one
ConvertDomainFromNURBSToSTEP body, and wire the cone's SmSurfOfRevolution
Transform/ReadFromDB back-edges. surface.torus becomes green.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
2026-10-14 13:20:02 -04:00
bherbruck 0dabb6cb14 Merge remote-tracking branch 'origin/main' into unit/intersect.surface_intersector_p3 2026-10-14 13:16:39 -04:00