Skip to content

v1.33.0: OCCTSwift 1.17.0 repin (Pass 1a audit) + LLM API reference currency

Latest

Choose a tag to compare

@gsdali gsdali released this 30 Jul 01:44

Floor-pin bump of OCCTSwift from 1.15.2 to 1.17.0, picking up Pass 1a of the
OCCTSwift#377 duplication audit
(OCCTSwift#380), plus the API-reference and lockfile currency work that bump exposed.

No behaviour change in this server's own 77 tools. PR #167.

OCCTSwift 1.17.0: what reaches this repo

Two documented source breaks, neither reaching this repo (audited, zero call sites):

  • Surface.drawMesh / Surface.evaluateGrid return a SurfaceGrid struct instead of
    [[SIMD3<Double>]] (OCCTSwift#404). No shim is possible, Swift cannot overload on return type
    alone. Their two old nestings were opposite ([u][v] vs [v][u]), so a mechanical rewrite
    of an evaluateGrid caller transposes its data.
  • The no-tolerance Curve3D.interpolate(points:startTangent:endTangent:) overload is removed
    (OCCTSwift#400): it shadowed its tolerance-aware sibling, so tolerance: was unreachable and
    pinned at 1e-6.

Source-compatible: nine overlapping continuity enums consolidated into SurfaceContinuity +
ParametricContinuity (OCCTSwift#398), every retired name kept as a deprecated alias. This
build emits zero warnings, which confirms nothing here uses one.

Eleven silent behaviour changes (no compiler diagnostic). The headline is an accuracy fix on
the ordinary path, not a failure-path sentinel: Curve3D.length / arcLength* now integrate
per GeomAbs_CN span instead of a single Gauss quadrature across the whole domain
(OCCTSwift#477, measured up to 5% wrong on a multi-span BSpline). Also Surface.approximated()
no-arg defaults, Surface.curvatures(u:v:) resolution, Point2D.distance(to: Curve2D)
returning .infinity instead of -1 when there is no projection (which flips the sense of any
distance < tolerance test), arcLength failure sentinels 0.0 to -1.0, Surface.normal(u:v:)
at a near-degenerate point, zero-radius circle/conic factories, BRepGraph.sampleFaceUVGrid.

Audited against this repo: none reach its own code. There are no arcLength calls on OCCT
curves (ZoneSweepTool's arcLengthDeltaMm is polyline-based, via ProfileMath.polylineLength
over mesh cross-sections), no Curve2D / Point2D / approximated / curvatures /
sampleFaceUVGrid / interpolate call sites at all, and the two normal(atU:v:) call sites are
on the spelling OCCTSwift#401 left unchanged. Every sibling package now compiles against 1.17.0
though (all floor OCCTSwift with from:, so the whole cohort resolves), so the test suite is the
net for anything arriving transitively.

Bridge ABI: v1.17.0 changed OCCTBridge's C ABI. A build with OCCTSWIFT_BRIDGE_PREBUILT=1
must take that release's OCCTBridge.xcframework; a v1.16.1 bridge binary mismatches the Swift
layer and surfaces as missing bridge symbols. OCCT.xcframework is unchanged and stays pinned at
its v1.15.18 asset, so this carries no kernel patch changes.

Fixed: the LLM-facing API reference was stale

src/api-reference.ts is what get_api_reference feeds an LLM before it writes execute_script
code, and it is generated from the OCCTSwift sources. Regenerated against v1.17.0: it had been
advertising the removed interpolate overload, both old [[SIMD3<Double>]] return types, and the
retired ContinuityOrder spelling, so an LLM would have generated code that no longer compiles.

Regenerating also exposed an older rot, pre-dating this release: OCCTSwift v1.15.0 renamed
TopologyGraph to BRepGraph, keeping the old name only as a deprecated typealias. A typealias
declares no methods, so scripts/generate-api-reference.mjs's editorial category rule matched
nothing and the entire topology_graph category (249 lines) would have silently dropped out of
the reference. Fixed to match the real type name; the category now carries 149 declarations. The
key values are untouched because they are the wire values of get_api_reference's category
argument.

Also

  • Package.resolved re-resolved on the remote path. It had been left pinning occtswift 1.15.3,
    below the new floor, satisfying no resolution: an automatic build silently re-resolved and
    rewrote it, and a --disable-automatic-resolution build failed outright.
  • CLAUDE.md and okf/index.md carry the new floor and the detail above, per the docs-current
    policy.

Verification

Run on the fresh-clone path (OCCTSwift resolved from its published v1.17.0 tag, not a local
sibling checkout):

  • swift build: clean, zero warnings
  • swift test: 209 tests in 36 suites, 0 failures
  • tsc: clean; npm test: 31/31