Skip to content

296 MISMATCH snippets across 78 records: the real evidence backlog, now that it is visible #596

Description

@realmarcin

Follow-up from #593. Filed so the backlog that PR exposes is tracked rather than left implicit in a diff.

What the number is

scripts/evidence_snippet_audit.py classifies every one of the 5271 evidence snippets. After #593:

bucket count meaning
MATCH 4765 literal substring of real source text
RENDERING 66 faithful quote, cache carries a PDF/XML extraction artefact
WEAK 3
MISMATCH 296 real source text exists and the snippet is not in it
NOCONTENT 141 no source on disk to check against — that is #591

MISMATCH is the bucket that matters. Every one of these is a claim where the paper is cached and the quote is not in it.

Why it grew, and why that is good

On main MISMATCH was 190 and NOCONTENT was 379. #593 gave 238 previously-unverifiable snippets a real source; 132 turned out faithful and 106 did not. The 106 were always wrong — they were simply unexaminable.

The worklist

296 snippets across 78 records. Concentrated:

16  BioAsteroid_ISS_Chondrite_Biomining_Consortium
15  Lunar_Simulant_Phosphate_Solubilizing_Bacteria_Nicotiana
15  Microcoleus_Massilia_Cyanosphere_Urea_Mutualism
13  Bacteroides_Eubacterium_Gnotobiotic_Gut_Model
13  Ostreococcus_Dinoroseobacter_BVitamin_Mutualism
11  Thalassiosira_Ruegeria_Phycosphere_Coculture
 9  Anammox_Granule_Metabolic_Interaction_Community
 8  Drosophila_FiveSpecies_Gnotobiotic_Gut_Microbiota

The top three are worth looking at first not because they are largest but because two of them (BioAsteroid, Lunar_Simulant) come from the space/regolith curation cohort, which suggests a systematic problem with one curation pass rather than 31 independent errors.

How to work it — and one rule that is easy to get wrong

uv run python scripts/evidence_snippet_audit.py --list-mismatch prints them with a diff against the closest cached text.

A MISMATCH is not automatically a fabrication. Before rewriting anything, check in this order:

  1. Is the cache abstract-only while the snippet is from Methods/Results? Then it is a retrieval gap, not a curation error — run cache_fulltext.py first. This is the mistake corrected in Two records I curated from abstracts were wrong, not just thin (#183) #577/The partial record was not partial, I searched badly (#183) #578 and it accounted for several apparent "misattributions" there.
  2. Is it a rendering artefact the normaliser did not catch? e.g. B S _PETase for BsPETase. Those belong in RENDERING; if one is landing in MISMATCH the normaliser needs the case, and the snippet must not be edited to match the cache (the justfile is explicit).
  3. Is the reference simply the wrong paper for the claim? Seen twice recently — a genome announcement cited for cultivation conditions.
  4. Only then treat it as a paraphrase to be replaced with a real quote, or a claim to be withdrawn.

Doing (4) first would "fix" the corpus by editing quotes to match whatever text happens to be cached, which is worse than the current state.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions