From 72bf1a9cf9c8a7b362d960b3d18e1cfc6a094268 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 9 Jun 2026 23:25:27 +0200 Subject: [PATCH 1/3] Run CI on claude/spec-driven-engine and raise Python floor to 3.12 The Tests workflow only triggered on main while all integration PRs merge into claude/spec-driven-engine, so the spec engine has been landing without CI. Add the branch to the workflow triggers. requires-python claimed >=3.11 but microimpute (the canonical donor imputation backend) only installs on 3.12-3.14 via its marker, leaving 3.11 installs without the imputation engine. Raise the floor to 3.12 and align the CI matrix, classifiers, docs workflow, and mypy target. Co-Authored-By: Claude Fable 5 --- .github/workflows/docs.yml | 2 +- .github/workflows/test.yml | 6 +++--- pyproject.toml | 7 +++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 92cbd82..978dddd 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -18,7 +18,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.12" - name: Install dependencies run: | diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f0fde9e..5e115d9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,16 +2,16 @@ name: Tests on: push: - branches: [main] + branches: [main, claude/spec-driven-engine] pull_request: - branches: [main] + branches: [main, claude/spec-driven-engine] jobs: test: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.11", "3.12", "3.13", "3.14"] + python-version: ["3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v4 diff --git a/pyproject.toml b/pyproject.toml index 10ae935..4d9bb10 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,14 +24,13 @@ classifiers = [ "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Information Analysis", ] -requires-python = ">=3.11" +requires-python = ">=3.12" dependencies = [ "torch>=2.0", "numpy>=1.24", @@ -70,7 +69,7 @@ l0 = [ calibrate = [ # Identity-preserving gradient-descent chi-squared adapter. # microcalibrate pins Python >=3.13; the marker avoids breaking - # microplex installs on 3.11/3.12 that don't need the extra. + # microplex installs on 3.12 that don't need the extra. "microcalibrate>=0.22; python_version >= '3.13'", ] benchmark = [ @@ -122,7 +121,7 @@ select = ["E", "F", "I", "N", "W", "UP"] ignore = ["E501"] # Line length handled by formatter [tool.mypy] -python_version = "3.11" +python_version = "3.12" warn_return_any = true warn_unused_configs = true ignore_missing_imports = true From 73705ce8342350a217337336a26fe759b5ad0e07 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Tue, 9 Jun 2026 23:32:45 +0200 Subject: [PATCH 2/3] Add missing __init__.py to test packages tests/spec/test_spec.py and tests/targets/test_spec.py share a module basename, and neither directory was a package, so pytest's whole-suite collection failed with an import file mismatch. tests/ already uses package-style test directories (tests/__init__.py, tests/fusion/); bring core/, spec/, and targets/ in line. The full suite has been uncollectable since the duplicate basename landed - masked because CI never ran on this branch and local runs targeted tests/spec/ only. Co-Authored-By: Claude Fable 5 --- tests/core/__init__.py | 0 tests/spec/__init__.py | 0 tests/targets/__init__.py | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/core/__init__.py create mode 100644 tests/spec/__init__.py create mode 100644 tests/targets/__init__.py diff --git a/tests/core/__init__.py b/tests/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/spec/__init__.py b/tests/spec/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/targets/__init__.py b/tests/targets/__init__.py new file mode 100644 index 0000000..e69de29 From c2ea74e08acfc99f7969bc7ff239b0a3c265e265 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 10 Jun 2026 00:05:18 +0200 Subject: [PATCH 3/3] Install CI deps with uv so tool.uv.sources is honored The suite's 41 failures came from pip resolving microimpute from PyPI (3.1.1, abstract Imputer) while [tool.uv.sources] pins the git rev with the concrete canonical Imputer the engine instantiates. pip ignores tool.uv.sources; uv honors it. Co-Authored-By: Claude Fable 5 --- .github/workflows/test.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5e115d9..59ab146 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,10 +21,15 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: Set up uv + uses: astral-sh/setup-uv@v6 + - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install -e ".[dev]" + # uv (not pip) so [tool.uv.sources] is honored — microimpute is + # pinned to a git rev there; plain pip resolves PyPI instead and + # gets an Imputer API the spec engine cannot run against. + uv pip install --system -e ".[dev]" - name: Run tests run: |