Commit 48a1469
committed
docs(v4): gating-completeness amendment - mirrored renames, public-function sweep, un-rowed obligations
Audits the public surface against the 4.0 spec's own contract-rename rules and
closes the gaps, so the automated release gate sees every 3.9 obligation.
Rename coverage. The Phase 1 inventory was derived from the ESTIMATOR ROSTER,
which left two classes of surface unaudited:
- RESULTS fields mirroring a renamed param. M-094
(RegressionDiscontinuityResults.treatment_col), M-095
(StackedDiDResults.clean_control), M-114
(ChaisemartinDHaultfoeuilleResults.groups -> .units, whose "groups" are unit
ids). All are public dataclass fields emitted by to_dict(), so renaming the
params alone would leave deprecated spellings on the serialized surface that
section 5 forbids from 4.0. Section 8 gains rule 9.
- Module-level public FUNCTIONS. M-097 (twowayfeweights(group=) -> unit=,
which section 3.3 RETAINS past 4.0, so no wrapper removal covers it),
M-098..M-112 (five _col params on each of joint_pretrends_test,
joint_homogeneity_test, did_had_pretest_workflow), M-113
(trim_weights(weight_col=) -> weights=). Section 8 gains rule 10.
M-115 adds the fourth `robust` site (LinearRegression): section 7 says the flag
dies "everywhere it exists" while M-045..M-047 enumerated only three.
M-042/M-094 target `takeup`, not `treatment`: fuzzy RD accepts non-binary dose
take-up (matching R's fuzzy=, with the estimand degrading from complier-LATE to
a bare local Wald ratio), and rule 7 reserves `treatment` for a 0/1 indicator.
Rule 7 records the corollary. No shim had shipped, so the retarget is free.
NOT violations, documented so the sweep is not re-litigated: the staggered
family's group/groups and GroupTimeEffect.group name the ATT(g,t) COHORT in
Callaway-Sant'Anna notation (rule 8 protects it; renaming to unit would be
wrong), and TripleDifference.fit[group] is the treated-group indicator rule 3
reserves the name for.
Gate coverage. Three Phase 2 obligations could not fail the release gate:
M-081 (n_bootstrap semantics) gains introduced_in 3.9; new M-096 covers the
inference="wild_bootstrap" selector contract; and the BaseEstimator mixin plus
the R-equivalents docs table get a section 9 3.9-cut checklist since neither is
rowable. Behavior rows use introduced_in rather than deprecated_in because the
early-flip guard keys off deprecated_in and would fail the very PR that
implements the obligation (it lands at 3.8.x) - the M-091/M-092 pattern, now
written down.
M-096 also records that the selector does not fail closed today: inference= is
stored with no valid-value check, and DiD routes wild_bootstrap without
cluster= silently to analytical (a currently pinned behavior), so a typo or a
missing prerequisite quietly changes which SE/p/CI procedure runs. Repairing
that is now gated Phase 2 scope. The row is a drift guard, not a uniformity
mandate: estimators whose bootstrap IS their inference method run materially
different procedures (CS an influence-function multiplier bootstrap; SunAbraham
a unit-pairs bootstrap, Rao-Wu rescaled on survey paths; dCDH a group-level IF
multiplier upgrading to Hall-Mammen PSU under strictly-coarser survey PSUs)
versus DiD/TWFE's residual WCR with test-inverted CIs, so one value spelling
for all would make a uniform name carry altered meaning.
M-008's notes record that its telemetry soak window is the 3.9 -> 4.0 gap.
Ledger 77 -> 99 rows (floor and immutable-id snapshot extended in the same
diff); rows gating a 3.9 bump 45 -> 68. Every new row is `planned` - the shims
land in Phase 2c. TODO.md tracks the follow-up guard test that makes this
completeness mechanical rather than dependent on who runs the audit.
Docs, ledger and test-count updates only - no public API or numerical behavior
change.1 parent 6bdd5ac commit 48a1469
5 files changed
Lines changed: 489 additions & 17 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
11 | 86 | | |
12 | 87 | | |
13 | 88 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
48 | 49 | | |
49 | 50 | | |
50 | 51 | | |
| |||
0 commit comments