MarketDataDev02
## What happens The `test (3.11)` and `test (3.12)` jobs run the suite on Python 3.10, the same version as `test (3.10)`. Each job installs its matrix Python with `actions/setup-python`, and then `uv sync` sets up a 3.10 environment instead. From main run 36139219264 (2026-09-25): | job | setup-python | `uv sync --group dev` | pytest | |---|---|---|---| | `test (3.10)` | `Successfully set up CPython (3.10.21)` | `Using CPython 3.10.21 interpreter at: /opt/hostedtoolcache/Python/3.10.21/x64/bin/python3.10` | `platform linux -- Python 3.10.21` | | `test (3.11)` | `Successfully set up CPython (3.11.16)` | `Downloading cpython-3.10.21-linux-x86_64-gnu`, then `Using CPython 3.10.21` | `platform linux -- Python 3.10.21` | | `test (3.12)` | `Successfully set up CPython (3.12.14)` | `Downloading cpython-3.10.21-linux-x86_64-gnu`, then `Using CPython 3.10.21` | `platform linux -- Python 3.10.21` | So the three matrix jobs test one Python version three times. The release gate of `tag-and-release` and `publish.yml` calls this workflow, so it has the same gap. Code that breaks only on 3.11 or 3.12 passes CI. ## Why The repository pins `3.10` in `.python-version`, and `.github/workflows/test.yml` runs `uv sync --group dev` without `--python`. uv takes the version from `.python-version`, not from the interpreter setup-python put on `PATH`, and downloads a managed 3.10 when the runner has none. `uv run pytest` then runs in that `.venv`. The live-suite job in the same workflow (setup-python `3.12`, then `uv sync --group dev`) most likely runs 3.10 by the same mechanism. Its logs have not been checked. ## Definition of done - Each matrix job runs pytest on its own version, and the log shows `platform linux -- Python 3.11.x` and `3.12.x`. `UV_PYTHON: ${{ matrix.python-version }}` on the job or `uv sync --python ${{ matrix.python-version }}` would do it. - The live-suite job runs on the version it names. - Whatever fails on 3.11 or 3.12 once they really run is fixed or tracked. On 3.11 and later the lock resolves numpy 2.3.5 instead of 2.2.6, and CI has never run that.