build(python): bump Python floor from 3.10 to 3.12#111
Conversation
Drops Python 3.10 and 3.11 support across packaging, lint, type checking, and CI test matrix. Unblocks the upcoming Teams adapter migration to microsoft-teams-apps (#93), which requires Python 3.12+. Our primary consumer (chinchill-api) already runs on 3.12, so no consumer impact. Changes: - pyproject.toml: requires-python >=3.12, ruff target-version py312, pyrefly python-version 3.12, drop 3.10/3.11 classifiers - .github/workflows/test.yml: matrix now ["3.12", "3.13"] - README.md: Python 3.10+ -> 3.12+ in feature comparison Ruff modernization (UP017 datetime.UTC, UP040 PEP 695 type, UP041 TimeoutError) is intentionally ignored for now — this PR is the floor bump only, not the codebase modernization. Those cleanups can land incrementally as code changes naturally touch the affected call sites. Tracking: #98 (Python 3.12 sync wave), #93 (Teams SDK migration). https://claude.ai/code/session_01FyMxQn2BEAzmwKS1GZczKj
|
Warning Review limit reached
More reviews will be available in 33 minutes and 5 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request bumps the minimum supported Python version from 3.10 to 3.12. It updates the documentation in README.md, adjusts the Python version requirements and classifiers in pyproject.toml, configures Ruff to target Python 3.12 while temporarily ignoring specific modernization rules (UP017, UP040, and UP041), and updates the tool-specific Python version to 3.12. There are no review comments, and I have no feedback to provide.
Tiny follow-up to #111 (Python 3.12 floor bump). Post-merge review caught two stale "Python 3.10" mentions in CONTRIBUTING.md that the original PR missed: install instructions and the publish checklist. Docs hygiene only.
Summary
Bumps the Python floor from 3.10 to 3.12 across packaging, lint, type checking, and CI test matrix. This unblocks the upcoming Teams adapter migration to
microsoft-teams-apps(#93), which requires Python 3.12+. Tracks the Python 3.12 sync wave (#98).Consumer compatibility: our primary consumer chinchill-api already runs on Python 3.12, so no downstream impact — this was approved by the team.
Changes
pyproject.toml:requires-python = ">=3.12"(was>=3.10)[tool.ruff] target-version = "py312"(waspy310)[tool.pyrefly] python-version = "3.12"(was3.10)Programming Language :: Python :: 3.10and:: 3.11classifiers.github/workflows/test.yml: matrix now["3.12", "3.13"](was["3.10", "3.11", "3.12", "3.13"])README.md: "Async-native (Python 3.10+)" → "3.12+" in feature comparison tableIntentionally out of scope
Bumping
ruff target-versiontopy312surfaces new modernization findings (107 total):UP017(datetime.timezone.utc→datetime.UTC),UP040(PEP 695typekeyword),UP041(asyncio.TimeoutError→ builtin). These are explicitly ignored in[tool.ruff.lint]because this PR is the floor bump only, not a modernization sweep. The ignores are commented to make re-enabling deliberate; modernization can land incrementally as future PRs touch the relevant code.The
scripts/fidelity_baseline.jsonandlint.ymlupstream-clone tag are untouched — that's a separate axis (upstream parity, not Python floor).Test plan
uv sync --group devsucceeds on Python 3.12.3uv run ruff check src/ tests/ scripts/— All checks passeduv run ruff format --check src/ tests/ scripts/— 197 files already formatteduv run python scripts/audit_test_quality.py— 0 hard failures (39 pre-existing duplicate warnings)uv run pytest tests/ --tb=short -q— 4036 passed, 3 skipped (matches expected state)uv run pyrefly check— 0 errors, 101 suppressedCloses #98 (sync wave Python part). Unblocks #93 (Teams SDK migration).
https://claude.ai/code/session_01FyMxQn2BEAzmwKS1GZczKj
Generated by Claude Code