This repo — Tier 2. Current pins: OCCTSwift from: "1.3.1", OCCTSwiftTools from: "1.1.1". Action: bump both to their p1 releases (OCCTSwift from: "1.7.1"), validate, release (DesignLoop/PartsAgent depend on you).
Why this issue
OCCTSwift has moved from the OCCT 8.0.0 GA cohort to OCCT 8.0.0p1, in two releases:
- v1.7.0 — the OCCT 8.0.0 → 8.0.0p1 dependency upgrade (with a comprehensive BRepGraph rewrap).
- v1.7.1 — p1 follow-up operations + a corrected (clean-headers) xcframework.
Every ecosystem package needs to validate against and re-pin to the p1 cohort (≥ 1.7.1), in dependency order (see below). This issue documents exactly what changed so you can assess impact.
What changed in OCCTSwift (GA → 8.0.0p1)
Kernel / binary
- Bundled OCCT bumped 8.0.0 GA → 8.0.0p1 (
V8_0_0_p1). Our upstream BRepFill_CompatibleWires loft-SIGSEGV fix (#176) shipped in p1, so the carried source patch was dropped.
- The v1.7.1 xcframework has clean headers — v1.7.0 accidentally bundled 18 stale GA headers (a CMake install-prefix wasn't cleaned). They had no symbols (harmless) but were misleading; fixed in v1.7.1. Pin ≥ 1.7.1.
Removed / migrated OCCT classes (source-level, may affect you if you call the bridge directly)
Approx_BSplineApproxInterp removed → BSplineApproxInterp is now backed by GeomAPI_PointsToBSpline. Same Swift API, but nbControlPoints is advisory and interpolatePoint(_:withKink:) is a no-op (the replacement has no per-point exact-interpolation). maxError is computed by projection.
GeomFill_GordonBuilder removed; GeomFill_Gordon reworked (source-compatible — Surface Gordon wrapping unchanged).
BRepGraph_RepId relocated to the BRepGraphInc subpackage.
⚠️ BRepGraph / TopologyGraph — comprehensively redesigned (the main behavioural change)
OCCT redesigned BRepGraph around 9 separated concerns (see OCCT discussion #1291): topology definitions vs references/usages, geometry reps, mesh reps, products/occurrences, persistent UIDs, metadata layers, modification stamps (not booleans), self-invalidating caches; coedges are first-class; natural-bound faces are normalized; regularity/ownership are layers; locations live on occurrence/child refs. Concretely, in TopologyGraph:
- Setters for now-derived flags are no-ops (the getters return the live derived value):
setEdgeSameParameter/SameRange/Degenerate/IsClosed, setWireIsClosed, setShellIsClosed, setFaceNaturalRestriction. If you relied on setting these, that no longer applies.
setEdgeRegularity / edgeMaxContinuity are no-ops — there is no p1 graph-level regularity layer. Use shape-level Shape.maxContinuity (BRep_Tool::MaxContinuity).
- Per-subshape ref local-location setters are no-ops (locations now live only on occurrence/child assembly refs).
SameParameter/SameRange are now per-CoEdge derived properties.
- Mesh/geometry representations are handle-based; the integer "rep id" API is preserved via an internal registry but the model is now handle-attach.
- The integer rep ids you may have stored are session-local — for durable identity use the new UID/RefUID/ItemUID accessors (added in v1.7.1).
- Face/edge adjacency, shared-edges, and same-domain are now derived from first-class reverse relations (results unchanged; implementation rebuilt).
p1 crash fixes (OS-signal null-derefs — you get these for free)
Extrema_ExtElCS line∥cylinder-axis; ShapeUpgrade_WireDivide / ShapeFix_ComposeShell (now set the mandatory ReShape context); Wire.rectangle rejects sub-Precision::Confusion() dimensions.
New in v1.7.1 (additive — opt-in)
- BRepGraph durable identity:
TopologyGraph uid(ofNodeKind:index:) / node(forUID:) / contains(uid:) + ref/item variants + generation.
Surface.networkSurface(profiles:guides:tolerance:) (GeomFill_NetworkSurface) and Surface.gordonReport(...) (Gordon status / approximate-fallback).
Polygon2D.copy(), PolygonOnTriangulation.copy()/setNodes()/setParameters().
- BRepGraph vertex-supplement:
faceAddVertex/edgeAddInternalVertex/faceRemoveVertex/faceNbVertexRefs (uid/shape-based; were no-op stubs in v1.7.0). Signatures finalized — faceAddVertex/edgeAddInternalVertex now return the attachment uid; faceRemoveVertex(_:attachmentUID:).
Re-pin checklist for this repo
- Wait for your upstream ecosystem deps to release p1-validated versions first (dependency order below).
- Bump your OCCTSwift (and ecosystem) dependency minimum to
from: "1.7.1".
swift build + run your tests against the p1 cohort. Pay attention if you touch TopologyGraph setters / regularity / rep-ids / BSplineApproxInterp.
- Run tests with
swift test --no-parallel — the kernel has a pre-existing non-deterministic NCollection arm64 race under parallel execution (unrelated to p1).
- Tag a release so your downstreams can re-pin to you.
Ecosystem dependency / release order
- Tier 1 (depend only on OCCTSwift — release first):
OCCTSwiftIO, OCCTSwiftMesh, OCCTSwiftTools, swiftGCS.
- Tier 2 (depend on Tier 1):
OCCTSwiftAIS (→ Tools), OCCTSwiftScripts (→ OCCTSwift + Tools), OCCTMCP (→ OCCTSwift + Mesh).
- Tier 3 (depend on Tier 2):
OCCTSwiftUX (→ OCCTSwift + Tools + AIS), OCCTDesignLoop (→ OCCTSwift + Tools + Scripts), OCCTReconstruct (→ OCCTSwift + swiftGCS), OCCTSwiftPartsAgent (→ OCCTSwift + Scripts).
Staying on OCCT 8.0.0 GA during the transition
Pin OCCTSwift ≤ v1.6.3 — those tags resolve the GA binary from the untouched v1.3.2 release. The v1.7.0/v1.7.1 releases also re-attach OCCT-8.0.0-GA.xcframework.zip for direct use.
Filed as part of the OCCT 8.0.0p1 ecosystem re-pin. OCCTSwift v1.7.1: https://github.com/gsdali/OCCTSwift/releases/tag/v1.7.1 · full detail in CHANGELOG.
This repo — Tier 2. Current pins:
OCCTSwift from: "1.3.1",OCCTSwiftTools from: "1.1.1". Action: bump both to their p1 releases (OCCTSwiftfrom: "1.7.1"), validate, release (DesignLoop/PartsAgent depend on you).Why this issue
OCCTSwift has moved from the OCCT 8.0.0 GA cohort to OCCT 8.0.0p1, in two releases:
Every ecosystem package needs to validate against and re-pin to the p1 cohort (≥ 1.7.1), in dependency order (see below). This issue documents exactly what changed so you can assess impact.
What changed in OCCTSwift (GA → 8.0.0p1)
Kernel / binary
V8_0_0_p1). Our upstreamBRepFill_CompatibleWiresloft-SIGSEGV fix (#176) shipped in p1, so the carried source patch was dropped.Removed / migrated OCCT classes (source-level, may affect you if you call the bridge directly)
Approx_BSplineApproxInterpremoved →BSplineApproxInterpis now backed byGeomAPI_PointsToBSpline. Same Swift API, butnbControlPointsis advisory andinterpolatePoint(_:withKink:)is a no-op (the replacement has no per-point exact-interpolation).maxErroris computed by projection.GeomFill_GordonBuilderremoved;GeomFill_Gordonreworked (source-compatible —SurfaceGordon wrapping unchanged).BRepGraph_RepIdrelocated to theBRepGraphIncsubpackage.TopologyGraph— comprehensively redesigned (the main behavioural change)OCCT redesigned BRepGraph around 9 separated concerns (see OCCT discussion #1291): topology definitions vs references/usages, geometry reps, mesh reps, products/occurrences, persistent UIDs, metadata layers, modification stamps (not booleans), self-invalidating caches; coedges are first-class; natural-bound faces are normalized; regularity/ownership are layers; locations live on occurrence/child refs. Concretely, in
TopologyGraph:setEdgeSameParameter/SameRange/Degenerate/IsClosed,setWireIsClosed,setShellIsClosed,setFaceNaturalRestriction. If you relied on setting these, that no longer applies.setEdgeRegularity/edgeMaxContinuityare no-ops — there is no p1 graph-level regularity layer. Use shape-levelShape.maxContinuity(BRep_Tool::MaxContinuity).SameParameter/SameRangeare now per-CoEdge derived properties.p1 crash fixes (OS-signal null-derefs — you get these for free)
Extrema_ExtElCSline∥cylinder-axis;ShapeUpgrade_WireDivide/ShapeFix_ComposeShell(now set the mandatory ReShape context);Wire.rectanglerejects sub-Precision::Confusion()dimensions.New in v1.7.1 (additive — opt-in)
TopologyGraphuid(ofNodeKind:index:)/node(forUID:)/contains(uid:)+ ref/item variants +generation.Surface.networkSurface(profiles:guides:tolerance:)(GeomFill_NetworkSurface) andSurface.gordonReport(...)(Gordon status / approximate-fallback).Polygon2D.copy(),PolygonOnTriangulation.copy()/setNodes()/setParameters().faceAddVertex/edgeAddInternalVertex/faceRemoveVertex/faceNbVertexRefs(uid/shape-based; were no-op stubs in v1.7.0). Signatures finalized —faceAddVertex/edgeAddInternalVertexnow return the attachment uid;faceRemoveVertex(_:attachmentUID:).Re-pin checklist for this repo
from: "1.7.1".swift build+ run your tests against the p1 cohort. Pay attention if you touchTopologyGraphsetters / regularity / rep-ids /BSplineApproxInterp.swift test --no-parallel— the kernel has a pre-existing non-deterministic NCollection arm64 race under parallel execution (unrelated to p1).Ecosystem dependency / release order
OCCTSwiftIO,OCCTSwiftMesh,OCCTSwiftTools,swiftGCS.OCCTSwiftAIS(→ Tools),OCCTSwiftScripts(→ OCCTSwift + Tools),OCCTMCP(→ OCCTSwift + Mesh).OCCTSwiftUX(→ OCCTSwift + Tools + AIS),OCCTDesignLoop(→ OCCTSwift + Tools + Scripts),OCCTReconstruct(→ OCCTSwift + swiftGCS),OCCTSwiftPartsAgent(→ OCCTSwift + Scripts).Staying on OCCT 8.0.0 GA during the transition
Pin OCCTSwift ≤ v1.6.3 — those tags resolve the GA binary from the untouched v1.3.2 release. The v1.7.0/v1.7.1 releases also re-attach
OCCT-8.0.0-GA.xcframework.zipfor direct use.Filed as part of the OCCT 8.0.0p1 ecosystem re-pin. OCCTSwift v1.7.1: https://github.com/gsdali/OCCTSwift/releases/tag/v1.7.1 · full detail in CHANGELOG.