Commit Graph

2331 Commits

Author SHA1 Message Date
Brett Lawson e48967cd0d Narrow fillet_corner_p3 null-curve guard and check curve count first
The shim no longer refuses a corner edge without a 3D curve: upstream
CreateCornerBlend returns SM_ERR below four curves and otherwise
SM_ERR_NULL_POINTER, without crashing. create_corner_patch now checks the
count before dereferencing curves, matching that order.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 10:17:00 +01:00
Brett Lawson b5454636a5 Merge remote-tracking branch 'origin/main' into fixes/opt-in-wr214-wr254-wr265 2026-10-26 09:23:34 +01:00
Brett Lawson c91845a161 fixes: WR-214, WR-254 and WR-265 become opt-in UpstreamFixes fields
Follows #1077: a result-changing fix of an upstream defect is an opt-in
`Kernel::fixes` field and the default is pinned SMLib behaviour.

- WR-214 (#480): the Boolean's topology intersector sets
  `split_self_loops_on_vertices` from `proto_edge_self_loop_on_vertex_degenerate`
  instead of forcing it off.
- WR-254 (#528): the slice side rule for coincident faces needs
  `slice_coincident_faces_sheet_side`; by default the slice takes upstream's
  difference rule.
- WR-265 (#388): `put_outer_shells_first` (shell order and the nested-solid
  void-flag rewrite) needs `boolean_outer_shell_first`.

The boolean.api_brep runner can now build sheets (SmApiCreatePlane) and operands
that are an SmApiBoolean result, and it gains the C++-confirmed WR-254 and WR-265
repros as fixture cases that pass at the default. Each fix has an issue test with
the field on and a test that pins the default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 08:49:00 +01:00
Brett Lawson ff38f7cdab Merge origin/main (with #1099) into stacked #691
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 08:13:57 +01:00
Brett Lawson 2cf753e0f5 Merge origin/main into stacked #691
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 07:18:04 +01:00
Brett Lawson 9a3cee7dd7 Merge #1099 (periodic-seam CheckLoop ends, opt-in) into stacked #691
Both CheckLoop fixes stay independent opt-ins: check_loop_vertex_tolerance
(WR-381) widens the junction gap limit, check_loop_projected_seam_ends
(WR-440) lifts projected ends across periodic seams. BCheckLoop inputs keep
both PRs' pre-steps (gap, tolerances, then project) in the Rust runner, FFI
guard and C++ shim; the fixture keeps both PRs' cases. A new test runs a
mixed-seam gap that needs both fields to close.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 07:17:55 +01:00
bherbruck 559443eb83 Merge pull request #1099 from brett19/stack/periodic-seam-loop-endpoints-opt-in
stack: #709 (periodic-seam projected loop endpoints) as opt-in UpstreamFixes, merged with main
2026-10-26 06:13:23 +00:00
bherbruck 049da061f9 Merge pull request #1104 from brett19/stack/offset-face-relations-on-main
stack: #643 (remove_excess_faces correspondence maps) merged with main
2026-10-26 06:08:16 +00:00
Brett Lawson 58d56de1bb Merge origin/main into stacked #691
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 07:01:27 +01:00
bherbruck 1004163554 Merge pull request #1100 from brett19/stack/macos-solver-trig-on-main
stack: #655 (macOS volatile sin/cos in solve1d shim) merged with main
2026-10-26 05:47:45 +00:00
Brett Lawson f1621b2a95 Merge origin/main into stacked #691
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf

# Conflicts:
#	crates/difftest/known_mismatches.toml
#	plan/findings.md
#	plan/upstream-issues.md
2026-10-26 06:44:04 +01:00
Brett Lawson 47a3817271 Merge origin/main into stacked #643
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf

# Conflicts:
#	crates/solidcore/src/offset/offset_executive/p1.rs
#	plan/findings.md
#	plan/units/offset.offset_executive_p1.toml
#	plan/upstream-issues.md
2026-10-26 06:29:14 +01:00
Brett Lawson 87ff4fe065 Merge origin/main into stack/periodic-seam-loop-endpoints-opt-in
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 06:17:00 +01:00
Brett Lawson d5605ee16d Merge origin/main into stacked #655
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 06:15:08 +01:00
Brett Lawson 4938a14452 Merge origin/main into stacked #653
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 05:59:18 +01:00
bherbruck fd072c3d91 Merge pull request #975 from brett19/wire/query-poly-and-curve-class-p1-guards
query.poly: decide the IsDegenerate rejection in the shim from the case input (follow-up to #811)
2026-10-26 04:33:11 +00:00
Brett Lawson d173c1d02a Merge origin/main into #709 (periodic-seam projected loop endpoints)
Main split the frozen archives and the known-mismatch list into one file
per entry. #709's records move accordingly:
- plan/findings.md section -> plan/findings/topology.trimming_tools--projected-loop-endpoints-periodic-seams.md
- plan/upstream-issues.md WR-264 -> plan/upstream-issues/WR-440--checkloop-projected-periodic-ends-as-exact-sheets.md
  (renumbered: #700 also uses WR-264)
- crates/difftest/known_mismatches.toml entries -> crates/difftest/known_mismatches/topology.trimming_tools.toml

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 05:06:11 +01:00
Brett Lawson 7adb643e03 Merge origin/main into #358 (HANG-29 / UB-166 FFI guards)
Resolved by #358's intent:
- heal.gap topo and heal.heal_data_p2 block guards (>= 1e154) dropped: main's
  topology.vertexuse export, which both units build on both sides, already
  refuses B-rep blocks above 1e150 (HANG-29, d725baf2c). The PR's regression
  tests still run its triggers and now expect that refusal.
- boolean.topology_intersector_p1 coordinate bound, UB-166 knot read-back and
  blend.fillet_geom_p2 RailRail original-face bound kept unchanged.
- plan/findings.md and plan/upstream-issues.md edits moved to per-entry files
  (HANG-29 and UB-166 addenda, three findings files), as main split those
  archives.
- Both sides of the conflicting test modules kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 04:45:22 +01:00
Brett Lawson f8dba4f302 Merge origin/main: keep #811's runner, decide the IsDegenerate rejection in the shim
Resolved by #811's intent: run_cpp rejects, the Rust side is not run, same cases
rejected. The decision is made by the shim from the built model (label plus back
pointers) and returned as STATUS_UNDEFINED_INPUT, instead of difftest inspecting a -9
sentinel in the results.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 04:20:20 +01:00
bherbruck f58ad1525d Merge pull request #1076 from brett19/wire/fillet-corner-insert-executive-reads
blend.fillet_corner_p1: corner insertion reads the executive's edge attribute (corner_insert_22)
2026-10-26 03:11:44 +00:00
Brett Lawson f1b2b4abd8 blend.fillet_corner_p1: read the executive's edge attribute users in corner insertion
The indexed InsertIntersectionTopology read m_pAttributeE->GetUsers through an
UNPORTED(blend.fillet_executive_p1) stub. SmFilletExecutive's constructor always
creates m_pAttributeE (no users until CreateFilletBrep), so the shim's guard that
skipped corners with fillet-B-rep edges on the assumption of a NULL attribute was
unneeded. FilletExecutiveData now carries attribute_e_users and the indexed adapter
reads it; the shim runs those corners. corner_insert_22 now compares 389 values;
blend.fillet_corner_p1 is green (284/284, --seeds 2000: 2268/2268).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 03:50:58 +01:00
Brett Lawson 99fa9a539b Merge remote-tracking branch 'origin/main' into fix/fillet-corner-p3-status-compare 2026-10-26 03:32:04 +01:00
Brett Lawson d7f6677431 difftest(blend.fillet_corner_p3): compare the 3x2 patch's error returns after its deletions
SmFillet3x2MixedConvexityCorner::CreateCornerPatch deletes the on-edge
fillet edge and the corner vertex before projecting onto the original
face. Without an original face (NER) or when DropCurve fails or yields
other than one curve (SER), it returns after those deletions. The shim
refused these inputs as if upstream dereferenced null, but upstream's
state there is the same as on success: ~SmTopology unlinks the edge from
the pseudo B-rep's edge list and ~SmFilletVertex clears its mates. Only
the harness Model's own vertex list kept the freed vertex. Drop it from
that list as the success path already does and run the op, so the
status, the corner members and the model export are compared.

64 cases move from rejected to pass; no other outcome changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011gJAwcLRBPQXYLmvXd3pWf
2026-10-26 02:23:05 +01:00
bherbruck b4f77f24a8 Merge pull request #1047 from altvnk/fix/surface-p6-sphere-natural-trim
difftest: surface.surface_p6 real Sphere natural trims
2026-10-26 01:02:29 +00:00
bherbruck 5feebf2df7 Merge pull request #1048 from altvnk/fix/curve-p4-ellipse-distance
difftest: curve.curve_p4 real Ellipse distance equations
2026-10-26 00:56:49 +00:00
bherbruck 7a8daa71d7 Merge pull request #1049 from altvnk/fix/curve-p7-ellipse-plane
difftest: curve.curve_p7 real Ellipse plane classification
2026-10-26 00:56:47 +00:00
Alex Lytvynenko 96fdbdf9c0 Merge fresh upstream/main into reviewed Ellipse classification coverage
Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-26 01:10:58 +01:00
Alex Lytvynenko 13c3eb7bfe difftest: compare real Ellipse plane classification and comb
Add the canonical Ellipse to the generic p7 curve protocol and compare
complete positive-arc solutions and geometric comb records. Preserve old
guards, fixtures, generator inputs, numerical formulas and tolerances.

Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-26 01:10:58 +01:00
Alex Lytvynenko 31fc16fe56 Merge fresh upstream/main into reviewed Ellipse evaluator coverage
Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-26 01:05:41 +01:00
Alex Lytvynenko 8e4458f15a difftest: compare real Ellipse distance equations
Add genuine Ellipse ordinary-curve input and complete point-distance equation
and Jacobian comparisons. Preserve old curve kinds, fixtures, generators,
guards, numerical formulas and tolerances.

Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-26 01:05:41 +01:00
Alex Lytvynenko 324fc862a7 Merge fresh upstream/main into reviewed Sphere coverage
Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-26 00:59:36 +01:00
Alex Lytvynenko 62689ebdfe difftest: compare real Sphere natural trim geometry
Add the fixed canonical Sphere to the generic p6 surface protocol and compare
complete spatial/UV trim records without changing production geometry, old
guards, fixtures, generator inputs or numerical tolerances.

Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-26 00:59:36 +01:00
Charles Galant 7ac98bb7c7 Merge remote-tracking branch 'origin/main' into wire/fillet-executive-p2-green
Co-Authored-By: Gemini 3.1 Pro <noreply@google.com>
2026-10-25 19:38:11 -04:00
bherbruck 1a60f0077c Merge pull request #758 from tdamsma/codex/public-extrusion-transform
fix: convert extrusion surfaces before public scaling
2026-10-25 23:16:40 +00:00
bherbruck c2bc2ae92f Merge pull request #857 from tdamsma/codex/fillet-linked-peer-publication
intersect: merge fillet classifications through actual linked peers
2026-10-25 23:16:37 +00:00
bherbruck 4d4a112aed Merge pull request #1011 from outlookhazy/wire/fillet-corner-p2-p3-green
wire(blend): wire NoteFilletError and TestAndConvertBigRadFillet (blend.fillet_corner_p2 + p3 -> green)
2026-10-25 23:16:33 +00:00
Charles Galant 38ae192d0f Merge remote-tracking branch 'origin/main' into wire/fillet-executive-p2-green 2026-10-25 19:08:12 -04:00
Charles Galant 774baa8b3f wire(blend): wire CreateSmoothEdgeSequence and temporary radius changes (blend.fillet_executive_p2 -> green)
- Co-port `SmFilletExecutive::CreateSmoothEdgeSequence` in
  `blend::fillet_executive::p1` via `SmoothSequenceAccess<O>` and wire
  `process_smooth_edge_sequences` / `collect_tangent_edge_sequence` in
  `blend::fillet_executive::p2` and `SessionObjects`.
- Add borrow-free `DirectTemporaryRadiusChange` (`new` + `revert`) in
  `blend::fillet_executive::p2` and wire all 3 `calc_rail_int_edgeuse_impl`
  sites in `blend::fillet_geom::p2` and both solvers in
  `blend::fillet_solver::p2::FilletSolver::rail_rail_intersect_with_ops`
  (removing all remaining `UNPORTED(blend.fillet_executive_p2)` stubs).
- Wire `ConstantDistanceFs`, `VariableRadiusFs`, `SurfaceSurfaceFs`, and
  `FilletCorner` in the `blend.fillet_executive_p2` difftest runner, compare
  all 5 `temp_radius` values for variable-radius laws, and add 3 split-edge G1
  smooth-sequence cases (`exec_collect_smooth_split`,
  `exec_process_smooth_split_const`, `exec_process_smooth_split_vr`).
- Promote `blend.fillet_executive_p2` to `green` (278/278 pass, 0 failed,
  0 deferred, max_rel_err 0e0).

Co-Authored-By: Gemini 3.1 Pro <noreply@google.com>
2026-10-25 19:08:11 -04:00
bherbruck b206d3f5a3 Merge pull request #947 from tdamsma/codex/fillet-attributes-merge-publication
blend: merge the retained fillet body with live attributes
2026-10-25 22:29:49 +00:00
bherbruck a377a5c43d Merge pull request #1016 from fdalmaso/wire/trim-srf-cache-polyedges
port: surface.trim_srf_cache
2026-10-25 22:29:43 +00:00
Charles Galant 6f0877278f wire(blend): wire NoteFilletError and TestAndConvertBigRadFillet (blend.fillet_corner_p2 + p3 -> green)
Co-Authored-By: Gemini 3.1 Pro <noreply@google.com>
2026-10-25 18:10:10 -04:00
Federico Dal Maso eca9be2d72 Merge main into polygon-edge cache completion
Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-25 22:32:33 +01:00
Federico Dal Maso 062449bf02 fix(surface): reimplant polygon edges when trimmed cache nodes split
Retain polygon-edge endpoints, tolerance and original surface for child implantation. Preserve native parent lists and child ordering, including handle remapping. Add 130 differential cases and regression coverage for geometry updates.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-25 22:29:34 +01:00
bherbruck 958f1cb47a Merge pull request #1004 from outlookhazy/wire/fillet-geom-p6-green
wire(blend): wire RailEdgeuseIntersect and RecordFilletError in blend.fillet_geom_p6 (blend.fillet_geom_p6 -> green)
2026-10-25 21:25:58 +00:00
Thijs Damsma 7919576d5a Merge branch 'codex/scaling-ready-748' into codex/scaling-ready-758 2026-10-25 22:19:05 +01:00
Thijs Damsma 4e6c779468 Merge branch 'codex/scaling-ready-745' into codex/scaling-ready-748 2026-10-25 22:19:05 +01:00
Thijs Damsma 5066706c9b Merge commit '53872b3d0ee56e53ec92a8781a87ba28b98c9900' into codex/scaling-ready-745 2026-10-25 22:19:05 +01:00
Thijs Damsma 0f25058418 Merge cone and torus scale support into extrusion scale stack
Keep all inherited surface conversions and each fixture family alongside current transform sequences.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-25 22:18:56 +01:00
Thijs Damsma c3b3bebc63 Merge current scale foundation and main into cone and torus transforms
Preserve both scale probes and current transform-sequence coverage.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-25 22:17:37 +01:00
Thijs Damsma db6108161c Merge current scale foundation and main into extrusion transforms
Preserve transform-sequence support and migrate the extrusion finding without recreating shared archives.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
2026-10-25 22:17:33 +01:00