Skip to content

Release workflow fixes, cut_rsolid_list, unified geometry tolerance (2.2.7b1) - #61

Merged
NiJingzhe merged 10 commits into
devfrom
fix/release-workflow
Oct 25, 2026
Merged

NiJingzhe merged 10 commits into
devfrom
fix/release-workflow

Conversation

@NiJingzhe

Copy link
Copy Markdown
Collaborator

Fixes found by the release dry runs, plus one correctness fix found while testing.

  • Release workflow: prebuilt wheels for four platforms, static OpenCASCADE cache, Windows/macOS portability, PyPI publish job.
  • Tests: one geometry tolerance for the parity suite; the modeled-thread phase is a search result, not a contract.
  • cut_rsolid_list(base, *tools) keeps every piece of a cut. cut_rsolid returned only the first piece when a cut split the body (a slot through a bar lost half the bar); it now raises and names cut_rsolid_list.

Tests: src/cpp/tests/python 468 passed; full dry run of the release workflow (4 wheels, Python 3.10-3.13) re-run on this head.

🤖 Generated with Claude Code

NiJingzhe and others added 10 commits October 24, 2026 11:33
setup-uv's post step failed the validate job: nothing had been cached.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
… platforms and keeps the OCCT cache

First runs of the release workflow on GitHub found portability errors that the local toolchains accept:
- Apple clang 15 (Xcode 15.4) cannot capture a structured binding in a lambda (role_tags.cpp);
- windows.h defines near and far as empty macros: parameters and locals named near/far/small are renamed
  (probes.cpp, sketch/diagnostics.cpp and the C++ tests).
Checked the whole C++ tree with clang 15 + libc++ 15: no other failure.

Workflow: a platforms input for dry runs, Ninja with -k 0 on Windows (all compiler errors in one run), the static
OCCT cache is saved even when the wheel build fails, setup-uv without a cache where nothing is cached.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…source tree

The validation workers put the checkout's src on PYTHONPATH first; with a wheel installed and no in-place build that
imported a package without its compiled module.  src is added only when it is a built tree.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
OpenCASCADE's integration over the B-spline thread faces differs between builds at the 1e-5 level (the static OCCT of
the Linux wheels against the reference's); the geometry is the same.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…ception per case

Areas, volumes and bounding boxes of the parity tests come out of OpenCASCADE's numerical integration and
optimisation, which differ between OCCT builds at the 1e-5 level.  GEOMETRY_REL (ref.py) is the default of every
comparison helper; counts, names, ids and strings are still compared exactly.  Replaces the per-name exception for
the modeled-thread areas.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The builders keep the first candidate angle whose Boolean is valid; which one that is
depends on last-bit floating point of the helix sweep, so it differs between platforms.
The angle and the topology counts it implies are dropped from the comparison.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…rop pieces

A cut that splits the body returned only the first solid from cut_rsolid, silently losing the rest
(a slot through a bar reported half the volume). cut_rsolid_list returns all pieces (empty when the
body is consumed), is recorded as make_cut_rsolid_list and replays. cut_rsolid now raises when the
result is not exactly one solid and names cut_rsolid_list. Tests that relied on the dropped sliver
of a tangent cut use a tool that does not touch the walls.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@NiJingzhe
NiJingzhe merged commit 1df7521 into dev Oct 25, 2026
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant