Skip to content

feat: support and validate CPython 3.14 - #17

Merged
deleteLater merged 2 commits into
featbit:masterfrom
lopezm1:codex/python-3.14-compatibility
Sep 2, 2026
Merged

feat: support and validate CPython 3.14#17
deleteLater merged 2 commits into
featbit:masterfrom
lopezm1:codex/python-3.14-compatibility

Conversation

@lopezm1

@lopezm1 lopezm1 commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Summary

  • adjust the SDK's declared and tested CPython support: Python 3.10 through 3.14
  • test the full supported range on both Linux and Windows
  • require urllib3>=1.26.5,<3, retaining the first 1.26.x release verified on CPython 3.14
  • add exact-minimum-dependency, lifecycle, package-metadata, and clean built-wheel validation
  • update the README and release metadata for 1.1.9

Closes #16.

Compatibility changes

Area Before After
Python package eligibility >=3.6,<3.13 >=3.10,<3.15
Blocking CI Python 3.6-3.12 on Linux Python 3.10-3.14 on Linux and Windows
urllib3 >=1.22.0 >=1.26.5,<3

Python 3.6 through 3.9 are no longer claimed or tested.

No runtime SDK implementation was changed.

Validation

Local validation completed on CPython 3.14.5:

  • 83 tests passed
  • 20,000-evaluation concurrent resource audit passed with no evaluation errors or leaked SDK threads
  • python -m build passed
  • python -m twine check dist/* passed
  • fresh wheel installation and pip check passed
  • installed-wheel public API smoke test passed

CI covers Python 3.10-3.14 on Linux and Windows. Python 3.14 additionally builds and installs the wheel in a fresh environment. A separate Python 3.14 job installs the exact declared minimum runtime dependencies and runs the full suite and resource audit.

Behavior

This does not change flag evaluation, targeting, user/context handling, caller defaults, network synchronization, event delivery, thread lifecycle, shutdown behavior, or the public API.

Free-threaded CPython 3.14t is neither tested nor claimed.

Release note

This changes release/package.json to 1.1.9. The existing workflow creates a public GitHub release and publishes to public PyPI after a merge to master; please confirm release timing before merge. This PR does not alter the publish destination or credentials.

Summary by CodeRabbit

  • New Features

    • Added support for Python 3.13 and 3.14, with the supported range now Python 3.10–3.14.
    • Added installation and runtime smoke checks for released packages.
    • Added compatibility testing across Linux and Windows.
  • Documentation

    • Updated installation guidance and release notes for supported Python and urllib3 versions.
  • Bug Fixes

    • Updated urllib3 requirements to versions 1.26.5 or newer, while remaining below version 3.

Greptile Summary

The PR updates package metadata, dependencies, documentation, and release metadata to support CPython 3.10 through 3.14.

  • Expands Linux and Windows CI coverage through Python 3.14.
  • Adds minimum-dependency, resource-lifecycle, package-metadata, and installed-wheel checks.
  • Raises the urllib3 minimum to 1.26.5, caps it below 3, and prepares release 1.1.9.

Confidence Score: 5/5

The PR appears safe to merge.

No blocking failure remains.

Important Files Changed

Filename Overview
.github/workflows/code-quality.yaml Expands the supported Python and operating-system matrix and adds minimum-dependency, lifecycle, build, and wheel validation.
.github/workflows/release.yaml Builds and validates distributions before creating the GitHub release and publishing to PyPI.
scripts/wheel_smoke.py Adds a clean-environment smoke test covering installed-package provenance, metadata, public evaluation behavior, and shutdown.
setup.py Declares Python 3.10–3.14 compatibility and updates package classifiers accordingly.
requirements.txt Raises the urllib3 minimum version and adds an upper bound below version 3.

Reviews (7): Last reviewed commit: "chore: adjust supported Python versions" | Re-trigger Greptile

@coderabbitai

coderabbitai Bot commented Aug 26, 2026

Copy link
Copy Markdown

Review Change Stack

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 4baa1861-01d3-44b3-8c99-6d6b7edceffe

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Team

Run ID: 06b1b711-2836-4cc3-803f-3f594245f849

📥 Commits

Reviewing files that changed from the base of the PR and between 9a05180 and 8472fea.

📒 Files selected for processing (9)
  • .github/workflows/code-quality.yaml
  • .github/workflows/release.yaml
  • README.md
  • dev-requirements.txt
  • release/description.md
  • release/package.json
  • requirements.txt
  • scripts/wheel_smoke.py
  • setup.py

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The SDK now declares Python 3.10–3.14 support, requires a compatible urllib3 range, expands Linux and Windows CI coverage, validates built wheels, and updates release metadata for version 1.1.9.

Changes

Python compatibility and release validation

Layer / File(s) Summary
Compatibility contracts
setup.py, requirements.txt, dev-requirements.txt, README.md
Package metadata and documentation now support Python 3.10 through 3.14. Runtime and development requirements require urllib3>=1.26.5,<3.
Installed wheel smoke validation
scripts/wheel_smoke.py
The new smoke test checks installed package metadata, offline flag evaluation, repeated evaluations, listener removal, idempotent shutdown, and FeatBit worker-thread cleanup.
Cross-platform CI matrix
.github/workflows/code-quality.yaml
CI adds Python 3.10–3.14 Linux and Windows testing, minimum-dependency validation, resource audits, and clean-environment wheel checks.
Release pipeline and version metadata
.github/workflows/release.yaml, release/description.md, release/package.json
The release workflow uses Python 3.14, checks package metadata, smoke-tests the wheel, and publishes version 1.1.9 metadata.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Merge Risk: ⚪ Minimal · up to 8472f

This PR updates supported Python and dependency metadata and expands CI and release validation without changing runtime SDK behavior. The metadata and validation changes are aligned, and no actionable merge-blocking risk remains beyond normal checks.

Suggested reviewers: dsun0720

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The changes cover Python 3.13–3.14 metadata, urllib3 1.26.5 compatibility, CI matrices, minimum-dependency testing, wheel smoke testing, documentation, and release 1.1.9 updates [#16]. However, the pr… Add an explicit pip check step after clean wheel installation. Confirm whether Python 3.6–3.9 must remain supported; if required, set python_requires to >=3.6,<3.15 and retain the corresponding classifiers or update the issue objectiv…
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 7 functions across 2 files. (7 skipped: 7 … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Out of Scope Changes check ✅ Passed The changes are within the linked issue scope [#16]. CI hardening, wheel validation, dependency updates, documentation, release metadata, and the new smoke-test script all support Python 3.14 compatib…
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the primary change: adding and validating CPython 3.14 support. It is concise and directly related to the changeset.
Full details: Linked Issues check

Explanation

The changes cover Python 3.13–3.14 metadata, urllib3 1.26.5 compatibility, CI matrices, minimum-dependency testing, wheel smoke testing, documentation, and release 1.1.9 updates [#16]. However, the provided summary does not show a wheel-installation pip check, and setup.py raises the minimum Python version to 3.10 instead of the PR objective's stated &gt;=3.6 floor.

Resolution

Add an explicit pip check step after clean wheel installation. Confirm whether Python 3.6–3.9 must remain supported; if required, set python_requires to &gt;=3.6,&lt;3.15 and retain the corresponding classifiers or update the issue objective.

Full details: Out of Scope Changes check

Explanation

The changes are within the linked issue scope [#16]. CI hardening, wheel validation, dependency updates, documentation, release metadata, and the new smoke-test script all support Python 3.14 compatibility and release validation. No unrelated runtime implementation changes are reported.

Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 7 functions across 2 files. (7 skipped: 7 unsupported.)

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@lopezm1
lopezm1 marked this pull request as ready for review August 26, 2026 19:38
@lopezm1

lopezm1 commented Aug 26, 2026

Copy link
Copy Markdown
Contributor Author

Bonjour @dsun0720 — pourriez-vous, s’il vous plaît, m’aider en faisant une review de cette PR ? N’hésitez pas à me dire s’il y a quoi que ce soit que je puisse modifier ou corriger.

Je serai absent les 27 et 28 août, mais je serai de retour la semaine prochaine pour effectuer les ajustements nécessaires.

Merci beaucoup !


hello @dsun0720 -- could you kindly help me with a review of this PR? Please let me know if there is anything I can update or fix.

I will be away August 27-28 but will be back next week for any adjustments.

Thank you.

@cosmic-flood
cosmic-flood requested a review from dsun0720 August 31, 2026 09:45
@deleteLater
deleteLater force-pushed the codex/python-3.14-compatibility branch from 8472fea to 9da7cbd Compare September 1, 2026 03:39
@lopezm1
lopezm1 force-pushed the codex/python-3.14-compatibility branch from 88ec723 to 9da7cbd Compare September 1, 2026 23:47
@deleteLater
deleteLater requested a lite review from Copilot September 2, 2026 04:16
@deleteLater deleteLater moved this to In Progress in FeatBit Sep 2, 2026
@deleteLater deleteLater added the enhancement New feature or request label Sep 2, 2026
@deleteLater deleteLater self-assigned this Sep 2, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

CI workflows and release automation are likely to break due to non-existent GitHub Action major versions and brittle wheel metadata assertions in the new smoke test.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

This PR updates the SDK’s declared compatibility and CI validation to support CPython 3.10–3.14 (including raising the urllib3 minimum), and prepares the 1.1.9 release metadata while adding build/install smoke checks for the produced wheel.

Changes:

  • Expand supported/declared Python range to >=3.10,<3.15 and add 3.13/3.14 classifiers.
  • Raise urllib3 requirement to >=1.26.5,<3 and add CI jobs to validate across Linux/Windows plus minimum-dependency and wheel smoke checks.
  • Bump release metadata to 1.1.9 and update README/release notes accordingly.
File summaries
File Description
setup.py Updates python_requires and classifiers to claim support through CPython 3.14.
scripts/wheel_smoke.py Adds an installed-wheel smoke test that validates metadata, exercises offline evaluation, and checks thread cleanup.
requirements.txt Raises urllib3 floor and adds <3 cap.
dev-requirements.txt Mirrors the runtime urllib3 constraint for dev installs.
README.md Updates documented supported Python range and CI coverage notes.
release/package.json Bumps release version to 1.1.9 (also used by packaging versioning).
release/description.md Updates release notes for 1.1.9 and compatibility changes.
.github/workflows/code-quality.yaml Expands CI matrix to 3.10–3.14 on Linux+Windows and adds minimum-deps + wheel validation.
.github/workflows/release.yaml Adds build/twine/wheel smoke validation before creating the GitHub release and publishing.
Review details

Suppressed comments (1)

scripts/wheel_smoke.py:56

  • The installed distribution requirement string ordering is not stable (it may be "urllib3>=1.26.5,<3" or "urllib3<3,>=1.26.5"), so checking only one prefix can cause false negatives. Accept both normalized orderings (or parse the requirement) so the smoke test fails only when urllib3 constraints are actually wrong.
    assert any(requirement.startswith("urllib3<3,>=1.26.5") for requirement in requirements)
  • Files reviewed: 8/9 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/wheel_smoke.py

@deleteLater deleteLater left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@deleteLater
deleteLater merged commit 641e9f2 into featbit:master Sep 2, 2026
24 checks passed
@github-project-automation github-project-automation Bot moved this from In Progress to Done in FeatBit Sep 2, 2026
@deleteLater

Copy link
Copy Markdown
Contributor

Hi @lopezm1, thanks for spending time on this PR ❤️. I've merged this PR and released https://github.com/featbit/featbit-python-sdk/releases/tag/v1.1.9

@lopezm1

lopezm1 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor Author

Thank you for the response! We are happy to help. @deleteLater

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Support and validate CPython 3.14

3 participants