Files
Ryan Codrai 97b1215405 ci: exercise the abi3 floor on all three OSes, and the integrations at release (#527)
* ci: exercise the abi3 floor on all three OSes, and the integrations at release

The last two items of #306. Five of its seven were closed by earlier
work; these are the ones that were still open.

**Only Python 3.11 ran tests.** The wheel is abi3-py39, so one artifact
claims 3.9 through 3.14, but ci.yml's `python` matrix pins 3.11 on every
OS and the floor was import-tested only in release-pypi.yml, only on
Linux. A new `python-abi3-floor` job builds the wheel on 3.11, switches
the interpreter to 3.9, and loads that same artifact on ubuntu, macOS and
Windows — which is where a limited-API violation or a loader difference
shows up.

It is a separate job rather than another axis on `python` on purpose:
that job's name is a required status check, and adding an axis renames
every leg of it. Floor only — the 3.14 ceiling stays in release-pypi.yml
where a wheel is already being built, and the floor is the end where the
limited API actually bites.

**The release smoke skipped every integration.** `release-pypi.yml`
installed the wheel and pytest and nothing else, so all four integration
test files `importorskip`ed out of the run that gates a publish. The
extras now go in alongside the wheel, matching what ci.yml already does
for PRs.

Both workflow files parse as YAML and the existing `python` job's name is
unchanged, so no required check is renamed.

Closes #306

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* ci: reattach the integration-floors rationale to its own job

Review caught that the new job was spliced between
`integration-floors`' comment block and its job key, so ten lines
explaining why that leg is ubuntu-only — 'a floor is a
dependency-resolution property, not a platform one, so a three-OS matrix
would buy nothing' — ended up heading a job that is deliberately a
three-OS matrix.

Moved the block back above `integration-floors`. The abi3 job keeps its
own rationale.

This is the second time this session I have inserted at a computed
anchor without checking what precedes it; the first detached
`validate_calibration`'s rustdoc onto an unrelated helper. Checking the
lines above an insertion point is now part of how I make them.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-10 20:29:21 +01:00
..