Repository navigation
v4.0.0-beta.5
Pre-releaseThe 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, whereIsDone()was false (OCCT#1177).Shape.filletedat a radius of half the face width now returns a solid.0031is retired (#3065). TheBSplCLib_Cache/BSplSLib_Cachelocks 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: patches0053to0057(deterministic arc-join offset order, fillet blend over an empty obstacle,BRepLib::Planefirst-use race,gp_Coneinertia, cylinder/sphere/torus inertia) are in the pinned asset.- wasm is on
kernel.6as well, andShape.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.defaultTraceLevelandMessenger.setDefaultTraceLevel(_:)(#3029). - Breaks, three, all in
docs/SEMVER.mdwith migrations:Shape.isEmptyShapeis removed, useShape.isNull(#3062);Shape.analyze(tolerance:)orders each wire before counting gaps, so a primitive box readsgapCount == 0andisHealthy == true(#3086);Shape.solid(from:)andsolidWithFullHistory(from:)return the repaired face of a body that stays open (#3089). - Crash to refusal:
middlePath,loftwith fewer than two sections,fromMeshwith 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 inShape.analyze),NLPlatedeformations hit their constraint targets, a concave sheet-metal bend is a valid solid on its closed form,Curve2D.parabolaplaces its focus where asked. - wasm: every per-domain test suite now runs for wasm (#2928),
FilletBuilder.hasResultisfalsebeforebuild()on every platform,MemInfono longer reads a 4 GiB heap on wasm32, and the WASI package no longer linkssetjmp(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
mainin batches. A newrelease-mode-testsCI 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.pyrefuses 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.