Problem
The v1.4.0 release runbook downloads the TestPyPI sdist with a TestPyPI-only pip command. Although the command uses --no-deps, pip still prepares PEP 517 metadata and tries to obtain the declared setuptools>=77 build requirement from TestPyPI. TestPyPI does not carry that dependency, so the sdist verification stops after publication.
The v1.4.0 release was safely completed by downloading the exact wheel and sdist URLs from the TestPyPI version API, verifying their advertised SHA-256 values, and rehearsing the exact local wheel with dependencies resolved separately from canonical PyPI.
Proposed change
- Keep the candidate query TestPyPI-only; do not add production PyPI as an extra index.
- Install the declared build requirement into the disposable release environment from canonical PyPI.
- Download the sdist with that environment and --no-build-isolation --check-build-dependencies.
- Make the runtime TestPyPI candidate download wheel-only with --only-binary :all: so qualification fails clearly if the universal wheel is unavailable.
- Document the wheel-only runtime boundary and the separate sdist verification step.
Acceptance criteria
Estimated implementation and exact-head validation effort: 2–4 hours.
Problem
The v1.4.0 release runbook downloads the TestPyPI sdist with a TestPyPI-only pip command. Although the command uses --no-deps, pip still prepares PEP 517 metadata and tries to obtain the declared setuptools>=77 build requirement from TestPyPI. TestPyPI does not carry that dependency, so the sdist verification stops after publication.
The v1.4.0 release was safely completed by downloading the exact wheel and sdist URLs from the TestPyPI version API, verifying their advertised SHA-256 values, and rehearsing the exact local wheel with dependencies resolved separately from canonical PyPI.
Proposed change
Acceptance criteria
Estimated implementation and exact-head validation effort: 2–4 hours.