feat!: require Python 3.14 for the paperspec package

The specification pins the Unicode 16.0 character data (spec/01 §1.4),
which Python 3.14 is the first to ship; Python 3.12 has 15.0 and 3.13 has
15.1, so text with characters added in 16.0 could normalize differently
there. The tools already required 3.14; the package now does too.

- pyproject.toml: requires-python >= 3.14, with the 3.14 classifier.
- The package and tools docstrings, tools/README.md and the changelog say
  3.14 instead of 3.12.

pixi.lock still needs `pixi lock` (see the previous commit); its paperspec
entry also records the old requires-python.

pixi run check passes; no computed value changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
alexmandClaude committed 2026-10-15 09:05:26 -04:00
1 parent a4eecb4d5b
commit cfe1f39099
5 files changed
+7 -5

No files matched your search

+1 -1
View File
@@ -26,6 +26,6 @@ Packaging and lazy imports only; the formats stay at 0.1.0, and no computed valu
- The oracle moves from `tools/oracle/` to `src/paperspec/` and installs as the Python package `paperspec` (`pyproject.toml`, setuptools), with `schemas/`, `sql/` and `vectors/` as the data subpackages `paperspec.schemas`, `paperspec.sql` and `paperspec.vectors`, so other repositories import the reference implementation instead of reimplementing it. - The oracle moves from `tools/oracle/` to `src/paperspec/` and installs as the Python package `paperspec` (`pyproject.toml`, setuptools), with `schemas/`, `sql/` and `vectors/` as the data subpackages `paperspec.schemas`, `paperspec.sql` and `paperspec.vectors`, so other repositories import the reference implementation instead of reimplementing it.
- The package version comes from git tags through setuptools-scm. - The package version comes from git tags through setuptools-scm.
- The base package has no dependencies and runs on Python 3.12; the extras `paperspec[schema]` (`jsonschema`, `referencing`), `paperspec[crypto]` (`cryptography`) and `paperspec[tools]` (both) cover `schema` and the HKDF and Ed25519 functions of `crypto`, which now import their packages on first use. - The base package has no dependencies and requires Python 3.14, the first with the Unicode 16.0 character data the specification pins; the extras `paperspec[schema]` (`jsonschema`, `referencing`), `paperspec[crypto]` (`cryptography`) and `paperspec[tools]` (both) cover `schema` and the HKDF and Ed25519 functions of `crypto`, which now import their packages on first use.
- The tools import `paperspec` from `src/`, and their Python 3.14 and package check moves to `tools/__init__.py`, so the package itself checks nothing on import. - The tools import `paperspec` from `src/`, and their Python 3.14 and package check moves to `tools/__init__.py`, so the package itself checks nothing on import.
- The pixi workspace installs the package editable, and a `dev` environment builds the wheel with `pixi run -e dev wheel`. - The pixi workspace installs the package editable, and a `dev` environment builds the wheel with `pixi run -e dev wheel`.
+3 -1
View File
@@ -10,11 +10,13 @@ readme = "README.md"
license = "Apache-2.0" license = "Apache-2.0"
license-files = ["LICENSE.md"] license-files = ["LICENSE.md"]
authors = [{ name = "Scientific Computing Studio", email = "maintainer@scient.ing" }] authors = [{ name = "Scientific Computing Studio", email = "maintainer@scient.ing" }]
requires-python = ">=3.12" # Python 3.14 is the first with the Unicode 16.0 character data the specification pins (spec/01 §1.4).
requires-python = ">=3.14"
classifiers = [ classifiers = [
"Development Status :: 3 - Alpha", "Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research", "Intended Audience :: Science/Research",
"Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.14",
"Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering",
] ]
# The base package is standard library only. `schema.py` needs jsonschema and # The base package is standard library only. `schema.py` needs jsonschema and
+1 -1
View File
@@ -2,7 +2,7 @@
in this repository; see tools/README.md. in this repository; see tools/README.md.
The modules other programs use (`keys`, `text`, `jcs`, `package`, `db`, `rights`, ...) need only the The modules other programs use (`keys`, `text`, `jcs`, `package`, `db`, `rights`, ...) need only the
standard library and Python 3.12. standard library and Python 3.14, the first with the Unicode 16.0 character data the specification pins.
`schema` needs `paperspec[schema]` and the HKDF and Ed25519 functions of `crypto` need `paperspec[crypto]`; `schema` needs `paperspec[schema]` and the HKDF and Ed25519 functions of `crypto` need `paperspec[crypto]`;
both import their packages on first use. both import their packages on first use.
The schemas, SQL and vectors travel as package data: `importlib.resources.files("paperspec") / "sql"`. The schemas, SQL and vectors travel as package data: `importlib.resources.files("paperspec") / "sql"`.
+1 -1
View File
@@ -69,7 +69,7 @@ A node's five values depend only on its own subtree, so after a correction the o
Other repositories of the project do not reimplement the specification: they install this repository as the Python package `paperspec` (`pip install .`, or a git pin) and import the oracle from it, so that every key, identifier, canonical JSON string, package check and database form comes from one piece of code. Other repositories of the project do not reimplement the specification: they install this repository as the Python package `paperspec` (`pip install .`, or a git pin) and import the oracle from it, so that every key, identifier, canonical JSON string, package check and database form comes from one piece of code.
The library surface they use is `keys`, `text`, `jcs`, `package`, `db`, `schema` and `rights`, with the schemas, SQL and vectors as package data (`importlib.resources.files("paperspec") / "sql" / "doc.sql"`). The library surface they use is `keys`, `text`, `jcs`, `package`, `db`, `schema` and `rights`, with the schemas, SQL and vectors as package data (`importlib.resources.files("paperspec") / "sql" / "doc.sql"`).
Those modules run on Python 3.12 with the standard library alone, except that `schema` needs `paperspec[schema]` (`jsonschema` and `referencing`) and the HKDF and Ed25519 functions of `crypto` need `paperspec[crypto]`; `paperspec[tools]` installs both. Those modules need Python 3.14, the first with the Unicode 16.0 character data the specification pins, and otherwise only the standard library, except that `schema` needs `paperspec[schema]` (`jsonschema` and `referencing`) and the HKDF and Ed25519 functions of `crypto` need `paperspec[crypto]`; `paperspec[tools]` installs both.
The package version comes from git tags through setuptools-scm, and `pixi run -e dev wheel` builds the wheel into `dist/`. The package version comes from git tags through setuptools-scm, and `pixi run -e dev wheel` builds the wheel into `dist/`.
When `scienting-core` exists it takes this role behind the same vectors, and the import changes without any computed value changing. When `scienting-core` exists it takes this role behind the same vectors, and the import changes without any computed value changing.
Independent implementations follow the [specification](../spec/README.md) and test themselves against the [vectors](../vectors/README.md). Independent implementations follow the [specification](../spec/README.md) and test themselves against the [vectors](../vectors/README.md).
+1 -1
View File
@@ -3,7 +3,7 @@
Importing this package checks that the tools can run here, and puts `src/` first on the path, so that Importing this package checks that the tools can run here, and puts `src/` first on the path, so that
`import paperspec` gets this checkout's reference implementation rather than an installed copy. `import paperspec` gets this checkout's reference implementation rather than an installed copy.
The tools need Python 3.14 and the packages `cryptography` and `jsonschema`; the `paperspec` package The tools need Python 3.14 and the packages `cryptography` and `jsonschema`; the `paperspec` package
itself does not, and other programs install it on its own. itself needs Python 3.14 but neither package, and other programs install it on its own.
""" """
import importlib.util import importlib.util