Skip to content

ci: test on Python 3.14 with and without Cython#691

Merged
wbarnha merged 1 commit into
masterfrom
claude/faust-mode-open-prs-ur3hqs
Jul 19, 2026
Merged

ci: test on Python 3.14 with and without Cython#691
wbarnha merged 1 commit into
masterfrom
claude/faust-mode-open-prs-ur3hqs

Conversation

@wbarnha

@wbarnha wbarnha commented Jul 18, 2026

Copy link
Copy Markdown
Member

Description

Adds 3.14 to the test matrix, producing 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 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 lingering Python 3.9/Cython: false|true required 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-streaming release carrying the event-loop fix from faust-streaming/mode#72 — Python 3.14 removed implicit event-loop creation, which mode relied on when Service.loop is 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

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

codecov Bot commented Jul 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.14%. Comparing base (f3019aa) to head (d9b6e7b).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@wbarnha
wbarnha merged commit 3073eb9 into master Jul 19, 2026
19 of 22 checks passed
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>
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.

2 participants