Changelog for python3-pyproject-metadata: 0.11.0 -> 0.12.1 Source: docs/changelog.md ## 0.12.1 (7-3-2026) Fixes: - Collect a config error instead of raising a raw `TypeError` when `project.dynamic` contains a non-string (unhashable) entry with `all_errors=True`. ## 0.12.0 (7-3-2026) Features: - Support [PEP 808](https://peps.python.org/pep-0808/) (partially dynamic project metadata) (METADATA 2.6). - Add support for Python 3.15. - Warn ([PEP 685](https://peps.python.org/pep-0685/)) when an extra name in `project.optional-dependencies` is not a valid name. The extra is still emitted, only a `ConfigurationWarning` is produced. Fixes: - Error on an unset dynamic version instead of silently writing `Version: 0.0.0`. If `"version"` is declared in `project.dynamic` but never assigned by the build backend, writing the metadata now raises a `ConfigurationError` (`Field "project.version" missing`), restoring the 0.8.x behavior that regressed in the 0.9 rewrite. - Don't crash on a non-table `[project]` when `all_errors=True`. - Tighten `license-files` glob checks and private-tag parsing. - Handle braces in user data within error messages. - Correct the `Import-Namespace` field name in the metadata mapping. - Fix UTF-8 author and maintainer names. Performance: - Cache `get_type_hints` and precompile dispatch patterns. Documentation: - Fix a stale dynamic docstring and a broken module example. - Add a documentation project URL. Internal and CI: - Refactoring: consistent dataclass decorators, sorted constant entries, and removal of duplicate imports and dead code. - Cover defensive branches in dispatch helpers and validators. - Secure GitHub Actions workflows and bump pinned/downstream dependencies.