{{ message }}
Address residual P3 docs drift from re-audit of PR #408#424
Merged
Conversation
Restored CI reviewer caught one actionable docs-drift item: stale mentions of "plug-in-only SE" and a `survey_design` mutex that #408 itself lifted. 1. CHANGELOG paths_of_interest entry listed `survey_design` in the by_path precondition gate alongside `heterogeneity` / `design2` / `honest_did`. Both `survey_design` (lifted by #408) and `heterogeneity` (composed in by #412) have been removed from that gate. Update the parenthetical to reflect the shipped gate and note the lifted mutexes explicitly to avoid misleading readers about current behavior. 2. `_compute_path_effects` docstring described SE only as "plug-in via _plugin_se(...)". Add a dedicated SE-formation section listing the non-survey plug-in path and the new survey path (path-restricted per-period IF routed through `_survey_se_from_group_if`, replicate-weight df propagation via `replicate_n_valid_list`, and the shared post-call `_refresh_path_inference` reconciling stored inference fields against the final `df_survey`). 3. `_compute_path_placebos` docstring mirrored the same plug-in-only description. Add a parallel SE-formation section pointing back at `_compute_path_effects` for the shared survey contract. No runtime behavior change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The CHANGELOG paths_of_interest entry referenced `chaisemartin_dhaultfoeuille.py:1118` for the by_path precondition gate, but later edits (lifting the survey_design mutex in #408 and composing in heterogeneity in #412) have drifted the actual gate location to ~L1216. Drop the numeric anchor entirely and describe the gate textually so future edits do not silently invalidate the line reference. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2 tasks
TDL77
pushed a commit
to TDL77/diff-diff
that referenced
this pull request
May 18, 2026
…ps + stale by_path gate list in CHANGELOG Holistic re-audit of merged igerber#408 (compose `by_path` × `survey_design` Wave 4) + igerber#424 (post-merge docs-drift cleanup). Per-PR CI on igerber#424 couldn't see the combined post-PR holistic state. Local agentic codex review surfaced 2 sibling-surface test gaps + 1 real `[Unreleased]` CHANGELOG drift. **Sibling-surface coverage**: igerber#408's Wave-4 PR shipped replicate-weight regressions for `by_path` (`test_per_path_replicate_se_finite`, `test_per_path_inference_refreshes_to_lower_final_df`) but the parallel `paths_of_interest` selector only had analytical / gate / unobserved-path tests under survey. Both selectors share the same `_compute_path_effects` and `_compute_path_placebos` IF code path, so the test gap was a selector-symmetry oversight, not a methodology gap. Added: - `test_paths_of_interest_replicate_weight_per_path_se_finite` — pins finite per-horizon SE under Rao-Wu (JK1) AND the `_refresh_path_inference` contract (every per-path entry's `t_stat` matches `safe_inference` at the FINAL `df_survey`, not the per-path snapshot from before replicate-weight fits appended to the shared `_replicate_n_valid_list`). - `test_paths_of_interest_survey_design_placebo_replicate_weight` — same invariants on the `_compute_path_placebos` branch. **CHANGELOG drift**: the original `[Unreleased]` `by_path` entry (added when by_path first shipped) said `trends_linear`, `trends_nonparam`, `heterogeneity`, `design2`, `honest_did`, and `survey_design` all raise `NotImplementedError`. Each subsequent gate-lift PR shipped its own `[Unreleased]` entry, but none of them went back to update this original entry's stale gated-features list. Users reading the changelog in order get contradictory upgrade guidance. Rewrote the gates list to reflect actual current state: only `design2` + `honest_did` remain gated. Pre-existing single-CHANGELOG-cycle hygiene gap, surfaced by the igerber#408 holistic audit but applies independently of any specific subsequent PR. Holistic pilot finding NOT addressed: phantom `heterogeneity was composed in` claim in igerber#424's CHANGELOG. That's correct in real main (igerber#412 lifted the heterogeneity gate), but appears as a code/doc mismatch in the pilot because pilot construction (per `feedback_holistic_pilot_true_merge_cherry_pick_pitfall`) is `igerber#408 + igerber#424 deltas only` and doesn't include intermediate sibling PRs like igerber#412. This is a structural limitation of the strict-delta pilot pattern — no fix-PR action needed in main.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Audit follow-up to PR #408. The restored CI reviewer caught one actionable docs-drift item: stale mentions of "plug-in-only SE" and a `survey_design` mutex that #408 itself lifted.
CHANGELOG: The `paths_of_interest` entry's mutex list still named `survey_design` and `heterogeneity` in the by_path precondition gate. Both were lifted later in the same Unreleased cycle (Compose by_path / paths_of_interest with survey_design (Wave 4 #10) #408 lifted `survey_design`, dCDH by_path Wave 5 #11: + heterogeneity (predict_het per-by_level) #412 composed in `heterogeneity`). Update to reflect the shipped gate (`drop_larger_lower / L_max / design2 / honest_did` only) and call out the lifted mutexes explicitly.
`_compute_path_effects` docstring in `chaisemartin_dhaultfoeuille.py`: described SE only as "plug-in via `_plugin_se(...)`". Add a dedicated SE-formation section listing both the non-survey plug-in path and the new survey path (path-restricted per-period IF routed through `_survey_se_from_group_if`, replicate-weight `df_survey` propagation via `replicate_n_valid_list`, and the shared post-call `_refresh_path_inference` reconciling stored inference fields against the final `df_survey`).
`_compute_path_placebos` docstring: mirrored the same plug-in-only description. Add a parallel SE-formation section pointing back at `_compute_path_effects` for the shared survey contract.
No runtime behavior change - documentation accuracy only.
Test plan
🤖 Generated with Claude Code