AER Consistency
Overview
Referees and editors run cheap integrity checks before engaging with ideas:
does the abstract's number appear in the tables? Do the Ns add up? Does
"Table 4" exist? Does every citation resolve? A single mismatch reframes the
entire report from "is this right?" to "what else is wrong?" — and for
AI-assisted manuscripts these mismatches are the modal failure, because
text and tables are often generated in separate passes.
This skill is the full-manuscript integrity audit. It is mechanical by
design: every check below has a yes/no answer obtained by comparing two
artifacts, not by judgment. Run it after every revision round, not only
before first submission.
When to Use
- The body sections and exhibits exist and the manuscript is being assembled
- After an R&R revision, when numbers and exhibit ordering changed
- Before
aer-referee-sim (so the simulated referees attack substance, not
typos) and before aer-submission
- Any time results were re-run — even "tiny" re-runs desynchronize text
Audit 1 — The Headline-Number Register
Build a register of every number that appears more than once in the
manuscript, then verify each row against its single source of truth (the
table or the replication output):
NUMBER SOURCE ABSTRACT INTRO RESULTS CONCL MATCH
4.2 log points Tab 3 col 4 yes yes yes yes OK
s.e. 1.1 Tab 3 col 4 yes no yes no OK
$84 billion cited source no yes no yes OK
N = 37,824 Tab 1 no no yes no OK
Rules:
- Every quoted estimate matches its table to the digit, including the
standard error. No re-rounding in prose: if the table says 0.042 (0.011),
the text says 4.2, not 4 or 4.20.
- The abstract, introduction, and conclusion quote the same headline
specification. Quoting column 3 in the abstract and column 4 in the intro
is a real and common failure.
- Externally sourced numbers (the hook's "$84 billion") carry a citation at
first use, and the same value everywhere.
Audit 2 — Sample-Size Integrity
- The Data section's sample funnel arithmetic is exact: raw N minus each
documented drop equals the analysis N.
- The analysis N in Table 1 equals the N in the main results table for the
matching specification; every deviation (balanced panel, IV subsample) is
explained in the table notes and the text.
- Observation counts are consistent with the unit of analysis (12,400
county-years from 620 counties × 20 years — check the multiplication).
- Heterogeneity subsample Ns sum to the full-sample N (minus documented
exclusions).
Audit 3 — Units and Conversions
The conversion table for prose claims about coefficients:
| Outcome form |
Coefficient β means |
Exact percent effect |
| log(Y), binary D |
100·β log points |
100·(e^β − 1) |
| log(Y), log(X) |
elasticity |
β% per 1% of X |
| Y in levels, binary D |
β units of Y |
100·β / mean(Y) |
| Y is a rate (share) |
β·100 percentage points |
100·β / baseline rate percent |
Checks:
- Every "percent" vs. "percentage point" usage verified against the
outcome's units. A coefficient of 0.02 on an employment rate is 2
percentage points; on log employment it is 2.0 percent (exactly 2.02).
- The exact exponential conversion used whenever |β| > 0.10; 0.31 log points
is 36 percent, not 31.
- Standardized effects state which SD (cross-sectional? within? whose
sample?) and the SD's value.
- Currency years and deflators consistent across all sections; one base
year, named.
- Signs: a negative coefficient on an inverted scale narrated correctly —
the most embarrassing class of referee catch.
Audit 4 — Stars, Standard Errors, and Stated Significance
- For each starred coefficient, |β/se| is consistent with the stars under
the declared convention (1.65 / 1.96 / 2.58 thresholds approximately).
- Every prose claim of "significant at the X percent level" matches the
table's stars and the CI.
- Claims of "no effect" are backed by a CI the text reports, not by absence
of stars (see
aer-robustness on null-result discipline).
- One star convention across all tables (
aer-tables-figures sets it; this
audit verifies it held).
Audit 5 — Cross-Reference Integrity
- Every
\ref / \autoref resolves; no "Table ??" anywhere in the PDF.
- Every table and figure is referenced in the text at least once, in order
of first reference; exhibits nobody cites get cut or moved to the
appendix.
- Section references survive renumbering ("see Section V" after V became
IV is the classic R&R injury).
- Appendix references point to existing appendix objects, including the
supplemental file if separate.
- Equation references match the renumbered equations.
Audit 6 — Citation Two-Way Match
- Every in-text citation has a bibliography entry; every bibliography entry
is cited at least once. LaTeX builds with zero unresolved citation
warnings.
- Author spellings and years in text match the entries (Cattaneo 2020 in
text, 2019 in the bib — fail).
- The deeper verification — that entries are real and claims accurate — is
aer-literature's integrity protocol; this audit confirms it was run and
the ledger has no open rows.
Audit 7 — Claim-Evidence Map
For each empirical claim in the abstract, introduction, and conclusion,
record where the evidence lives:
CLAIM EVIDENCE STATUS
"raises 90/10 ratio by 4.2 log points" Tab 3 c4 OK
"driven by gains at the top" Fig 3 / Tab 4 OK
"absent in retail and construction" Tab 5 c2-c3 OK
"consistent with skill-biased adoption" Sec V battery OK (consistency claim)
- Causal claims trace to design-based exhibits; mechanism claims are
worded as consistency ("consistent with"), matching
aer-paper-body
rules.
- Any claim with no exhibit or citation is rewritten or deleted — "we find"
with nothing to point at is how overclaiming enters a manuscript.
- When a replication package skeleton is available, maintain
docs/claim-evidence-ledger.csv: use label:<tex-label> for manuscript
exhibits, cite:<bib-key> for externally sourced claims, and
file:<relative-output> for generated output files. Rows must be OK or
PASS before handoff.
Mechanical Procedure
Run the bundled script for the deterministic LaTeX checks (citations
two-way, ref/label two-way, duplicate labels, abstract word count):
python3 skills/aer-consistency/scripts/audit_manuscript.py paper.tex references.bib
python3 skills/aer-consistency/scripts/audit_manuscript.py paper_dir references.bib \
--claim-ledger paper_dir/docs/claim-evidence-ledger.csv
Extract every number from the abstract and introduction (grep for
digits); locate each in a table or a cited source; build the register.
Recompute the sample funnel and the unit conversions by hand — these are
arithmetic, not judgment.
Diff the table files in the manuscript against the replication package's
output/tables/ — they must be the same files, not lookalikes
(aer-replication requires this anyway).
Produce the consistency report (below) and fix every FAIL before
handing off.
The Consistency Report
AUDIT RESULT DETAIL
1 headline numbers PASS 12 numbers, 12 matched
2 sample sizes FAIL Tab 4 N=37,824 vs Tab 1 N=37,284
3 units and conversions PASS 2 exact conversions applied
4 stars vs SEs PASS
5 cross-references PASS 31 refs, 0 dangling
6 citations two-way FAIL 2 bib entries uncited
7 claim-evidence map PASS 9 claims mapped
Fix-and-rerun until all PASS. The report travels with the handoff so
aer-referee-sim and aer-submission know the floor is solid.
Common Failure Modes
- Tables regenerated after the prose was written, desynchronizing every
quoted estimate
- Abstract edited for word count, changing "4.2" to "about 4" while the
tables stayed exact
- Percentage points and percent swapped exactly once, in the abstract
- Two tables both numbered 3 after an R&R reshuffle
- The conclusion claiming a mechanism the Results section only called
"suggestive"
Repository Resources
Bundled with the installed skill, no repository checkout needed --- read it
before the repo resources below:
references/audit-checklist.md --- manual audit passes plus what the bundled script does and does not catch
When working from the AER-skills repository or plugin bundle, load only the
relevant resource:
- Exhibit-to-script mapping that fixes each number's source of truth:
examples/replication-package-skeleton/docs/exhibit-register.md
- Claim-to-evidence template checked by the bundled script:
examples/replication-package-skeleton/docs/claim-evidence-ledger.csv
- Narration rules the claim-evidence map enforces:
skills/aer-paper-body/SKILL.md
- Citation verification protocol behind Audit 6:
skills/aer-literature/SKILL.md
- Prose-level conventions for units and significance language:
docs/style-guide.md
Handoff
AUDITS PASSED: <n>/7
HEADLINE NUMBERS MATCHED: <n>/<n>
OPEN FAILURES: <list, or "none">
ABSTRACT WORD COUNT: <n>/100
CITATION LEDGER: <closed / open rows remain>
CLAIM-EVIDENCE LEDGER: <n> claims, <closed / open rows remain>
NEXT SKILL: <aer-referee-sim | aer-submission>
Anti-Patterns
- Running this audit once, before first submission only — every revision
reopens it
- "The numbers are close enough" — referees diff digits, not vibes
- Fixing the prose to match a table without checking which one the
replication package actually produces
- Treating a FAIL as a note for later instead of a blocker for handoff
- Auditing by re-reading instead of by register — unstructured re-reading
finds style issues and misses arithmetic
1---2name: aer-consistency3description: Use when auditing a finished or near-finished AER, AER:Insights, or AEJ manuscript for internal consistency: headline numbers across abstract, introduction, results, and tables; sample sizes; log-point and percentage-point conversions; cross-references; and in-text-citation/bibliography matching. Apply after the body and exhibits exist, before aer-referee-sim and aer-submission.4---56# AER Consistency78## Overview910Referees and editors run cheap integrity checks before engaging with ideas:11does the abstract's number appear in the tables? Do the Ns add up? Does12"Table 4" exist? Does every citation resolve? A single mismatch reframes the13entire report from "is this right?" to "what else is wrong?" — and for14AI-assisted manuscripts these mismatches are the **modal failure**, because15text and tables are often generated in separate passes.1617This skill is the full-manuscript integrity audit. It is mechanical by18design: every check below has a yes/no answer obtained by comparing two19artifacts, not by judgment. Run it after every revision round, not only20before first submission.2122## When to Use2324- The body sections and exhibits exist and the manuscript is being assembled25- After an R&R revision, when numbers and exhibit ordering changed26- Before `aer-referee-sim` (so the simulated referees attack substance, not27 typos) and before `aer-submission`28- Any time results were re-run — even "tiny" re-runs desynchronize text2930## Audit 1 — The Headline-Number Register3132Build a register of every number that appears more than once in the33manuscript, then verify each row against its single source of truth (the34table or the replication output):3536```text37NUMBER SOURCE ABSTRACT INTRO RESULTS CONCL MATCH384.2 log points Tab 3 col 4 yes yes yes yes OK39s.e. 1.1 Tab 3 col 4 yes no yes no OK40$84 billion cited source no yes no yes OK41N = 37,824 Tab 1 no no yes no OK42```4344Rules:4546- Every quoted estimate matches its table to the **digit**, including the47 standard error. No re-rounding in prose: if the table says 0.042 (0.011),48 the text says 4.2, not 4 or 4.20.49- The abstract, introduction, and conclusion quote the *same* headline50 specification. Quoting column 3 in the abstract and column 4 in the intro51 is a real and common failure.52- Externally sourced numbers (the hook's "$84 billion") carry a citation at53 first use, and the same value everywhere.5455## Audit 2 — Sample-Size Integrity5657- The Data section's sample funnel arithmetic is exact: raw N minus each58 documented drop equals the analysis N.59- The analysis N in Table 1 equals the N in the main results table for the60 matching specification; every deviation (balanced panel, IV subsample) is61 explained in the table notes and the text.62- Observation counts are consistent with the unit of analysis (12,40063 county-years from 620 counties × 20 years — check the multiplication).64- Heterogeneity subsample Ns sum to the full-sample N (minus documented65 exclusions).6667## Audit 3 — Units and Conversions6869The conversion table for prose claims about coefficients:7071| Outcome form | Coefficient β means | Exact percent effect |72|---|---|---|73| log(Y), binary D | 100·β log points | 100·(e^β − 1) |74| log(Y), log(X) | elasticity | β% per 1% of X |75| Y in levels, binary D | β units of Y | 100·β / mean(Y) |76| Y is a rate (share) | β·100 **percentage points** | 100·β / baseline rate **percent** |7778Checks:7980- Every "percent" vs. "percentage point" usage verified against the81 outcome's units. A coefficient of 0.02 on an employment *rate* is 282 percentage points; on *log* employment it is 2.0 percent (exactly 2.02).83- The exact exponential conversion used whenever |β| > 0.10; 0.31 log points84 is 36 percent, not 31.85- Standardized effects state which SD (cross-sectional? within? whose86 sample?) and the SD's value.87- Currency years and deflators consistent across all sections; one base88 year, named.89- Signs: a negative coefficient on an inverted scale narrated correctly —90 the most embarrassing class of referee catch.9192## Audit 4 — Stars, Standard Errors, and Stated Significance9394- For each starred coefficient, |β/se| is consistent with the stars under95 the declared convention (1.65 / 1.96 / 2.58 thresholds approximately).96- Every prose claim of "significant at the X percent level" matches the97 table's stars and the CI.98- Claims of "no effect" are backed by a CI the text reports, not by absence99 of stars (see `aer-robustness` on null-result discipline).100- One star convention across all tables (`aer-tables-figures` sets it; this101 audit verifies it held).102103## Audit 5 — Cross-Reference Integrity104105- Every `\ref` / `\autoref` resolves; no "Table ??" anywhere in the PDF.106- Every table and figure is referenced in the text at least once, in order107 of first reference; exhibits nobody cites get cut or moved to the108 appendix.109- Section references survive renumbering ("see Section V" after V became110 IV is the classic R&R injury).111- Appendix references point to existing appendix objects, including the112 supplemental file if separate.113- Equation references match the renumbered equations.114115## Audit 6 — Citation Two-Way Match116117- Every in-text citation has a bibliography entry; every bibliography entry118 is cited at least once. LaTeX builds with zero unresolved citation119 warnings.120- Author spellings and years in text match the entries (Cattaneo 2020 in121 text, 2019 in the bib — fail).122- The deeper verification — that entries are real and claims accurate — is123 `aer-literature`'s integrity protocol; this audit confirms it was run and124 the ledger has no open rows.125126## Audit 7 — Claim-Evidence Map127128For each *empirical claim* in the abstract, introduction, and conclusion,129record where the evidence lives:130131```text132CLAIM EVIDENCE STATUS133"raises 90/10 ratio by 4.2 log points" Tab 3 c4 OK134"driven by gains at the top" Fig 3 / Tab 4 OK135"absent in retail and construction" Tab 5 c2-c3 OK136"consistent with skill-biased adoption" Sec V battery OK (consistency claim)137```138139- Causal claims trace to design-based exhibits; mechanism claims are140 worded as consistency ("consistent with"), matching `aer-paper-body`141 rules.142- Any claim with no exhibit or citation is rewritten or deleted — "we find"143 with nothing to point at is how overclaiming enters a manuscript.144- When a replication package skeleton is available, maintain145 `docs/claim-evidence-ledger.csv`: use `label:<tex-label>` for manuscript146 exhibits, `cite:<bib-key>` for externally sourced claims, and147 `file:<relative-output>` for generated output files. Rows must be `OK` or148 `PASS` before handoff.149150## Mechanical Procedure1511521. Run the bundled script for the deterministic LaTeX checks (citations153 two-way, ref/label two-way, duplicate labels, abstract word count):154155 ```bash156 python3 skills/aer-consistency/scripts/audit_manuscript.py paper.tex references.bib157 python3 skills/aer-consistency/scripts/audit_manuscript.py paper_dir references.bib \158 --claim-ledger paper_dir/docs/claim-evidence-ledger.csv159 ```1601612. Extract every number from the abstract and introduction (grep for162 digits); locate each in a table or a cited source; build the register.1633. Recompute the sample funnel and the unit conversions by hand — these are164 arithmetic, not judgment.1654. Diff the table files in the manuscript against the replication package's166 `output/tables/` — they must be the same files, not lookalikes167 (`aer-replication` requires this anyway).1685. Produce the consistency report (below) and fix every FAIL before169 handing off.170171## The Consistency Report172173```text174AUDIT RESULT DETAIL1751 headline numbers PASS 12 numbers, 12 matched1762 sample sizes FAIL Tab 4 N=37,824 vs Tab 1 N=37,2841773 units and conversions PASS 2 exact conversions applied1784 stars vs SEs PASS1795 cross-references PASS 31 refs, 0 dangling1806 citations two-way FAIL 2 bib entries uncited1817 claim-evidence map PASS 9 claims mapped182```183184Fix-and-rerun until all PASS. The report travels with the handoff so185`aer-referee-sim` and `aer-submission` know the floor is solid.186187## Common Failure Modes188189- Tables regenerated after the prose was written, desynchronizing every190 quoted estimate191- Abstract edited for word count, changing "4.2" to "about 4" while the192 tables stayed exact193- Percentage points and percent swapped exactly once, in the abstract194- Two tables both numbered 3 after an R&R reshuffle195- The conclusion claiming a mechanism the Results section only called196 "suggestive"197198## Repository Resources199200Bundled with the installed skill, no repository checkout needed --- read it201before the repo resources below:202203- `references/audit-checklist.md` --- manual audit passes plus what the bundled script does and does not catch204205When working from the AER-skills repository or plugin bundle, load only the206relevant resource:207208- Exhibit-to-script mapping that fixes each number's source of truth:209 `examples/replication-package-skeleton/docs/exhibit-register.md`210- Claim-to-evidence template checked by the bundled script:211 `examples/replication-package-skeleton/docs/claim-evidence-ledger.csv`212- Narration rules the claim-evidence map enforces:213 `skills/aer-paper-body/SKILL.md`214- Citation verification protocol behind Audit 6:215 `skills/aer-literature/SKILL.md`216- Prose-level conventions for units and significance language:217 `docs/style-guide.md`218219## Handoff220221```text222AUDITS PASSED: <n>/7223HEADLINE NUMBERS MATCHED: <n>/<n>224OPEN FAILURES: <list, or "none">225ABSTRACT WORD COUNT: <n>/100226CITATION LEDGER: <closed / open rows remain>227CLAIM-EVIDENCE LEDGER: <n> claims, <closed / open rows remain>228NEXT SKILL: <aer-referee-sim | aer-submission>229```230231## Anti-Patterns232233- Running this audit once, before first submission only — every revision234 reopens it235- "The numbers are close enough" — referees diff digits, not vibes236- Fixing the prose to match a table without checking which one the237 replication package actually produces238- Treating a FAIL as a note for later instead of a blocker for handoff239- Auditing by re-reading instead of by register — unstructured re-reading240 finds style issues and misses arithmetic