Commit Graph

2893 Commits

Author SHA1 Message Date
bherbruck 77ca49db16 topology: merge_brep carries the merged body's attributes, as SmBrep::MergeBrep does
Upstream MergeBrep moves the merged-in objects with their attributes; the port's
merge_brep read attributes only from the target, so every merge_brep caller
dropped the source's lists (30 of 36 new C++ AttributedMerge cases differed).
merge_brep now lends the source's own lists (private key domain when namings
overlap) and gives the merged-in objects' lists back to the target's store,
except when the caller already carries them (PrimitiveModel, combine_brep).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-31 02:03:02 -04:00
bherbruck 1c415da570 Merge pull request #1901 from altvnk/difftest/copy-faces-geometry
difftest: observe CopyFaces destination geometry, not only counts
2026-10-31 01:58:08 -04:00
Brett Lawson e701079774 boolean: go on past imprints whose MakeEdgeInFace finds no vertex sector (UB-242)
SmBrep::MakeEdgeInFace makes both FindVertexSector checks before
MakeEdgeInFaceWithVU, its first edit, so an edge-definition imprint that
stops there leaves the B-rep untouched (and an edge already made in Brep1 is
whole). Upstream IntersectInsertRelate goes on past such failures, and that
continuation is defined, but the port stopped as for a UB-242 half-edited
imprint. ImprintOutcome::failure_edited no longer counts them
(topology::brep::p5::is_no_vertex_sector), and the
boolean.topology_intersector_p2 shim decides the same case with the same const
FindVertexSector calls.

Five blend.feature_executive cases now match the C++ (defillet face 8 and
fillet1019 extended-surface XORs, whose folded extensions put the
intersection UV curves on the other preimage of the vertices). Regression
test from single_face_defillet_2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-31 06:20:51 +01:00
Alex Lytvynenko 02b0d4f134 Merge main CopyFaces notification forwarding before final native verification
Retain reviewed harness blobs; main now factors CopyFaces through copy_faces_from for attributed FeatureExecutive copies. Re-run the affected native matrix rather than reusing a gate across this production change.

Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-31 05:59:44 +01:00
Alex Lytvynenko ea14a59736 Merge authoritative upstream/main 33b3e06cd before final verification
Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-31 05:15:41 +01:00
Brett Lawson 4db1ba7b2f blend.feature_executive: carry attributes through PartitionFeature and RestoreFeature copies
Upstream's CopyFaces notifies SM_NO_COPY on each copied face, edge and vertex
(SmMerge::MakeFaceuse), so attributes reach the copies as their behaviours say.
The port's copies ran with an empty attribute store.

- topology::brep::p2::CopyNotifyState: notification state for a copy between
  two B-reps, holding both B-reps' own attributes (source objects under tagged
  copy_source_ref identities) and giving each B-rep its own back.
- topology::brep::p7::copy_faces_from: copy_faces with distinct source
  identities (copy_faces delegates to it unchanged).
- SmFeatureExecutive: PartitionFeature and RestoreFeature copy with the
  attributes. The patch path does not yet: its merges still differ from SMLib
  (finding addendum).
- Shim, FFI and runner: optional SmLongAttribute inputs, plus per-id face and
  edge counts of every B-rep in the record; 4 attribute cases (3 pass; the
  extrusion case fails until the patch path carries).
- Unit test: copy and reference attributes reach the feature B-rep, temporary
  ones do not.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-31 04:34:25 +01:00
bherbruck ad1640e602 Merge pull request #1883 from altvnk/difftest/copy-edges-geometry
difftest: compare CopyEdges destination geometry in topology.brep_p6
2026-10-30 23:30:48 -04:00
Alex Lytvynenko 6ca9deed19 Merge authoritative upstream/main df64e8281 before CopyFaces validation
Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-31 04:26:53 +01:00
Alex Lytvynenko 6012b32318 difftest: compare CopyFaces destination geometry after copies
Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-31 04:26:53 +01:00
bherbruck 91b8008077 Merge pull request #1621 from ChrisNourse/port/curve-bounded-assert-valid
wire: surface.surface_assert_valid — CurveBoundedSurface checks (WP3b)
2026-10-30 23:03:19 -04:00
Alex Lytvynenko d11de7afcf difftest: compare the CopyEdges destination graph
Preserve all existing state observations and add copied-curve interval/evaluation, vertex and tolerance comparisons. Cover tagged decoding and geometry-only mutations; keep the two empty controls. Record-contract docs and the existing FFI prefix test follow the appended graph.

Co-Authored-By: DeepSeek V4.1 Flash <noreply@deepseek.com>
Co-Authored-By: GPT-6.1 Sol Fast <noreply@openai.com>
2026-10-31 03:37:46 +01:00
chris 16a63c15d5 Merge current main for CurveBoundedSurface review
Co-Authored-By: Codex <noreply@openai.com>

