# Spot check 01 — APA style

**Run:** 2026-05-07. **Style:** apa. **Bar:** strict (handoff §2). **Decision needed:** see bottom.

---

## TL;DR

- **First-try-clean: 2 / 13 fresh papers (15%).** Technically meets the "2 per style" convergence criterion.
- **BUT 11/13 fail (85%) — three systematic failure patterns identified, all involving section *recall* (missing canonical sections), not just boundary slip.**
- The handoff §7 says "100% canonical-section recall is non-negotiable." Several failing papers are missing Abstract or Introduction entirely. So in practice this style does NOT clear the strict bar; the 2 passes are JDM Cambridge papers that happen to have well-behaved layouts.
- **Recommendation:** fix the highest-leverage pattern (Elsevier "keywords-first" — affects 3 papers here, and likely many more in nature/aom/asa) before moving on.

---

## Per-paper verdict

| # | Paper | Verdict | Sections (n) | Failure |
|---|---|---|---|---|
| 1 | ar_apa_j_jesp_2009_12_010 | ❌ FAIL | 9 | **Missing Abstract.** Elsevier "keywords-first" pattern: detector sees `Keywords:` before `Abstract`, labels the whole block `keywords` and silently drops the abstract paragraph that follows |
| 2 | ar_apa_j_jesp_2009_12_011 | ❌ FAIL | 7 | Same — missing Abstract (Elsevier keywords-first) |
| 3 | ar_apa_j_jesp_2009_12_012 | ❌ FAIL | 8 | Same — missing Abstract (Elsevier keywords-first) |
| 4 | jamison_2020_jesp | ❌ FAIL | 12 | **Missing Methods section** (intro absorbed it: 22k chars / 38% of doc). Spurious `results_2` extracted from a results table |
| 5 | jdm_.2023.10 | ❌ FAIL | 2 | **Catastrophic extraction**: full paper rendered as 1537 chars total (paper is much longer). Likely pdftotext extraction failure. Investigate file integrity |
| 6 | **jdm_.2023.15** | **✅ PASS** | 9 | 8 ✅ + 1 ⚠️ (results section has running-header crumb in body) |
| 7 | jdm_.2023.16 | ❌ FAIL | 8 | Funding + "Competing interest" sentence bled into Discussion tail (~80 chars). Borderline ❌; on a looser bar would be ⚠️ |
| 8 | jdm_m.2022.2 | ❌ FAIL | 11 | Spurious `supplementary` section appears mid-doc with body that starts mid-sentence ("Supplementary Material). After reviewing the two brands…"). Funding bleed into discussion_3 tail |
| 9 | jdm_m.2022.3 | ❌ FAIL | 7 | **Missing Introduction.** Abstract is bloated to 18.8% of doc (real abstract is ~1%) — abstract section has absorbed everything up to Method heading |
| 10 | korbmacher_2022_kruger | ❌ FAIL | 7 | **Abstract contaminated** with ~700 chars of post-abstract front matter (affiliations + acknowledgments + license/copyright/page#). Borderline between ⚠️ and ❌ |
| 11 | maier_2023_collabra | ❌ FAIL | 11 | **Catastrophic title-block.** First section is `unknown` at 31,504 chars / 33.9% of doc, swallowing Abstract + Introduction. Recall fail on two canonical sections |
| 12 | xiao_2021_crsp | ❌ FAIL | 12 | **Keywords section absorbs Intro + Methods** (29.2% of doc, 32k chars). Same Elsevier-style "keywords ABOVE abstract" but the abstract DOES get caught — the keywords section then runs through to Results. Recall fail on Intro + Methods |
| 13 | **ziano_2021_joep** | **✅ PASS** | 9 | 8 ✅ + 1 ⚠️ (general_discussion has ~80 char funding bleed in tail) |

The 5 v1.6.1 known-good APAs (chan_feldman / chandrashekar / chen / efendic / ip_feldman) were not re-run; they remain regression baselines.

---

## Failure-mode analysis — three patterns

### Pattern A — Elsevier "Keywords-first" layout (3 papers: ar_apa_j_jesp_2009_12_010/011/012)

Old Elsevier `.com/locate/jesp` PDFs put **`Keywords: …`** BEFORE the **`Abstract`** paragraph. The detector hits `Keywords:` first and creates a `keywords` section that runs from "Keywords:" all the way to "Introduction" — eating the abstract paragraph along the way.

Concrete evidence (ar_apa_j_jesp_2009_12_011):

```
[1] keywords (1231 chars, 5.0%)
    head: "Keywords: Self-control Building strength Inhibition Depletio…"
    tail: "…rders that involve low self-control. © 2009 Elsevier Inc. All rights reserved."
                ^^^ this is the LAST sentence of the abstract paragraph, not keywords
```

Likely fix in [docpluck/sections/annotators/text.py](docpluck/sections/annotators/text.py) or [docpluck/sections/taxonomy.py](docpluck/sections/taxonomy.py): add a heuristic where if a `keywords` section is followed by no explicit `Abstract` heading, AND the keywords section body contains paragraph-shaped prose past the keyword list, split it. Or: detect the "Keywords:" inline-prefix at the start of a single line and treat it as a sub-heading, not a section divider — let the surrounding section claim the line.

This pattern likely also affects **JESP / journal-of-economic-psychology / psychology-of-violence / Elsevier psych journals broadly**, so the fix has high leverage beyond APA.

### Pattern B — End-of-paper bleed into Discussion (4 papers: jdm_.2023.16, jdm_m.2022.2, jdm_m.2022.3, korbmacher, ziano (⚠️ only))

Cambridge JDM and APA-style papers end with `Funding`, `Competing interest`, `Acknowledgements`, `Author contributions` — but only some have explicit canonical headings. When they don't, the trailing 50–200 chars of these end-matter sentences leak into the Discussion section's body.

Severity varies (50 chars = ⚠️ minor, 200 chars with funding-statement = ❌ major). The cleanest fix is to recognize end-of-paper "section-ending phrases" (`Competing interest. The authors declare`, `Funding. The authors received`, `Author contributions.`, `Conflict of interest.`) and synthesize labelled sections for them. The taxonomy already has `funding` / `conflict_of_interest` / `acknowledgments` labels — the detector just isn't catching these inline-prefix variants.

### Pattern C — Catastrophic intro/abstract failure (3 papers: jdm_m.2022.3, maier_2023_collabra, xiao_2021_crsp)

Three different shapes:

- **jdm_m.2022.3:** Abstract section runs 9417 chars (18.8% of doc). The "Introduction" heading is missed entirely; abstract absorbs intro.
- **maier_2023_collabra:** First section is `unknown` at 31,504 chars / 33.9% of doc. This is a Collabra `Downloaded from http://...` PDF where the title-block detector evidently cannot find the Abstract heading, and then the Method heading is what finally breaks the run.
- **xiao_2021_crsp:** Abstract IS detected (1438 chars, ✅), but the following keywords section runs 32,432 chars / 29.2% absorbing Intro + Methods.

These are heterogeneous root causes (probably Title-Case heading-shape filter strictness in [annotators/text.py](docpluck/sections/annotators/text.py)). Each likely needs its own diagnosis.

### Pattern D — Catastrophic extraction (1 paper: jdm_.2023.10)

`jdm_.2023.10.pdf` extracts to only 1537 chars total. The PDF is on disk (553 KB) and renders normally. This is probably an `extract_pdf` / pdftotext failure, NOT a sectioner bug. Worth investigating separately — could indicate a scanned/image PDF or a bad PDF stream.

---

## What I want to confirm with you before continuing

The strict bar's "2 first-try-clean per style" criterion is technically met (jdm_.2023.15 + ziano_2021_joep). But the spirit of the bar — "the heuristics generalize" — is clearly NOT met when 11/13 papers fail with substantive recall errors.

**Three options:**

1. **Move on to IEEE.** Take the 2 passes and check off APA. Live with the failure rate. Flag the patterns for v2.1.

2. **Fix Pattern A first (recommended).** The Elsevier keywords-first pattern is a single, well-defined heuristic gap that affects ≥3 papers in this style and will recur in IEEE / nature / aom / asa (any Elsevier psych/biomed paper). Fix → re-run APA → expect 5/13 passes. Then move on.

3. **Fix all four patterns before declaring APA done.** Higher effort, but if the user's quality concern was "too many mistakes on a wider corpus" then this is what they're really asking for.

My recommendation is **option 2**: fix Pattern A only, accept that B/C/D require deeper diagnosis, document them as known limitations, and continue.

**Tell me 1, 2, or 3** (or describe a different cut) and I'll proceed.

