Skip to content

Track Python 3.15 dependency compatibility #2

Open

Description

@stefan-jansen

Current external dependency waits

Python 3.12 through 3.14 are the supported release range for all seven stable libraries. Data,
Engineer, and Diagnostic retain truthful Requires-Python: >=3.12,<3.15 metadata while their
required dependencies cannot complete Python 3.15 qualification.

Polars

Affected libraries: Data and Engineer.

A fresh CPython 3.15.0rc1 probe with Polars 1.44.2 still fails required DataFrame construction
before ML4T code can process the result. Data issue ml4t/data#37 owns the runtime evidence;
Engineer issue ml4t/engineer#56 owns its corresponding package wait.

Recheck when Python 3.15 final ships or when Polars publishes a stable release after 1.44.2.

PyArrow

Affected library: Diagnostic.

SciPy is no longer a blocker. PyArrow 25.0.1 has no CPython 3.15 wheels, so installation attempts a
source build that cannot complete on the standard runners. Diagnostic issue ml4t/diagnostic#45
owns the runtime evidence.

Recheck when Python 3.15 final ships or when PyArrow 26 is published.

Policy and release impact

Decision 0013 replaces the former date-based exceptions with version-scoped waits and objective
review triggers. The affected 0.1 release lines run a visible non-blocking canary at least monthly.
The wait does not block an otherwise qualified patch release for Python 3.12 through 3.14 and does
not authorize advertising Python 3.15 support.

Backtest, Specs, Live, and Models qualify their non-hardware-dependent Python 3.15 lanes.

Acceptance criteria

  • A released dependency set installs on CPython 3.15 on Linux, macOS, and Windows.
  • Data, Engineer, and Diagnostic pass their complete non-hardware-dependent Python 3.15 suites on
    all three operating systems.
  • The packages remove the <3.15 upper bound only after those qualification runs pass.
  • The merged default branches and published artifacts repeat the complete qualification.
  • Generated ecosystem status records every required lane as passing, after which this issue and the
    three owning-library trackers close.

