Skip to content

Bump version to 3.9.0 - #761

Merged
igerber merged 2 commits into
mainfrom
release/bump-3.9.0
Aug 10, 2026
Merged

Bump version to 3.9.0#761
igerber merged 2 commits into
mainfrom
release/bump-3.9.0

Conversation

@igerber

@igerber igerber commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Summary

  • Release the 3.9 shim wave of the 4.0 API-unification program (docs/v4-design.md Phase 4): converts the curated [Unreleased] CHANGELOG section to [3.9.0] - 2026-08-10 with a release-highlights preamble, adds the comparison link, and syncs the version string across pyproject.toml, diff_diff/__init__.py, rust/Cargo.toml, diff_diff/guides/llms-full.txt, and CITATION.cff (date-released 2026-08-10).
  • Records the reader inventories the naming guard demands once the version reaches 3.9: bumping __version__ arms the rule-11 "Duty C" window for 4.0-scheduled rename rows (tests/test_naming_guard.py scopes enforcement to deprecated_in within the next-release horizon), so the previously-uninventoried readers of the overall_att field-flip family ([M-050]..[M-058]) and [M-016] period_effects are now recorded on their docs/v4-deprecations.yaml rows' code_refs - producer modules on their own rows, cross-cutting consumers (diagnostic_report getattr chains, prep_dgp, the staggered-DDD engine/container, the three bundled AI guides, REGISTRY/REPORTING/continuous-did methodology pages) carried on [M-050]. Every flagged hit was verified to be a genuine reader of the deprecated surface; no status flips and no behavior changes.

Methodology references (required if estimator / math changes)

  • Method name(s): N/A - no methodology changes (version-string bump + deprecation-ledger code_refs bookkeeping only; the one diff_diff/ source change is the __version__ literal).
  • Paper / source link(s): N/A
  • Any intentional deviations from the source (and why): None

Validation

  • Tests added/updated: No test changes. Verified against the release gates: tests/test_v4_matrix.py (267 passed - test_due_rows_are_terminal and all reality probes pass at 3.9.0), tests/test_naming_guard.py (the newly-armed Duty C sweep passes with the recorded inventories), and tests/test_guides.py (llms-full version line), plus premerge_scan.py pattern checks clean.
  • Backtest / simulation / notebook evidence (if applicable): N/A

Security / privacy

  • Confirm no secrets/PII in this PR: Yes

Retitles [Unreleased] to [3.9.0] with a release-highlights preamble, syncs
the version across pyproject.toml, __init__.py, rust/Cargo.toml,
llms-full.txt and CITATION.cff, and records the reader inventories the
naming guard's rule-11 Duty C window demands once 3.9 arms the 4.0-scheduled
rename rows (M-016 period_effects, M-050..M-058 overall_att) in
docs/v4-deprecations.yaml code_refs.
@github-actions

Copy link
Copy Markdown

Overall Assessment

Looks good — no P0 or P1 findings.

Executive Summary

  • No estimator, weighting, variance, identification, or default behavior changes.
  • Version metadata is consistently updated to 3.9.0.
  • Deprecation inventories fully cover the activated period_effects and overall_att readers.
  • Two non-blocking release-note issues remain.

Methodology

No findings. No methods or cited-paper implementations are affected.

Code Quality

No findings.

Performance

No findings; runtime logic is unchanged.

Maintainability

No findings. The lifecycle gate reports no rows improperly pending at 3.9.0.

Tech Debt

No findings. The modified ledger entries appropriately inventory future 4.0 migration work.

Security

No findings or apparent secrets.

Documentation/Tests

P2 — Release preamble overstates warning coverage

  • Location: CHANGELOG.md:L10-L12, docs/v4-deprecations.yaml:L750-L762
  • Impact: The claim that “every old spelling” emits FutureWarning conflicts with documented exceptions such as QDiDResults, which deliberately emits no warning.
  • Concrete fix: Qualify the statement, for example: “deprecated surfaces remain available through 3.9, with warnings on their documented shim paths.”

P3 — No new Unreleased section

  • Location: CHANGELOG.md:L8
  • Impact: The changelog no longer provides the Keep-a-Changelog landing section for post-3.9 work.
  • Concrete fix: Optionally add an empty ## [Unreleased] above 3.9.0 and an associated comparison link.

Validation note: metadata parsing, version synchronization, due-row checks, and reader-inventory coverage passed static review. The pytest suite could not be rerun because the review environment lacks pytest and numerical dependencies.

"Every old spelling ... with a FutureWarning" overclaimed: a few deprecation
windows are deliberately silent and rowed as such - verified by execution
that accessing the QDiDResults export alias emits no warning of its own
(M-061: the alias is a plain module global whose target class survives;
constructing QDiD is what warns). The preamble now says warnings ride the
documented shim paths and names the alias as the example.
@github-actions

Copy link
Copy Markdown

🔁 AI review rerun (requested by @igerber)

Head SHA: 7ae81c1690cf788c392424972372f21a9dfbb7c9


Overall Assessment

Looks good — no unmitigated P0 or P1 findings.

Executive Summary

  • No estimator, weighting, variance, identification, or default behavior changed.
  • The prior warning-coverage concern is resolved by explicitly qualifying silent shim paths.
  • Version metadata and deprecation reader inventories are consistent.
  • One non-blocking changelog convention issue remains.

Methodology

No findings. The result-field contract in docs/methodology/REGISTRY.md:L5 is unchanged; this PR only inventories future API renames.

Code Quality

No findings.

Performance

No findings; runtime logic is unchanged.

Maintainability

No findings. Static lifecycle checks found no ledger rows improperly pending at 3.9.0.

Tech Debt

No findings. Reader inventories for overall_att and period_effects cover all guarded consumers.

Security

No findings or apparent secrets.

Documentation/Tests

P3 — Missing post-release Unreleased section

  • Location: CHANGELOG.md:L8, CHANGELOG.md:L4779
  • Impact: There is no landing section for changes developed after 3.9.0.
  • Concrete fix: Optionally add ## [Unreleased] above 3.9.0 and an [Unreleased] comparison link from v3.9.0 to HEAD.

Validation note: static metadata, lifecycle, and reader-coverage checks passed. Pytest could not run because the environment lacks pytest and numerical dependencies.

@igerber igerber added the ready-for-ci Triggers CI test workflows label Aug 10, 2026
@igerber
igerber merged commit 777aa1d into main Aug 10, 2026
45 of 46 checks passed
@igerber
igerber deleted the release/bump-3.9.0 branch August 10, 2026 13:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-ci Triggers CI test workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant