Release Notes:
Breaking changes: drops Python 3.8/3.9 support and returns a non-zero exit code when captures fail. Raises the minimum rate limit to comply with the SPN2 API's documented 7 captures/minute limit. Modernizes CI and packaging.
What's New
- Non-zero exit code on failure —
main()now callssys.exit(1)when any captures fail. Cron jobs, CI wrappers, and scripts can detect failures. - Minimum rate limit raised from 5s to 9s — the previous minimum allowed 12 submissions/minute, exceeding the API's 7/minute limit for authenticated users.
- Python 3.8 and 3.9 dropped — both are EOL. Minimum is now Python 3.10.
- Python 3.13 and 3.14 added to the test matrix.
- SPDX license metadata —
license = "MIT"withlicense-filesper PEP 639, replacing the deprecatedlicense = { file = "..." }pattern. - Ruff linter and formatter enforced in CI. All f-string logging converted to lazy
%-style. - Reusable CI workflow — typecheck and test jobs extracted into
ci.yml, consumed by bothtests.ymlandrelease.yml, preventing matrix drift. - GitHub Actions updated — checkout v4→v7, setup-python v4→v6, setup-uv v6→v8.0.0.
- Python version classifiers added for 3.10–3.14.