Activity

  1. added
    type: bugConfirmed or reported incorrect behavior
    priority: criticalImmediate correctness, security, or release impact
    status: blockedCannot progress until the documented dependency resolves
    compatibility: affectedHas Python, platform, dependency, or cross-library compatibility impact
    ecosystemTracked by a shared ML4T ecosystem requirement
    on Aug 11, 2026
  2. stefan-jansen commented on Aug 11, 2026

    @stefan-jansen
    ContributorAuthor

    Additional Python 3.15 rc1 evidence from the exact qualification matrix:\n\n- ml4t-engineer originally failed on Numba, PyArrow, and unused scientific core dependencies. PR ml4t/engineer#34 now isolates those optional dependencies; local Python 3.15 core installation and fallback tests pass.\n- ml4t-diagnostic fails core installation because scikit-learn requires SciPy. SciPy 1.18.0 has no CPython 3.15 wheel on PyPI or the Scientific Python nightly index, and its source build fails without OpenBLAS. SciPy is used directly throughout diagnostic, so it cannot be removed or skipped without reducing supported functionality.\n- ml4t-models completed all 409 tests on macOS but the July 25 PyTorch nightly exited with signal 11 at shutdown. PR ml4t/models#36 now uses the August 10 nightly, the newest date with Python 3.15 wheels on Linux, macOS, and Windows; Linux passes and the cross-platform rerun is pending.\n\nThese are blocking checks under the approved policy. No test exclusions or source-build system dependency workarounds have been added.

  3. changed the title [-]Python 3.15 qualification blocked by Polars datetime construction[/-] [+]Resolve blocking Python 3.15 dependency compatibility[/+] on Aug 11, 2026
  4. stefan-jansen commented on Aug 11, 2026

    @stefan-jansen
    ContributorAuthor

    Final branch evidence at the 2026-08-11 cutoff: data has 20 successful checks and three Polars failures; engineer has 23 successful checks and three Polars failures; diagnostic has 34 successful checks and three SciPy installation failures. Backtest, specs, live, and models pass the full stable and Python 3.15 policy. All seven libraries pass every required Python 3.12-3.14 operating-system job. The blocker is limited to Polars for data and engineer and SciPy wheel availability for diagnostic.

  5. stefan-jansen commented on Aug 11, 2026

    @stefan-jansen
    ContributorAuthor

    Approved temporary compatibility handling is now implemented and pushed. Data and engineer use the python-315-polars exception; diagnostic uses python-315-scipy. Each package declares Requires-Python >=3.12,<3.15, retains the complete Python 3.12-3.14 operating-system matrix, and validates its exception in place of silently omitting Python 3.15. Both exceptions expire on 2026-09-30. Backtest, specs, live, and models retain blocking Python 3.15 prerelease checks.

  6. stefan-jansen commented on Aug 11, 2026

    @stefan-jansen
    ContributorAuthor

    Rechecked upstream and PyPI on 2026-08-11 before release preparation. pola-rs/polars#28750 remains open and awaiting code-owner review; PyPI still reports Polars 1.43.2 as current. SciPy remains at 1.18.0, and its current release file inventory contains no cp315 wheel. The approved Polars and SciPy exceptions therefore remain necessary and unchanged.

  7. stefan-jansen commented on Aug 25, 2026

    @stefan-jansen
    ContributorAuthor

    Rechecked the Diagnostic blocker on 2026-08-25 against the published 0.1.2 package and CPython 3.15.0rc1. SciPy is no longer blocking: SciPy 1.18.1 publishes cp315 wheels for Linux, macOS, and Windows. Installation now reaches PyArrow 25.0.1, which publishes no cp315 wheels, attempts a source build, and fails because Arrow C++ development libraries are unavailable.

    Upstream Apache Arrow issues #48172 and #50091 report Python 3.15 wheel support implemented for the 26.0.0 milestone (Q4 2026); #50943 tracks remaining nightly Pandas integration. The library-specific blocker is ml4t/diagnostic#45.

    The configured python-315-scipy exception is therefore stale in both cause and version scope: it excludes Diagnostic 0.1.2. No exception has been renamed, broadened, or renewed pending an evidence-backed ecosystem decision.

  8. stefan-jansen commented on Sep 19, 2026

    @stefan-jansen
    ContributorAuthor

    Rechecked on 2026-09-19. The repository-owned compatibility and release work is complete; the remaining Python 3.15 failures are still upstream dependency conditions.

    Decision 0010 records the current evidence, affected version ranges, mitigations, and unchanged 2026-09-30 expiry. No exception was broadened to another library or beyond the next patch boundary.

  9. stefan-jansen commented on Sep 19, 2026

    @stefan-jansen
    ContributorAuthor

    A Data pull request exposed a PEP 440 edge case in the approved Polars exception: Hatch-VCS reports post-v0.1.7 commits as 0.1.8.devN, which is not contained by <0.1.8. Decision 0012 and PR #24 corrected the bound to >=0.1.2,<=0.1.8, retaining the same libraries, evidence, mitigation, and 2026-09-30 expiry. PR #25 then refreshed the reusable workflow’s internal ecosystem checkout, which had continued to execute an older policy snapshot despite callers pinning the newer workflow. Regression tests now cover both the VCS development version and the embedded snapshot SHA.

    The upstream Python 3.15 dependency blockers remain unchanged; this fixes enforcement of the existing exception rather than broadening its purpose.

  10. added
    type: maintenanceInternal maintenance without user-visible behavior
    and removed
    type: bugConfirmed or reported incorrect behavior
    priority: criticalImmediate correctness, security, or release impact
    on Sep 21, 2026
  11. changed the title [-]Resolve blocking Python 3.15 dependency compatibility[/-] [+]Track Python 3.15 dependency compatibility[/+] on Sep 21, 2026
  12. stefan-jansen commented on Sep 21, 2026

    @stefan-jansen
    ContributorAuthor

    Decision 0013 in ecosystem pull request #41 replaces the September 30 exception expiry with
    objective review triggers.

    • Owner: the ecosystem repository, with Data Reconcile and remediate Diagnostic #37 and Diagnostic Cover Data 0.2.0 under the Python 3.15 Polars wait #45 supplying library evidence.
    • Data and Engineer recheck on Python 3.15 final or a Polars release after 1.44.2.
    • Diagnostic rechecks on Python 3.15 final or PyArrow 26.
    • The affected 0.1 release lines keep truthful <3.15 metadata and run visible non-blocking canaries
      at least monthly.
    • Python 3.12 through 3.14 remain blocking. Python 3.15 dependency readiness does not block an
      otherwise qualified stable release.

    The current evidence still blocks claiming Python 3.15 support: Polars 1.44.2 fails required Data
    series construction on CPython 3.15.0rc1, and PyArrow 25.0.1 has no CPython 3.15 wheels.
    Pydantic-core 2.49.0 now has CPython 3.15 wheels and has been removed from the blocker list.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    compatibility: affectedHas Python, platform, dependency, or cross-library compatibility impactecosystemTracked by a shared ML4T ecosystem requirementpriority: normalNormal planned workstatus: blockedCannot progress until the documented dependency resolvestype: maintenanceInternal maintenance without user-visible behavior

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions