Skip to content

feat: Python 3.14 and Node 24 and 26, tested and claimed - #92

Merged
krzysztof-smartdataengines merged 1 commit into
mainfrom
feat/python-3.14-node-24-26
Sep 27, 2026
Merged

krzysztof-smartdataengines merged 1 commit into
mainfrom
feat/python-3.14-node-24-26

Conversation

@krzysztof-smartdataengines

Copy link
Copy Markdown
Contributor

Summary

Python 3.14 and Node 24 and 26 are now tested in CI and claimed in the metadata. Before the first
release through the pipeline, the declared ranges shut out the current runtimes:

  • requires-python = ">=3.11,<3.14". On Python 3.14, stable since October 2025, pip install
    refuses the package.
  • engines: {"node": ">=18 <23"}. That excludes Node 24 (the active LTS line) and Node 26, while it
    includes 18 and 20, which are past end of life. npm only warns, but an official package should not
    warn on the LTS line.

The ceilings stay closed, and deliberately so (docs/platforms.md). This library's job is a
byte-identical canonical encoding, so an untested runtime is an untested encoder. The ceilings move
here because the matrix does, in the same commit, and test_platforms.py holds all three documents
to each other.

What changed

  • Python. The CI matrix is 3.11 to 3.14, requires-python is >=3.11,<3.15, and the classifiers
    include 3.14.

  • Node. The CI matrix is 18, 20, 22, 24 and 26, and engines is >=18 <27, in package.json and
    in the lockfile's root. Node 18 and 20 stay. Dropping them would narrow a published claim for no
    technical gain, and the Vitest 3.2.7 constraint in docs/test-toolchain.md is about keeping Node 18.

  • Required checks. .github/rulesets/main.json requires the three new contexts: python (3.14),
    typescript (24) and typescript (26). That makes fourteen, and check_contexts.py agrees. The
    live ruleset is re-applied from this file after the merge, per .github/rulesets/README.md, and read
    back.

  • Documents. Seven documents give a version range or a check count. Three of them hold that fact
    under a test that derives it:

    • docs/platforms.md and docs/implementations.md state the ranges;
    • docs/github-security.md says fourteen, and gives the matrix list and the cell count.

    The other four give a range or a count that nothing checks:

    • docs/weather-starter.md, docs/test-toolchain.md and typescript/README.md state the ranges;
    • docs/publishing.md states the check count.

    docs/publishing.md and the release workflow's error message no longer state a number of required
    checks: nothing derives it there, so it would have gone stale again.

Tests

  • Local runs with both live engines:
    • Python 3.14.7: 2080 passed and 10 skipped (the orderbook slice), ruff and mypy clean. The shared
      conformance vectors ran among them, so the canonical encoding is byte-identical on 3.14. The one
      failure in that run was test_implementer_documents.py catching the Python row of
      docs/implementations.md still saying 3.11–3.13, which is fixed here.
    • Node 24.21.0 and Node 26.10.0: tsc and 999 passed on each.
  • make check on the head, with Python 3.14.7 and Node 18.19.1: ruff, mypy, Python 2081 passed and 10 skipped, TypeScript 999 passed.
  • check_contexts.py: 13 contexts produced, all required, plus CodeQL.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@krzysztof-smartdataengines
krzysztof-smartdataengines merged commit d53549f into main Sep 27, 2026
14 checks passed
@krzysztof-smartdataengines
krzysztof-smartdataengines deleted the feat/python-3.14-node-24-26 branch September 27, 2026 08:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant