Skip to content

v4.0.0-beta.1

Pre-release
Pre-release

Choose a tag to compare

@gsdali gsdali released this 26 Aug 22:55
· 256 commits to main since this release
c27d252

Pre-release checkpoint toward v4.0.0, not a release in its own right. Per
docs/v4.0.0-plan.md:
betas are published as GitHub pre-releases, never as the repo's latest release, the same
mechanism already used for v2.0.0-kernel.1/v3.0.0-kernel.1. Confirm this looks right on your
own tooling before depending on it: correctly-formed SemVer prerelease tags are excluded from
"latest" resolution by both SwiftPM and the Swift Package Index by design.

The kernel does not move. Still OCCT V8_0_1 plus the seventeen carried patches pinned at
v3.0.0. Nothing in this checkpoint touches Package.swift's kernel pin.

Why v4.0.0 rather than a v3.x patch: five PRs merged since v3.0.0 already carry a MAJOR
## SemVer impact (Document.commitWithDelta()'s undo-limit regression, five nlPlateDeformed*
functions, OCCTDatumInfo.name's removal, and two Bool? migrations across checkOuterBound and
SAWireAnalysis), so the next tag is a major independent of anything in this beta. See the plan
doc for the full breaking-change register (assembled into SEMVER.md at the final v4.0.0 tag,
not per beta).

What's in this checkpoint

Milestone v4.0.0-beta.1, the loose tail
of small, already-scoped chores and doc fixes sitting in Pass 4a's orbit, now fully closed:

  • #1010: BRepGraph occurrence placements are readable for the first time (shape(nodeKind: .occurrence, nodeIndex:) now applies the occurrence's placement), two orphaned bridge functions
    resolved (Shape.edgeEdgeExtrema exposed, OCCTWireMakeWireFromEdges removed as redundant), and
    a latent bug found along the way: kindFromInt()'s bridge-side node-kind translator never had
    cases for Product/Occurrence, silently mapping both to Solid.
  • #1044: 65 Class::Member doc attributions outside the refman-coverage audit's features lane,
    adjudicated against the pinned OCCT 8.0.1 headers; all genuine drift corrected, all legitimate
    exceptions recorded.
  • #1047: Shape.withPrism now does what its name and docs say (a feature prism), not an
    extrude-plus-boolean.
  • #1052, #1062, #1063: gate-script and doc-comment accuracy fixes (check-null-handle-guards.py,
    derive-gdt-enums.py, Curve2D.Parameterisation/GD&T doc comments).
  • #949, #950, #951, #976: bridge-side duplication cleanup (document creation, naming trace,
    format-enumeration, and OBJ/PLY export boilerplate).
  • #781: ten genuinely-computable arrow-notation qualifier sites resolved.

Plus, picked up alongside:

  • #687: Curve2D.swift's foreign material (the Gcc solver family, IntAna2d, Extrema2d, 962
    lines across 13 declarations) split into dedicated files. Pure reorganization, no public API
    change; #377's file-breakout workstream first item, sequenced ahead of the rest of v4.0.0's
    scope so later lanes work in smaller files.

No public Swift API removed or changed signature in this checkpoint. The BRepGraph/
edgeEdgeExtrema additions are purely additive.

Verification

  • Full swift test clean (5,933+ tests) after both merges, no regressions.
  • All eight static gate scripts plus their --self-tests clean.
  • python3 Scripts/count-operations.py: 4,369, agrees with README/API_REFERENCE/docs/index.md
    (unaffected by either merge, as expected: one is additive, the other is a pure file move).

What's next

Per the plan doc: v4.0.0-beta.2 is Pass 4b (#386, Drawing/2D annotation duplication audit) and
its findings, at minimum, opening at the same kind of natural boundary this one did. Further betas
follow roughly one per closed source lane, with v4.0.0 itself only once Phase 6 closes and the
plan's four release-candidate exit criteria are met with no new findings.