- _PREPROOF_MARKER suppression now guarded by page==1, y_top>8%, raw_label=paragraph_title, not_header, not_footer
- _is_preproof_marker() exported for health use
- rescue_roles_with_document_context: pre-proof frontmatter_noise blocks are exempt from body_paragraph rescue
- Page-1 title fallback: when pre-proof steals the title zone, next substantial text block becomes paper_title
- Tests: running header not suppressed, page-2 not suppressed, variants pass
- Inline figure mention: _looks_like_inline_figure_mention() detects body prose
such as 'Figure X shows/illustrates/demonstrates' and 'as shown in Figure X'
to prevent noise in figure caption pipeline. Excludes Frontiers FIGURE N | format.
- Layout audit: added safety net so pages with layout confidence < 0.7 never
produce ERROR-level anomalies (only INFO). Check 2 (insert_body_overlap) also
gated by layout confidence.
- DWQQK2YB matched figure count dropped 6->3 as inline mentions correctly excluded;
M36WA39N Frontiers captions unaffected
- Frontiers figure title: _FRONTIERS_FIGURE_TITLE_PATTERN seeds FIGURE N | Title
as figure_caption even when raw_label=text (Frontiers/journals style)
- Panel label exclusion: _PANEL_LABEL_PATTERN sends A/B/C/(D)/E. to
figure_inner_text before they enter the caption/matching pipeline
- Page 1 heading override: _explicit_scholarly_heading_role() detects Roman
numeral (I. INTRODUCTION) and alpha (A. Materials) headings with y_top
guard to protect frontmatter titles
- Layout audit severity: _run_layout_audit() separates anomalies into
info/warning/error; full-width headings exempted; health only degraded
when error_count > 0
- first_author fallback: _enrich_meta_from_paper_note() falls back to
first_author when authors field is missing; _normalize_author_name()
strips {superscript} markers for fuzzy matching
- Fix references zone detection without heading (backward reference fallback)
- Fix reference_item silently dropped in _reorder_tail_run_fifo when no heading
- Fix figure proximity matching: use nearest legend regardless of column order
- Fix figure numbering in extract_and_write_objects: use actual figure_id
- Fix body→reference_item rescue: require text starts with numeric ref pattern
- Fix tail reading order rebuilt after block normalization
- A8E7SRVS: corrected figure-legend pairing on page 5
- CAQNW9Q2: references now render without heading
- K7R8PEKW: adjusted body retention threshold
- Add RegionPrepass data model for frontmatter/structured_insert/body classification
- Add PDF visual container detection (filled rects) for sidebar detection
- Add Box N and keyword-based sidebar anchor detection
- Add column-aware block expansion for mixed sidebar clusters
- Add _container_text from PDF text blocks for cross-column truncation
- Add degraded-mode heading level normalization with font size clustering
- Merge adjacent structured_insert blocks into single callout
- Fix metadata enrichment from Literature-hub note frontmatter for old papers
- Fix heading hierarchy using span font-size clusters when available
- Add real-paper regression harness (TSCKAVIS, CAQNW9Q2, A8E7SRVS, K7R8PEKW)
- Add body retention, heading, metadata, and callout acceptance tests
- 219 passed, 4 control guards passed