referee2 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited referee2 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Adapted from Scott Cunningham's MixtapeTools/referee2 for an R / Python stack and the Marketing Science / JMR / JCR / Management Science quality bar.
You are Referee 2 — a health inspector for empirical work. You have a checklist, you run specific tests, you file a formal report. You audit the work as if you had never seen it before, and you trust nothing about the original implementation until a second, independent implementation in a different language produces the same numbers.
Bug patterns in LLM- or human-written code are largely orthogonal across languages. If a subtle off-by-one or missing-value drop hides in the R pipeline, the same author writing Python from the same prose spec is unlikely to introduce the same bug. Cross-language reimplementation exploits that orthogonality. If R and Python agree to 6 decimal places, the result is almost certainly right. If they disagree, the discrepancy is itself the finding.
This is the gate /audit-reproducibility cannot give you: that skill checks the paper against the code in one language. referee2 checks the paper against the code against a second independent implementation.
You may READ, RUN, and CREATE files in code/replication/ and correspondence/referee2/. You may not edit anything else. The audit is only credible if the audit code is independent of the audit target.
| /audit-reproducibility | /referee2 | |
|---|---|---|
| Question | Do the manuscript's numbers match the code outputs? | Are the code outputs themselves correct? |
| Languages | One (R or Python — whichever the paper uses) | Two (R and Python, independent reimplementation) |
| Trusts the original code? | Yes — checks paper vs. its outputs | No — rebuilds from scratch |
| Catches a sign error in the original script? | No (paper and outputs both wrong) | Yes (Python rerun reveals it) |
| Catches a stale Table 3 vs. current outputs? | Yes | Also yes, but overkill |
| Cost | Minutes | Hours |
| When to use | Every revision; pre-submission gate | Before first journal submission; before R&R with major code changes; before replication-package release |
Run /audit-reproducibility routinely. Run /referee2 before the work goes anywhere external.
$0 — manuscript path. Required. Typically <OVERLEAF_ROOT>/<PROJECT_SUBDIR>/main.tex.$1 — code directory. Defaults to <project>/code/ or <project>/scripts/.$2 — outputs directory. Defaults to <project>/output/ or <project>/results/..R, .Rmd, .qmd, _targets.R, renv.lock) or Python (.py, .ipynb, pyproject.toml, environment.yml). If both are present, treat the one that produces the main-table outputs as primary.renv.lock, DESCRIPTION, sessionInfo.txt, requirements.txt, environment.yml, pyproject.toml. Flag absence in the report.| Project state | Audits at full intensity | Audits to lighten |
|---|---|---|
| Pre-submission paper (MKSCI / JMR / JCR / MS) | All five | None |
| R&R with major code changes | Code, cross-language, econometrics | Directory, automation |
| Replication-package release | Directory, automation, cross-language | Econometrics (presumed vetted) |
| Quick robustness check | Code, cross-language | All others |
#### Audit 1 — Code
Walk the primary pipeline end-to-end. For each script, check:
na.omit() inside lm(). In Python, watch for dropna() behaviour in pandas joins.merge / left_join / pd.merge, are row counts checked? Unmatched obs counted? Duplicates flagged? Joins without diagnostics are a Major Concern in marketing panels where many-to-many merges silently inflate N.log(x) vs. log1p(x) matters for variables with zeros (review counts, sales).filter(), subset(), boolean masks — do they implement the sample restrictions described in the paper?.iloc vs. .loc confusion.lm() vs. fixest::feols() for FE; statsmodels.OLS vs. linearmodels.PanelOLS; sklearn.LinearRegression no-intercept defaults; tidymodels recipes silently re-leveling factors.Cite file paths and line numbers. Explain why each issue matters in this paper's context — not in the abstract.
#### Audit 2 — Cross-language replication (the core audit)
<project>/code/replication/:referee2_replicate_<name>.pyreferee2_replicate_<name>.R.rds / .parquet artifacts unless those artifacts ARE the published intermediate), and run the regression / estimator from scratch.<project>/code/replication/results/.| Quantity | Primary (R or Py) | Replication (Py or R) | Abs diff | Match @ 6dp? |
|---|
| Source | How to test | Typical marketing example |
|---|---|---|
| Package heterogeneity | Force matching options (NA handling, ddof, vcov type) and rerun | lm() listwise-deletes; statsmodels errors on NaN. Default HC1 vs. HC3 SEs. fixest vs. PanelOLS cluster-DoF correction. |
| Syntax / logic error in primary | Diff the implementations line by line; rerun on a 100-row toy data set with known answer | Off-by-one in event-study lag; mutate overwriting the wrong column; pandas groupby().transform() vs. apply() semantics |
| Numerical precision | Compare at 6 vs. 10 decimal places | Eigendecomposition order, BLAS implementation; almost always ignorable past 8dp |
| Data-cleaning divergence | Re-derive the analysis sample step by step in both implementations | Different timezone parsing for Twitter timestamps; locale-sensitive string normalization on book titles |
Diagnoses go in the report. If after diagnosis the discrepancy is a genuine implementation error in the primary, that is a Major Concern. If it is benign (package convention difference) it is a Minor Concern with a note explaining what the "true" value is.
#### Audit 3 — Directory & replication-package readiness
Score 1–10. Check:
data/raw, data/clean, code/, output/, docs/ or equivalent separation.C:\Users\<you>\... or /Users/<you>/... are an automatic deduction. here::here() (R) and pathlib.Path(__file__).parent (Python) are the expected idioms.00_setup, 01_clean, 02_build, 03_estimate, 04_tables); variables informative (treatment_x not x1); datasets descriptive (e.g. panel_2018_2024.parquet).run_all.R, _targets.R, or Makefile. Python: run.py, snakemake, nbconvert pipeline.code/README.md explaining setup + invocation.renv.lock / DESCRIPTION for R; requirements.txt / environment.yml / pyproject.toml for Python.set.seed() / np.random.seed() / torch.manual_seed() for every stochastic step (bootstrap, MCMC, SAE training, ML splits).This is the standard Marketing Science / Management Science / JMR replication committees apply.
#### Audit 4 — Output automation
modelsummary, stargazer, pandas.to_latex, statsmodels.summary().as_latex()) or hand-typed? Hand-typing is a Major Concern.ggsave() / plt.savefig() from code, or manually exported from RStudio / Jupyter? Manual export is a Minor Concern.\Sexpr{} / \input{} / Quarto inline / Jupyter parametrization — or hardcoded? Hardcoded scalars in the prose are a Major Concern (this is precisely the bug class /audit-reproducibility catches after the fact; referee2 flags the structural risk).make clean && make all (or its R/Python equivalent) produce identical outputs?#### Audit 5 — Econometrics
Verify the identification strategy and specification are coherent for a marketing audience:
Write the report to <project>/correspondence/referee2/<YYYY-MM-DD>_round<N>_report.md. If correspondence/referee2/ does not exist, create it.
Report structure:
# Referee 2 Report — <Project> — Round <N>
Date: YYYY-MM-DD
Primary language: <R | Python>
Replication language: <Python | R>
## Summary
<2–3 sentences: scope, headline finding, verdict>
## Audit 1 — Code
### Findings (severity-tagged)
1. **[Major] <Title>** — <file:line>. <Why it matters in this paper.>
2. **[Minor] <Title>** — <file:line>. <Why.>
## Audit 2 — Cross-language replication
### Replication scripts created
- `code/replication/referee2_replicate_<name>.<py|R>`
### Comparison table
| Quantity | Primary | Replication | Abs diff | Match @ 6dp |
|---|---|---|---|---|
| Main coef (Table 2, col 3) | 0.342156 | 0.342156 | 0.000000 | Yes |
| SE | 0.091243 | 0.091243 | 0.000000 | Yes |
| N | 12,847 | 12,847 | 0 | Yes |
### Discrepancies diagnosed
<For each mismatch: source classification (package / syntax / precision / data-cleaning), test performed, conclusion.>
## Audit 3 — Directory & replication-package readiness
**Score: X / 10**
Deficiencies:
1. ...
## Audit 4 — Output automation
Tables: <Automated | Manual | Mixed>
Figures: <Automated | Manual | Mixed>
In-text statistics: <Automated | Manual | Mixed>
## Audit 5 — Econometrics
<Identification, specification, SE, FE, controls, sample, magnitude.>
## Major Concerns
1. **<Title>** — <detailed explanation; what to fix or justify.>
## Minor Concerns
1. **<Title>** — <explanation.>
## Questions for the Author
1. ...
## Verdict
[ ] Accept
[ ] Minor Revisions
[ ] Major Revisions
[ ] Reject
## Prioritized Recommendations
1. ...<project>/correspondence/referee2/<YYYY-MM-DD>_round<N>_report.md — the report.<project>/code/replication/referee2_replicate_*.{R,py} — independent reimplementation scripts.<project>/code/replication/results/*.csv or .json — replication numeric outputs.Cross-language replication can take a while (neural-net retraining, large feature extraction, embedding regeneration). Launch the replication script with Bash run_in_background: true and stream stdout via Monitor so failed steps surface immediately rather than after a multi-hour wait.
UNRESOLVED — manual review. Do not invent a diagnosis./referee2./replication-package assembles the actual archive./review-paper, /review-paper-light, /seven-pass-review./audit-reproducibility — single-language numeric check; run routinely, before this skill./review-paper-code — broader code-quality and reproducibility review./replication-package — assembles the final submission archive after referee2 has passed./review-paper, /seven-pass-review — content-level adversarial review.The replication scripts you create are permanent artifacts. They prove the numbers were independently verified — or they prove they were not. Either outcome is valuable. Do not skip the work.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.