Skip to content

chore(ci): end future-Python canary green while wheels are missing - #475

Merged
tsenoner merged 1 commit into
mainfrom
ci/future-python-readiness-probe
Sep 1, 2026
Merged

chore(ci): end future-Python canary green while wheels are missing#475
tsenoner merged 1 commit into
mainfrom
ci/future-python-readiness-probe

Conversation

@tsenoner

@tsenoner tsenoner commented Sep 1, 2026

Copy link
Copy Markdown
Owner

TLDR

The 3.15 canary is red because torch publishes no cp315 wheel (and no sdist) — the ecosystem, not protspace. That is its normal state for most of a release cycle, so it now ends green with a wheel-readiness table instead, and red is reserved for something you can act on.

Description

Run 33499762812 failed 13 s in:

error: Distribution `torch==2.13.0` can't be installed because it doesn't have a
source distribution or wheel for the current platform
hint: You're using CPython 3.15 (`cp315`), but `torch` (v2.13.0) only has wheels
with the following Python ABI tags: `cp312`, `cp313`, `cp314`, `cp314t`

torch enters via the dev group (apps/protspace/pyproject.toml). Resolution succeeded — torch's requires-python is a bare >=3.10, so the resolver cannot tell 3.15 is unsupported; it is an install-time platform-tag failure. torch fails first only because it ships no sdist. It is not alone: pyarrow, scikit-learn, pandas, h5py and (transitively) numba/llvmlite have no cp315 wheels either. Only 27 of 33 direct dependencies are ready.

The workflow's own header already conceded this ("EXPECTED TO BE RED UNTIL THE ECOSYSTEM CATCHES UP"), which is the problem: a guaranteed-red monthly mail trains you to ignore the one that matters.

What changed

  • Resolve + install is now continue-on-error, and a classifier reads uv's error. A recognised packaging gap — no installable artifact, a failed source build, or a requires-python cap — ends the job green with a ::notice::. Anything else stays red.
  • New .github/scripts/next_python_readiness.py (stdlib only) builds the job summary. uv names only the first blocker, so this walks every direct dependency and asks PyPI whether it has a wheel for the target ABI, giving a "27 of 33 ready" picture and a table of what is still missing. Informational — it always exits 0.
  • A green run now sends no mail, so a new final step makes "ready" loud. If the install and the tests pass, the job fails deliberately with ::error::Python 3.15 is ready — promote it into protspace-ci.yml. Without it this change would have closed the only channel that tells you to promote the version. Drop this step if you would rather find out by looking.

Net: red means act — an unrecognised uv failure, a real test failure, or the ecosystem having caught up.

Verification

  • Classifier exercised against the real 3.15 log plus four synthetic shapes: source-build failure and a requires-python cap classify green; a genuine dependency conflict and an unrelated network error stay red (the discriminator for a resolution dead-end is No solution found and requires Python).
  • Wheel tag matching unit-checked against cp315/cp314, abi3 above and below the target, py3-none-any, build-tagged filenames, and wrong-platform wheels.
  • Dispatched on this branch: https://github.com/tsenoner/protspace/actions/runs/33515226071
  • pnpm precommit clean.

No user-visible change — CI tooling only, so no docs or notebook updates apply.

🤖 Generated with Claude Code

https://claude.ai/code/session_014vsZd3aHAss3gT2VMjVBAu

The canary fails whenever the next CPython lacks wheels, which is its
normal state for most of a release cycle — 3.15 currently stops at torch
2.13.0, which publishes no cp315 wheel and no sdist. A guaranteed-red
monthly mail trains you to ignore the one that matters.

Classify uv's error instead. A recognised packaging gap (no installable
artifact, a failed source build, or a requires-python cap) writes a
wheel-readiness table to the job summary and ends green; anything else
stays red. Add .github/scripts/next_python_readiness.py to build that
table — uv names only the first blocker, so it walks every direct
dependency and reports how close the stack is (27/33 ready for 3.15).

Red now means act: an unrecognised uv failure, a test failure, or a fully
passing run, which is the signal to promote the version into
protspace-ci.yml's matrix.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014vsZd3aHAss3gT2VMjVBAu
@tsenoner
tsenoner merged commit be3eabe into main Sep 1, 2026
4 checks passed
@tsenoner
tsenoner deleted the ci/future-python-readiness-probe branch September 1, 2026 14:12
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