docs(v4): planning consolidation - alias diet + canonical 3.9 sequence (M-132..M-135, M-063 cancelled) - #739
Conversation
…ancelled, section 9 de-staled + canonical 3.9 sequence Records the 2026-07-31 consolidation-scope decisions in the canonical pair (v4-design.md + the CI-enforced ledger): no staggered-family mega-merge, no ImputationDiD<->TwoStageDiD merge, and the moderate alias diet - CDiD, Stacked and Gardner deprecate at 3.9 (FutureWarning via a module-level __getattr__, M-135, since their surviving targets have no shim to ride) and are removed at 4.0 (M-132..M-134, code_refs carrying the grep-verified reader surfaces). EDiD was initially slated but is RETAINED: the Chen-Sant'Anna-Xie paper brands its estimator EDiD throughout (Tables 6/7; the repo's paper review records the same usage), which is the diet's own keep-the-literature-name criterion. The never-shipped Spillover introduction is cancelled (M-063 flipped terminal as an anti-resurrection pin). Ledger 110 -> 114 rows with matching matrix-test constants, plus the FORMAT CONTRACT comment rule qualified to line-leading-only. Section 9 is de-staled against the ledger: the phase-2 cell gains the shipped M-122..M-127 insertions, phase 3 gains M-064/M-082, and the phase-5 roster is completed (M-020..M-027/M-064/M-084/M-086..M-089/M-117 re-listed; M-031 carved out - no 4.0 lifecycle work; M-016 moved to a property-window clause - removal is 5.0) under an explicit citation semantic. A new "Remaining 3.9 sequence" subsection is the single canonical PR order (guard test -> 2c mixin-first -> 2c renames -> 2b aggregate()+consumability -> 2d -> phase-3 merges -> phase-4 cut). The TODO.md naming-guard row's phase-table agreement spec is amended to the enforceable two-direction form with a stated parser rule and derivation. Duplicated flip-plan prose in DEFERRED.md and the REGISTRY M-010 note is trimmed to cross-links; .claude/memory.md 4.0-TARGET blocks compressed to pointers; the stale "scheduled for PR C" comments in test_variance_conventions.py updated to the converged post-M-127 reality.
Overall assessment: ✅ Looks goodExecutive summary
MethodologyNo findings. The alias changes affect naming only. The EDiD rationale matches Code QualityNo findings. PerformanceNo findings; no runtime code changed. MaintainabilityIncomplete alias reader inventory
Tech DebtPhase-table predicate excludes
|
…rd predicate (CI review) Two review findings, both verified: (1) the M-133/M-134 code_refs missed label-usage surfaces - llms-autonomous.txt recommends "Stacked" and "(Gardner)" as estimator labels, practitioner.py's robustness-compare steps and business_report.py's diagnostic string recommend "Gardner", and business_report.py/power.py roster "Stacked" - now added (author-citation prose like "Gardner (2022)" and English phrases like "Stacked DiD" / "Stacked bar chart" are deliberately excluded; the mandated repo-wide grep in the notes covers the long tail). (2) The TODO.md guard predicate keyed only on introduced_in/deprecated_in/removed_in, which would reject M-008's legitimate phase-5 citation - that env-default row is scheduled solely via decision_due: "4.0"; the predicate now includes decision_due for env-default rows with M-008 named as a guard fixture.
|
🔁 AI review rerun (requested by @igerber) Head SHA: Overall assessment: ✅ Looks goodExecutive summary
MethodologyNo findings. The EDiD rationale is supported by Code QualityNo findings. PerformanceNo findings; no runtime code changed. MaintainabilityNo findings. M-133/M-134 now include the previously omitted reader surfaces at Tech DebtTracked naming-completeness guard
The prior SecurityNo findings or apparent secrets. Documentation/TestsNo findings. Static checks confirmed valid YAML, 114 unique IDs, existing nonterminal |
Summary
docs/v4-design.md+ the CI-enforceddocs/v4-deprecations.yaml): no staggered-family mega-merge, no ImputationDiD↔TwoStageDiD merge, and the moderate alias diet.CDiD,Stacked,Gardnerdeprecate at 3.9 and are removed at 4.0 (new ledger rows M-132..M-134,code_refscarrying the grep-verified reader surfaces); their 3.9FutureWarningrides a module-level__getattr__tracked by behavior row M-135 (introduced_in: "3.9", so the 3.9 cut cannot ship without it).EDiDwas initially slated but is retained — the Chen–Sant'Anna–Xie paper brands its estimator EDiD throughout (Tables 6/7;docs/methodology/papers/chen-santanna-xie-2025-review.mdrecords the same usage), which is the diet's own keep-the-literature-name criterion.Spilloveralias introduction is cancelled: M-063 flips terminal (done+ nullnew_target) as an anti-resurrection pin. Ledger row count 110 → 114 with matchingtest_v4_matrix.pyconstants; the ledger FORMAT CONTRACT's comment rule is qualified to line-leading-only (matching the scanner).docs/v4-design.md§9 is de-staled against the ledger: the phase-2 cell gains the shipped M-122..M-127 insertions, phase 3 gains M-064/M-082, the phase-5 roster is completed (M-020..M-027/M-064/M-084/M-086..M-089/M-117 re-listed; M-031 carved out — no 4.0 lifecycle work; M-016 moved to a property-window clause — its removal is 5.0) under an explicit citation semantic, and a new "Remaining 3.9 sequence" subsection becomes the single canonical statement of the remaining PR order..claude/memory.md4.0-TARGET blocks compress to pointers; stale "scheduled for PR C" comments intests/test_variance_conventions.pyare updated to the converged post-M-127 reality.Methodology references
docs/methodology/papers/chen-santanna-xie-2025-review.md).Validation
tests/test_v4_matrix.py(ROW_COUNT_FLOOR 110 → 114, id-snapshot range(132, 135), alias-warning assertion message covers the surviving-target case);tests/test_variance_conventions.py(comment-only staleness fixes). Full matrix suite passes (238 passed, 17 skipped);test_variance_conventions.pycollects cleanly; black/ruff clean on both.Security / privacy