From ec81f575c49980b82358f7d599755e9536928355 Mon Sep 17 00:00:00 2001 From: igerber Date: Sun, 15 Mar 2026 13:19:25 -0400 Subject: [PATCH] Bump version to 2.7.0 and add CHANGELOG entry Add submit-pr step 10b to ensure PR ref exists after API creation. Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/commands/submit-pr.md | 20 ++++++++++++++++++++ CHANGELOG.md | 24 ++++++++++++++++++++++++ diff_diff/__init__.py | 2 +- pyproject.toml | 2 +- rust/Cargo.toml | 2 +- 5 files changed, 47 insertions(+), 3 deletions(-) diff --git a/.claude/commands/submit-pr.md b/.claude/commands/submit-pr.md index d902032f..9866bf51 100644 --- a/.claude/commands/submit-pr.md +++ b/.claude/commands/submit-pr.md @@ -310,6 +310,26 @@ git remote get-url origin # Extract owner from URL ``` +### 10b. Ensure PR ref exists + +After PR creation, GitHub may not immediately create `refs/pull//head` (especially +when the PR is created via API). Push a no-op to the branch to force ref creation: + +```bash +git push +``` + +Then verify: +```bash +git ls-remote refs/pull//head +``` + +If still missing, push an empty commit: +```bash +git commit --allow-empty -m "Trigger PR ref creation" +git push +``` + ### 11. Report Results ``` diff --git a/CHANGELOG.md b/CHANGELOG.md index 21f97c7a..8f5287c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.7.0] - 2026-03-15 + +### Added +- **EfficientDiD estimator** (`EfficientDiD`) implementing Chen, Sant'Anna & Xie (2025) efficient DiD +- CallawaySantAnna event study SEs (WIF-based) and simultaneous confidence bands (sup-t) +- R comparison tests for event-study SEs and cband critical values +- Non-finite outcome validation in `EfficientDiD.fit()` +- CallawaySantAnna speed benchmarks with baseline results +- Estimator alias documentation in README, quickstart, and API docs + ### Changed - **BREAKING: TROP nuclear norm solver step size fix** — The proximal gradient threshold for the L matrix (both `method="global"` and `method="twostep"` with @@ -17,6 +27,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 agreement with exact convex optimization solutions. Users with finite `lambda_nn` will observe different ATT estimates. Added FISTA/Nesterov acceleration to the twostep inner solver for faster L convergence. +- Add (1-W) weight masking to TROP global method, rename joint→global +- Optimize CallawaySantAnna covariate path with Cholesky and pscore caching +- Update Codex AI review model from gpt-5.2-codex to gpt-5.4 + +### Fixed +- Fix CallawaySantAnna event study SEs (missing WIF) and simultaneous confidence bands +- Fix analytical and bootstrap WIF pg scaling to use global N +- Fix TROP nuclear norm solver threshold scaling for non-uniform weights +- Fix stale coefficients in TROP global low-rank solver and NaN bootstrap poisoning +- Fix NaN-cell preservation in CallawaySantAnna balance_e aggregation +- Fix not-yet-treated cache keys and dropped-cell warning +- Fix rank-deficiency handling with Cholesky rank checks and reduced-column solve +- Fix Rust convergence criterion, n_valid_treated consistency, and NaN bootstrap SE ## [2.6.1] - 2026-03-08 @@ -865,6 +888,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `to_dict()` and `to_dataframe()` export methods - `is_significant` and `significance_stars` properties +[2.7.0]: https://github.com/igerber/diff-diff/compare/v2.6.1...v2.7.0 [2.6.1]: https://github.com/igerber/diff-diff/compare/v2.6.0...v2.6.1 [2.6.0]: https://github.com/igerber/diff-diff/compare/v2.5.0...v2.6.0 [2.5.0]: https://github.com/igerber/diff-diff/compare/v2.4.3...v2.5.0 diff --git a/diff_diff/__init__.py b/diff_diff/__init__.py index ec632204..b697d1b6 100644 --- a/diff_diff/__init__.py +++ b/diff_diff/__init__.py @@ -179,7 +179,7 @@ Bacon = BaconDecomposition EDiD = EfficientDiD -__version__ = "2.6.1" +__version__ = "2.7.0" __all__ = [ # Estimators "DifferenceInDifferences", diff --git a/pyproject.toml b/pyproject.toml index c7229784..b058d7e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "maturin" [project] name = "diff-diff" -version = "2.6.1" +version = "2.7.0" description = "A library for Difference-in-Differences causal inference analysis" readme = "README.md" license = "MIT" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index e829042b..a96ddf24 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "diff_diff_rust" -version = "2.6.1" +version = "2.7.0" edition = "2021" description = "Rust backend for diff-diff DiD library" license = "MIT"