Summary
Spike confirmed Python 3.14 adoption requires upgrading 6+ native dependencies that lack cp314 wheels at their current pinned versions. This issue tracks the actual migration work.
Spike Findings
| Package |
Pinned |
Target (latest w/ cp314) |
Breaking? |
watchfiles |
1.0.5 |
1.1.1 |
PyO3 0.24→0.25, unlikely |
numpy |
2.2.4 |
2.4.4 |
Major minor bump, check changelog |
scipy |
1.15.2 |
1.17.1 |
Minor bump, low risk |
rapidfuzz |
3.13.0 |
3.14.5 |
Patch-level, safe |
scikit-learn |
1.6.1 |
1.8.0 |
Minor bump, check deprecations |
pymupdf |
1.25.5 |
1.27.2.2 |
Minor bump, check API changes |
Already have cp314 wheels at current versions: pydantic-core, pillow
Tasks
Phase 1: Prep
Phase 2: Dependency Upgrades (on a feature branch with 3.14)
Phase 3: Adopt 3.14
Phase 4: CI
Acceptance Criteria
- All 1335+ tests pass on Python 3.14.4
basedpyright clean
ruff check clean
- CI passes on both 3.13 and 3.14
- No source builds required (all deps have cp314 wheels)
Risks
- numpy 2.4 may have breaking API changes vs 2.2 (check migration guide)
- scikit-learn 1.8 may deprecate models/features we use
- pymupdf API changes between 1.25→1.27 need review
- Free-threading (PEP 703) is opt-in in 3.14 — not in scope for this issue
References
Summary
Spike confirmed Python 3.14 adoption requires upgrading 6+ native dependencies that lack cp314 wheels at their current pinned versions. This issue tracks the actual migration work.
Spike Findings
watchfilesnumpyscipyrapidfuzzscikit-learnpymupdfAlready have cp314 wheels at current versions:
pydantic-core,pillowTasks
Phase 1: Prep
requires-python = ">=3.12,<3.14"inpyproject.toml(prevents accidental 3.14 adoption before ready).python-versionto3.13.9(explicit, not just3.13)Phase 2: Dependency Upgrades (on a feature branch with 3.14)
uv lock --upgrade-package numpy --upgrade-package scipy --upgrade-package watchfiles --upgrade-package rapidfuzz --upgrade-package scikit-learn --upgrade-package pymupdfPhase 3: Adopt 3.14
requires-python = ">=3.13,<3.15"inpyproject.toml.python-versionto3.14uv sync --python 3.14— verify all deps install from wheels (no source builds)basedpyrighttype checkruff check && ruff format --checkPhase 4: CI
Acceptance Criteria
basedpyrightcleanruff checkcleanRisks
References