Commit 2ddab4a
fix: tombstone releases so sub-3.12 pip install fails loudly (#240)
* feat: tombstone releases so sub-3.12 pip install fails loudly
Raising `requires-python` does not retract anything. 2026.7.29.2 was the first
release published with `Requires-Python >=3.12`; everything at or below
2026.7.29.1 was published with `>=3.9`, and PyPI metadata is immutable, so those
releases stay valid pip candidates forever. On 3.9/3.10/3.11 `pip install
autolens` therefore does not fail — it backtracks to 2026.7.29.1 and installs
the whole stack silently, no JAX and no warning. The install docs claim a "no
matching distribution" error that does not happen.
Adds `autohands/tombstone.py`: builds one sdist-only release per package at
2026.7.29.1.post1 with `Requires-Python <3.12`, whose build raises with an
explanation naming the user's Python version. It outranks every sub-floor
candidate and is invisible at or above the floor, so pip below 3.12 reports why
instead of quietly installing stale code.
Verified against the real PyPI candidate set with the real artifacts:
py3.9/3.10/3.11 pip install autolens -> loud failure, correct version named
py3.12 pip install autolens -> 2026.8.17.1, unaffected
py3.10 autolens==2026.7.29.1 -> still resolves (pins keep working)
The one hole — `--only-binary=:all:` skips sdists and still lands on the old
wheel — is documented rather than hidden; no packaging mechanism closes it.
One-off publish, deliberately not wired into release.yml: future releases all
declare >=3.12, so the tombstone stays the top sub-floor candidate forever.
Issue: #238
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* feat: manual-dispatch workflow to publish the tombstone sdists
The tombstones cannot be published from a laptop — the PyPI tokens live in
Actions secrets, and they should stay there. This adds a workflow_dispatch-only
job that builds via autohands/tombstone.py and uploads with the same twine
version, retry policy and --skip-existing behaviour as release.yml.
Deliberately not wired into release.yml: the tombstones are one-off, and
republishing a deliberately-broken artifact on every release would be noise.
Publishing to the real index requires typing `publish tombstones` as the
confirm input. A released filename is permanent — TestPyPI is the rehearsal.
Issue: #238
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix: drop the hardcoded org URL from the tombstone metadata
The tenant firewall flagged `url="https://github.com/PyAutoLabs"` as an instance
fact hardcoded in organ code. Removing the field is the right fix rather than
allowlisting the file: a tombstone's PyPI page has no use for a homepage link,
and its README already carries the whole explanation.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Jammy2211 <JNightingale2211@gmail.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>1 parent b64176d commit 2ddab4a
3 files changed
Lines changed: 733 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
0 commit comments