v3.0.0
Documentation
- Replaced portray (unmaintained since 2022) with zensical — the actively-maintained MkDocs Material
successor - Docs deploy automatically to GitHub Pages on every push via a new docs.yml workflow
- Added docs home + getting-started pages and a template mkdocs.yml
Automated releases & publishing
- python-semantic-release v10: conventional commits → version bump, changelog, and v* tag,
automatically - PyPI Trusted Publishing (OIDC) — no more API token secrets
- PEP 740 attestations via astral-sh/attest-action + uv publish
- GitHub Release created automatically with built artifacts
Hardened CI
- All GitHub Actions pinned to full commit SHAs
- Least-privilege, per-job permissions; persist-credentials: false
- zizmor + actionlint audits and uv audit vulnerability scanning in CI
- Test matrix across Python 3.13/3.14
Tooling
- .pre-commit-hooks.yaml → .pre-commit-config.yaml (pre-commit was previously non-functional); added
codespell, uv-lock, and actionlint hooks - pytest batteries: xdist (parallel), randomly, hypothesis, timeout; [tool.pytest.ini_options] config
- Pre-commit fixes out of the box: real starter test, 100% coverage gate now reachable
- PEP 639 SPDX license fields (license + license-files), GPL-3.0-only
- YAML issue forms, SECURITY.md, CODEOWNERS
- .gitattributes — no more mixed line-ending churn
Fixes
- Dockerfile CMD, noxfile Python versions, license docs jinja conditions, .vscode/settings.json
invalid JSON, root repo mypy → ty
Breaking changes
- Removed tools: nox (CI matrix + uv run --python covers multi-version), AGENTS.md option,
FUNDING.yml — generated projects get fewer moving parts - Docs tasks: task html / task publish gone → task docs / task serve (auto-deploy)
- PyPI publishing: remove the PYPI_TOKEN secret — configure a trusted publisher (workflow
pypi-publish.yml, environment pypi) instead - exclude-newer one-week package delay removed (it could break fresh installs)
- Releases now require Conventional Commits PR titles