| # | Category | Status | Issues |
|---|---|---|---|
| # | Category | STATUS | Issues |
| 1 | Project layout | OK | Scripts numbered 01-05, clear pipeline |
| 2 | Script headers | OK | Purpose, inputs, outputs, runtime estimates documented |
| 3 | Console output | OK | Progress bars via `cli::cli_progress_bar()`; no raw `print()` |
| 4 | Reproducibility | OK | `set.seed(20250301)` in `01_build_exposure.R`; `here()` for all paths |
| 5 | Numerical discipline | OK | Exposure clamped; no float `==`; log(x+1) documented |
| 6 | Function design | OK | `compute_aioe()` modular; `estimate_did()` reused across specifications |
| 7 | Figure quality | WARN | Event study plot uses `ggtitle("Event Study: Employment")` — violates INV-12, title belongs in LaTeX `\caption{}` |
| 8 | Table quality | OK | Bare `tabular` via `modelsummary`; no `\begin{table}` wrapper (INV-13 compliant) |
| 9 | RDS/checkpoint | FAIL | No RDS save after `01_build_exposure.R` which calls GPT API (45 min, $12.40). Re-running `03_estimate.R` requires full rebuild including API calls |
| 10 | Comment quality | OK | Key methodology decisions annotated with paper references |
| 11 | Error handling | OK | `stopifnot(all(aioe_score >= 0 & aioe_score <= 1))` after API scoring; retry logic for API timeouts |
| 12 | Prohibited patterns | OK | No `setwd()`, `rm(list=ls())`, `install.packages()`, `attach()` |
Add Adao et al. (2019) SEs via ShiftShareSE package. Three lines of code: library(ShiftShareSE); reg_ss <- ivreg_ss(...); summary(reg_ss). This resolves the strategy alignment deduction and may change inference.
Add saveRDS(exposure_panel, here("data/cleaned/exposure_index.rds")) at end of 01_build_exposure.R. This prevents re-running 45 minutes of GPT API calls (and spending $12.40) every time downstream scripts change.
Implement the three missing robustness checks. The Rambachan & Roth analysis is 10 lines with HonestDiD. The placebo is a copy of 03_estimate.R with a date filter. The leave-one-out is a loop over unique(soc2).
Replace ggtitle() with empty string in all figure scripts. Panel labels inside facets are fine per INV-12.