From b8ec9fa4f78d9af42abad381e8df88c93cca230e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 18:45:19 +0000 Subject: [PATCH 1/2] chore(deps-dev): bump ruff Bumps the python-minor-patch group with 1 update in the / directory: [ruff](https://github.com/astral-sh/ruff). Updates `ruff` from 0.15.21 to 0.16.0 - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.15.21...0.16.0) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.22 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: python-minor-patch ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d3170d07..7377dd60 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,7 +65,7 @@ dev = [ # NOTE: black/mypy require Python >= 3.10 (dev tooling only; the library # floor stays 3.9). "black==26.5.1", - "ruff==0.15.21", + "ruff==0.16.0", "mypy==2.3.0", "maturin>=1.4,<2.0", "matplotlib>=3.5", From ce574e6dc3a2792b1bcff496eb3e05869fc2531e Mon Sep 17 00:00:00 2001 From: igerber Date: Thu, 30 Jul 2026 07:44:25 -0400 Subject: [PATCH 2/2] chore: sync lint.yml ruff pin to 0.16.0 + document load-bearing select Dependabot bumps only the `dev` extra in pyproject.toml, but the Lint Gate installs ruff by explicit pin from lint.yml. Left unsynced the two surfaces diverge (TestLintWorkflowPinSync fails) and, worse, the Ruff check would go green while still running 0.15.21 - proving nothing about the new pin. The bump's real content is a default-selection expansion: ruff 0.16.0 enables 413 rules across 38 linter families by default, up from 59 across 2. This repo is insulated only because `[tool.ruff.lint] select` is explicit - the resolved set is the same 68 rules under both pins (17 E, 43 F, 2 I, 6 W, per `ruff check --show-settings`), and the three preview-to-stable promotions (FURB164, FURB192, ISC004) fall outside those families. `ruff check diff_diff tests` and `black --check` are clean on both pins. Records that in CHANGELOG.md and adds a CONTRIBUTING.md note, since dropping the explicit `select` to inherit defaults is now a ~7x rule-set change. --- .github/workflows/lint.yml | 2 +- CHANGELOG.md | 11 +++++++++++ CONTRIBUTING.md | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index eb139c93..75bb49fd 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -39,7 +39,7 @@ jobs: with: python-version: '3.14' - name: Install pinned linters (keep in sync with pyproject [dev]) - run: pip install ruff==0.15.21 black==26.5.1 + run: pip install ruff==0.16.0 black==26.5.1 - name: Ruff run: ruff check diff_diff tests - name: Black diff --git a/CHANGELOG.md b/CHANGELOG.md index d7d678f5..5916b483 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 three modes now dispatch, and `"error"` raises naming the skipped pairs. ### Changed +- **Internal: `ruff` dev-tooling pin bumped `0.15.21` -> `0.16.0`** (Dependabot + + manual `lint.yml` sync). 0.16.0 expands ruff's *default* rule selection from + 59 rules across 2 linter families to **413 across 38** (`B`, `PL*`, `PYI`, + `RUF`, `SIM`, `UP`, ...). This repo is insulated because + `[tool.ruff.lint] select = ["E", "F", "I", "W"]` is explicit: the resolved set + is the same **68 rules** under both pins (17 `E`, 43 `F`, 2 `I`, 6 `W`, per + `ruff check --show-settings`), and 0.16.0's three preview-to-stable promotions + (`FURB164`, `FURB192`, `ISC004`) fall outside those families. + `ruff check diff_diff tests` and `black --check` are clean on both pins. + **That explicit `select` is load-bearing** - dropping it to inherit ruff's + defaults would now enable ~7x more rules. - **`WooldridgeDiD` now raises when rank reduction removes any requested cohort×time cell**, instead of reporting the survivors under their original `ATT(g,t)` labels. Once a cell is dropped, the remaining coefficients diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b86df4f4..379a0962 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,6 +19,12 @@ mypy diff_diff Refresh with `pip install -e ".[dev]"`. The pinned tools require Python >= 3.10 (dev tooling only; the library itself still supports Python 3.9). +- `[tool.ruff.lint] select = ["E", "F", "I", "W"]` is deliberately explicit and + is **load-bearing**, not a restatement of ruff's defaults. Ruff 0.16.0 expanded + its default selection from 59 rules to 413 across 38 linter families; the + explicit `select` is what keeps a ruff upgrade from silently enabling hundreds + of new rules. Do not drop it to inherit the defaults. Widening the rule set is + a deliberate PR of its own. - `[tool.ruff.lint.per-file-ignores]` entries are deliberate (trop logger-before-imports E402, honest_did math-notation `l` E741, `__init__` re-export F401, conftest import ordering E402). Do not "fix" those patterns