Skip to content

Add v2.6 LinkedIn carousel PDF#181

Merged
igerber merged 2 commits intomainfrom
continuous-did-carousel
Feb 22, 2026
Merged

Add v2.6 LinkedIn carousel PDF#181
igerber merged 2 commits intomainfrom
continuous-did-carousel

Conversation

@igerber
Copy link
Owner

@igerber igerber commented Feb 22, 2026

Summary

  • Add carousel PDF generator script (carousel/generate_v26_pdf.py) for the v2.6 continuous DiD release
  • Generate 10-slide LinkedIn carousel covering: hook, problem (binary DiD bias), solution (3-step procedure), math (B-spline OLS / ATT / ACRT), dose-response curve, ATT vs ACRT comparison, assumptions (PT vs SPT), code example, use cases, full toolkit grid, and CTA
  • Includes matplotlib equation rendering, dose-response figure, and light gradient backgrounds

Methodology references (required if estimator / math changes)

  • N/A - no methodology changes (marketing carousel only)

Validation

  • Tests added/updated: No test changes (standalone PDF generator)
  • Backtest / simulation / notebook evidence (if applicable): N/A

Security / privacy

  • Confirm no secrets/PII in this PR: Yes

Generated with Claude Code

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
Copy link

Overall Assessment: ⚠️ Needs changes

Executive Summary

  • Methodology mismatch in the assumptions slide: Standard PT is stated as identifying ATT(d), but the registry says PT only identifies ATT(d|d)/ATT^{loc}; SPT is required for ATT(d)/ACRT(d).
  • Estimation step text reverses the regression direction (“dose on outcomes”), conflicting with the registry’s OLS specification.
  • No estimator or inference code paths changed; edge‑case checklist items are not triggered by this PR.
  • Minor maintainability: slide numbering comments/docstrings are inconsistent.

Methodology

  • P1 — ContinuousDiD identification is misstated under Standard PT. Impact: misleading claims about what is identified; could cause users to over‑interpret ATT(d) under PT. Fix: change the Standard PT row to reference ATT(d|d) (and optionally ATT^{loc}), and keep ATT(d)/ACRT(d) under Strong PT. References: carousel/generate_v26_pdf.py:L729-L742, docs/methodology/REGISTRY.md:L408-L430.
  • P1 — Estimation step reverses the regression direction. Impact: incorrect methodological description (implies regressing dose on outcomes rather than outcomes on dose basis). Fix: update to “Fit B‑spline regression of demeaned outcomes on dose (basis).” References: carousel/generate_v26_pdf.py:L406-L409, docs/methodology/REGISTRY.md:L432-L436.

Code Quality

  • No issues found.

Performance

  • No issues found.

Maintainability

  • P3 — Slide numbering comments/docstrings are inconsistent (e.g., Slide 8 label vs “Slide 7” docstring; Slide 8/9 mismatch). Impact: confusion when editing/reordering slides. Fix: align comments/docstrings with actual slide order. References: carousel/generate_v26_pdf.py:L808-L869.

Tech Debt

  • No issues found.

Security

  • No issues found.

Documentation/Tests

  • No issues found.

Correct Standard PT identification (ATT(d|d) not ATT(d)), fix regression
direction in estimation step, and align comment/docstring slide numbers
with actual slide order.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@igerber
Copy link
Owner Author

igerber commented Feb 22, 2026

/ai-review

@github-actions
Copy link

🔁 AI review rerun (requested by @igerber)

Head SHA: 6626ba01c21ae22eae648cd3eee6f43fab3befa6


Overall Assessment ✅ Looks good

Executive Summary

  • Methodology content for ContinuousDiD in the carousel (ATT/ACRT equations, PT/SPT identification, IF+bootstrap) matches the Methodology Registry; no estimator/inference code changes.
  • Generator script is self-contained and outputs the new 11-page PDF in carousel/.
  • P3: temp image cleanup isn’t guaranteed on exceptions.
  • P3: dependencies to run the script aren’t documented or declared.
  • Tests not run (not requested; change is a standalone asset/script).

Methodology

  • No findings. Affected method: ContinuousDiD. Carousel equations/assumptions are consistent with the registry and in-code docs. carousel/generate_v26_pdf.py:L488-L806

Code Quality

  • Severity: P3 | Impact: Temporary PNG files may persist if rendering fails before cleanup() runs, leaving clutter in temp directories. | Fix: wrap slide rendering/output in try/finally (or register atexit) to always call cleanup(). | Location: carousel/generate_v26_pdf.py:L49-L92, carousel/generate_v26_pdf.py:L1049-L1068

Performance

  • No findings.

Maintainability

  • No findings.

Tech Debt

  • No findings.

Security

  • No findings.

Documentation/Tests

  • Severity: P3 | Impact: Running the generator requires matplotlib, Pillow, and fpdf, but there’s no install/run guidance; contributors may be unable to regenerate the PDF. | Fix: add a short carousel/README.md (or a carousel optional dependency group in pyproject.toml) with install/run steps. | Location: carousel/generate_v26_pdf.py:L9-L15

@igerber igerber merged commit c832f1e into main Feb 22, 2026
@igerber igerber deleted the continuous-did-carousel branch February 22, 2026 21:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant