ci: test on Python 3.14 with and without Cython#691
Merged
Conversation
Adds 3.14 to the test matrix, producing required 'Python 3.14/Cython: true' and 'Python 3.14/Cython: false' jobs alongside the existing 3.13 legs. All matrix legs feed the aggregate '✅ Ensure the required checks passing' job, so they become required wherever branch protection requires that check. Python 3.9 was already removed from the matrix and from python_requires (>=3.10); the lingering 'Python 3.9/Cython: *' required status checks exist only in branch protection and must be deleted there. Note: the 3.14 legs need a mode-streaming release carrying the event-loop fix (faust-streaming/mode#72) to pass, since Python 3.14 removed implicit event-loop creation that mode relied on at import time. Assisted-by: Claude Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HgnKFtXZbCjXNoVNWa5JLd
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #691 +/- ##
=======================================
Coverage 94.14% 94.14%
=======================================
Files 104 104
Lines 11136 11136
Branches 1201 1201
=======================================
Hits 10484 10484
Misses 551 551
Partials 101 101 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
wbarnha
pushed a commit
to faust-streaming/mode
that referenced
this pull request
Jul 19, 2026
The 3.14 matrix entry had continue-on-error: true, so its result was discarded regardless of pass/fail -- CI reported green even when it was red. This is almost certainly why the three Python 3.14 regressions fixed this cycle (get_event_loop()'s implicit-creation removal, local_annotations()'s MRO leak, eval_type's ForwardRef/ClassVar crashes) shipped in 0.5.0 and 0.5.1 -- both since yanked -- without mode's own CI ever blocking on them. 0.5.2 is verified working end-to-end on 3.14 (mode's own suite and a full faust-streaming/faust cross-check, both green). Move 3.14 out of the `include`/experimental block and into the regular matrix so it's a full, required leg like every other supported version, matching the required 3.14 legs already added on the faust side (faust-streaming/faust#691) -- the "~3.14.0-0" prerelease version-range syntax is also no longer needed now that 3.14 has stable releases. Also declare Python 3.14 in pyproject.toml's trove classifiers, so it's reflected on PyPI (the README's version badge reads this automatically) and in the built package metadata. Assisted-by: Claude Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HgnKFtXZbCjXNoVNWa5JLd
wbarnha
added a commit
to faust-streaming/mode
that referenced
this pull request
Jul 19, 2026
The 3.14 matrix entry had continue-on-error: true, so its result was discarded regardless of pass/fail -- CI reported green even when it was red. This is almost certainly why the three Python 3.14 regressions fixed this cycle (get_event_loop()'s implicit-creation removal, local_annotations()'s MRO leak, eval_type's ForwardRef/ClassVar crashes) shipped in 0.5.0 and 0.5.1 -- both since yanked -- without mode's own CI ever blocking on them. 0.5.2 is verified working end-to-end on 3.14 (mode's own suite and a full faust-streaming/faust cross-check, both green). Move 3.14 out of the `include`/experimental block and into the regular matrix so it's a full, required leg like every other supported version, matching the required 3.14 legs already added on the faust side (faust-streaming/faust#691) -- the "~3.14.0-0" prerelease version-range syntax is also no longer needed now that 3.14 has stable releases. Also declare Python 3.14 in pyproject.toml's trove classifiers, so it's reflected on PyPI (the README's version badge reads this automatically) and in the built package metadata. Assisted-by: Claude Claude-Session: https://claude.ai/code/session_01HgnKFtXZbCjXNoVNWa5JLd Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds
3.14to the test matrix, producingPython 3.14/Cython: trueandPython 3.14/Cython: falsejobs alongside the existing 3.13 legs. All matrix legs feed the aggregate✅ Ensure the required checks passingjob, so requiring that single check in branch protection makes tests on 3.13 and 3.14 (with and without Cython) required automatically.Python 3.9 needs no code change here: it was already removed from the matrix and from
python_requires(>=3.10.0). The lingeringPython 3.9/Cython: false|truerequired status checks exist only as stale contexts in branch protection and should be deleted there (they reference job names that no longer run, so they stay pending forever).Note on sequencing: the 3.14 legs depend on a
mode-streamingrelease carrying the event-loop fix from faust-streaming/mode#72 — Python 3.14 removed implicit event-loop creation, which mode relied on whenService.loopis resolved at import time (e.g.@app.agent()at module scope). Until that release ships, the 3.14 jobs are expected to fail at import.🤖 Generated with Claude Code
https://claude.ai/code/session_01HgnKFtXZbCjXNoVNWa5JLd
Generated by Claude Code