Production corpus. The bibliography now spans the full TNBC literature back to the mid-1980s: 101,106 canonical records covering 1985–2026, refreshed weekly. The historical backfill is complete — the earlier 24-month pilot (14,319 records) has been superseded. The methods below describe the production pipeline; the numbers cited reflect the current corpus.
Sources
The bibliography is harvested from six free, public sources. Three are primary (discovery): they generate the candidate-record set. Three are enrichment: they add metadata to records already on hand. We avoid Scopus and Web of Science as hard dependencies in order to keep the pipeline reproducible without institutional licensing.
Primary (discovery):
- PubMed — NCBI E-utilities (
eSearch+eFetch). Source of MeSH terms, structured publication types, and authoritative PMIDs. - Europe PMC — cursor-paginated REST search. Adds preprints (bioRxiv, medRxiv) and a small set of records PubMed doesn’t index.
- OpenAlex — cursor-paginated REST. Adds citation counts, ORCID-disambiguated authors, host-venue normalization, and additional preprint / dataset / dissertation records.
Enrichment:
- Crossref Works API — authoritative publication date, license URL, type, reference count, funder list. Crossref is the registrar of DOI metadata.
- Unpaywall — authoritative open-access status (gold / green / hybrid / bronze / closed) and the best available freely-readable PDF URL.
- Retraction Watch (via Crossref Labs) — full retraction-notice database, used to flag retracted and expression-of-concern records.
Search query
The PubMed query (analogous queries adapted to each source’s syntax):
("triple-negative breast cancer"[Title/Abstract]
OR "triple negative breast cancer"[Title/Abstract]
OR "TNBC"[Title/Abstract]
OR "basal-like breast cancer"[Title/Abstract]
OR "estrogen receptor-negative breast cancer"[Title/Abstract]) The production harvest applies the full query specification, which additionally covers "basal-like breast cancer" and the explicit ER/PR/HER2-negativity construction so the corpus reaches back to the 1980s, before the modern term existed. The original 24-month pilot used a deliberately narrower query to keep results inspectable during architecture validation.
The query runs separately against each primary source. Date-window filtering happens server-side at each source where possible.
Deduplication
Records arriving from the three primary sources are collapsed into canonical records by a three-step ladder, in this priority order:
- DOI exact match (lowercased, normalized). Collapses roughly half of raw records to canonicals.
- PMID exact match. Adds another ~12%.
- Fuzzy title match using
rapidfuzz.ratio≥ 92, gated by exact first-author last-name match and publication-year within ±1. Catches preprint–published pairs, corrigenda, and records with malformed DOI strings.
Source priority for the canonical record body (when sources conflict on a field): PubMed → Europe PMC → OpenAlex. OpenAlex citation counts and ORCID-resolved authors are always merged in regardless of who supplied the canonical body. Every dedup decision is logged with its match basis in dedup_decisions.
Preprint-to-published links are preserved as relationships, not collapsed: both records remain in the database, joined by preprint_of / peer_reviewed_of foreign keys.
Enrichment
After dedup, every canonical record with a DOI is enriched in two passes:
Crossref Works
For each DOI, api.crossref.org/works/{doi} is fetched. Fields written back: publication_date (Crossref is authoritative for this), crossref_type (journal-article / posted-content / proceedings-article / dataset / etc.), license URL, references_count, and a JSONB blob containing publisher, funders, container title, ISSN, and subject codes.
Crossref is treated as authoritative for publication_date across the corpus. Where a source database’s date-of-record drifts later than the true publication date (proceedings reissues, online updates, citation aliases), the Crossref date takes precedence, anchoring each record to when the work was actually published — which matters for any date-bound analysis.
Unpaywall
For each DOI, api.unpaywall.org/v2/{doi} is fetched. Unpaywall’s oa_status overrides OpenAlex’s OA classification (Unpaywall is more conservative and doesn’t use the non-standard "diamond" category); Unpaywall’s best-OA-location URL overrides OpenAlex’s when it provides a direct PDF link.
Both enrichers are concurrent (6 worker threads), respect the polite-pool rate limits, and are resumable — safe to call repeatedly; already-enriched rows are skipped.
Retraction sweep
The Crossref-hosted Retraction Watch CSV (api.labs.crossref.org/data/retractionwatch) is downloaded weekly and cross-referenced against our corpus by DOI and PMID. Matched records have retraction_status set to retracted or concern as appropriate, plus the retraction-notice DOI and date.
Against the full corpus, 77 records are flagged — 74 retracted and 3 under an expression of concern — cross-referenced from roughly 67,700 Retraction Watch notices. Each flagged record carries its retraction-notice DOI and date, and any synthesis page citing a flagged record is itself flagged for editorial review within 48 hours.
Tiering
Records are tiered 1–4 to drive default surfacing on the website:
| Tier | Meaning | How assigned |
|---|---|---|
| 1 | Foundational; field-defining | Hand-curated; ~60 entries in the v1 seed list (see tier-1 seed governance below) |
| 2 | Landmark; high-citation and practice-changing | Algorithmically nominated (top-decile citations within publication-year cohort), human-confirmed |
| 3 | Supporting peer-reviewed work | Default for peer-reviewed journal articles; the bulk of the corpus |
| 4 | Archival; superseded; low-citation; tangentially relevant | Records de-emphasized in default views; still searchable and exportable |
A record’s tier can change over time. Tier review runs quarterly. Every tier move is logged.
Tier-1 seed governance
The hand-curated tier-1 list is versioned in Git and reviewed by the editorial board before any record is promoted in production. The v1 draft (60 entries) was assembled by triangulating four published TNBC bibliometric reviews (the 2022 Clin Exp Med top-100, the 2024 ADC and immunotherapy bibliometrics, the 2024 neoadjuvant analysis) plus editorial picks for the foundational subtype, IHC-guideline, TILs, and PARP-inhibitor literature. Each entry carries: full citation, taxonomy domain, rationale, confidence tag (high / medium / low), and source provenance.
The tier-1 list also serves as a recall benchmark for every harvest run: after a harvest completes, a script reports the proportion of tier-1 entries found in the corpus, broken down by in-window vs. out-of-window and by domain. In-window recall is the operationally meaningful number.
Update cadence
| Job | Frequency |
|---|---|
| Incremental new-paper sweep (PubMed, Europe PMC, OpenAlex, preprints) | Weekly |
| Citation-count refresh (OpenAlex) | Quarterly |
| Retraction sweep (Retraction Watch) | Weekly |
| Manual tier review | Quarterly |
| Full re-harvest with backfill | Annually |
When a cited paper is retracted, every synthesis page that cites it is flagged for editorial review within 48 hours and revised within 14 days. The change is recorded in the errata and changelog.
Known limitations
Honest framing matters more than completeness claims for a methods page on a medical site. The current corpus has these caveats:
- Source-database data quality is upstream of us. Every title, abstract, author, journal, year, and DOI in the corpus is fetched verbatim from PubMed (NCBI E-utilities), Europe PMC (REST search), or OpenAlex (REST). No content in the bibliography is generated, paraphrased, or summarized by us. When a record carries a manifestly wrong publication year (e.g., 1922 for a paper that clearly post-dates the term’s coinage), that error is in the upstream metadata, not introduced here. The library page applies a year-window filter (1985 to current year + 1) to suppress these outliers from view, but the underlying records remain in the audit table.
- Recall vs precision trade-off in the search query. Our harvest query covers three eras of nomenclature for TNBC: modern (“triple-negative breast cancer”), transitional (“basal-like breast cancer”), and pre-modern (“ER-negative / estrogen receptor-negative breast cancer”). This is necessary to capture the literature back to 1990, when the modern term didn’t exist, but it lets in some records that mention these terms tangentially without being primarily about TNBC. The relevance filter (see next bullet) catches most of these; the topic-tagger catches more; what remains is flagged for editorial review rather than silently included.
- Relevance filter is rule-based, not model-based. Every record is scored on title and abstract phrase matching against TNBC-domain vocabulary (modern TNBC variants, basal-like, ER/PR/HER2-negative explicit patterns). Records with strong title-level signal score highest; records with no signal at all are dropped from the public view but preserved in the audit table. Records with weak signal are flagged
downgradeand excluded by default; these are the editorial-review queue. The rubric is documented inreports/openalex_postfilter.mdand the source is inscripts/filter_openalex_only.py. - Topic-tag gate excludes records the topic-tagger couldn’t classify. The public view requires every visible record to either (a) have at least one topic tag from the 10-domain taxonomy, (b) be in the curated tier-1 list, or (c) carry an editorial “keep_manual” flag. Records that mention TNBC in their title but didn’t pick up any topic-tag (often methodology papers using TNBC as one of several benchmark datasets, or papers where “TNBC” is used as an acronym for something else) are filtered. Roughly 5-10% of pre-filter records fall into this category.
- Crossref / Unpaywall coverage is not 100% in practice. About 9% of DOIs returned 404 from Crossref — mostly dataset DOIs (Figshare, Zenodo) and preprint-server DOIs not registered with Crossref. These records are marked enriched-with-error in
source_provenance; the error reason is preserved for transparency. - Editorial review of individual records is still a planned step. Tier-1 entries are seeded; tier-2 algorithmic nominations have been run; what remains is the per-page editorial sign-off described in the “Tiering” section above. Until that completes, the public view shows the algorithm’s best-effort filter, not a reviewed corpus.
Reproducibility
The full pipeline — schema, harvesters, dedup, enrichment, retraction sweep, exports, and the tier-1 benchmark — is implemented in Python and shipped as part of the project repository. Anyone with PostgreSQL 14+, Python 3.10+, and a few standard libraries (psycopg, requests, biopython, rapidfuzz) can reproduce the pipeline end to end against the live free APIs.
Bulk exports of the canonical bibliography are available in CSV, JSONL, BibTeX, and RIS formats; see Public API & exports (coming with the production database deployment).
Coverage report
A periodic coverage report breaks down the corpus by year, journal, country (from OpenAlex author-institution codes), open-access status, publication type, and language. Highlights from the current corpus:
- 101,106 canonical records in the public view, filtered from 122,742 deduplicated raw records
- Spanning 1985–2026; 22% published in the last two years (2024–2026)
- 43% carry a DOI and 31% a PMID; every DOI-bearing record is Crossref- and Unpaywall-enriched
- 41% have a free-to-read open-access full text (green 19%, gold 10%, open 5%, bronze 4%, hybrid 3%)
- 77 records flagged retracted or under concern, matched against ~67,700 Retraction Watch notices
Last reviewed: 2026-07-09. Methods evolve with the pipeline; this page is updated whenever a meaningful change is made (new source added, dedup rule changed, tier assignment policy revised). Material changes are noted in the errata and changelog.