test(ci): add a non-gating Python 3.15 lane to evaluate adopting the interpreter
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start with the tests job in .github/workflows/ci.yml (around line 242) and the note at line 335 about CI installing no Python, then read requires-python and the ruff and ty settings in pyproject.toml. Look at tests/image/test_dockerfile_uv_pins.py (test_all_uv_pins_agree_across_arches) and tests/jobs/capture_operations/test_manifest.py (around line 1080) to see which tests hard-code 3.14. Done means a non-gating 3.15 lane runs and reports results while the 3.14 gate stays unchanged, and the findings are recorded in the PR.
Written by the indexing model from the issue text.
Description
Problem
CPython 3.15 is released (3.15.0 on 2026-10-09, 3.15.2 current per endoflife.date). kdive is 3.14-only by contract and has no signal on whether 3.15 works: nothing in CI runs the suite under 3.15, so adoption can only be judged by merging a dependency bump and watching it fail. Dependabot PR #2096 (docker-images group, python:3.15.0-slim-bookworm) is open and fails exactly this way: test_all_uv_pins_agree_across_arches, test_docker_and_ansible_generate_after_final_interpreter, and the CI image smoke. Those failures are the 3.14-only contract working as written, not 3.15 incompatibilities, so they say nothing about 3.15 itself.
No existing issue covers this (searched open and closed for "3.15", "python 3.15", "python:3.15", "interpreter", "matrix", "requires-python"; the nearest hits are unrelated interpreter-path or #2818/#2819 release-qualification matrix issues).
Evidence
pyproject.toml:12pinsrequires-python = "==3.14.*";pyproject.toml:63sets rufftarget-version = "py314";[tool.ty.environment]atpyproject.toml:78sets onlypython-platform = "linux", so ty takes its Python version fromrequires-python.Dockerfile:16,:21,:80andtests/container/Dockerfile:6pinpython:3.14.6-slim-bookworm@sha256:....tests/jobs/capture_operations/test_manifest.py:1080hard-codes the stringFROM python:3.14.6-slim-bookworm;tests/image/test_dockerfile_uv_pins.py:42(test_all_uv_pins_agree_across_arches) andtests/jobs/capture_operations/test_manifest.py:1073encode the single-interpreter contract. Other tests that mention 3.14:tests/image/test_dockerfile_apt_https.py,tests/images/test_drgn_support.py,tests/scripts/test_check_setup_deps.py,tests/scripts/test_setup_developer.py,tests/scripts/test_live_workflow_shape.py,tests/deploy/*provisioning*.py,tests/processes/lifecycle/systemd/*.py..github/workflows/ci.yml:335documents that CI installs no Python (setup-uv takes nopython-version, no actions/setup-python) and relies onrequires-python;.github/workflows/live.yml:47notes live lanes depend on a system 3.14 (Ubuntu 26.04). ADR-0578 and ADR-0692 (EL10 python3.14 libguestfs binding) record why.- Native dependency 3.15 availability on PyPI (checked 2026-11-12):
drgn0.3.0 ships cp315 and cp315t manylinux wheels (repo pins 0.2.0 inpyproject.toml:55);psycopg-binary3.3.9 ships cp315 wheels (repo pinspsycopg[binary]==3.3.4,:15);cryptography50.0.2 ships abi3 wheels (cp311-abi3, usable on 3.15; repo pins 50.0.0,:19);libvirt-python12.9.0 is sdist-only (repo pins 12.5.0,:22), so it compiles against system libvirt headers on any interpreter. The pinned versions were not individually checked for cp315 wheels; the current releases above are the evidence that 3.15 support exists upstream.
Expected
A non-gating, clearly labelled 3.15 lane runs the ordinary suite (and lint/type where applicable) under CPython 3.15 and reports pass/fail, without weakening the 3.14-only contract for the default lane and release images. The result tells the project, with evidence, whether to adopt 3.15, and tells Dependabot #2096 what is actually blocking it.
Proposed approach
One PR, test/CI only, no change to the shipped interpreter:
- Add a CI job (or a matrix leg on the existing
testsjob atci.yml:242) that runsuv run --python 3.15 --no-project-style oruv sync --python 3.15with an override that relaxesrequires-pythonfor that lane only (for example a--config-file/UV_*override or a generated pyproject patch in the job), markedcontinue-on-errorso it is informational. Keep the 3.14 lane gating. - Run unit tests under 3.15 with warnings surfaced (3.15 deprecations/removals), and
ty check --python-version 3.15plusruff check --target-version py315as read-only probes. - Add a container smoke lane building
tests/container/Dockerfilewith a 3.15 base via build-arg, to show the image builds withpsycopg[binary],cryptography, andlibvirt-python(sdist build) on 3.15. - Record in the PR the first-run findings: which tests fail under 3.15 and why, split into (a) contract tests that hard-code 3.14 (
test_manifest.py:1080,test_dockerfile_uv_pins.py:42) versus (b) genuine 3.15 incompatibilities, and the list of pins (drgn,psycopg,cryptography,libvirt-python) that must be bumped for cp315 wheels. - Out of scope: actually changing
requires-python, the Dockerfile base images, or ruff/ty targets, and the live/EL10 guestfs binding (ADR-0692) which needs a 3.15 system binding; file follow-ups from the findings instead. Closing or rebasing #2096 is decided after the findings land.
Risk: risk:daytime-only (CI workflow change plus an interpreter-override mechanism that must not leak into the gating lane).
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- Avg merge
- 9h 13m
- Merged PRs (30d)
- 197
Getting set up
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from randomparity/kdive
-
area:core-platform effort:S priority:P3 risk:night-safe status:ready type:test
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
randomparity/kdive#3620 ·
Maintainers usually reply within 1 day
-
area:providers effort:S priority:P3 risk:night-watch status:ready type:docs
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
randomparity/kdive#3618 ·
Maintainers usually reply within 1 day
-
area:core-platform effort:S priority:P3 risk:night-safe status:ready type:test
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
randomparity/kdive#3603 ·
Maintainers usually reply within 1 day
-
area:providers effort:S priority:P3 risk:night-safe status:ready type:docs
Difficulty 1/5 1-3 hours Newbie friendliness 82/100
randomparity/kdive#3593 ·
Maintainers usually reply within 1 day
-
area:providers effort:S priority:P3 risk:night-safe status:ready type:refactor
Difficulty 1/5 Under an hour Newbie friendliness 84/100
randomparity/kdive#3592 ·
Maintainers usually reply within 1 day
All issues in randomparity/kdive
Similar issues
-
fleet size/m
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
sipyourdrink-ltd/bernstein#7548 ·
Maintainers usually reply within 1 day
-
good first issue help wanted level 1 wocs
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
GianlucaBave/murmury#73 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
G-nn-r/lg_heatpump#52 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
agno-agi/agno#11657 · 1 comment ·
Maintainers usually reply within 1 day
-
category:codebase:gpi category:codebase:handle type:bug
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Maintainers usually reply within 1 day