# Conflicts:
#	crates/difftest/src/units/surface_surface_assert_valid.rs
#	crates/solidcore/src/surface/surface/assert_valid.rs
#	plan/units/surface.surface_assert_valid.toml
2026-10-30 18:57:54 -07:00
Brett Lawson e2d4183eca Merge origin/main into port/blend-feature-executive
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-31 02:55:31 +01:00
Brett Lawson 11823eaf6a blend.feature_executive: crash guards, generated cases, ValidatePatch as upstream
- ValidatePatch keeps upstream's GetClassType() comparison, which never fails
  (WR-new record); the two LShape/Platte prog_test cases now pass.
- The shim refuses DoDefeature scripts that crash upstream: a NULL extended
  surface in ExtSurfaceRebuild (-995) and loop edges an applied patch's stitch
  deleted (-996). Each script runs in a fresh child process (60 s), so other
  native crashes and hangs are reported as rejected (UB-new/HANG-new records).
- 123 generated cases: every face of seven fixtures, rebuild-type matrix,
  extension distances, empty/non-bisecting inputs, restore and re-defeature
  sequences, fillet-face groups.
- Unit tests for fix_edge_chain_list (closed edges), edge_number_in_brep and
  an empty AddFeature; CO-PORTED notes on topology.edge and
  topology.topology_traverser.
