Bump version to 3.9.0 - #761
Conversation
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.
Overall Assessment✅ Looks good — no P0 or P1 findings. Executive Summary
MethodologyNo findings. No methods or cited-paper implementations are affected. Code QualityNo findings. PerformanceNo findings; runtime logic is unchanged. MaintainabilityNo findings. The lifecycle gate reports no rows improperly pending at 3.9.0. Tech DebtNo findings. The modified ledger entries appropriately inventory future 4.0 migration work. SecurityNo findings or apparent secrets. Documentation/TestsP2 — Release preamble overstates warning coverage
P3 — No new Unreleased section
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.
|
🔁 AI review rerun (requested by @igerber) Head SHA: Overall Assessment✅ Looks good — no unmitigated P0 or P1 findings. Executive Summary
MethodologyNo findings. The result-field contract in Code QualityNo findings. PerformanceNo findings; runtime logic is unchanged. MaintainabilityNo findings. Static lifecycle checks found no ledger rows improperly pending at 3.9.0. Tech DebtNo findings. Reader inventories for SecurityNo findings or apparent secrets. Documentation/TestsP3 — Missing post-release Unreleased section
Validation note: static metadata, lifecycle, and reader-coverage checks passed. Pytest could not run because the environment lacks |
Summary
docs/v4-design.mdPhase 4): converts the curated[Unreleased]CHANGELOG section to[3.9.0] - 2026-08-10with a release-highlights preamble, adds the comparison link, and syncs the version string acrosspyproject.toml,diff_diff/__init__.py,rust/Cargo.toml,diff_diff/guides/llms-full.txt, andCITATION.cff(date-released2026-08-10).__version__arms the rule-11 "Duty C" window for 4.0-scheduled rename rows (tests/test_naming_guard.pyscopes enforcement todeprecated_inwithin the next-release horizon), so the previously-uninventoried readers of theoverall_attfield-flip family ([M-050]..[M-058]) and [M-016]period_effectsare now recorded on theirdocs/v4-deprecations.yamlrows'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)
code_refsbookkeeping only; the onediff_diff/source change is the__version__literal).Validation
tests/test_v4_matrix.py(267 passed -test_due_rows_are_terminaland all reality probes pass at 3.9.0),tests/test_naming_guard.py(the newly-armed Duty C sweep passes with the recorded inventories), andtests/test_guides.py(llms-full version line), pluspremerge_scan.pypattern checks clean.Security / privacy