Skip to content

marketing: LWDiD launch carousel (Ledger palette) + claims-sync guard - #790

Merged
igerber merged 1 commit into
mainfrom
lwdid-carousel
Aug 23, 2026
Merged

marketing: LWDiD launch carousel (Ledger palette) + claims-sync guard#790
igerber merged 1 commit into
mainfrom
lwdid-carousel

Conversation

@igerber

@igerber igerber commented Aug 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • LinkedIn launch carousel for the LWDiD estimator (v3.10.0 release): carousel/generate_lwdid_carousel.py + its committed PDF, following the house deck architecture (magazine sidebar, split logo, footer wordmark, dark slides) in a new poster mode (one idea per slide, body >= 16pt, headlines 32-54pt) with the "Ledger" palette (indigo primary, gold reserved for the single treated unit).
  • 8-slide inverted arc: hook ("One treated unit. An exact p-value.") -> the inference gap (SyntheticDiD named once, neutrally) -> the rolling transformation as the reveal -> Prop 99 proof (exact p = 0.021, RI p = 0.054, detrended, LW 2026 Table 3) -> Walmart at scale -> consolidated practice slide -> code -> CTA. Cover subtitle names the 3.10 release with the version derived from pyproject.toml.
  • tests/test_lwdid_carousel_claims.py (16 tests): every deck number is located on the committed tutorial-31 notebook surface via ast-parsed generator constants; slide-local qualifier pins (each qualifier must ride with the claim it scopes); per-slide constant-reference checks (a hardcoded literal cannot silently replace a synced value); ratio recomputation for the "barely half" / "factor of two" claims; banned-phrase guards (no absolutes, no competitor claims, no total-sample N = 1 notation, no inferential "flat leads" wording).

Methodology references (required if estimator / math changes)

  • Method name(s): N/A - no methodology changes (marketing artifact + claim-sync tests only)
  • Paper / source link(s): deck copy sourced from Lee & Wooldridge (2025, SSRN 4516518; 2026, SSRN 5325686) via docs/methodology/REGISTRY.md and the committed docs/tutorials/31_lwdid.ipynb
  • Any intentional deviations from the source (and why): the displayed RI p = 0.054 follows the authors'-package inclusive convention (Registry-documented deviation from the paper's printed 0.020) and is labeled as such on-slide; the Table 3 reproduction claim is scoped to ATT/SE/exact p

Validation

  • Tests added/updated: tests/test_lwdid_carousel_claims.py (new, 16 tests, all passing; skips cleanly when carousel/ or docs/ is absent)
  • Backtest / simulation / notebook evidence (if applicable): every number on the deck is a committed, seed-locked tutorial-31 output (Prop 99 and Walmart cells assert lwdid_ssc_ancillary provenance in the notebook itself); PDF regenerated from the committed generator

Security / privacy

  • Confirm no secrets/PII in this PR: Yes

@github-actions

Copy link
Copy Markdown

Overall Assessment

Looks good — no unmitigated P0/P1 findings.

Executive Summary

  • No estimator, weighting, variance, or default behavior changes.
  • LWDiD claims match the Registry, cited paper reviews, and tutorial outputs.
  • The RI p = 0.054 deviation is explicitly Registry-documented.
  • The committed eight-page PDF contains the qualified source copy.
  • All 16 claim assertions passed by direct invocation.
  • One non-blocking weakness remains in the AST-based guard.

Methodology

  • P3 — Documented RI deviation.
    Impact: The deck reports RI p = 0.054, whereas the paper prints 0.020. This is not a defect: the inclusive authors-package convention is documented at docs/methodology/REGISTRY.md:L2715, and the slide scopes Table 3 reproduction to ATT, SE, and exact p at carousel/generate_lwdid_carousel.py:L790-L796.
    Concrete fix: None required.

  • The exact-t assumptions and N >= 3 guard agree with docs/methodology/REGISTRY.md:L2649-L2656 and are stated at carousel/generate_lwdid_carousel.py:L722-L737. Walmart aggregation and inference wording also respects the documented per-surface conventions.

Code Quality

No findings.

Performance

No findings. PDF generation is an offline marketing workflow.

Maintainability

No separate findings beyond the test-guard limitation below.

Tech Debt

  • P3 — Tracked PDF drift risk.
    Impact: Nothing automatically proves the committed PDF was regenerated from its source, although this PR’s artifact is currently textually consistent.
    Concrete fix: Follow the existing rendered-text manifest or deterministic-build work item at TODO.md:L94. No PR action required.

Security

No findings. Temporary images use securely created files and are cleaned up; no secrets or PII were found.

Documentation / Tests

  • P2 — AST checks do not prove values are rendered.
    Impact: slide_strings accepts every string literal and slide_constant_refs every name anywhere in a function. A qualifier moved into a docstring, or a constant retained as a no-op while the slide hardcodes another value, would still pass despite the comments claiming rendered-surface coverage (tests/test_lwdid_carousel_claims.py:L123-L147).
    Concrete fix: Exclude docstrings and non-rendering expressions, or assert required per-page text/value tokens against an extracted PDF/render manifest.

@igerber igerber added the ready-for-ci Triggers CI test workflows label Aug 22, 2026
@igerber
igerber merged commit a79376a into main Aug 23, 2026
29 of 30 checks passed
@igerber
igerber deleted the lwdid-carousel branch August 23, 2026 00:52
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