Skip to content

fix(release): unblock x86_64 minos verify + CI pip-audit gate - #155

Merged
rutefig merged 4 commits into
mainfrom
rutefig/local-release
Apr 28, 2026
Merged

fix(release): unblock x86_64 minos verify + CI pip-audit gate#155
rutefig merged 4 commits into
mainfrom
rutefig/local-release

Conversation

@rutefig

@rutefig rutefig commented Apr 28, 2026

Copy link
Copy Markdown
Collaborator

Two release-pipeline fixes that together unblock end-to-end CI release:

1. x86_64 numpy minos regression — pin numpy<2.0

Local-release flow: NumPy 2.x dropped older macOS wheel targets — its only cp312 x86_64 wheels are tagged macosx_14_0. The existing constraint numpy<2.1 allowed pip to pull numpy 2.0.2, whose _multiarray_umath.so has LC_BUILD_VERSION minos=14.0 — failing the minos<=11.0 Big Sur gate. Capping to <2.0 lands pip on 1.26.4, which ships macosx_10_9_x86_64 cp312 wheels (minos 10.9, passes).

Skill change adds MACOSX_DEPLOYMENT_TARGET=11.0 to the local x86_64 install step, mirroring the workflow-level env var in .github/workflows/release.yml:14. The env var alone wouldn't have fixed the wheel resolution (no macosx_11_0 cp312 wheel exists for numpy 2.0.x), but it keeps pip's tag preference consistent with CI on Tahoe (macOS 26.x) hosts.

Gitignore catches arch-suffixed venvs (.venv-x86_64/) the skill creates during --arch x86_64 and --arch both builds.

2. CI pip-audit gate blocked by CVE-2026-3219 — upgrade pip to >=26.1

release.yml has been failing at the Audit dependencies step on every recent tag push (v0.17.1, v0.18.0, v0.19.0 confirmed). Runner-shipped pip 26.0.1 is flagged by pip-audit for CVE-2026-3219 (tar/ZIP polyglot confusion in archive-format detection). pip 26.1 ships the fix. The arm64 job exits non-zero, matrix fail-fast cancels x86_64, and release / promote-latest / verify-install all skip. Released artifacts have been coming from /local-release instead of CI for the last three tags.

The CVE is real (CVSS 4.6 MEDIUM, integrity-only, requires user interaction) but realistically low risk against this build — closed PyPI install, fixed package list, pip is not bundled in the released binary. Worth patching anyway since the fix is one line.

Verified

  • pip install --dry-run with the new constraint resolves to numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl
  • _multiarray_umath.cpython-312-darwin.so LC_VERSION_MIN_MACOSX is 10.9 ✅
  • The full local-release flow that produced screencap-0.19.0-x86_64.tar.gz (with the manual numpy override) passed minos verify and the 9-check _smoke-test
  • CI pip-audit fix verified by reading the v0.19.0 failed log: `Found 1 known vulnerability in 1 package / pip 26.0.1 / CVE-2026-3219`. pip 26.1 release notes confirm the fix landed in Refactor unpacking logic for archive files pypa/pip#13870.

Test plan

  • On next tag push, CI `Audit dependencies` step exits 0 (or only flags expected unaudited deps: `screencap`, `en-core-web-sm`)
  • CI x86_64 build passes minos verify
  • `release`, `promote-latest`, `verify-install` all run to completion
  • Run `/local-release 0.19.1 --arch both` — confirm clean build with no manual numpy intervention; minos verify passes; `_smoke-test` 9/9

References

rutefig added 3 commits April 28, 2026 17:07
NumPy 2.x dropped older macOS wheel targets — its only cp312 x86_64
wheels are tagged macosx_14_0, which trip the minos<=11.0 verify gate
that protects Big Sur (11.x) installs. Cap the constraint to <2.0 so
pip lands on 1.26.4, which still ships macosx_10_9_x86_64 cp312 wheels.

Also wire MACOSX_DEPLOYMENT_TARGET=11.0 into the /local-release skill's
x86_64 install step, mirroring .github/workflows/release.yml. The env
var alone doesn't fix the wheel resolution (no macosx_11_0 wheel exists
for numpy 2.0.x), but it keeps pip's tag preference consistent with CI
on Tahoe (macOS 26.x) hosts.

Surfaced during the v0.19.0 local release; documented in
docs/tickets/high-2026-04-28-fix-x86_64-numpy-minos-constraint.md.
The runner-shipped pip 26.0.1 is flagged by `pip-audit` for CVE-2026-3219
(tar/ZIP polyglot confusion), failing the Audit dependencies step and
cancelling the rest of the matrix via fail-fast. v0.17.1 / v0.18.0 / v0.19.0
release.yml runs all died here; tarballs have been coming from the
local-release flow rather than CI.

The CVE has minimal realistic surface in this build (closed PyPI install,
no user-supplied package names, pip is not bundled in the released binary)
but pip-audit is correct to flag it. pip 26.1 ships the fix.

Documented in docs/tickets/urgent-2026-04-28-fix-ci-pip-audit-cve-block.md.
@rutefig rutefig changed the title fix(build): pin numpy<2.0 for x86_64 Big Sur compat fix(release): unblock x86_64 minos verify + CI pip-audit gate Apr 28, 2026
Two review findings on PR #155:

1. constraints-x86_64.txt previously claimed numpy 2.0+ ships only
   macosx_14_0_x86_64 cp312 wheels. Verified via `pip download
   --platform macosx_11_0_x86_64 'numpy>=2.0,<2.1'` that 2.0.2 also
   ships a macosx_10_9_x86_64 wheel. The cap is still correct because
   pip on macOS 14+ runners prefers the higher-targeted (macosx_14_0)
   wheel; rewording to reflect that.

2. SKILL.md previously claimed MACOSX_DEPLOYMENT_TARGET=11.0 makes
   pip's wheel-tag preference match CI. Verified via packaging.tags
   that sys_tags() emits identical macosx_26_0 tags with and without
   the env var on a Tahoe host. The env still mirrors CI for any
   build-time tooling that reads it (PyInstaller bootloader, source
   builds), but wheel selection follows host macOS tags. Rewording to
   match.

No code change — comment accuracy only.
@rutefig
rutefig merged commit dc22ac9 into main Apr 28, 2026
2 checks passed
@rutefig
rutefig deleted the rutefig/local-release branch April 28, 2026 23:37
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