- Unit blocked: 8 generated cases disagree in ExtSurfaceRebuild patches
  (plan/findings/blend.feature_executive--ext-surface-patch-faces-differ.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-31 02:55:22 +01:00
Brett Lawson afbb89e433 port: blend.feature_executive — SmFeatureExecutive, shim, FFI and runner
First cut of SmFeatureExecutive/SmFeature/SmFeatureLoop (AddFeature x3,
DoDefeature, RestoreFeatures, DefeatureAndRebuild, ValidatePatch,
PlanarCapRebuild, ExtSurfaceRebuild, sm_TrimPatches), with co-ported
SmTopologyTraverser::FixEdgeChainList and SmEdge::GetEdgeNumberInBrep.
The shim drives the real executive from a script; fixtures are the
prog_test smFeatureTest cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-31 00:29:14 +01:00
bherbruck 161bedbf24 Merge origin/main into port/blend-identify-fillet
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 19:12:26 -04:00
bherbruck 0fb0be215e Merge pull request #668 from fkirill/fix/481-oscillation-evaluation-status
fix: forward oscillation opt-in and retain failure regressions (#481)
2026-10-30 19:02:29 -04:00
bherbruck 1ced066a08 Merge pull request #1845 from brett19/difftest/extent2d-scale-op
difftest: geom.extent2d — Scale against the C++ (stacked on #1773)
2026-10-30 19:01:58 -04:00
bherbruck 13a2e3bd83 port: blend.identify_fillet v3 on main (510/510 green; clippy fix)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 18:24:34 -04:00
Brett Lawson 37b1a8d354 Merge origin/main into difftest/extent2d-scale-op
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 22:55:43 +01:00
bherbruck 9bbd31490a Merge origin/main (with #1786) into port/blend-fillet-removal; unit green (170/170)
Rebased step 1 + harness onto main; the 14 one-int graph mismatches close
with #1786's arena record removal. CO-PORTED notes cite PR #1821.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 17:55:41 -04:00
Brett Lawson 019d49ec31 difftest: geom.extent2d Scale op against the C++ SmExtent2d::Scale
Adds op 24 (`Scale`) to the extent2d shim, calling the real
SmExtent2d::Scale with a NULL or non-NULL pOptScaleV, its solidcore-ffi
selector, and a `scale` runner op. The scale cases are kept apart from the
main generator, so its existing cases keep their inputs: 20 named edge cases
(both factors and None, negative and zero factors, -0, every sentinel end,
values one ulp off a sentinel, huge and tiny factors, an inverted and an
Init extent) and 400 generated ones on their own seeds. The Extent2d::scale
doc now notes that a negative factor leaves the extent inverted, as upstream.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 22:44:47 +01:00
bherbruck dfea1b85b0 Merge pull request #1594 from brett19/feat/brep-attributes-blend
Part of #1462 (P3: blend)
2026-10-30 17:09:44 -04:00
bherbruck e758555880 Merge pull request #1595 from brett19/port/brep-transform-matrix
port: SmBrep::Transform with a 4x4 matrix and SmMatrix::SVDecompose (#1570)
2026-10-30 17:05:08 -04:00
bherbruck 762ec05ff4 Merge pull request #1793 from tangency-labs/difftest/issue-1528-volume-query-operand-state
difftest: #1528 — a volume query on the operand writes the same caches in Rust and C++ (operand state)
2026-10-30 16:51:05 -04:00
Kirill Frolov ec14887b0b Merge main and retain oscillation policy forwarding (#481)
Co-Authored-By: Codex <noreply@openai.com>
2026-10-30 23:49:15 +03:00
bherbruck 2c903890a3 Merge origin/main into feat/brep-attributes-blend (green base for difftest-baseline)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 16:25:38 -04:00
bherbruck 0b779b232b Merge pull request #1824 from tangency-labs/difftest/p7-op13-real-faces
difftest: intersect.curve_class_p7 — compare face queries on real B-rep faces (op 13)
2026-10-30 16:24:40 -04:00
bherbruck 8011354a12 difftest: intersect.curve_class_p7 op 13 compares face queries on real B-rep faces
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 15:42:37 -04:00
bherbruck 5be852bbb5 Merge origin/main into wire/surface-assert-valid-offset-siv
Resolve topology.assert_valid.toml notes: main's #1631 copy_ops text and
this PR's #1702 WP3b text both kept in place.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 15:35:08 -04:00
bherbruck 46192aa8fc port: blend.fillet_removal (SmFilletRemoval, DeleteFilletFace) with difftest
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 15:17:57 -04:00
bherbruck 811a9776a7 Merge origin/main into feat/brep-attributes-blend
Conflicts in the fillet_executive_p3 runner and shim resolved keeping both
forms (attributed and two_offset_chamfer); has_other_form also covers
two_offset_chamfer.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 13:58:43 -04:00
bherbruck 0034059648 difftest: #1528 — a volume query on the operand writes the same caches in Rust and C++ (operand state)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 13:51:43 -04:00
Brett Lawson 98be43f78c Merge origin/main into port/brep-transform-matrix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MNXLXj2sJf943y2dDF36Vy
2026-10-30 18:48:20 +01:00
bherbruck ca8b000a37 Merge pull request #1683 from brett19/fix/curve-sweep-from-faces-box
docs(sweep): curve sweep from faces caps only with cap_ends; box-face difftest op
2026-10-30 13:39:16 -04:00
bherbruck 74a0df22fe Merge pull request #1698 from brett19/wire/adv-ssi-get-tree
wire: intersect.adv_surface_intersector — SmSurfaceCache::GetTree
2026-10-30 13:38:42 -04:00
bherbruck a2eb015c21 Merge pull request #1707 from brett19/wire/geom-tol-brep-overloads
wire: geom.tol — SmTol overloads over topology::Brep
2026-10-30 13:38:29 -04:00
bherbruck 2af25a2a59 Merge pull request #1745 from brett19/fix/offset-input-pure
difftest: offset p2 input.pure observes gap caches on the C++ side
2026-10-30 13:37:44 -04:00
bherbruck 901b426358 Merge pull request #1265 from brett19/difftest/eustate-full-curve
difftest: put_eu_state compares the full UV trim curve record
2026-10-30 13:37:14 -04:00
bherbruck 3afd60b091 Merge pull request #1296 from brett19/difftest/step-inversion-nonplanar
difftest: surface.surface_p2 — STEPInversion on torus and cone records with a non-planar generator flag
2026-10-30 13:34:24 -04:00
bherbruck f9e5b09e09 Merge pull request #1309 from altvnk/contrib/wave2-gap-raw-uv
fix: heal.gap — evaluate the exact raw-knot UV trim curve
2026-10-30 13:34:15 -04:00
bherbruck e732dd6c8f Merge pull request #1771 from tangency-labs/difftest/issue-880-half-arc-rim
difftest: #880 — half a smooth rim chain is refused (1001), the whole chain chamfers (WR-582)
2026-10-30 13:16:59 -04:00
Brett Lawson 2ce57db7b8 Merge remote-tracking branch 'fork/wire/curve-assert-valid' into wire/surface-assert-valid-offset-siv 2026-10-30 17:20:55 +01:00
bherbruck 43ed10e548 Merge pull request #1650 from brett19/fix/caller-keyed-ops-owner-identity
fix(topology): one owner identity for binders and check_brep, so ops on caller-keyed copies check valid (#1631)
2026-10-30 15:57:50 +00:00
bherbruck 06f481e112 Merge pull request #1761 from tangency-labs/difftest/heal-data-owner-block
difftest: heal_data runners compare geometry owners
2026-10-30 11:57:18 -04:00
bherbruck 31cc8f8a93 Merge pull request #1768 from tangency-labs/fix/wr569-stitch-nests-cavities
fix: heal.stitch_p2 — stitched solid nests its cavities (WR-569, opt-in)
2026-10-30 11:56:10 -04:00
bherbruck ee0e306ef9 Merge pull request #1733 from tangency-labs/difftest/brep-p2-build-owners
difftest: topology.brep_p2 — owners from the build (stacked)
2026-10-30 11:49:59 -04:00
bherbruck 42245a616a difftest: #880 reproduced — half a smooth rim chain is refused, the whole chain chamfers (WR-582)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 11:47:12 -04:00
bherbruck e8e5d2a3cf Merge pull request #1754 from tangency-labs/difftest/fillet-full-width-919-920
difftest: full-width fillet cases (#919, #920)
2026-10-30 11:24:40 -04:00
bherbruck a597b85cf3 fix: heal — a stitched solid nests its cavities (WR-569, opt-in)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-30 11:18:10 -04:00