Compare raw native mutation state, partial wire lists and defined self-transfer behavior. All 234 transfer/query cases pass before the subsequent safe-cast getter audit correction; dedicated metadata-override cases and remaining owned operations are still pending. Preserve the draft/todo status.
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Register all B-rep edges and each vertices complete vertex-use list. The fixed upstream wire-network probe confirms all five edges and the native traversal order; full differential revalidation is running. Preserve setup failures as failures and keep the shell unit todo.
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Import native vertex-use list order and coport only the default edge/vertex query branches required by GetWireEdges. Initial query comparisons passed; expanded native comparisons are running. Keep topology.shell todo until all owned operations, backedges and final gates are verified.
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Preserve the shell module alongside the dependency module. The dependency brings its own strict-lint fixes and native fixture extensions; no changes are written to its authors branch.
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Preserve native integer void flags and extend the shared snapshot without invoking shell operations under test. Native query coverage is provisional; remaining shell bodies and complete validation are pending. Strict checks currently require the dependency PRs latest fixes.
Co-Authored-By: OpenAI Codex <noreply@openai.com>
Global solver (rough / polygon guesses, refinements, grids, seams, Solve) and
stepper (AdjustStep, norms, convergence, Step, line searches, boundary tests).
Solve keeps upstream's eStat reset by RefineGuessByGrid and maps a failed rough
guess to SM_ERR. The shim and runner also build real SmSurfOfRevolution surfaces
(240 rev_gen cases), validated against the domain the C++ reports.
difftest: 1320 cases, 1230 pass, 90 deferred (surface_p4 63, surface_p5 27).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BY8UpXKuMci15rAWGXsbsm
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
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>
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
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
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>
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>
#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
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>
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
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>
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
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
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