Skip to content

Commit 2647ab8

Browse files
igerberclaude
andcommitted
chore(ci): sync lint.yml pins with dev-tool bump; mypy 3.10 target + py3.9 test leg
Companion to the Dependabot bump (black 26.5.1 / ruff 0.15.21 / mypy 2.3.0): - lint.yml: sync the pinned installs with pyproject's dev extra (TestLintWorkflowPinSync contract - the two surfaces move together). - pyproject [tool.mypy]: python_version 3.9 -> 3.10. mypy >= 2.2 rejects a 3.9 target, so static checking can no longer guard the library floor. - rust-test.yml: add a single Python 3.9 Linux leg to the gated test matrix as the compensating runtime floor guard. - CHANGELOG: Unreleased entry for the pin bump. Verified locally with the exact Lint Gate commands: ruff clean, black clean (229 files unchanged), mypy zero errors under the 3.10 target. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kt38RMkkZkNXKxi4G3QJ83
1 parent e100fbe commit 2647ab8

4 files changed

Lines changed: 23 additions & 3 deletions

File tree

.github/workflows/lint.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
with:
4040
python-version: '3.14'
4141
- name: Install pinned linters (keep in sync with pyproject [dev])
42-
run: pip install ruff==0.15.13 black==26.3.1
42+
run: pip install ruff==0.15.21 black==26.5.1
4343
- name: Ruff
4444
run: ruff check diff_diff tests
4545
- name: Black
@@ -60,7 +60,7 @@ jobs:
6060
# The package itself is NOT installed (mypy analyzes source directly;
6161
# no maturin/Rust build ever enters this workflow).
6262
- name: Install mypy + runtime deps for their type stubs (pinned)
63-
run: pip install mypy==2.1.0 numpy==2.4.5 pandas==3.0.3 scipy==1.17.1
63+
run: pip install mypy==2.3.0 numpy==2.4.5 pandas==3.0.3 scipy==1.17.1
6464
- name: Mypy
6565
run: mypy diff_diff
6666

.github/workflows/rust-test.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,12 @@ jobs:
124124
matrix:
125125
os: [ubuntu-latest, macos-latest, windows-latest, ubuntu-24.04-arm]
126126
python-version: ['3.11', '3.13', '3.14']
127+
include:
128+
# Python 3.9 floor guard (single Linux leg): mypy >= 2.2 can no
129+
# longer type-check with python_version = "3.9", so this runtime
130+
# leg is the floor's only continuous CI coverage.
131+
- os: ubuntu-latest
132+
python-version: '3.9'
127133

128134
steps:
129135
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [Unreleased]
9+
10+
### Changed
11+
- **Internal: dev tooling pins bumped** (Dependabot group + manual lint.yml sync):
12+
`black==26.5.1`, `ruff==0.15.21`, `mypy==2.3.0` in both the `dev` extra and the
13+
Lint CI workflow. mypy >= 2.2 can no longer target Python 3.9, so
14+
`[tool.mypy] python_version` moves to `"3.10"` (the library floor stays 3.9);
15+
as a compensating floor guard the gated test matrix gains a dedicated
16+
Python 3.9 Linux leg.
17+
818
## [3.8.0] - 2026-07-18
919

1020
### Added

pyproject.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,11 @@ ignore = ["E501"]
150150
"tests/test_t19_marketing_pulse_drift.py" = ["E741"]
151151

152152
[tool.mypy]
153-
python_version = "3.9"
153+
# mypy >= 2.2 cannot target Python 3.9 (python_version must be >= 3.10), so
154+
# static checking runs against 3.10 even though the library floor stays 3.9.
155+
# The floor is guarded at runtime instead: the gated test matrix carries a
156+
# dedicated Python 3.9 leg (.github/workflows/rust-test.yml).
157+
python_version = "3.10"
154158
warn_return_any = false
155159
warn_unused_configs = true
156160
ignore_missing_imports = true

0 commit comments

Comments
 (0)