diff --git a/config/libraries.toml b/config/libraries.toml index 0960997..e6db598 100644 --- a/config/libraries.toml +++ b/config/libraries.toml @@ -37,7 +37,7 @@ homepage_url = "https://www.ml4trading.io/" id = "python-315-polars" criterion = "python-3.15-prerelease" libraries = ["data", "engineer"] -affected_versions = ">=0.1.2,<0.2" +affected_versions = ">=0.1.2,<0.3" rationale = "Polars 1.44.2 fails required series construction on CPython 3.15.0rc1." evidence = [ "https://github.com/ml4t/data/issues/37", diff --git a/decisions/0015-python-315-polars-020-wait.md b/decisions/0015-python-315-polars-020-wait.md new file mode 100644 index 0000000..963827c --- /dev/null +++ b/decisions/0015-python-315-polars-020-wait.md @@ -0,0 +1,30 @@ +# Decision 0015: Continue the Polars wait through 0.2 releases + +**Status**: Accepted +**Date**: 2026-09-24 +**Approver**: Stefan Jansen + +## Context + +Decision 0013 replaced the expiration date for the Data and Engineer Python 3.15 wait with two +review triggers: Python 3.15 final and a Polars release after 1.44.2. Neither trigger has occurred. +Data 0.2.0 retains the truthful `Requires-Python: >=3.12,<3.15` bound and passed the blocking Python +3.12 through 3.14 release matrix, but the configured affected-version range ended before 0.2.0. +The ecosystem audit therefore rejected the published release even though its dependency blocker, +supported Python versions, evidence, user impact, and mitigation are unchanged. + +## Decision + +Extend the `python-315-polars` affected-version range from `>=0.1.2,<0.2` to `>=0.1.2,<0.3`. +The existing libraries, evidence, mitigation, owning issue, and objective review triggers remain +unchanged. This covers the Data and Engineer 0.2 release lines while the recorded dependency wait +is active. It does not claim Python 3.15 support or weaken the three-platform stable matrix. + +A 0.3 development or final release is outside this decision. It requires either completed Python +3.15 qualification or another reviewed decision supported by current dependency evidence. + +## Consequences + +Data 0.2.0 can satisfy ecosystem qualification when its source commit, release tag, PyPI metadata, +and deployed documentation agree. Data and Engineer continue to run the visible Python 3.15 canary +and must requalify when either existing review trigger occurs. diff --git a/tests/test_config.py b/tests/test_config.py index 075bfda..85b6296 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -57,7 +57,10 @@ def test_load_repository_config() -> None: assert exception.covers_version("0.1.8.dev2+g9096f8941") assert exception.covers_version("0.1.8") assert exception.covers_version("0.1.9.dev1") - assert not exception.covers_version("0.2.0.dev1") + assert exception.covers_version("0.2.0.dev1") + assert exception.covers_version("0.2.0") + assert exception.covers_version("0.2.1.dev1") + assert not exception.covers_version("0.3.0.dev1") diagnostic_exception = config.exception("python-315-scipy") assert diagnostic_exception.libraries == ("diagnostic",) diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py index 6542d73..d2fb2bd 100644 --- a/tests/test_exceptions.py +++ b/tests/test_exceptions.py @@ -15,7 +15,7 @@ def test_validate_exception_accepts_matching_repository() -> None: exception_id="python-315-polars", library_key="data", repository="ml4t/data", - package_version="0.1.2", + package_version="0.2.0", on_date=date(2026, 8, 11), ) @@ -42,7 +42,7 @@ def test_validate_exception_accepts_matching_repository() -> None: ( "data", "ml4t/data", - "0.2.0.dev1", + "0.3.0.dev1", date(2026, 8, 11), "does not cover version", ),