From 19377d45d2e710ff412efb1f59b613207d313c32 Mon Sep 17 00:00:00 2001 From: igerber Date: Sat, 29 Aug 2026 06:27:31 -0400 Subject: [PATCH 1/2] Bump version to 3.11.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Roll the Unreleased CHANGELOG section to 3.11.0 (2026-08-29) and sync the version across pyproject.toml, diff_diff/__init__.py, rust/Cargo.toml, llms-full.txt, and CITATION.cff (version + date-released). Extend the test_naming_guard _NEXT_RELEASE ladder with (3, 11): "4.0" — interim minors keep the 4.0 enforcement horizon — so the version-keyed Duty C lifecycle gate re-arms at the new version. Headline material since 3.10.0: the DMLDiD estimator family (Chang 2020) — DML infrastructure (#789), staggered panel ATT(g,t) (#793), repeated cross sections (#794), survey-design/cluster support (#796) — plus the DML follow-up fix sweep (#795). Release-build-check run 33247407917 passed on main before this bump. --- CHANGELOG.md | 3 ++- CITATION.cff | 4 ++-- diff_diff/__init__.py | 2 +- diff_diff/guides/llms-full.txt | 2 +- pyproject.toml | 2 +- rust/Cargo.toml | 2 +- tests/test_naming_guard.py | 2 +- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 865ae8ab..6e0c472b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [3.11.0] - 2026-08-29 ### Added - **`DMLDiD` survey-design and cluster support (both lanes)**: `fit()` gains @@ -5467,6 +5467,7 @@ for the full feature history leading to this release. [2.1.2]: https://github.com/igerber/diff-diff/compare/v2.1.1...v2.1.2 [2.1.1]: https://github.com/igerber/diff-diff/compare/v2.1.0...v2.1.1 [2.1.0]: https://github.com/igerber/diff-diff/compare/v2.0.3...v2.1.0 +[3.11.0]: https://github.com/igerber/diff-diff/compare/v3.10.0...v3.11.0 [3.10.0]: https://github.com/igerber/diff-diff/compare/v3.9.1...v3.10.0 [3.9.1]: https://github.com/igerber/diff-diff/compare/v3.9.0...v3.9.1 [3.9.0]: https://github.com/igerber/diff-diff/compare/v3.8.0...v3.9.0 diff --git a/CITATION.cff b/CITATION.cff index 053b51f7..63d21143 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -7,8 +7,8 @@ authors: family-names: Gerber orcid: "https://orcid.org/0009-0009-3275-5591" license: MIT -version: "3.10.0" -date-released: "2026-08-22" +version: "3.11.0" +date-released: "2026-08-29" doi: "10.5281/zenodo.19646175" url: "https://github.com/igerber/diff-diff" repository-code: "https://github.com/igerber/diff-diff" diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index 99c0d11b..e607af7d 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -371,7 +371,7 @@ def __getattr__(name: str) -> _Any: raise AttributeError(f"module 'diff_diff' has no attribute {name!r}") -__version__ = "3.10.0" +__version__ = "3.11.0" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/diff_diff/guides/llms-full.txt b/diff_diff/guides/llms-full.txt index 88a14d78..83d401d7 100644 --- a/diff_diff/guides/llms-full.txt +++ b/diff_diff/guides/llms-full.txt @@ -2,7 +2,7 @@ > A Python library for Difference-in-Differences causal inference analysis. Provides sklearn-like estimators with statsmodels-style output for econometric analysis. -- Version: 3.10.0 +- Version: 3.11.0 - Repository: https://github.com/igerber/diff-diff - License: MIT - Dependencies: numpy, pandas, scipy (no statsmodels dependency) diff --git a/pyproject.toml b/pyproject.toml index d1cc7c7c..328c2f6e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "3.10.0" +version = "3.11.0" description = "Difference-in-Differences causal inference with sklearn-like API. Callaway-Sant'Anna, Synthetic DiD, Honest DiD, event studies, parallel trends." readme = "README.md" license = "MIT" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 5ab7cbae..64a80e20 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "3.10.0" +version = "3.11.0" edition = "2021" rust-version = "1.85" description = "Rust backend for diff-diff DiD library" diff --git a/tests/test_naming_guard.py b/tests/test_naming_guard.py index 881a3779..5e9ed0d2 100644 --- a/tests/test_naming_guard.py +++ b/tests/test_naming_guard.py @@ -107,7 +107,7 @@ # silently disarm 4.0-window checks). Keyed off diff_diff.__version__ so the # Duty C lifecycle gate re-arms mechanically at each version bump; a missing # key fails loudly. -_NEXT_RELEASE = {(3, 8): "3.9", (3, 9): "4.0", (3, 10): "4.0", (4, 0): "4.1"} +_NEXT_RELEASE = {(3, 8): "3.9", (3, 9): "4.0", (3, 10): "4.0", (3, 11): "4.0", (4, 0): "4.1"} # Section-8 vocabulary predicate (Duty A). Every param/field rename token in # the ledger - current and lifecycle-gated - must be matched here From c58bcd0e341964a7a992d195ac3bf94f14ab7d24 Mon Sep 17 00:00:00 2001 From: igerber Date: Sat, 29 Aug 2026 06:35:09 -0400 Subject: [PATCH 2/2] docs: restore empty [Unreleased] CHANGELOG section after the 3.11.0 roll (PR #799 review P2) CONTRIBUTING.md directs release-note bullets to the next unreleased version's section, so the header must exist between releases. The other cited references are in historical release sections ([3.7.0]..[3.3.0]) that every prior cut intentionally left verbatim as records of what was written at the time; they are unchanged. --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e0c472b..e4991162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + ## [3.11.0] - 2026-08-29 ### Added