Skip to content

v4.0.0-beta.5

Pre-release
Pre-release

Choose a tag to compare

@gsdali gsdali released this 10 Oct 10:57
· 469 commits to main since this release
8124f49

The beta that pins v4.0.0-kernel.6 and puts a validity guard behind every fillet and chamfer. Since v4.0.0-beta.4 about 120 pull requests have merged: a kernel repin on both platforms, a set of measured correctness fixes in the Swift and bridge layers, and a reorganisation of the test tree into area directories with the strengthened tests lifted off the v5 branch.

Kernel: v4.0.0-kernel.6

OCCT V8_0_1 plus 45 carried patches, native and wasm, on the same release. Scripts/check-wasm-kernel-parity.py reports the two clean.

  • 0058 (#3105): Shape.middlePath(start:end:) no longer aborts the process inside the kernel for a pair of faces that are not a pipe's two ends. Pairs that already answered answer the identical path (measured, 42 of 42).
  • 0059 (#3207): two fillets whose radii sum to the width of the face between them are built, where IsDone() was false (OCCT#1177). Shape.filleted at a radius of half the face width now returns a solid.
  • 0031 is retired (#3065). The BSplCLib_Cache/BSplSLib_Cache locks masked a sharing pattern that was never documented as supported (one adaptor shared between threads); the adaptor-per-worker rule is now stated and tested.
  • v4.0.0-kernel.5 (#3151) also falls in this range: patches 0053 to 0057 (deterministic arc-join offset order, fillet blend over an empty obstacle, BRepLib::Plane first-use race, gp_Cone inertia, cylinder/sphere/torus inertia) are in the pinned asset.
  • wasm is on kernel.6 as well, and Shape.isSelfIntersecting(hardTimeout:) now exists on wasm with a cooperative bound (#2760).

Fillet and chamfer validity guard (#3200, #3232)

Every fillet and chamfer entry point (filleted, chamfered, the two-distance and distance-angle chamfers, filletedVariable, blendedEdges and their siblings) now answers nil for a result the kernel reported done and BRepCheck found invalid. A valid result is unchanged to the last digit. A caller that force-unwrapped the old result now traps at the unwrap, though what it held was unusable.

FeatureReconstructor skips a boolean whose result volume its operands cannot allow (#3231, #3196) and a boolean with a solid-less operand (#3174), and its revolve builds a Solid (#3139). A feature that used to be reported fulfilled with a wrong result is now listed in skipped, which the documented contract already promised.

Also in this beta

  • New API: GProps, the global properties of a partial cylinder, cone, sphere or torus (#3091); Messenger.defaultTraceLevel and Messenger.setDefaultTraceLevel(_:) (#3029).
  • Breaks, three, all in docs/SEMVER.md with migrations: Shape.isEmptyShape is removed, use Shape.isNull (#3062); Shape.analyze(tolerance:) orders each wire before counting gaps, so a primitive box reads gapCount == 0 and isHealthy == true (#3086); Shape.solid(from:) and solidWithFullHistory(from:) return the repaired face of a body that stays open (#3089).
  • Crash to refusal: middlePath, loft with fewer than two sections, fromMesh with an out-of-range triangle index, the extrusion, draft, revolve and mesh builders on zero, NaN or overflowing input, revolve past 1e4 radians, HatchBuilder.nbIntervals, and a fillet blend over an empty obstacle.
  • Measured values corrected: edge lengths use adaptive arc length (Edge.length, totalEdgeLength, linearProperties(), the small-edge count in Shape.analyze), NLPlate deformations hit their constraint targets, a concave sheet-metal bend is a valid solid on its closed form, Curve2D.parabola places its focus where asked.
  • wasm: every per-domain test suite now runs for wasm (#2928), FilletBuilder.hasResult is false before build() on every platform, MemInfo no longer reads a 4 GiB heap on wasm32, and the WASI package no longer links setjmp (a consumer whose own dependency calls it supplies -lsetjmp).
  • Tests: the per-domain test targets are organised into area directories (#3147, #3202), misplaced files moved to the target they test, and the strengthened assertions on the v5 branch (#766, #2983) lifted onto main in batches. A new release-mode-tests CI job runs the suite in an optimised build (#3130, #3259), and the borrowed-handle rule is documented on the seven public handle properties (#3248).
  • Tooling: the style exemption manifests are retired (#3066), CI orders the cheap checks first and wasm last, and merge-pr.py refuses to merge until every non-wasm check is green (#3055).

Still a pre-release

v4.0.0 is a major by SemVer Rule 2. The breaks are listed with migrations in docs/SEMVER.md, and the full history is in docs/CHANGELOG.md.

Verification

CHANGELOG audited with --verify-transcribed (result recorded in the release PR). Both kernel pins checked by check-wasm-kernel-parity.py, clean with no acknowledgement. Every static gate and its self-test green. Operation count derives 4,391 and agrees with every headline. Full swift test against the pinned v4.0.0-kernel.6 asset ran 6914 tests with 0 failures (kernel.6 repin, #3260), and the macOS, iOS-simulator, release-mode and wasm CI jobs are green on the merged commits.