Packaging fix. No behaviour change to the tool itself.
The sdist we have been publishing contains no code
pip install --no-binary :all: wayback-archive has failed on every release to date:
$ pip install --no-binary :all: wayback-archive==1.4.3
× Getting requirements to build wheel did not run successfully.
setup.py lived in config/, so the sdist root was config/. The root MANIFEST.in was never read and the package itself sat outside the sdist entirely — what reached PyPI was three files: PKG-INFO, setup.cfg, setup.py.
Wheels were unaffected, since bdist_wheel built straight from the source tree. That is why releases have looked healthy and why this went unnoticed. It broke anyone installing from source: distro packagers, offline mirrors, and pip on any platform without a matching wheel.
What changed
Metadata moves to a pyproject.toml at the repository root, where the package, README and requirements are all in scope. It remains a single source of truth rather than a second copy — the version is still read from wayback_archive/__init__.py and the dependencies from config/requirements.txt.
The release workflow now proves its artifacts before uploading instead of assuming them: twine check on both, then install the sdist into a fresh virtualenv, import the package, and assert it resolved under site-packages. That last assertion matters — python puts the working directory ahead of site-packages, so a check run from inside the checkout passes on a completely empty sdist. Verified in both directions:
from a temp dir sdist ok 1.4.6 .../site-packages/wayback_archive
from the repo AssertionError: .../Wayback-Archive/wayback_archive
requires-python stays >=3.9 and the classifiers are unchanged, even though CI dropped 3.9 as end-of-life and current dependencies no longer publish 3.9 wheels. Tightening that alters install resolution for existing users, so it is a decision of its own rather than a rider on a packaging fix.