From 24fed64f83db1aa7dd12cea0b0cbe710255c75cd Mon Sep 17 00:00:00 2001 From: janik Date: Thu, 23 Jul 2026 13:37:17 +0700 Subject: [PATCH] Release 1.3.0 macOS is now field-tested and working; the README platform notes say so instead of untested. Linux remains audited-only. Co-Authored-By: Claude Fable 5 --- README.md | 34 ++++++++++++++--------------- docs/release-notes/v1.3.0.md | 42 ++++++++++++++++++++++++++++++++++++ metadata.json | 2 +- pyproject.toml | 2 +- uv.lock | 2 +- 5 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 docs/release-notes/v1.3.0.md diff --git a/README.md b/README.md index 11eb400..fc98367 100644 --- a/README.md +++ b/README.md @@ -30,14 +30,14 @@ SWIG API. Requires KiCad **10.0.1+**. ## Setup (one-time) -The plugin is developed and tested on **Windows**. **Linux and macOS -are expected to work but are untested so far** — the code and the -dependency stack have been audited for all three OSes (KiCad builds -the plugin a private Python venv from `requirements.txt` on every -platform, from pre-built wheels only, no compiler needed), but nobody -has run the plugin there yet. Reports welcome! Steps 1–4 are the same -everywhere; OS specifics are spelled out per step and in *Platform -notes* below. +The plugin is developed and tested on **Windows**; **macOS works** +(field-tested on KiCad 10 after a round of mac-specific fixes). +**Linux is expected to work but is untested so far** — the code and +the dependency stack have been audited (KiCad builds the plugin a +private Python venv from `requirements.txt` on every platform, from +pre-built wheels only, no compiler needed), but nobody has run the +plugin there yet. Reports welcome! Steps 1–4 are the same everywhere; +OS specifics are spelled out per step and in *Platform notes* below. 1. **Enable the API server**: KiCad → Preferences → Plugins → check *Enable KiCad API*. @@ -78,15 +78,15 @@ notes* below. - **Windows** is the development and test platform — everything in this README was exercised here. KiCad's bundled Python is 3.13, so the venv gets the current dependency stack. -- **macOS** — **untested** (audited only: dependency wheels, paths and - Python-version compatibility were checked, the plugin was never run - on a Mac). Requires macOS 12+ (KiCad's own minimum; Intel and Apple - Silicon — the dmg is universal). KiCad's bundled Python is **3.9**, - so pip resolves an older stack (numpy 2.0, scipy 1.13, - matplotlib 3.9, PySide6 6.9/6.10) that the plugin code is kept - compatible with. Expect plot and dialog windows to open **behind** - the KiCad window (they are raised best-effort) — check the Dock if - nothing seems to appear after a solve. +- **macOS** — **works** (field-tested on KiCad 10). Requires + macOS 12+ (KiCad's own minimum; Intel and Apple Silicon — the dmg + is universal). KiCad's bundled Python is **3.9**, so pip resolves + an older stack (numpy 2.0, scipy 1.13, matplotlib 3.9, + PySide6 6.9/6.10); the plugin code is kept 3.9-compatible (guarded + by a test) and the suite is also run against that older stack. + Plot and dialog windows may open **behind** the KiCad window (they + are raised best-effort) — check the Dock if nothing seems to appear + after a solve. - **Linux** — **untested** (audited only, same caveat). The venv uses the system Python (3.9+), so the stack matches your distribution. On **ARM64 (aarch64)** there are no pyamg wheels — diff --git a/docs/release-notes/v1.3.0.md b/docs/release-notes/v1.3.0.md new file mode 100644 index 0000000..992f4a5 --- /dev/null +++ b/docs/release-notes/v1.3.0.md @@ -0,0 +1,42 @@ +The plugin now works on macOS. Results are unchanged from 1.2.2 for +the same board and settings - nothing in the numerics was touched; +this release is platform fixes and per-OS documentation. + +macOS (field-tested on KiCad 10): + +- Fixed a crash on launch. KiCad's macOS builds bundle Python 3.9, + and one module's type annotations were evaluated at import there + ("unsupported operand type(s) for |: 'type' and 'NoneType'"). The + plugin now runs on 3.9, and a test walks every shipped module so + the incompatibility cannot silently return. +- Fixed every figure - the error figure included - refusing to render + with "Cannot load backend 'TkAgg' ... as 'qt' is currently + running". macOS' bundled Python ships tkinter, so matplotlib + preferred Tk while the selection dialog had already made the + process a Qt one. Qt (PySide6, a hard dependency) is now always + the first choice on every platform. +- A board in a read-only location - such as the demo projects opened + straight from the mounted installer image - no longer kills the run + when the results directory cannot be created next to the board. + Results fall back to a temp directory and the path is printed to + the Messages panel. +- The test suite additionally runs against the stack a Mac plugin + environment actually resolves (Python 3.9, numpy 2.0, scipy 1.13, + matplotlib 3.9, PySide6 6.10) - 140 tests on both stacks. + +Linux: + +- On ARM64 (aarch64) the plugin environment could never build: pyamg + publishes no wheels for that platform, KiCad installs wheels only, + and one unresolvable requirement fails the whole environment. + pyamg is now skipped there and the solver falls back to Jacobi-CG - + same results, noticeably slower on large grids. Linux as a whole + remains untested; reports welcome. + +Documentation: + +- Setup now gives dedicated instructions per operating system: which + interpreter path to check, how to deploy, and where the plugin's + Python environment lives on Windows, macOS and Linux (for the + delete-and-restart recovery). A platform-notes section records what + is actually tested on each OS and what to expect there. diff --git a/metadata.json b/metadata.json index 992ac51..6f1c67d 100644 --- a/metadata.json +++ b/metadata.json @@ -17,7 +17,7 @@ }, "versions": [ { - "version": "1.2.2", + "version": "1.3.0", "status": "stable", "kicad_version": "10.0", "runtime": "ipc" diff --git a/pyproject.toml b/pyproject.toml index 835f8a5..ef12457 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ # the dependency list there in sync with [project.dependencies]. [project] name = "fill-resistance" -version = "1.2.2" +version = "1.3.0" description = "DC resistance of copper zone fills and traces between two contacts (KiCad 10 plugin)" license = "GPL-3.0-or-later" requires-python = ">=3.11" diff --git a/uv.lock b/uv.lock index 28d0eea..4f3138e 100644 --- a/uv.lock +++ b/uv.lock @@ -216,7 +216,7 @@ wheels = [ [[package]] name = "fill-resistance" -version = "1.2.2" +version = "1.3.0" source = { virtual = "." } dependencies = [ { name = "kicad-python" },