Skip to content

chore(ci): run the suite on Python 3.11 and 3.12 - #4676

Open
fer1994 wants to merge 1 commit into
github:mainfrom
fer1994:chore/test-matrix-supported-pythons
Open

fer1994 wants to merge 1 commit into
github:mainfrom
fer1994:chore/test-matrix-supported-pythons

Conversation

@fer1994

@fer1994 fer1994 commented Sep 22, 2026

Copy link
Copy Markdown

Problem

The project supports Python 3.11 through 3.14 but only ever executes its tests on the newest two. This is an internal inconsistency rather than a matter of taste:

File Python matrix
pyproject.toml requires-python = ">=3.11"
.github/workflows/security.yml ["3.11", "3.12", "3.13", "3.14"]
.github/workflows/test.yml ["3.13", "3.14"]

The scheduled dependency audit already treats 3.11–3.14 as the supported matrix, and tests/test_security_workflow.py::test_scheduled_dependency_audit_runs_supported_python_os_matrix asserts exactly that list. Meanwhile the older half of the range ships without a single test execution behind it.

The floor is genuine rather than vestigial: tomllib in src/specify_cli/_assets.py:111 is the only 3.11+ API in the source, so 3.11 is exactly the right minimum — it simply is not covered.

Evidence

Both added interpreters pass the full suite today, so this closes a coverage gap rather than introducing failures. Run locally on macOS 15 (arm64) against a2c1843:

Interpreter Result
CPython 3.11.16 8176 passed, 208 skipped
CPython 3.12.14 8176 passed, 208 skipped
CPython 3.13.15 8176 passed, 208 skipped

Cost

Added through include on ubuntu-latest only, which takes the matrix from 6 jobs to 8 rather than to 12. The OS-specific paths on macOS and Windows stay covered by 3.13/3.14; what 3.11 and 3.12 add is interpreter coverage, which is not OS-dependent for this codebase.

If the two extra jobs are unwelcome, the alternative worth considering is the opposite direction — raise requires-python to >=3.13 and stop claiming support for versions nobody tests. Either resolves the inconsistency; leaving it as-is does not. Happy to switch this PR to that shape instead if maintainers prefer it.

AI disclosure

Written with Claude Code (Opus 5). The inconsistency was found by reading the three files against each other, and each added interpreter was installed and run through the full suite locally before the matrix was touched. I reviewed the change and re-ran the evidence against current main before opening this.

pyproject declares requires-python = ">=3.11" and security.yml audits
dependencies across ["3.11", "3.12", "3.13", "3.14"], but test.yml only
ever runs the suite on 3.13 and 3.14. The older half of the supported
range ships without a single test execution behind it.

The floor is genuine, not vestigial: tomllib in src/specify_cli/
_assets.py is the only 3.11+ API in use, so 3.11 is exactly right as the
minimum — it just is not covered.

Both added interpreters pass locally today, so this closes a coverage
gap rather than introducing failures:

    Python 3.11.16 — 8176 passed, 208 skipped
    Python 3.12.14 — 8176 passed, 208 skipped
    Python 3.13.15 — 8176 passed, 208 skipped

Added via `include` on ubuntu-latest only, taking the matrix from 6 jobs
to 8 rather than 12; the OS-specific paths on macOS and Windows stay
covered by 3.13/3.14.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@fer1994
fer1994 requested a review from mnriem as a code owner September 22, 2026 13:40
@mnriem mnriem added the triage-nice-to-have Verdict: evidence-backed fix or greenlit feature — land after review label Sep 22, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

triage-nice-to-have Verdict: evidence-backed fix or greenlit feature — land after review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants