Skip to content

cycloidgen v7.1.1

Choose a tag to compare

@github-actions github-actions released this 07 Aug 15:34
· 23 commits to main since this release

Numbers

  • Nothing computed moved. Every quantity this reports is what 7.1.0
    reported, to the digit — the export from the trimmed bundle was compared file
    by file against one built with every dependency present, and all 29 came out
    the same size. This release is packaging, documentation and one dialog.

Fixed

  • "Design for requirements" could not be made to fit a short screen, which
    put the buttons that end it out of reach. Four group boxes and the Search
    button came to 832 px of minimum height; a dialog inherits the minimum of what
    is inside it, so the window could not be sized below 885 px with its frame on
    resize(1080, 660) asked for 660 and silently got 854. On anything shorter
    than that, the Use this design and Cancel box at the bottom of the results
    column sat off the bottom of the screen, and dragging the edge did nothing,
    because the window was already as small as it was allowed to be. A 1366x768
    laptop is short enough. So is a 1080p panel at 150% scaling, where the
    logical height is 720.

    The requirements form now scrolls, which is what breaks the inheritance: the
    dialog's minimum height goes from 854 px to 156 px and it is bounded by the
    results column, which stretches, rather than by the tallest thing in it.

    Search stays outside the scrolled part, pinned under it. Putting it in with
    the fields would have fixed the reaching problem by handing it to the button
    the dialog exists to have pressed — on a short screen it would have been below
    the fold, which is where the button box was to begin with.

    The failure was not that it looked cramped. Both buttons that close the dialog
    were unreachable, so the feature could be opened and not used.

  • The macOS instructions deleted the application. They offered System
    Settings ▸ Privacy & Security ▸ Open Anyway
    first and xattr -dr com.apple.quarantine as an alternative, which reads as "open it, then deal
    with the warning". On macOS 15 and later that warning's default button is
    Move to Trash. A tester on macOS 26 followed the README exactly and watched
    the 1.3 GB install go to the Trash without the application ever running —
    Gatekeeper blocked the launch, then syspolicyd moved the bundle. Open
    Anyway
    is not in that dialog at all; it appears in System Settings only
    after a launch has already been blocked, and right-click ▸ Open stopped
    bypassing Gatekeeper in macOS 15.

    So the order is reversed everywhere it appears — the README, the generated
    release notes and RELEASING.md — and the clearing step now comes before the
    first launch, where it produces no dialog at all. A test holds the order,
    because it is prose in two files, one of them a heredoc inside a workflow,
    and reflowing it back the wrong way is a plausible tidy-up.

    Being unsigned was known and stated. What was not stated is that the easiest
    click destroys the install, which is the difference between a warning and a
    trap.

  • --version from the .app does not print while the bundle is
    quarantined.
    The README explained why a windowed macOS build still answers
    on the command line and offered the command as proof. True for the bundle the
    release workflow builds, which never carries the flag, and false for the one
    a user downloads: Gatekeeper blocks the exec as well as the double-click,
    so the command hangs for about ten seconds and prints nothing. It answers
    normally once the quarantine flag is cleared, and the claim now says so.

    Both of these came from a tester on real hardware. Neither could have been
    caught here: the release workflow runs the binary out of the mounted image
    and it passes, because a file the workflow built itself was never quarantined
    in the first place.

Changed

  • The bundle is 790 MB, down from 1.2 GB. 444 MB of it, 36%, was three
    packages that CadQuery declares as dependencies and this application never
    imports: casadi, an interior-point optimiser, at about 220 MB; numba with
    LLVM behind it at 142 MB; and trame, a browser viewer, at 20 MB. CadQuery
    declares what CadQuery can do, not what one caller uses.

    The note this replaces said the bundle was "essentially all OCCT" and
    suggested a build without the CAD kernel for anybody who cared. Both halves
    were wrong. OCCT is 152 MB — 12% — and the optimiser that arrives beside it is
    larger than it is, so the prescribed remedy would have given up STEP and STL
    export, which is half the point of the tool, to save a third of what came off
    by shipping the same features with less beside them. The size was a plausible
    guess nobody had weighed; measuring it took one pass and reversed the answer.

    Nothing is dropped on the strength of not finding an import. Each package is
    made unimportable and the whole suite is run against that — 778 tests — and the
    export is compared file by file against one from an environment with every
    dependency present: 29 files, identical sizes, kernel path included.

    casadi needed more than an exclusion, because it is imported whether it is
    used or not: cadquery/__init__.py reaches occ_impl.solver, which imports it
    at the top. So packaging/rthook_casadi.py stands in for it, and what makes
    the substitution safe is where the module uses it — all thirty-seven
    references are inside function bodies, and the only names that run at import
    are two annotations. Reading a name off the stand-in works, which is all an
    annotation needs; calling one raises with a sentence saying the solver was left
    out. This application constrains no assemblies — every part is placed by an
    explicit transform off the kinematics — so the limit is real but unreachable
    from the application, and pip install cycloidgen brings the genuine article.

    Not done, and measured rather than left vague: about 123 MB of VTK is never
    loaded either. It is left in because it cannot be checked the way the rest
    was. Excluding a VTK module is a missing DLL in a frozen build, not a failed
    import in a virtual environment, so the test suite would go green on a bundle
    that had lost the 3D view.


Windows - cycloidgen_..._Setup.exe. It is unsigned, so
SmartScreen will warn on first run: More info -> Run anyway. A
signed build is planned.

Linux - cycloidgen-...-x86_64.AppImage. chmod +x and run it;
it needs glibc 2.35 or newer. If it will not start, the machine has no
FUSE 2: install libfuse2, or run the file with
--appimage-extract-and-run, which unpacks it instead of mounting it.

macOS - cycloidgen-...-arm64.dmg, Apple silicon. Drag it to
Applications, then run this before opening it:

xattr -dr com.apple.quarantine /Applications/cycloidgen.app

It is signed ad-hoc but not notarized, so Gatekeeper blocks the first
launch. On macOS 15 and later the dialog it raises defaults to
Move to Trash, which deletes the install - there is no Open
Anyway
in that dialog, it appears in System Settings only after a
launch has been blocked, and right-click -> Open no longer bypasses
it. Clearing the flag first avoids the dialog entirely. On an Intel
Mac, use pip.

Anywhere with Python 3.10-3.12: pip install cycloidgen, then
cycloidgen.

The numbers this produces are preliminary sizing estimates, not a
certification. Validate against a physical prototype before anything
load-bearing depends on them.