Found while curating #254.
scripts/cache_fulltext.py resolves full text only via PMID → Europe PMC → PMC id, and refuses to start without an existing references_cache/PMID_<id>.{txt,md} abstract. Sources that are open access but not indexed in PubMed therefore cannot be snippet-verified at all, so they cannot be curated.
Concrete blocked case
Li et al. 2024, Water 16:3551, doi:10.3390/w16243551 — fully open access, and the only retrieved study that perturbs the exact CommunityMech:000068 pair (S. fumaroxidans + M. formicicum, which matters because most of that record's mechanistic literature is actually S. fumaroxidans + M. hungatei; see the discussion added in #254).
It reports graded-formate dosing on the exact coculture:
- 5–10 mM formate promotes syntrophic propionate oxidation
- ≥30 mM inhibits it (strongest at 50 mM), with propionate accumulation at days 5–7
- FDH1–FDH4 and hydrogenase transcripts downregulated under formate stress
- caveat worth curating: added formate raised total CH4/H2 yield while impeding propionate-derived carbon flow
That is several well-perturbed causal edges plus environmental factors that 000068 currently lacks. Europe PMC returns no pmid, no pmcid, isOpenAccess: null for this DOI, so the existing tooling cannot touch it.
Proposed fix
Add a DOI-based path to cache_fulltext.py:
- Try Europe PMC by DOI (
query=DOI:"<doi>") — covers OA DOIs that do have a PMC record.
- Fall back to Unpaywall (
literature.py already has an Unpaywall integration) → OA PDF/HTML → text.
- Write to the DOI cache filename the reference validator already reads (
DOI_<doi with / → _>.md), appending under the same ===== OPEN-ACCESS FULL TEXT marker so the operation stays idempotent.
Non-OA sources must keep failing loudly rather than fabricating — the current "report and skip, never fabricate" behaviour is right and should be preserved.
Found while curating #254.
scripts/cache_fulltext.pyresolves full text only via PMID → Europe PMC → PMC id, and refuses to start without an existingreferences_cache/PMID_<id>.{txt,md}abstract. Sources that are open access but not indexed in PubMed therefore cannot be snippet-verified at all, so they cannot be curated.Concrete blocked case
Li et al. 2024, Water 16:3551,
doi:10.3390/w16243551— fully open access, and the only retrieved study that perturbs the exactCommunityMech:000068pair (S. fumaroxidans + M. formicicum, which matters because most of that record's mechanistic literature is actually S. fumaroxidans + M. hungatei; see the discussion added in #254).It reports graded-formate dosing on the exact coculture:
That is several well-perturbed causal edges plus environmental factors that 000068 currently lacks. Europe PMC returns no
pmid, nopmcid,isOpenAccess: nullfor this DOI, so the existing tooling cannot touch it.Proposed fix
Add a DOI-based path to
cache_fulltext.py:query=DOI:"<doi>") — covers OA DOIs that do have a PMC record.literature.pyalready has an Unpaywall integration) → OA PDF/HTML → text.DOI_<doi with / → _>.md), appending under the same===== OPEN-ACCESS FULL TEXTmarker so the operation stays idempotent.Non-OA sources must keep failing loudly rather than fabricating — the current "report and skip, never fabricate" behaviour is right and should be preserved.