diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 12692bc..c29dfcd 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -37,7 +37,8 @@ jobs: tests/test_blender_export.py \ tests/test_merge_readiness.py \ tests/test_deployables.py \ - tests/test_scholar_indexing.py + tests/test_scholar_indexing.py \ + tests/test_thesis_bibliography.py env: MUJOCO_GL: osmesa # flybody / 166k jobs stay skipif unless extras + CONFLUENCE_FULL_BRAIN=1 diff --git a/docs/CITATION_POLICY.md b/docs/CITATION_POLICY.md index fcd9086..61c228d 100644 --- a/docs/CITATION_POLICY.md +++ b/docs/CITATION_POLICY.md @@ -12,7 +12,9 @@ claim of cure, diagnosis, or dosing. See [DISCLAIMER.md](../DISCLAIMER.md). numbered Vancouver citations [1] matching its reference list. 2. **Do not fabricate DOIs.** Include a DOI only when it is verified (publisher, Crossref, or the issuing agency). Prefer a stable URL - (PMC, WHO, IARC, NCI, GitHub) when no DOI is on hand. + (PMC, WHO, IARC, NCI, GitHub) when no DOI is on hand. Thesis #1 + Vancouver form, DOI verification, and software-citation pattern: + [CITATION_STYLE.md](CITATION_STYLE.md). 3. **OnCo attribution.** OnCo data is CC BY-NC 4.0. Any OnCo-derived sentence keeps the line: *Data from OnCo (onco.cc), CC BY-NC 4.0; commercial use needs a licence.* Adapter code in this repository is MIT; @@ -28,7 +30,8 @@ claim of cure, diagnosis, or dosing. See [DISCLAIMER.md](../DISCLAIMER.md). ## Where this applies - `docs/manuscript/ONCO_CONFLUENCE_THESIS_FINDINGS.md` -- `evidence/thesis.html` and `evidence/claims.json` +- `docs/manuscript/thesis_01_confluence_onco.md` +- `evidence/thesis.html`, `evidence/thesis.pdf`, and `evidence/claims.json` - Disease Profile JSON from the thinking lab - `data/profiles/cases/` research case pack - README / HOSTING copy that restates burden statistics diff --git a/docs/CITATION_STYLE.md b/docs/CITATION_STYLE.md new file mode 100644 index 0000000..c20fe5d --- /dev/null +++ b/docs/CITATION_STYLE.md @@ -0,0 +1,88 @@ +# Vancouver citation style — Thesis #1 + +This is the bibliographic style for Thesis #1 +(`docs/manuscript/thesis_01_confluence_onco.md`, `evidence/thesis.html`, +`evidence/thesis.pdf`). Public-claim honesty rules remain in +[CITATION_POLICY.md](CITATION_POLICY.md). + +Numbered Vancouver citations `[n]` match the References list in order. Do not +reuse a number for a different work. Do not leave uncited bibliography entries: +if a source is added, the manuscript body must cite it. + +## Journal article + +``` +Author AA, Author BB, Author CC, et al. Title. Journal Abbreviation. Year;Volume(Issue):pages. doi:10.xxxx/xxxxx. PMID: ####. +``` + +- List up to six authors, then `et al.` +- Initials without periods (NLM / Vancouver) +- NLM journal abbreviation (`CA Cancer J Clin`, not the full title) +- Include volume, issue, and pages (or the publisher article number, e.g. `e70090`) when Crossref or PubMed supplies them +- `PMID` only when PubMed returns that id for the DOI or title +- Omit any field that is not verified. Never invent volume, issue, pages, DOI, or PMID + +Example (Crossref + PubMed, 20 September 2026): + +Sung H, Filho AM, Laversanne M, Ferlay J, Siegel RL, Soerjomataram I, et al. Global cancer statistics 2024: GLOBOCAN estimates of incidence and mortality worldwide for 34 cancers in 186 countries. CA Cancer J Clin. 2026;76(4):e70090. doi:10.3322/caac.70090. PMID: 42417444. + +## Web / government / technical report + +``` +Author/Org. Title [Internet]. Place: Publisher; Year Month Day [cited YYYY Mon DD]. Available from: URL +``` + +Use this form for WHO, IARC, NCI, and other agency pages. If the exact day is +not on the page or in a publisher record, give year (and month if known) and +keep `[cited …]`. Do not invent a report DOI. + +## GitHub / software + +``` +Author. Title [Internet]. Version/commit; Year [cited YYYY Mon DD]. Available from: URL +``` + +Cite a pull request, protocol, disclaimer, or ontology spec as software / +technical documentation. Do not attach the repository Zenodo DOI +(`10.5281/zenodo.21446803`) to Thesis #1 itself; that record identifies the +software, not this manuscript. + +## DOI verification policy + +1. A `doi:` field is allowed only after a live lookup on + [Crossref](https://api.crossref.org/) (`/works/{doi}`) or + [PubMed](https://pubmed.ncbi.nlm.nih.gov/) (`{doi}[doi]`). +2. **Never invent** a DOI, PMID, volume, issue, or page range. Guessing + `10.xxxx/xxxxx`, `doi:pending`, or `TBD` is forbidden. +3. If Crossref returns 404, or the record is a different paper than the one + being cited, drop the DOI and use a complete URL citation instead. +4. PubMed IDs are optional completeness. Absence of a PMID is not a reason to + invent one. +5. URL-only is required (not a failure) for agency pages, GitHub objects, and + any journal article whose DOI cannot be verified on the day of writing. + +## When URL-only is allowed + +- WHO / IARC / NCI / GCO fact sheets and news releases +- GitHub repositories, pull requests, and file blobs +- Software versions and working specifications +- Journal articles with a verified bibliographic skeleton but no Crossref DOI + +## Highwire `citation_reference` tags + +`evidence/thesis.html` carries one `citation_reference` meta per bibliography +entry (same numbering as the visible list and the manuscript). Include +`citation_doi=` only for Crossref-verified DOIs. Do not add `citation_doi` or +`citation_arxiv_id` for Thesis #1 itself until a document DOI exists. + +Author byline and `citation_author` are **Kelechi Emeka Ogbonna**. Do not invent +an ORCID. + +## Regeneration + +Bibliography source of truth: `docs/manuscript/thesis_01_bibliography.json`. + +```bash +python scripts/sync_thesis_references.py +python scripts/build_thesis_pdf.py +``` diff --git a/docs/SCHOLAR_INDEXING.md b/docs/SCHOLAR_INDEXING.md index 417aae6..d0b4a30 100644 --- a/docs/SCHOLAR_INDEXING.md +++ b/docs/SCHOLAR_INDEXING.md @@ -13,9 +13,11 @@ not OnCo-as-parameter. - Highwire `citation_*` on `evidence/thesis.html`: title, author **Kelechi Emeka Ogbonna**, date `2026/09/20`, technical-report institution, absolute `citation_fulltext_html_url` and `citation_pdf_url`. -- Twelve `citation_reference` tags, one per numbered Vancouver item on the page. - The only DOI in those tags is `10.3322/caac.70090` (already on the page and - in the manuscript). No invented DOIs. No ORCID (none is recorded in this repo). +- One `citation_reference` tag per numbered Vancouver item on the page + (same list as `docs/manuscript/thesis_01_confluence_onco.md`). Journal DOIs + are Crossref/PubMed-verified only. Agency and GitHub items are URL citations. + No invented DOIs. No ORCID (none is recorded in this repo). Style: + [CITATION_STYLE.md](CITATION_STYLE.md). - Citeable PDF: `evidence/thesis.pdf` → **https://confluence-research.vercel.app/thesis.pdf** (same site-root directory as `/thesis`, as Scholar requires). Built from `docs/manuscript/thesis_01_confluence_onco.md`. @@ -68,7 +70,10 @@ No DOI is minted for this chapter now. ## Regeneration ```bash +python scripts/sync_thesis_references.py python scripts/build_thesis_pdf.py ``` -Requires `reportlab`. CI asserts the committed PDF and the Highwire / sitemap files. +Bibliography source: `docs/manuscript/thesis_01_bibliography.json`. Style: +[CITATION_STYLE.md](CITATION_STYLE.md). Requires `reportlab` for the PDF. CI +asserts the committed PDF, Highwire tags, and a ≥40-item Vancouver list. diff --git a/docs/manuscript/thesis_01_bibliography.json b/docs/manuscript/thesis_01_bibliography.json new file mode 100644 index 0000000..8aae599 --- /dev/null +++ b/docs/manuscript/thesis_01_bibliography.json @@ -0,0 +1,914 @@ +{ + "cited": "2026 Sep 20", + "verification": "Crossref /works/{doi} and PubMed {doi}[doi] on 2026-09-20. URL-only rows have no doi field.", + "entries": [ + { + "id": 1, + "type": "journal", + "authors": "Sung H, Filho AM, Laversanne M, Ferlay J, Siegel RL, Soerjomataram I, et al.", + "hw_authors": ["Sung H", "Filho AM", "Laversanne M", "Ferlay J", "Siegel RL", "Soerjomataram I"], + "title": "Global cancer statistics 2024: GLOBOCAN estimates of incidence and mortality worldwide for 34 cancers in 186 countries", + "journal": "CA Cancer J Clin", + "year": 2026, + "hw_date": "2026/07/08", + "volume": "76", + "issue": "4", + "pages": "e70090", + "doi": "10.3322/caac.70090", + "pmid": "42417444" + }, + { + "id": 2, + "type": "internet", + "authors": "International Agency for Research on Cancer", + "hw_authors": ["International Agency for Research on Cancer"], + "title": "Global cancer statistics 2024: GLOBOCAN estimates of incidence and mortality worldwide for 34 cancers in 186 countries", + "place": "Lyon", + "publisher": "IARC", + "date": "2026 Jul 8", + "year": 2026, + "hw_date": "2026/07/08", + "url": "https://www.iarc.who.int/news-events/global-cancer-statistics-2024-globocan-estimates-of-incidence-and-mortality-worldwide-for-34-cancers-in-186-countries/" + }, + { + "id": 3, + "type": "internet", + "authors": "World Health Organization", + "hw_authors": ["World Health Organization"], + "title": "Cancer", + "place": "Geneva", + "publisher": "World Health Organization", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://www.who.int/news-room/fact-sheets/detail/cancer" + }, + { + "id": 4, + "type": "internet", + "authors": "World Health Organization", + "hw_authors": ["World Health Organization"], + "title": "Global status report on cancer 2026: the future we choose together", + "place": "Geneva", + "publisher": "World Health Organization", + "date": "2026 Jul 8", + "year": 2026, + "hw_date": "2026/07/08", + "url": "https://www.who.int/publications/i/item/9789240123977" + }, + { + "id": 5, + "type": "internet", + "authors": "International Agency for Research on Cancer", + "hw_authors": ["International Agency for Research on Cancer"], + "title": "Nigeria fact sheet (GLOBOCAN 2022 estimates)", + "place": "Lyon", + "publisher": "IARC Global Cancer Observatory", + "date": "2022", + "year": 2022, + "hw_date": "2022", + "url": "https://gco.iarc.who.int/media/globocan/factsheets/populations/566-nigeria-fact-sheet.pdf" + }, + { + "id": 6, + "type": "internet", + "authors": "National Cancer Institute", + "hw_authors": ["National Cancer Institute"], + "title": "Triple-negative breast cancer", + "place": "Bethesda (MD)", + "publisher": "National Cancer Institute", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://www.cancer.gov/types/breast/patient/triple-negative-brochure" + }, + { + "id": 7, + "type": "internet", + "authors": "National Cancer Institute", + "hw_authors": ["National Cancer Institute"], + "title": "Tumor heterogeneity", + "place": "Bethesda (MD)", + "publisher": "National Cancer Institute", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://www.cancer.gov/about-nci/organization/dcb/research-programs/tumor-heterogeneity" + }, + { + "id": 8, + "type": "journal", + "authors": "Altrock PM, Liu LL, Michor F", + "hw_authors": ["Altrock PM", "Liu LL", "Michor F"], + "title": "The mathematics of cancer: integrating quantitative models", + "journal": "Nat Rev Cancer", + "year": 2015, + "hw_date": "2015", + "volume": "15", + "issue": "12", + "pages": "730-745", + "doi": "10.1038/nrc4029", + "pmid": "26597528" + }, + { + "id": 9, + "type": "journal", + "authors": "Gatenby RA, Silva AS, Gillies RJ, Frieden BR", + "hw_authors": ["Gatenby RA", "Silva AS", "Gillies RJ", "Frieden BR"], + "title": "Adaptive therapy", + "journal": "Cancer Res", + "year": 2009, + "hw_date": "2009", + "volume": "69", + "issue": "11", + "pages": "4894-4903", + "doi": "10.1158/0008-5472.CAN-08-3658", + "pmid": "19487300" + }, + { + "id": 10, + "type": "software", + "authors": "Gomila J, OnCo contributors", + "hw_authors": ["Gomila J"], + "title": "OnCo: a public, cited knowledge graph of oncology", + "version": "Version 1.0.0", + "publisher": "OnCo", + "date": "2026 Sep 16", + "year": 2026, + "hw_date": "2026/09/16", + "url": "https://onco.cc" + }, + { + "id": 11, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "feat/onco-adapter-p0 (pull request #9)", + "publisher": "GitHub", + "date": "2026 Sep 18", + "year": 2026, + "hw_date": "2026/09/18", + "url": "https://github.com/cloudynirvana/project-confluence/pull/9" + }, + { + "id": 12, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "Validation protocol", + "publisher": "Project Confluence / GitHub", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://github.com/cloudynirvana/project-confluence/blob/main/validation/validation_protocol.md" + }, + { + "id": 13, + "type": "journal", + "authors": "Hanahan D, Weinberg RA", + "hw_authors": ["Hanahan D", "Weinberg RA"], + "title": "The hallmarks of cancer", + "journal": "Cell", + "year": 2000, + "hw_date": "2000", + "volume": "100", + "issue": "1", + "pages": "57-70", + "doi": "10.1016/S0092-8674(00)81683-9", + "pmid": "10647931" + }, + { + "id": 14, + "type": "journal", + "authors": "Hanahan D, Weinberg RA", + "hw_authors": ["Hanahan D", "Weinberg RA"], + "title": "Hallmarks of cancer: the next generation", + "journal": "Cell", + "year": 2011, + "hw_date": "2011", + "volume": "144", + "issue": "5", + "pages": "646-674", + "doi": "10.1016/j.cell.2011.02.013", + "pmid": "21376230" + }, + { + "id": 15, + "type": "journal", + "authors": "Hanahan D", + "hw_authors": ["Hanahan D"], + "title": "Hallmarks of cancer: new dimensions", + "journal": "Cancer Discov", + "year": 2022, + "hw_date": "2022", + "volume": "12", + "issue": "1", + "pages": "31-46", + "doi": "10.1158/2159-8290.CD-21-1059", + "pmid": "35022204" + }, + { + "id": 16, + "type": "journal", + "authors": "Nowell PC", + "hw_authors": ["Nowell PC"], + "title": "The clonal evolution of tumor cell populations", + "journal": "Science", + "year": 1976, + "hw_date": "1976", + "volume": "194", + "issue": "4260", + "pages": "23-28", + "doi": "10.1126/science.959840", + "pmid": "959840" + }, + { + "id": 17, + "type": "journal", + "authors": "Merlo LMF, Pepper JW, Reid BJ, Maley CC", + "hw_authors": ["Merlo LMF", "Pepper JW", "Reid BJ", "Maley CC"], + "title": "Cancer as an evolutionary and ecological process", + "journal": "Nat Rev Cancer", + "year": 2006, + "hw_date": "2006", + "volume": "6", + "issue": "12", + "pages": "924-935", + "doi": "10.1038/nrc2013", + "pmid": "17109012" + }, + { + "id": 18, + "type": "journal", + "authors": "Marusyk A, Almendro V, Polyak K", + "hw_authors": ["Marusyk A", "Almendro V", "Polyak K"], + "title": "Intra-tumour heterogeneity: a looking glass for cancer?", + "journal": "Nat Rev Cancer", + "year": 2012, + "hw_date": "2012", + "volume": "12", + "issue": "5", + "pages": "323-334", + "doi": "10.1038/nrc3261", + "pmid": "22513401" + }, + { + "id": 19, + "type": "journal", + "authors": "Gerlinger M, Rowan AJ, Horswell S, Larkin J, Endesfelder D, Gronroos E, et al.", + "hw_authors": ["Gerlinger M", "Rowan AJ", "Horswell S", "Larkin J", "Endesfelder D", "Gronroos E"], + "title": "Intratumor heterogeneity and branched evolution revealed by multiregion sequencing", + "journal": "N Engl J Med", + "year": 2012, + "hw_date": "2012", + "volume": "366", + "issue": "10", + "pages": "883-892", + "doi": "10.1056/NEJMoa1113205", + "pmid": "22397650" + }, + { + "id": 20, + "type": "journal", + "authors": "McGranahan N, Swanton C", + "hw_authors": ["McGranahan N", "Swanton C"], + "title": "Clonal heterogeneity and tumor evolution: past, present, and the future", + "journal": "Cell", + "year": 2017, + "hw_date": "2017", + "volume": "168", + "issue": "4", + "pages": "613-628", + "doi": "10.1016/j.cell.2017.01.018", + "pmid": "28187284" + }, + { + "id": 21, + "type": "journal", + "authors": "Dagogo-Jack I, Shaw AT", + "hw_authors": ["Dagogo-Jack I", "Shaw AT"], + "title": "Tumour heterogeneity and resistance to cancer therapies", + "journal": "Nat Rev Clin Oncol", + "year": 2018, + "hw_date": "2018", + "volume": "15", + "issue": "2", + "pages": "81-94", + "doi": "10.1038/nrclinonc.2017.166", + "pmid": "29115304" + }, + { + "id": 22, + "type": "journal", + "authors": "Quail DF, Joyce JA", + "hw_authors": ["Quail DF", "Joyce JA"], + "title": "Microenvironmental regulation of tumor progression and metastasis", + "journal": "Nat Med", + "year": 2013, + "hw_date": "2013", + "volume": "19", + "issue": "11", + "pages": "1423-1437", + "doi": "10.1038/nm.3394", + "pmid": "24202395" + }, + { + "id": 23, + "type": "journal", + "authors": "Hanahan D, Coussens LM", + "hw_authors": ["Hanahan D", "Coussens LM"], + "title": "Accessories to the crime: functions of cells recruited to the tumor microenvironment", + "journal": "Cancer Cell", + "year": 2012, + "hw_date": "2012", + "volume": "21", + "issue": "3", + "pages": "309-322", + "doi": "10.1016/j.ccr.2012.02.022", + "pmid": "22439926" + }, + { + "id": 24, + "type": "journal", + "authors": "Anderson NM, Simon MC", + "hw_authors": ["Anderson NM", "Simon MC"], + "title": "The tumor microenvironment", + "journal": "Curr Biol", + "year": 2020, + "hw_date": "2020", + "volume": "30", + "issue": "16", + "pages": "R921-R925", + "doi": "10.1016/j.cub.2020.06.081", + "pmid": "32810447" + }, + { + "id": 25, + "type": "journal", + "authors": "Joyce JA, Fearon DT", + "hw_authors": ["Joyce JA", "Fearon DT"], + "title": "T cell exclusion, immune privilege, and the tumor microenvironment", + "journal": "Science", + "year": 2015, + "hw_date": "2015", + "volume": "348", + "issue": "6230", + "pages": "74-80", + "doi": "10.1126/science.aaa6204", + "pmid": "25838376" + }, + { + "id": 26, + "type": "journal", + "authors": "Spranger S, Gajewski TF", + "hw_authors": ["Spranger S", "Gajewski TF"], + "title": "Impact of oncogenic pathways on evasion of antitumour immune responses", + "journal": "Nat Rev Cancer", + "year": 2018, + "hw_date": "2018", + "volume": "18", + "issue": "3", + "pages": "139-147", + "doi": "10.1038/nrc.2017.117", + "pmid": "29326431" + }, + { + "id": 27, + "type": "journal", + "authors": "Wherry EJ, Kurachi M", + "hw_authors": ["Wherry EJ", "Kurachi M"], + "title": "Molecular and cellular insights into T cell exhaustion", + "journal": "Nat Rev Immunol", + "year": 2015, + "hw_date": "2015", + "volume": "15", + "issue": "8", + "pages": "486-499", + "doi": "10.1038/nri3862", + "pmid": "26205583" + }, + { + "id": 28, + "type": "journal", + "authors": "Foulkes WD, Smith IE, Reis-Filho JS", + "hw_authors": ["Foulkes WD", "Smith IE", "Reis-Filho JS"], + "title": "Triple-negative breast cancer", + "journal": "N Engl J Med", + "year": 2010, + "hw_date": "2010", + "volume": "363", + "issue": "20", + "pages": "1938-1948", + "doi": "10.1056/NEJMra1001389", + "pmid": "21067385" + }, + { + "id": 29, + "type": "journal", + "authors": "Bianchini G, Balko JM, Mayer IA, Sanders ME, Gianni L", + "hw_authors": ["Bianchini G", "Balko JM", "Mayer IA", "Sanders ME", "Gianni L"], + "title": "Triple-negative breast cancer: challenges and opportunities of a heterogeneous disease", + "journal": "Nat Rev Clin Oncol", + "year": 2016, + "hw_date": "2016", + "volume": "13", + "issue": "11", + "pages": "674-690", + "doi": "10.1038/nrclinonc.2016.66", + "pmid": "27184417" + }, + { + "id": 30, + "type": "journal", + "authors": "Dent R, Trudeau M, Pritchard KI, Hanna WM, Kahn HK, Sawka CA, et al.", + "hw_authors": ["Dent R", "Trudeau M", "Pritchard KI", "Hanna WM", "Kahn HK", "Sawka CA"], + "title": "Triple-negative breast cancer: clinical features and patterns of recurrence", + "journal": "Clin Cancer Res", + "year": 2007, + "hw_date": "2007", + "volume": "13", + "issue": "15", + "pages": "4429-4434", + "doi": "10.1158/1078-0432.CCR-06-3045", + "pmid": "17671126" + }, + { + "id": 31, + "type": "journal", + "authors": "Lehmann BD, Bauer JA, Chen X, Sanders ME, Chakravarthy AB, Shyr Y, et al.", + "hw_authors": ["Lehmann BD", "Bauer JA", "Chen X", "Sanders ME", "Chakravarthy AB", "Shyr Y"], + "title": "Identification of human triple-negative breast cancer subtypes and preclinical models for selection of targeted therapies", + "journal": "J Clin Invest", + "year": 2011, + "hw_date": "2011", + "volume": "121", + "issue": "7", + "pages": "2750-2767", + "doi": "10.1172/JCI45014", + "pmid": "21633166" + }, + { + "id": 32, + "type": "journal", + "authors": "Warburg O", + "hw_authors": ["Warburg O"], + "title": "On the origin of cancer cells", + "journal": "Science", + "year": 1956, + "hw_date": "1956", + "volume": "123", + "issue": "3191", + "pages": "309-314", + "doi": "10.1126/science.123.3191.309", + "pmid": "13298683" + }, + { + "id": 33, + "type": "journal", + "authors": "Vander Heiden MG, Cantley LC, Thompson CB", + "hw_authors": ["Vander Heiden MG", "Cantley LC", "Thompson CB"], + "title": "Understanding the Warburg effect: the metabolic requirements of cell proliferation", + "journal": "Science", + "year": 2009, + "hw_date": "2009", + "volume": "324", + "issue": "5930", + "pages": "1029-1033", + "doi": "10.1126/science.1160809", + "pmid": "19460998" + }, + { + "id": 34, + "type": "journal", + "authors": "Pavlova NN, Thompson CB", + "hw_authors": ["Pavlova NN", "Thompson CB"], + "title": "The emerging hallmarks of cancer metabolism", + "journal": "Cell Metab", + "year": 2016, + "hw_date": "2016", + "volume": "23", + "issue": "1", + "pages": "27-47", + "doi": "10.1016/j.cmet.2015.12.006", + "pmid": "26771115" + }, + { + "id": 35, + "type": "journal", + "authors": "Gatenby RA, Gillies RJ", + "hw_authors": ["Gatenby RA", "Gillies RJ"], + "title": "Why do cancers have high aerobic glycolysis?", + "journal": "Nat Rev Cancer", + "year": 2004, + "hw_date": "2004", + "volume": "4", + "issue": "11", + "pages": "891-899", + "doi": "10.1038/nrc1478", + "pmid": "15516961" + }, + { + "id": 36, + "type": "journal", + "authors": "Brand A, Singer K, Koehl GE, Kolitzus M, Schoenhammer G, Thiel A, et al.", + "hw_authors": ["Brand A", "Singer K", "Koehl GE", "Kolitzus M", "Schoenhammer G", "Thiel A"], + "title": "LDHA-associated lactic acid production blunts tumor immunosurveillance by T and NK cells", + "journal": "Cell Metab", + "year": 2016, + "hw_date": "2016", + "volume": "24", + "issue": "5", + "pages": "657-671", + "doi": "10.1016/j.cmet.2016.08.011", + "pmid": "27641098" + }, + { + "id": 37, + "type": "journal", + "authors": "Colegio OR, Chu NQ, Szabo AL, Chu T, Rhebergen AM, Jairam V, et al.", + "hw_authors": ["Colegio OR", "Chu NQ", "Szabo AL", "Chu T", "Rhebergen AM", "Jairam V"], + "title": "Functional polarization of tumour-associated macrophages by tumour-derived lactic acid", + "journal": "Nature", + "year": 2014, + "hw_date": "2014", + "volume": "513", + "issue": "7519", + "pages": "559-563", + "doi": "10.1038/nature13490", + "pmid": "25043024" + }, + { + "id": 38, + "type": "journal", + "authors": "Fischer K, Hoffmann P, Voelkl S, Meidenbauer N, Ammer J, Edinger M, et al.", + "hw_authors": ["Fischer K", "Hoffmann P", "Voelkl S", "Meidenbauer N", "Ammer J", "Edinger M"], + "title": "Inhibitory effect of tumor cell-derived lactic acid on human T cells", + "journal": "Blood", + "year": 2007, + "hw_date": "2007", + "volume": "109", + "issue": "9", + "pages": "3812-3819", + "doi": "10.1182/blood-2006-07-035972", + "pmid": "17255361" + }, + { + "id": 39, + "type": "journal", + "authors": "Anderson ARA, Quaranta V", + "hw_authors": ["Anderson ARA", "Quaranta V"], + "title": "Integrative mathematical oncology", + "journal": "Nat Rev Cancer", + "year": 2008, + "hw_date": "2008", + "volume": "8", + "issue": "3", + "pages": "227-234", + "doi": "10.1038/nrc2329", + "pmid": "18273038" + }, + { + "id": 40, + "type": "journal", + "authors": "Gatenby RA, Brown JS", + "hw_authors": ["Gatenby RA", "Brown JS"], + "title": "Integrating evolutionary dynamics into cancer therapy", + "journal": "Nat Rev Clin Oncol", + "year": 2020, + "hw_date": "2020", + "volume": "17", + "issue": "11", + "pages": "675-686", + "doi": "10.1038/s41571-020-0411-1", + "pmid": "32699310" + }, + { + "id": 41, + "type": "journal", + "authors": "Zhang J, Cunningham JJ, Brown JS, Gatenby RA", + "hw_authors": ["Zhang J", "Cunningham JJ", "Brown JS", "Gatenby RA"], + "title": "Integrating evolutionary dynamics into treatment of metastatic castrate-resistant prostate cancer", + "journal": "Nat Commun", + "year": 2017, + "hw_date": "2017", + "volume": "8", + "issue": "1", + "pages": "1816", + "doi": "10.1038/s41467-017-01968-5", + "pmid": "29180633" + }, + { + "id": 42, + "type": "journal", + "authors": "Gatenby RA, Gillies RJ", + "hw_authors": ["Gatenby RA", "Gillies RJ"], + "title": "A microenvironmental model of carcinogenesis", + "journal": "Nat Rev Cancer", + "year": 2008, + "hw_date": "2008", + "volume": "8", + "issue": "1", + "pages": "56-61", + "doi": "10.1038/nrc2255", + "pmid": "18059462" + }, + { + "id": 43, + "type": "journal", + "authors": "Kitano H", + "hw_authors": ["Kitano H"], + "title": "Systems biology: a brief overview", + "journal": "Science", + "year": 2002, + "hw_date": "2002", + "volume": "295", + "issue": "5560", + "pages": "1662-1664", + "doi": "10.1126/science.1069492", + "pmid": "11872829" + }, + { + "id": 44, + "type": "journal", + "authors": "Kitano H", + "hw_authors": ["Kitano H"], + "title": "Computational systems biology", + "journal": "Nature", + "year": 2002, + "hw_date": "2002", + "volume": "420", + "issue": "6912", + "pages": "206-210", + "doi": "10.1038/nature01254", + "pmid": "12432404" + }, + { + "id": 45, + "type": "journal", + "authors": "Bellman R, Åström K", + "hw_authors": ["Bellman R", "Åström K"], + "title": "On structural identifiability", + "journal": "Math Biosci", + "year": 1970, + "hw_date": "1970", + "volume": "7", + "issue": "3-4", + "pages": "329-339", + "doi": "10.1016/0025-5564(70)90132-X" + }, + { + "id": 46, + "type": "journal", + "authors": "Ljung L, Glad T", + "hw_authors": ["Ljung L", "Glad T"], + "title": "On global identifiability for arbitrary model parametrizations", + "journal": "Automatica", + "year": 1994, + "hw_date": "1994", + "volume": "30", + "issue": "2", + "pages": "265-276", + "doi": "10.1016/0005-1098(94)90029-9" + }, + { + "id": 47, + "type": "journal", + "authors": "Raue A, Kreutz C, Maiwald T, Bachmann J, Schilling M, Klingmüller U, et al.", + "hw_authors": ["Raue A", "Kreutz C", "Maiwald T", "Bachmann J", "Schilling M", "Klingmüller U"], + "title": "Structural and practical identifiability analysis of partially observed dynamical models by exploiting the profile likelihood", + "journal": "Bioinformatics", + "year": 2009, + "hw_date": "2009", + "volume": "25", + "issue": "15", + "pages": "1923-1929", + "doi": "10.1093/bioinformatics/btp358", + "pmid": "19505944" + }, + { + "id": 48, + "type": "journal", + "authors": "Chis OT, Banga JR, Balsa-Canto E", + "hw_authors": ["Chis OT", "Banga JR", "Balsa-Canto E"], + "title": "Structural identifiability of systems biology models: a critical comparison of methods", + "journal": "PLoS One", + "year": 2011, + "hw_date": "2011", + "volume": "6", + "issue": "11", + "pages": "e27755", + "doi": "10.1371/journal.pone.0027755", + "pmid": "22132135" + }, + { + "id": 49, + "type": "journal", + "authors": "Villaverde AF, Banga JR", + "hw_authors": ["Villaverde AF", "Banga JR"], + "title": "Reverse engineering and identification in systems biology: strategies, perspectives and challenges", + "journal": "J R Soc Interface", + "year": 2014, + "hw_date": "2014", + "volume": "11", + "issue": "91", + "pages": "20130505", + "doi": "10.1098/rsif.2013.0505", + "pmid": "24307566" + }, + { + "id": 50, + "type": "journal", + "authors": "Villaverde AF, Barreiro A, Papachristodoulou A", + "hw_authors": ["Villaverde AF", "Barreiro A", "Papachristodoulou A"], + "title": "Structural identifiability of dynamic systems biology models", + "journal": "PLoS Comput Biol", + "year": 2016, + "hw_date": "2016", + "volume": "12", + "issue": "10", + "pages": "e1005153", + "doi": "10.1371/journal.pcbi.1005153", + "pmid": "27792726" + }, + { + "id": 51, + "type": "journal", + "authors": "Villaverde AF", + "hw_authors": ["Villaverde AF"], + "title": "Observability and structural identifiability of nonlinear biological systems", + "journal": "Complexity", + "year": 2019, + "hw_date": "2019", + "volume": "2019", + "pages": "8497093", + "doi": "10.1155/2019/8497093" + }, + { + "id": 52, + "type": "journal", + "authors": "Wieland FG, Hauber AL, Rosenblatt M, Tönsing C, Timmer J", + "hw_authors": ["Wieland FG", "Hauber AL", "Rosenblatt M", "Tönsing C", "Timmer J"], + "title": "On structural and practical identifiability", + "journal": "Curr Opin Syst Biol", + "year": 2021, + "hw_date": "2021", + "volume": "25", + "pages": "60-69", + "doi": "10.1016/j.coisb.2021.03.005" + }, + { + "id": 53, + "type": "journal", + "authors": "Himmelstein DS, Lizee A, Hessler C, Brueggeman L, Chen SL, Hadley D, et al.", + "hw_authors": ["Himmelstein DS", "Lizee A", "Hessler C", "Brueggeman L", "Chen SL", "Hadley D"], + "title": "Systematic integration of biomedical knowledge prioritizes drugs for repurposing", + "journal": "Elife", + "year": 2017, + "hw_date": "2017", + "volume": "6", + "pages": "e26726", + "doi": "10.7554/eLife.26726", + "pmid": "28936969" + }, + { + "id": 54, + "type": "journal", + "authors": "Bray F, Laversanne M, Sung H, Ferlay J, Siegel RL, Soerjomataram I, et al.", + "hw_authors": ["Bray F", "Laversanne M", "Sung H", "Ferlay J", "Siegel RL", "Soerjomataram I"], + "title": "Global cancer statistics 2022: GLOBOCAN estimates of incidence and mortality worldwide for 36 cancers in 185 countries", + "journal": "CA Cancer J Clin", + "year": 2024, + "hw_date": "2024", + "volume": "74", + "issue": "3", + "pages": "229-263", + "doi": "10.3322/caac.21834", + "pmid": "38572751" + }, + { + "id": 55, + "type": "journal", + "authors": "Sung H, Ferlay J, Siegel RL, Laversanne M, Soerjomataram I, Jemal A, et al.", + "hw_authors": ["Sung H", "Ferlay J", "Siegel RL", "Laversanne M", "Soerjomataram I", "Jemal A"], + "title": "Global cancer statistics 2020: GLOBOCAN estimates of incidence and mortality worldwide for 36 cancers in 185 countries", + "journal": "CA Cancer J Clin", + "year": 2021, + "hw_date": "2021", + "volume": "71", + "issue": "3", + "pages": "209-249", + "doi": "10.3322/caac.21660", + "pmid": "33538338" + }, + { + "id": 56, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "DISCLAIMER.md", + "publisher": "Project Confluence / GitHub", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://github.com/cloudynirvana/project-confluence/blob/main/DISCLAIMER.md" + }, + { + "id": 57, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "OnCo–CONFLUENCE ontology and evidence-ingestion specification, v0.3", + "publisher": "Project Confluence / GitHub", + "date": "2026 Sep 18", + "year": 2026, + "hw_date": "2026/09/18", + "url": "https://github.com/cloudynirvana/project-confluence/blob/main/docs/ONCO_CONFLUENCE_ONTOLOGY_SPEC.md" + }, + { + "id": 58, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "OnCo adapter (P0)", + "publisher": "Project Confluence / GitHub", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://github.com/cloudynirvana/project-confluence/blob/main/docs/ONCO_ADAPTER.md" + }, + { + "id": 59, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "Citation policy (CONFLUENCE public surfaces)", + "publisher": "Project Confluence / GitHub", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://github.com/cloudynirvana/project-confluence/blob/main/docs/CITATION_POLICY.md" + }, + { + "id": 60, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "Project Confluence", + "publisher": "GitHub", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://github.com/cloudynirvana/project-confluence" + }, + { + "id": 61, + "type": "software", + "authors": "Gomila J, OnCo contributors", + "hw_authors": ["Gomila J"], + "title": "OnCo source repository", + "version": "Version 1.0.0", + "publisher": "GitHub", + "date": "2026 Sep 16", + "year": 2026, + "hw_date": "2026/09/16", + "url": "https://github.com/judegomila/OnCo" + }, + { + "id": 62, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "TNBC-Metabolic-Strain-MOD", + "publisher": "GitHub", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://github.com/cloudynirvana/TNBC-Metabolic-Strain-MOD" + }, + { + "id": 63, + "type": "software", + "authors": "Ogbonna KE", + "hw_authors": ["Ogbonna KE"], + "title": "validation/gene_to_parameter_map.json", + "publisher": "Project Confluence / GitHub", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://github.com/cloudynirvana/project-confluence/blob/main/validation/gene_to_parameter_map.json" + }, + { + "id": 64, + "type": "internet", + "authors": "International Agency for Research on Cancer", + "hw_authors": ["International Agency for Research on Cancer"], + "title": "Global Cancer Observatory", + "place": "Lyon", + "publisher": "IARC", + "date": "2026", + "year": 2026, + "hw_date": "2026", + "url": "https://gco.iarc.who.int/" + } + ] +} diff --git a/docs/manuscript/thesis_01_confluence_onco.md b/docs/manuscript/thesis_01_confluence_onco.md index 5fa3155..d16ce5b 100644 --- a/docs/manuscript/thesis_01_confluence_onco.md +++ b/docs/manuscript/thesis_01_confluence_onco.md @@ -8,7 +8,7 @@ **Public HTML:** https://confluence-research.vercel.app/thesis **Citeable PDF:** https://confluence-research.vercel.app/thesis.pdf **Status:** Architectural and methodological findings. Not a clinical result. -**Citation style:** numbered Vancouver [n] matching the References list and the public thesis page. +**Citation style:** numbered Vancouver [n] matching the References list and the public thesis page. See `docs/CITATION_STYLE.md`. **DOI:** none registered for this document. Do not reuse the software Zenodo record. This manuscript expands `ONCO_CONFLUENCE_THESIS_FINDINGS.md`, `docs/ONCO_CONFLUENCE_ONTOLOGY_SPEC.md`, and `docs/ONCO_ADAPTER.md`. It does not add wet-lab measurements, patient-level results, or invented identifiers. @@ -17,39 +17,39 @@ This manuscript expands `ONCO_CONFLUENCE_THESIS_FINDINGS.md`, `docs/ONCO_CONFLUE ## Abstract -Cancer research now produces knowledge graphs, multi-omic assays and dynamical simulators in parallel. The failure mode is collapsing those layers. This study asks whether a provenance-controlled pipeline can keep the layers apart while still allowing testable predictions. Scientific success is a staged chain — traceability, mathematical validity, identifiability, out-of-sample prediction, experimental falsification — not disease eradication. +Cancer research now produces knowledge graphs, multi-omic assays and dynamical simulators in parallel [10,53,61]. The failure mode is collapsing those layers. This study asks whether a provenance-controlled pipeline can keep the layers apart while still allowing testable predictions. Scientific success is a staged chain — traceability, mathematical validity, identifiability, out-of-sample prediction, experimental falsification — not disease eradication [43-52]. -CONFLUENCE v2 is a frozen 15-dimensional computational cancer-state model with an optional connectome-style controller. OnCo is a public, cited oncology knowledge graph [10]. They are complementary only if knowledge is not written into parameters. Pull request #9 shipped a read-only OnCo adapter and nine refusal tests. It is architectural evidence for the gates, not therapeutic efficacy [11]. +CONFLUENCE v2 is a frozen 15-dimensional computational cancer-state model with an optional connectome-style controller [11,58,60]. OnCo is a public, cited oncology knowledge graph [10,61]. They are complementary only if knowledge is not written into parameters [57,58]. Pull request #9 shipped a read-only OnCo adapter and nine refusal tests. It is architectural evidence for the gates, not therapeutic efficacy [11,56]. -This document records the gates, the P0 adapter, the LDHA / `p_lactate` refusal, and the honesty rule that OnCo confidence is not P(H). It does not claim a cure, a dose, a clinical decision-support system, or an identified Θ. +GLOBOCAN 2024 estimates, published 2026, place the contemporary burden at about 20.6 million diagnoses and 9.8 million deaths [1,2,64]. That statistic motivates computational oncology; it is not a CONFLUENCE parameter [1,59]. This document records the gates, the P0 adapter, the LDHA / `p_lactate` refusal, and the honesty rule that OnCo confidence is not P(H) [10,11,36,63]. It does not claim a cure, a dose, a clinical decision-support system, or an identified Θ [3,56]. --- ## Keywords -computational oncology; knowledge graphs; dynamical systems; evidence gates; identifiability; OnCo; CONFLUENCE; research-only; not a medical device +computational oncology; knowledge graphs; dynamical systems; evidence gates; identifiability; tumour heterogeneity; tumour microenvironment; OnCo; CONFLUENCE; research-only; not a medical device --- ## Introduction -Oncology knowledge graphs name genes, diseases, ideas and citations [10]. Dynamical simulators ask how a state moves under control. Mixing the two without provenance treats a web page as an identified parameter. The problem stated on the public thesis page, and restated here, is: how can heterogeneous oncology knowledge and molecular observations be incorporated into a cancer dynamical model without collapsing evidence, mechanism, parameterisation and prediction into unsupported assumptions? +Oncology knowledge graphs name genes, diseases, ideas and citations [10,53,61]. Dynamical simulators ask how a state moves under control [8,39,43,44]. Mixing the two without provenance treats a web page as an identified parameter [45-52,57]. The problem stated on the public thesis page, and restated here, is: how can heterogeneous oncology knowledge and molecular observations be incorporated into a cancer dynamical model without collapsing evidence, mechanism, parameterisation and prediction into unsupported assumptions [57,59]? -GLOBOCAN 2024 estimates, published 2026, report about 20.6 million diagnoses and 9.8 million deaths [1,2]. Female breast cancer accounted for about 2.43 million new cases in that estimate series [1,2]. WHO states that many cancers can be cured if detected early and treated effectively, while access remains uneven [3]. That sentence is a policy statement about staged, treatable disease — not a claim that CONFLUENCE or OnCo cures patients [3,10,11]. The WHO global status report on cancer is cited as context only [4]. Nigeria GLOBOCAN *2022* estimates (127,763 new cases; 79,542 deaths; breast 32,278) are setting context only; they are not 2026 incidence [5]. +GLOBOCAN 2024 estimates, published 8 July 2026, report about 20.6 million diagnoses and 9.8 million deaths across 34 cancer types in 186 countries [1,2,64]. Female breast cancer accounted for about 2.43 million new cases in that estimate series [1,2]. Those figures continue a modelled GLOBOCAN series previously reported for 2022 and 2020 [54,55]. WHO states that many cancers can be cured if detected early and treated effectively, while access remains uneven [3]. That sentence is a policy statement about staged, treatable disease — not a claim that CONFLUENCE or OnCo cures patients [3,10,11,56]. The WHO global status report on cancer 2026 is cited as health-system context only [4]. Nigeria GLOBOCAN *2022* estimates (127,763 new cases; 79,542 deaths; breast 32,278) are setting context only; they are not 2026 incidence [5]. -Tumours evolve and adapt under therapy [7]. Multi-omics increase resolution without automatically producing a causal model. Mathematical oncology supplies in-silico laboratories [8]. Adaptive therapy treats treatment as a process under selection [9]. The gap this thesis addresses is connecting knowledge to dynamical hypotheses without dropping provenance. +Cancer is organised as a set of acquired capabilities — the hallmarks — rather than as a single targetable defect [13-15]. Tumours evolve clonally and adapt under therapy [7,16,17]. Intra-tumour heterogeneity, branched evolution and therapy resistance are documented empirical features of that process [18-21]. Multi-omics increase resolution without automatically producing a causal model [20,43,49]. The tumour microenvironment recruits stromal and immune cells that regulate progression, exclusion and metastasis [22-27]. Mathematical oncology supplies in-silico laboratories that couple those layers as dynamical systems [8,39]. Adaptive therapy treats treatment as a process under selection rather than as a fixed maximum-tolerated pulse [9,40,41]. The gap this thesis addresses is connecting knowledge to dynamical hypotheses without dropping provenance [10,11,57]. -TNBC is used as a test case because NCI describes it as roughly 15% of breast cancers, typically faster-growing and more recurrent, and heterogeneous [6]. That description is not a CONFLUENCE parameter. +TNBC is used as a test case because NCI describes it as roughly 15% of breast cancers, typically faster-growing and more recurrent, and heterogeneous [6]. Independent reviews describe the same clinical heterogeneity and recurrence pattern [28-31]. That description is not a CONFLUENCE parameter [6,56,63]. --- ## Specific aims -1. Forbid skip-level promotion from OnCo knowledge to ODE parameters. -2. Classify legacy artefacts, including `validation/gene_to_parameter_map.json`, as assumed / unidentified rather than as identified Θ. -3. Ship a read-only P0 adapter without editing `CancerODE`. -4. Keep the OnCo Ideas shelf separate from any CONFLUENCE hypothesis library. -5. Define success as gated, falsifiable computational work — control and disease-specific clearance — not a universal cure [3,12]. +1. Forbid skip-level promotion from OnCo knowledge to ODE parameters [10,11,57,58]. +2. Classify legacy artefacts, including `validation/gene_to_parameter_map.json`, as assumed / unidentified rather than as identified Θ [47,51,52,63]. +3. Ship a read-only P0 adapter without editing `CancerODE` [11,58]. +4. Keep the OnCo Ideas shelf separate from any CONFLUENCE hypothesis library [10,61]. +5. Define success as gated, falsifiable computational work — control and disease-specific clearance — not a universal cure [3,12,56]. --- @@ -57,24 +57,40 @@ TNBC is used as a test case because NCI describes it as roughly 15% of breast ca ### Two artefacts, two questions -OnCo answers what is named, linked, dated and cited [10]. CONFLUENCE v2 answers how a frozen 15-D state moves under an in-silico controller [11]. The working hypothesis of the findings chapter is that those artefacts are complementary provided they are not collapsed into each other. +OnCo answers what is named, linked, dated and cited [10,61]. Biomedical knowledge graphs more generally integrate heterogeneous assertions; they remain literature objects until an identification step is performed [53]. CONFLUENCE v2 answers how a frozen 15-D state moves under an in-silico controller [11,58,60]. The working hypothesis of the findings chapter is that those artefacts are complementary provided they are not collapsed into each other [57]. Frozen lineages in this repository are: | ID | Role | Status | |---|---|---| -| `tnbc_mod_3s` | TNBC-Metabolic-Strain-MOD notebooks | frozen; ROS audit pending | -| `confluence_report_6s` | report architecture X = [T, I, S, L, R, H] | paper only | -| `confluence_v2_15d` | live 15-D CancerODE | adapter sits around it | -| `confluence_v1_calibrator` | `gene_to_parameter_map.json` | executable, not identified | +| `tnbc_mod_3s` | TNBC-Metabolic-Strain-MOD notebooks | frozen; ROS audit pending [62] | +| `confluence_report_6s` | report architecture X = [T, I, S, L, R, H] | paper only [60] | +| `confluence_v2_15d` | live 15-D CancerODE | adapter sits around it [11,58] | +| `confluence_v1_calibrator` | `gene_to_parameter_map.json` | executable, not identified [63] | -OnCo integration does not justify changing the dynamics. +OnCo integration does not justify changing the dynamics [11,58]. -OnCo Ideas carry hypothesis, rationale, test and maturity fields. Bulk ingest into CONFLUENCE is forbidden. Idea maturity is not evidence level. OnCo `confidence.probability` is not P(H). +OnCo Ideas carry hypothesis, rationale, test and maturity fields [10,61]. Bulk ingest into CONFLUENCE is forbidden [57,58]. Idea maturity is not evidence level. OnCo `confidence.probability` is not P(H) [57,59]. + +### Hallmarks, heterogeneity and the microenvironment + +Hanahan and Weinberg organised neoplastic growth as a small set of acquired capabilities, later expanded and re-dimensioned [13-15]. That organising frame is why a knowledge graph of named targets is not a closed dynamical explanation: the same hallmark can be implemented by different molecular routes [14,15,20]. Clonal evolution and ecological competition supply the time axis [16,17]. Intra-tumour heterogeneity is both a looking-glass for those processes and a documented source of therapeutic failure [7,18-21]. + +The tumour microenvironment is not a passive backdrop. Recruited stromal and immune populations regulate progression and metastasis [22-24]. T-cell exclusion and oncogenic-pathway-driven immune evasion are review-level mechanisms for why a metabolic or antigenic fact does not become a control law [25,26]. Exhaustion is a distinct T-cell state, not a synonym for “the immune variable is low” [27]. None of those reviews is treated here as an identified CONFLUENCE coupling. + +### Warburg metabolism and why LDHA is still not `p_lactate` + +Aerobic glycolysis is a classical observation in cancer cells [32]. Later work reframed the Warburg effect as a proliferation-linked metabolic programme rather than a simple mitochondrial defect [33-35]. Lactate is not only a waste product: tumour-derived lactic acid can polarise macrophages and blunt T- and NK-cell surveillance [36-38]. A microenvironmental model of carcinogenesis treats acidification and selection as coupled processes [42]. + +OnCo lists LDHA among lactate-metabolism targets [10]. The CONFLUENCE v2 symbol `p_lactate` is a frozen-model parameter. The P0 adapter refuses to write the OnCo record into that symbol [11,36,58,63]. The literature explains why the gene is scientifically interesting. It does not identify Θ. + +### Mathematical oncology and adaptive control as research context + +Ordinary differential equations, stochastic models, agent-based approaches and control-theoretic methods can represent tumour growth, treatment response and resistance as in-silico laboratories [8,39]. Adaptive therapy, introduced as an evolutionary alternative to continuous maximum-tolerated dosing, treats sensitive clones as competitive suppressors of resistant clones [9,40]. A later clinical-research programme in metastatic castrate-resistant prostate cancer is cited only as context that the control idea has a literature, not as a CONFLUENCE protocol or a patient result [41]. CONFLUENCE controllers that implement a Gatenby-style treat-and-halt heuristic remain in-silico research arms [9,12,56]. ### Layer objects (ontology spec v0.3) -The ingestion spec keeps five objects. A record may point at the next layer. It may not collapse into it. +The ingestion spec keeps five objects [57]. A record may point at the next layer. It may not collapse into it. | Layer | Object | Allowed question | Forbidden leap | |---|---|---|---| @@ -97,9 +113,9 @@ OnCo knowledge --write--> Evidence ``` -Every arrow is a failure point. A page may motivate a hypothesis; it must not become Θ. No arrow may skip a box. Wired RHS terms remain Parameters with provenance `assumed` until identified. +Every arrow is a failure point. A page may motivate a hypothesis; it must not become Θ [45,47,51,57]. No arrow may skip a box. Wired RHS terms remain Parameters with provenance `assumed` until identified [52,63]. -legacy gene→parameter map ≠ identified parameter mapping. Alias trap: legacy `pyruvate_to_lactate` is not v2 `p_lactate` (default 0.22). +legacy gene→parameter map ≠ identified parameter mapping. Alias trap: legacy `pyruvate_to_lactate` is not v2 `p_lactate` (default 0.22) [58,63]. --- @@ -107,132 +123,193 @@ legacy gene→parameter map ≠ identified parameter mapping. Alias trap: legacy ### Honesty gates -The public protocol is sequential and falsifiable. It is not a treatment path. +The public protocol is sequential and falsifiable [12,56,59]. It is not a treatment path. | Gate | Requirement | |---|---| -| 0 | Research-only scope. Not a medical device. Not clinical decision support. | -| 1 | Provenance: source, URI, date, population. | -| 2 | Evidence class named. | -| 3 | Mechanism: intervention, state, sign, context, falsifier. | -| 4 | Parameter: model id, symbol, units, estimator, uncertainty, identifiability. Unidentified ≠ established. | -| 5 | Prediction labelled as computational. | -| 6 | Held-out / external / baseline validation. | -| 7 | An experiment that could show the prediction is wrong. | -| 8 | Translation only after biological and clinical validation this repository does not claim. | - -Scientific success is: traceability → mathematical validity → identifiability → out-of-sample prediction → experimental falsification. +| 0 | Research-only scope. Not a medical device. Not clinical decision support. [56] | +| 1 | Provenance: source, URI, date, population. [59] | +| 2 | Evidence class named. [57] | +| 3 | Mechanism: intervention, state, sign, context, falsifier. [57] | +| 4 | Parameter: model id, symbol, units, estimator, uncertainty, identifiability. Unidentified ≠ established. [45-52] | +| 5 | Prediction labelled as computational. [56] | +| 6 | Held-out / external / baseline validation. [12] | +| 7 | An experiment that could show the prediction is wrong. [12] | +| 8 | Translation only after biological and clinical validation this repository does not claim. [3,56] | + +Scientific success is: traceability → mathematical validity → identifiability → out-of-sample prediction → experimental falsification [43,44,51,52]. + +### Identifiability as a methods claim, not a result + +Systems biology treats a model as a formal object whose parameters may or may not be recoverable from observations [43,44]. Structural identifiability asks whether a unique parameter vector is consistent with noise-free input–output data [45,46,48,50]. Practical identifiability asks whether finite, noisy data actually constrain those parameters [47,52]. Nonlinear biological systems are often only partially observable; unidentified symbols must remain labelled as such [51]. CONFLUENCE Gate 4 is that literature applied as a refusal rule: OnCo confidence and the legacy numeric map are not estimators [10,47,63]. This manuscript does not report a new identifiability computation. ### Adapter P0 -`confluence/onco/` is a read-only client: cache envelope, bindings, schemas. Commands documented in `docs/ONCO_ADAPTER.md` include fixture `meta`, `bind --id ldha`, and `wired`. `bind()` returns slot annotations. It never writes `p_lactate` or `pyruvate_to_lactate`. `refuse_knowledge_as_parameter` returns provenance `forbidden`. Tests live in `tests/test_onco_adapter.py`. +`confluence/onco/` is a read-only client: cache envelope, bindings, schemas [11,58]. Commands documented in `docs/ONCO_ADAPTER.md` include fixture `meta`, `bind --id ldha`, and `wired` [58]. `bind()` returns slot annotations. It never writes `p_lactate` or `pyruvate_to_lactate` [11,63]. `refuse_knowledge_as_parameter` returns provenance `forbidden` [11,57]. Tests live in `tests/test_onco_adapter.py` [11,60]. -OnCo data is CC BY-NC 4.0. Adapter code in this repository is MIT. Cached payloads are not vendored; live cache stays under `data/onco/cache/` (gitignored). Attribution on every export: Data from OnCo (onco.cc), CC BY-NC 4.0; commercial use needs a licence. +OnCo data is CC BY-NC 4.0 [10,61]. Adapter code in this repository is MIT [60]. Cached payloads are not vendored; live cache stays under `data/onco/cache/` (gitignored) [58]. Attribution on every export: Data from OnCo (onco.cc), CC BY-NC 4.0; commercial use needs a licence [10,59]. -P0 ships: read-only client + cache envelope + bindings + nine gates. P0 does not ship: RHS edits, controller edits, 3-state ROS import, 6-state expansion, automatic fitting, reverse writes to OnCo. +P0 ships: read-only client + cache envelope + bindings + nine gates [11,58]. P0 does not ship: RHS edits, controller edits, 3-state ROS import, 6-state expansion, automatic fitting, reverse writes to OnCo [11,58,62]. ### Refusal rules -1. Do not vendor the OnCo corpus. -2. OnCo is not a parameter source. `refuse_knowledge_as_parameter(OncoRef("ldha"), "p_lactate")` returns provenance `forbidden`. -3. OnCo is not a controller prior. -4. Wired RHS terms remain Parameters with provenance `assumed` until identified. -5. No reverse writes to OnCo. -6. No ODE right-hand-side edits in the P0 / thesis-#1 scope. -7. Public claims need a ledger id or a numbered reference (`docs/CITATION_POLICY.md`). -8. Do not fabricate DOIs. +1. Do not vendor the OnCo corpus [10,61]. +2. OnCo is not a parameter source. `refuse_knowledge_as_parameter(OncoRef("ldha"), "p_lactate")` returns provenance `forbidden` [11,36,58]. +3. OnCo is not a controller prior [9,40,58]. +4. Wired RHS terms remain Parameters with provenance `assumed` until identified [47,52,63]. +5. No reverse writes to OnCo [10,61]. +6. No ODE right-hand-side edits in the P0 / thesis-#1 scope [11,58]. +7. Public claims need a ledger id or a numbered reference (`docs/CITATION_POLICY.md`) [59]. +8. Do not fabricate DOIs [59]. -This manuscript uses the twelve Vancouver entries of the public thesis page. The only DOI in that list that is verified in-repo is `10.3322/caac.70090` [1]. +This manuscript uses the Vancouver entries generated from `docs/manuscript/thesis_01_bibliography.json`. Every `doi:` field was checked against Crossref or PubMed on 20 September 2026. Agency and GitHub items are URL citations without a DOI [2-7,10-12,56-64]. ### What was not done -No patient data. No ODE refit. No automatic fitting. No 3-state ROS import. No 6-state expansion. No clinical trial, RECIST adjudication, or dosing table. +No patient data. No ODE refit. No automatic fitting. No 3-state ROS import. No 6-state expansion. No clinical trial, RECIST adjudication, or dosing table [12,56]. --- ## Results / architectural findings -These are specification and software-architecture findings. They are not experimental oncology results and not patient outcomes. +These are specification and software-architecture findings. They are not experimental oncology results and not patient outcomes [56]. -1. **Honesty ladder holds as an object model.** Knowledge, Evidence, Causal mechanism, Parameter and Prediction are separate types. A record may point at the next layer. It may not collapse into it. +1. **Honesty ladder holds as an object model.** Knowledge, Evidence, Causal mechanism, Parameter and Prediction are separate types [57]. A record may point at the next layer. It may not collapse into it. -2. **LDHA is not `p_lactate` (refuse-as-parameter).** `refuse_knowledge_as_parameter(OncoRef("ldha"), "p_lactate")` is `forbidden` [11]. The auditor demo claim — that LDHA expression can be entered as `p_lactate` because OnCo lists LDHA as a lactate-metabolism target — is the claim the gate is built to reject. +2. **LDHA is not `p_lactate` (refuse-as-parameter).** `refuse_knowledge_as_parameter(OncoRef("ldha"), "p_lactate")` is `forbidden` [11,58]. The auditor demo claim — that LDHA expression can be entered as `p_lactate` because OnCo lists LDHA as a lactate-metabolism target — is the claim the gate is built to reject [10,32,36,63]. -3. **Legacy map is assumed / unidentified.** `validation/gene_to_parameter_map.json` maps LDHA → `pyruvate_to_lactate` (+0.10 / +0.30). That row is a legacy numeric hint, not an identified v2 parameter. +3. **Legacy map is assumed / unidentified.** `validation/gene_to_parameter_map.json` maps LDHA → `pyruvate_to_lactate` (+0.10 / +0.30) [63]. That row is a legacy numeric hint, not an identified v2 parameter [47,51,52]. -4. **No ODE writes.** PR #9 and the P0 adapter do not edit `CancerODE.rhs_cancer` [11]. +4. **No ODE writes.** PR #9 and the P0 adapter do not edit `CancerODE.rhs_cancer` [11,58]. -5. **OnCo is a cited graph, not Θ [10].** Counts move with `buildDate`. +5. **OnCo is a cited graph, not Θ [10,61].** Counts move with `buildDate`. 6. **Three-arm programme remains a protocol.** `validation/validation_protocol.md` states H0 versus H1. Thresholds such as r > 0.5 are criteria, not findings [12]. -7. **Public ledger keeps year and population.** Claims `EVID-001`–`EVID-010` on the thesis page cite [1–12] without promoting burden statistics into model parameters. +7. **Public ledger keeps year and population.** Claims `EVID-001`–`EVID-010` on the thesis page cite [1-12] without promoting burden statistics into model parameters [1,5,59,64]. -No wet-lab measurement is reported here. No new parameter was identified. +No wet-lab measurement is reported here. No new parameter was identified [45,52,56]. --- ## Discussion -Keeping OnCo and CONFLUENCE apart is the result. Integration is valuable only as a gated pipeline: cite → interpret → propose → identify → simulate → test. Collapsing any two boxes produces a confident but unidentifiable model. +Keeping OnCo and CONFLUENCE apart is the result [10,11,57]. Integration is valuable only as a gated pipeline: cite → interpret → propose → identify → simulate → test [49,57]. Collapsing any two boxes produces a confident but unidentifiable model [45,47,51]. + +The hallmarks, clonal-evolution and microenvironment literatures explain why a named gene, a lactate observation, or a TNBC subtype label is not a sufficient statistic for Θ [13-15,16-21,22-27,28-31]. Warburg and lactate-immune papers explain why LDHA appears in OnCo and why lactate is biologically non-trivial; they still do not license a silent write into `p_lactate` [32-38,42]. Mathematical oncology and adaptive-therapy papers explain why a controller layer can exist around a frozen model; they are not CONFLUENCE efficacy [8,9,39-41]. -WHO language that many cancers can be cured if found early and treated well is retained as a health-system statement [3]. It is not transferred to CONFLUENCE as a product claim. +WHO language that many cancers can be cured if found early and treated well is retained as a health-system statement [3,4]. It is not transferred to CONFLUENCE as a product claim [56]. Prior GLOBOCAN editions (2020, 2022) are cited so that the 2024/2026 series is not treated as a one-off number [1,54,55,64]. -Disease profiles and the thinking lab are scaffolds for questions. They are not protocols and are not the Scholar landing page. The Scholar article URL is `/thesis` with the same-directory PDF `/thesis.pdf`. +Disease profiles and the thinking lab are scaffolds for questions. They are not protocols and are not the Scholar landing page [56,59]. The Scholar article URL is `/thesis` with the same-directory PDF `/thesis.pdf`. -Do not expand the state vector merely because OnCo lists more cell types. Cache has no TTL yet. Those are engineering limits, not clinical limits. +Do not expand the state vector merely because OnCo lists more cell types [10,23,61]. Cache has no TTL yet [58]. Those are engineering limits, not clinical limits [56]. --- ## Limitations -- No new wet-lab measurement. -- PR #9 does not identify `p_lactate` or any other Θ. -- The 3-state ROS notebook remains unaudited. -- The three-arm protocol can fail; that would still be a result. -- OnCo counts move with `buildDate`. -- The optional Grok auditor may miss sources; “insufficient” is preferred to invented citations. +- No new wet-lab measurement [56]. +- PR #9 does not identify `p_lactate` or any other Θ [11,52]. +- The 3-state ROS notebook remains unaudited [62]. +- The three-arm protocol can fail; that would still be a result [12]. +- OnCo counts move with `buildDate` [10]. +- The optional Grok auditor may miss sources; “insufficient” is preferred to invented citations [59]. - Nigeria 2022 estimates are setting context only [5]. - This document has no DOI. +- Identifiability citations define Gate 4; they are not a new structural-identifiability proof for `confluence_v2_15d` [45-52]. --- ## Future work -1. Iterate the adapter without RHS edits. -2. Admit-list a hypothesis library separate from OnCo Ideas. -3. Identify `p_lactate` only after gates 1–4 stay green and an estimator with uncertainty exists. -4. External / held-out validation (Gate 6) before any experimental falsifier (Gate 7). +1. Iterate the adapter without RHS edits [11,58]. +2. Admit-list a hypothesis library separate from OnCo Ideas [10,61]. +3. Identify `p_lactate` only after gates 1–4 stay green and an estimator with uncertainty exists [47,52,58]. +4. External / held-out validation (Gate 6) before any experimental falsifier (Gate 7) [12]. 5. Optional later: deposit this PDF on Zenodo or a preprint server and only then add `citation_doi` to the HTML landing page. -Translation (Gate 8) is out of scope until biological and clinical validation that this repository does not claim. +Translation (Gate 8) is out of scope until biological and clinical validation that this repository does not claim [3,56]. --- ## References -1. Sung H et al. Global cancer statistics 2024. CA Cancer J Clin. 2026. doi:10.3322/caac.70090. https://doi.org/10.3322/caac.70090 -2. IARC. GLOBOCAN 2024 news. 8 July 2026. https://www.iarc.who.int/news-events/global-cancer-statistics-2024-globocan-estimates-of-incidence-and-mortality-worldwide-for-34-cancers-in-186-countries/ -3. World Health Organization. Cancer fact sheet. 2026. https://www.who.int/news-room/fact-sheets/detail/cancer -4. World Health Organization. Global status report on cancer 2026. https://www.who.int/publications/i/item/9789240123977 -5. IARC. Nigeria fact sheet (GLOBOCAN 2022). https://gco.iarc.who.int/media/globocan/factsheets/populations/566-nigeria-fact-sheet.pdf -6. National Cancer Institute. Triple-negative breast cancer. https://www.cancer.gov/types/breast/patient/triple-negative-brochure -7. National Cancer Institute. Tumour heterogeneity. https://www.cancer.gov/about-nci/organization/dcb/research-programs/tumor-heterogeneity -8. Altrock PM, Liu LL, Michor F. The mathematics of cancer. Nat Rev Cancer. 2015. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5663316/ -9. Gatenby RA et al. Adaptive therapy. Cancer Res. 2009. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2676449/ -10. Gomila J et al. OnCo. https://onco.cc -11. Ogbonna K. Project Confluence pull request #9. 2026. https://github.com/cloudynirvana/project-confluence/pull/9 -12. Project Confluence. Validation protocol. https://github.com/cloudynirvana/project-confluence/blob/main/validation/validation_protocol.md - -Only reference 1 carries a DOI present and verified in this repository. PMC, WHO, IARC, NCI and GitHub URLs are used where no DOI is on hand. No DOI is invented. + +1. Sung H, Filho AM, Laversanne M, Ferlay J, Siegel RL, Soerjomataram I, et al. Global cancer statistics 2024: GLOBOCAN estimates of incidence and mortality worldwide for 34 cancers in 186 countries. CA Cancer J Clin. 2026;76(4):e70090. doi:10.3322/caac.70090. PMID: 42417444. +2. International Agency for Research on Cancer. Global cancer statistics 2024: GLOBOCAN estimates of incidence and mortality worldwide for 34 cancers in 186 countries [Internet]. Lyon: IARC; 2026 Jul 8 [cited 2026 Sep 20]. Available from: https://www.iarc.who.int/news-events/global-cancer-statistics-2024-globocan-estimates-of-incidence-and-mortality-worldwide-for-34-cancers-in-186-countries/ +3. World Health Organization. Cancer [Internet]. Geneva: World Health Organization; 2026 [cited 2026 Sep 20]. Available from: https://www.who.int/news-room/fact-sheets/detail/cancer +4. World Health Organization. Global status report on cancer 2026: the future we choose together [Internet]. Geneva: World Health Organization; 2026 Jul 8 [cited 2026 Sep 20]. Available from: https://www.who.int/publications/i/item/9789240123977 +5. International Agency for Research on Cancer. Nigeria fact sheet (GLOBOCAN 2022 estimates) [Internet]. Lyon: IARC Global Cancer Observatory; 2022 [cited 2026 Sep 20]. Available from: https://gco.iarc.who.int/media/globocan/factsheets/populations/566-nigeria-fact-sheet.pdf +6. National Cancer Institute. Triple-negative breast cancer [Internet]. Bethesda (MD): National Cancer Institute; 2026 [cited 2026 Sep 20]. Available from: https://www.cancer.gov/types/breast/patient/triple-negative-brochure +7. National Cancer Institute. Tumor heterogeneity [Internet]. Bethesda (MD): National Cancer Institute; 2026 [cited 2026 Sep 20]. Available from: https://www.cancer.gov/about-nci/organization/dcb/research-programs/tumor-heterogeneity +8. Altrock PM, Liu LL, Michor F. The mathematics of cancer: integrating quantitative models. Nat Rev Cancer. 2015;15(12):730-745. doi:10.1038/nrc4029. PMID: 26597528. +9. Gatenby RA, Silva AS, Gillies RJ, Frieden BR. Adaptive therapy. Cancer Res. 2009;69(11):4894-4903. doi:10.1158/0008-5472.CAN-08-3658. PMID: 19487300. +10. Gomila J, OnCo contributors. OnCo: a public, cited knowledge graph of oncology [Internet]. Version 1.0.0. OnCo; 2026 Sep 16 [cited 2026 Sep 20]. Available from: https://onco.cc +11. Ogbonna KE. feat/onco-adapter-p0 (pull request #9) [Internet]. GitHub; 2026 Sep 18 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/pull/9 +12. Ogbonna KE. Validation protocol [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/validation/validation_protocol.md +13. Hanahan D, Weinberg RA. The hallmarks of cancer. Cell. 2000;100(1):57-70. doi:10.1016/S0092-8674(00)81683-9. PMID: 10647931. +14. Hanahan D, Weinberg RA. Hallmarks of cancer: the next generation. Cell. 2011;144(5):646-674. doi:10.1016/j.cell.2011.02.013. PMID: 21376230. +15. Hanahan D. Hallmarks of cancer: new dimensions. Cancer Discov. 2022;12(1):31-46. doi:10.1158/2159-8290.CD-21-1059. PMID: 35022204. +16. Nowell PC. The clonal evolution of tumor cell populations. Science. 1976;194(4260):23-28. doi:10.1126/science.959840. PMID: 959840. +17. Merlo LMF, Pepper JW, Reid BJ, Maley CC. Cancer as an evolutionary and ecological process. Nat Rev Cancer. 2006;6(12):924-935. doi:10.1038/nrc2013. PMID: 17109012. +18. Marusyk A, Almendro V, Polyak K. Intra-tumour heterogeneity: a looking glass for cancer? Nat Rev Cancer. 2012;12(5):323-334. doi:10.1038/nrc3261. PMID: 22513401. +19. Gerlinger M, Rowan AJ, Horswell S, Larkin J, Endesfelder D, Gronroos E, et al. Intratumor heterogeneity and branched evolution revealed by multiregion sequencing. N Engl J Med. 2012;366(10):883-892. doi:10.1056/NEJMoa1113205. PMID: 22397650. +20. McGranahan N, Swanton C. Clonal heterogeneity and tumor evolution: past, present, and the future. Cell. 2017;168(4):613-628. doi:10.1016/j.cell.2017.01.018. PMID: 28187284. +21. Dagogo-Jack I, Shaw AT. Tumour heterogeneity and resistance to cancer therapies. Nat Rev Clin Oncol. 2018;15(2):81-94. doi:10.1038/nrclinonc.2017.166. PMID: 29115304. +22. Quail DF, Joyce JA. Microenvironmental regulation of tumor progression and metastasis. Nat Med. 2013;19(11):1423-1437. doi:10.1038/nm.3394. PMID: 24202395. +23. Hanahan D, Coussens LM. Accessories to the crime: functions of cells recruited to the tumor microenvironment. Cancer Cell. 2012;21(3):309-322. doi:10.1016/j.ccr.2012.02.022. PMID: 22439926. +24. Anderson NM, Simon MC. The tumor microenvironment. Curr Biol. 2020;30(16):R921-R925. doi:10.1016/j.cub.2020.06.081. PMID: 32810447. +25. Joyce JA, Fearon DT. T cell exclusion, immune privilege, and the tumor microenvironment. Science. 2015;348(6230):74-80. doi:10.1126/science.aaa6204. PMID: 25838376. +26. Spranger S, Gajewski TF. Impact of oncogenic pathways on evasion of antitumour immune responses. Nat Rev Cancer. 2018;18(3):139-147. doi:10.1038/nrc.2017.117. PMID: 29326431. +27. Wherry EJ, Kurachi M. Molecular and cellular insights into T cell exhaustion. Nat Rev Immunol. 2015;15(8):486-499. doi:10.1038/nri3862. PMID: 26205583. +28. Foulkes WD, Smith IE, Reis-Filho JS. Triple-negative breast cancer. N Engl J Med. 2010;363(20):1938-1948. doi:10.1056/NEJMra1001389. PMID: 21067385. +29. Bianchini G, Balko JM, Mayer IA, Sanders ME, Gianni L. Triple-negative breast cancer: challenges and opportunities of a heterogeneous disease. Nat Rev Clin Oncol. 2016;13(11):674-690. doi:10.1038/nrclinonc.2016.66. PMID: 27184417. +30. Dent R, Trudeau M, Pritchard KI, Hanna WM, Kahn HK, Sawka CA, et al. Triple-negative breast cancer: clinical features and patterns of recurrence. Clin Cancer Res. 2007;13(15):4429-4434. doi:10.1158/1078-0432.CCR-06-3045. PMID: 17671126. +31. Lehmann BD, Bauer JA, Chen X, Sanders ME, Chakravarthy AB, Shyr Y, et al. Identification of human triple-negative breast cancer subtypes and preclinical models for selection of targeted therapies. J Clin Invest. 2011;121(7):2750-2767. doi:10.1172/JCI45014. PMID: 21633166. +32. Warburg O. On the origin of cancer cells. Science. 1956;123(3191):309-314. doi:10.1126/science.123.3191.309. PMID: 13298683. +33. Vander Heiden MG, Cantley LC, Thompson CB. Understanding the Warburg effect: the metabolic requirements of cell proliferation. Science. 2009;324(5930):1029-1033. doi:10.1126/science.1160809. PMID: 19460998. +34. Pavlova NN, Thompson CB. The emerging hallmarks of cancer metabolism. Cell Metab. 2016;23(1):27-47. doi:10.1016/j.cmet.2015.12.006. PMID: 26771115. +35. Gatenby RA, Gillies RJ. Why do cancers have high aerobic glycolysis? Nat Rev Cancer. 2004;4(11):891-899. doi:10.1038/nrc1478. PMID: 15516961. +36. Brand A, Singer K, Koehl GE, Kolitzus M, Schoenhammer G, Thiel A, et al. LDHA-associated lactic acid production blunts tumor immunosurveillance by T and NK cells. Cell Metab. 2016;24(5):657-671. doi:10.1016/j.cmet.2016.08.011. PMID: 27641098. +37. Colegio OR, Chu NQ, Szabo AL, Chu T, Rhebergen AM, Jairam V, et al. Functional polarization of tumour-associated macrophages by tumour-derived lactic acid. Nature. 2014;513(7519):559-563. doi:10.1038/nature13490. PMID: 25043024. +38. Fischer K, Hoffmann P, Voelkl S, Meidenbauer N, Ammer J, Edinger M, et al. Inhibitory effect of tumor cell-derived lactic acid on human T cells. Blood. 2007;109(9):3812-3819. doi:10.1182/blood-2006-07-035972. PMID: 17255361. +39. Anderson ARA, Quaranta V. Integrative mathematical oncology. Nat Rev Cancer. 2008;8(3):227-234. doi:10.1038/nrc2329. PMID: 18273038. +40. Gatenby RA, Brown JS. Integrating evolutionary dynamics into cancer therapy. Nat Rev Clin Oncol. 2020;17(11):675-686. doi:10.1038/s41571-020-0411-1. PMID: 32699310. +41. Zhang J, Cunningham JJ, Brown JS, Gatenby RA. Integrating evolutionary dynamics into treatment of metastatic castrate-resistant prostate cancer. Nat Commun. 2017;8(1):1816. doi:10.1038/s41467-017-01968-5. PMID: 29180633. +42. Gatenby RA, Gillies RJ. A microenvironmental model of carcinogenesis. Nat Rev Cancer. 2008;8(1):56-61. doi:10.1038/nrc2255. PMID: 18059462. +43. Kitano H. Systems biology: a brief overview. Science. 2002;295(5560):1662-1664. doi:10.1126/science.1069492. PMID: 11872829. +44. Kitano H. Computational systems biology. Nature. 2002;420(6912):206-210. doi:10.1038/nature01254. PMID: 12432404. +45. Bellman R, Åström K. On structural identifiability. Math Biosci. 1970;7(3-4):329-339. doi:10.1016/0025-5564(70)90132-X. +46. Ljung L, Glad T. On global identifiability for arbitrary model parametrizations. Automatica. 1994;30(2):265-276. doi:10.1016/0005-1098(94)90029-9. +47. Raue A, Kreutz C, Maiwald T, Bachmann J, Schilling M, Klingmüller U, et al. Structural and practical identifiability analysis of partially observed dynamical models by exploiting the profile likelihood. Bioinformatics. 2009;25(15):1923-1929. doi:10.1093/bioinformatics/btp358. PMID: 19505944. +48. Chis OT, Banga JR, Balsa-Canto E. Structural identifiability of systems biology models: a critical comparison of methods. PLoS One. 2011;6(11):e27755. doi:10.1371/journal.pone.0027755. PMID: 22132135. +49. Villaverde AF, Banga JR. Reverse engineering and identification in systems biology: strategies, perspectives and challenges. J R Soc Interface. 2014;11(91):20130505. doi:10.1098/rsif.2013.0505. PMID: 24307566. +50. Villaverde AF, Barreiro A, Papachristodoulou A. Structural identifiability of dynamic systems biology models. PLoS Comput Biol. 2016;12(10):e1005153. doi:10.1371/journal.pcbi.1005153. PMID: 27792726. +51. Villaverde AF. Observability and structural identifiability of nonlinear biological systems. Complexity. 2019;2019:8497093. doi:10.1155/2019/8497093. +52. Wieland FG, Hauber AL, Rosenblatt M, Tönsing C, Timmer J. On structural and practical identifiability. Curr Opin Syst Biol. 2021;25:60-69. doi:10.1016/j.coisb.2021.03.005. +53. Himmelstein DS, Lizee A, Hessler C, Brueggeman L, Chen SL, Hadley D, et al. Systematic integration of biomedical knowledge prioritizes drugs for repurposing. Elife. 2017;6:e26726. doi:10.7554/eLife.26726. PMID: 28936969. +54. Bray F, Laversanne M, Sung H, Ferlay J, Siegel RL, Soerjomataram I, et al. Global cancer statistics 2022: GLOBOCAN estimates of incidence and mortality worldwide for 36 cancers in 185 countries. CA Cancer J Clin. 2024;74(3):229-263. doi:10.3322/caac.21834. PMID: 38572751. +55. Sung H, Ferlay J, Siegel RL, Laversanne M, Soerjomataram I, Jemal A, et al. Global cancer statistics 2020: GLOBOCAN estimates of incidence and mortality worldwide for 36 cancers in 185 countries. CA Cancer J Clin. 2021;71(3):209-249. doi:10.3322/caac.21660. PMID: 33538338. +56. Ogbonna KE. DISCLAIMER.md [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/DISCLAIMER.md +57. Ogbonna KE. OnCo–CONFLUENCE ontology and evidence-ingestion specification, v0.3 [Internet]. Project Confluence / GitHub; 2026 Sep 18 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/docs/ONCO_CONFLUENCE_ONTOLOGY_SPEC.md +58. Ogbonna KE. OnCo adapter (P0) [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/docs/ONCO_ADAPTER.md +59. Ogbonna KE. Citation policy (CONFLUENCE public surfaces) [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/docs/CITATION_POLICY.md +60. Ogbonna KE. Project Confluence [Internet]. GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence +61. Gomila J, OnCo contributors. OnCo source repository [Internet]. Version 1.0.0. GitHub; 2026 Sep 16 [cited 2026 Sep 20]. Available from: https://github.com/judegomila/OnCo +62. Ogbonna KE. TNBC-Metabolic-Strain-MOD [Internet]. GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/TNBC-Metabolic-Strain-MOD +63. Ogbonna KE. validation/gene_to_parameter_map.json [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/validation/gene_to_parameter_map.json +64. International Agency for Research on Cancer. Global Cancer Observatory [Internet]. Lyon: IARC; 2026 [cited 2026 Sep 20]. Available from: https://gco.iarc.who.int/ + + +DOI fields appear only for Crossref- or PubMed-verified journal records. WHO, IARC, NCI and GitHub items are complete Internet citations without a `doi:` field. No DOI is invented. Style: `docs/CITATION_STYLE.md`. --- ## Disclaimer -**Research technical report.** Project Confluence is a computational research framework. It is not a medical device, not a clinical decision-support system, not a diagnostic or therapeutic product, and not a protocol. This document makes no cure claim, no dosing recommendation, and no claim of patient benefit. Simulated trajectories are not patient outcomes. Current results are computational unless an external experiment is cited. +**Research technical report.** Project Confluence is a computational research framework. It is not a medical device, not a clinical decision-support system, not a diagnostic or therapeutic product, and not a protocol [56]. This document makes no cure claim, no dosing recommendation, and no claim of patient benefit [3,56]. Simulated trajectories are not patient outcomes. Current results are computational unless an external experiment is cited. -OnCo data (onco.cc) is cited under CC BY-NC 4.0; commercial use needs a licence. CONFLUENCE software is MIT. +OnCo data (onco.cc) is cited under CC BY-NC 4.0; commercial use needs a licence [10,61]. CONFLUENCE software is MIT [60]. Public HTML: https://confluence-research.vercel.app/thesis Citeable PDF: https://confluence-research.vercel.app/thesis.pdf diff --git a/evidence/thesis.css b/evidence/thesis.css index 32c96c7..6443dc3 100644 --- a/evidence/thesis.css +++ b/evidence/thesis.css @@ -86,8 +86,8 @@ button.audit.offline-hidden { display: none; } .audit-out.supported { border-left: 3px solid var(--teal); padding-left: 10px; } .audit-out.partially_supported { border-left: 3px solid var(--gold); padding-left: 10px; } .audit-out.insufficient, .audit-out.contradicted { border-left: 3px solid var(--rose); padding-left: 10px; } -.refs { font-size: 0.95rem; } -.refs li { margin: 0 0 8px; } +.refs { font-size: 0.92rem; padding-left: 1.4rem; } +.refs li { margin: 0 0 10px; padding-left: 0.35rem; } footer.site { border-top: 1px solid var(--line); padding: 22px; text-align: center; color: var(--muted); font: 12px ui-sans-serif, system-ui, sans-serif; } #auditor-box textarea { width: 100%; min-height: 90px; font: inherit; padding: 10px; border: 1px solid var(--line); background: #fff; diff --git a/evidence/thesis.html b/evidence/thesis.html index 08701cd..0a686a9 100644 --- a/evidence/thesis.html +++ b/evidence/thesis.html @@ -21,19 +21,71 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56,12 +108,14 @@

CONFLUENCE × OnCo: An Evidence-Gated Dynamical Framework for Integrating On

Download citeable PDF · branch feat/onco-adapter-p0 · PR #9. This document has no DOI.

Scope (Gate 0). CONFLUENCE is a computational research framework. Current results are computational unless an external experiment is cited. Not a clinical decision-support system. Not a universal cure. Simulated trajectories are not patient outcomes.

Abstract

-

Cancer research now produces knowledge graphs, multi-omic assays and dynamical simulators in parallel. The failure mode is collapsing those layers. This study asks whether a provenance-controlled pipeline can keep the layers apart while still allowing testable predictions. Scientific success is a staged chain — traceability, mathematical validity, identifiability, out-of-sample prediction, experimental falsification — not disease eradication. PR #9 is architectural evidence for the gates, not therapeutic efficacy.

+

Cancer research now produces knowledge graphs, multi-omic assays and dynamical simulators in parallel [10,53,61]. The failure mode is collapsing those layers. This study asks whether a provenance-controlled pipeline can keep the layers apart while still allowing testable predictions. Scientific success is a staged chain — traceability, mathematical validity, identifiability, out-of-sample prediction, experimental falsification — not disease eradication [43-52]. PR #9 is architectural evidence for the gates, not therapeutic efficacy [11,56]. GLOBOCAN 2024 estimates, published 2026, report about 20.6 million diagnoses and 9.8 million deaths; that statistic is context, not a CONFLUENCE parameter [1,2,64].

Why the study is necessary

-

GLOBOCAN 2024 estimates, published 2026: about 20.6 million diagnoses and 9.8 million deaths [1,2] (EVID-001). Breast cancer about 2.43 million new cases [1,2] (EVID-002). WHO: many cancers can be cured if found early and treated well; access is uneven [3] (EVID-003). Nigeria GLOBOCAN 2022 profile: 127,763 new cases, 79,542 deaths, breast 32,278 — 2022 estimates, not 2026 incidence [5] (EVID-004).

-

Tumours evolve and adapt under therapy [7] (EVID-006). Multi-omics increase resolution without automatically producing a causal model. Mathematical oncology supplies in-silico laboratories [8] (EVID-007). Adaptive therapy treats treatment as a process under selection [9] (EVID-008). The gap is connecting knowledge to dynamical hypotheses without dropping provenance.

+

GLOBOCAN 2024 estimates, published 2026: about 20.6 million diagnoses and 9.8 million deaths [1,2,64] (EVID-001). Breast cancer about 2.43 million new cases [1,2] (EVID-002). The 2024/2026 series continues earlier GLOBOCAN editions [54,55]. WHO: many cancers can be cured if found early and treated well; access is uneven [3,4] (EVID-003). Nigeria GLOBOCAN 2022 profile: 127,763 new cases, 79,542 deaths, breast 32,278 — 2022 estimates, not 2026 incidence [5] (EVID-004).

+

Cancer is organised as acquired hallmarks rather than a single defect [13-15]. Tumours evolve clonally and adapt under therapy [7,16,17] (EVID-006). Intra-tumour heterogeneity and branched evolution complicate response prediction [18-21]. The tumour microenvironment recruits stromal and immune cells, including T-cell exclusion and exhaustion states [22-27]. Multi-omics increase resolution without automatically producing a causal model [20,43]. Mathematical oncology supplies in-silico laboratories [8,39] (EVID-007). Adaptive therapy treats treatment as a process under selection [9,40,41] (EVID-008). The gap is connecting knowledge to dynamical hypotheses without dropping provenance [10,11,57].

Evidence for the problem

-

TNBC is a test case because NCI describes it as roughly 15% of breast cancers, typically faster-growing and more recurrent, and heterogeneous [6] (EVID-005). That is not a CONFLUENCE parameter. This branch adds a read-only OnCo adapter with nine tests that refuse knowledge-as-parameter and do not edit CancerODE [11] (EVID-009). OnCo is a cited knowledge graph, not Theta [10].

+

TNBC is a test case because NCI describes it as roughly 15% of breast cancers, typically faster-growing and more recurrent, and heterogeneous [6,28-31] (EVID-005). That is not a CONFLUENCE parameter [56,63]. This branch adds a read-only OnCo adapter with nine tests that refuse knowledge-as-parameter and do not edit CancerODE [11,58] (EVID-009). OnCo is a cited knowledge graph, not Theta [10,61]. Biomedical knowledge graphs more generally integrate assertions; they remain literature until an identification step [53].

+

Warburg / LDHA — interesting, still not a parameter

+

Aerobic glycolysis is a classical cancer-cell observation [32-35]. Lactate can polarise macrophages and blunt T- and NK-cell surveillance [36-38,42]. OnCo listing LDHA therefore has a literature context. It still does not identify p_lactate [10,11,36,63].

Knowledge ≠ Evidence ≠ Causal mechanism ≠ Parameter ≠ Prediction

legacy gene→parameter map ≠ identified parameter · structured representation ≠ biological observation

Problem statement

@@ -69,10 +123,10 @@

Problem statement

Knowledge → Evidence → Hypothesis → Mechanism → Parameter → Prediction → Experiment → New evidence

Every arrow is a failure point. A page may motivate a hypothesis; it must not become Theta.

Significance of the study

-

Scientific

Treat cancer as dynamic and adaptive rather than as independent targets [7] (EVID-006).

-

Methodological

Evidence gates. OnCo confidence is not P(H). Idea maturity is not evidence level. Failed hypotheses stay visible [10,11].

-

Computational

Auditable objects. PR #9 is the current artifact [11] (EVID-009).

-

Translational potential — not demonstrated benefit

Models can compare hypotheses before a wet experiment. This page does not claim patient benefit. Translation waits for Gates 6–8.

+

Scientific

Treat cancer as dynamic and adaptive rather than as independent targets [7,13-17] (EVID-006).

+

Methodological

Evidence gates. Structural and practical identifiability are refusal rules, not a new proof for confluence_v2_15d [45-52]. OnCo confidence is not P(H). Idea maturity is not evidence level. Failed hypotheses stay visible [10,11,57].

+

Computational

Auditable objects. PR #9 is the current artifact [11,58,60] (EVID-009).

+

Translational potential — not demonstrated benefit

Models can compare hypotheses before a wet experiment [8,39]. This page does not claim patient benefit [56]. Translation waits for Gates 6–8 [3,12].

Future research

Attach genomic, single-cell, spatial, PK/PD and controllers around a frozen biological model.

CONFLUENCE evidence architecture

Oncology knowledge (OnCo, literature)
@@ -80,7 +134,7 @@ 

CONFLUENCE evidence architecture

Evidence objects → genomic / molecular observation → cellular state ↓ Population dynamics — frozen confluence_v2_15d → controller → prediction → experiment → evidence
-

Lineages frozen: tnbc_mod_3s (ROS audit pending), confluence_report_6s (paper), confluence_v2_15d (live ODE), confluence_v1_calibrator (legacy map, assumed / unidentified).

+

Lineages frozen: tnbc_mod_3s (ROS audit pending) [62], confluence_report_6s (paper) [60], confluence_v2_15d (live ODE) [11,58], confluence_v1_calibrator (legacy map, assumed / unidentified) [63]. Public claims follow the citation policy [59]. Systems-biology identifiability literature defines Gate 4; it is not a new proof for this ODE [43,44,45-52].

Success protocol

Not a universal cure. Sequential and falsifiable:

@@ -96,14 +150,14 @@

Success protocol

Traceability → mathematical validity → identifiability → out-of-sample prediction → experimental falsification.

Three-arm programme — hypotheses, not results

-

validation/validation_protocol.md states H0 versus H1. Thresholds such as r > 0.5 are protocol criteria, not findings [12] (EVID-010).

+

validation/validation_protocol.md states H0 versus H1. Thresholds such as r > 0.5 are protocol criteria, not findings [12] (EVID-010). Adaptive-therapy controllers remain in-silico research arms [9,40,41,56].

Arm 1 · planned / ongoing hypothesis

Separate validation

Cancer and metabolic systems independently.

Arm 2 · planned / ongoing hypothesis

Conjoined validation

Coupled versus independent models on comorbidity data.

Arm 3 · planned / ongoing hypothesis

Universality test

Whether ΔΦ distributions match after labels are stripped — against nulls.

Evidence ledger

-

Each row keeps year and population. Numbered Vancouver-style references appear in the text as [n] and in the list below. Ledger ids (EVID-xxx) are the machine-readable claim keys. Citation rules: docs/CITATION_POLICY.md. Audit is server-side; the API key never enters this page.

+

Each row keeps year and population. Numbered Vancouver-style references appear in the text as [n] and in the list below (same numbering as the manuscript and PDF). Ledger ids (EVID-xxx) are the machine-readable claim keys. Citation rules: docs/CITATION_STYLE.md and docs/CITATION_POLICY.md. Audit is server-side; the API key never enters this page.

Loading claims.json…

Grok Evidence Auditor

@@ -128,20 +182,72 @@

Limitations and falsifiers

References

    -
  1. Sung H et al. Global cancer statistics 2024. CA Cancer J Clin. 2026. doi:10.3322/caac.70090
  2. -
  3. IARC. GLOBOCAN 2024 news. 8 July 2026. iarc.who.int
  4. -
  5. WHO. Cancer fact sheet. 2026. who.int
  6. -
  7. WHO. Global status report on cancer 2026. 9789240123977
  8. -
  9. IARC. Nigeria fact sheet (GLOBOCAN 2022). gco.iarc.who.int
  10. -
  11. NCI. Triple-negative breast cancer. cancer.gov
  12. -
  13. NCI. Tumour heterogeneity. cancer.gov
  14. -
  15. Altrock PM, Liu LL, Michor F. The mathematics of cancer. Nat Rev Cancer. 2015. PMC5663316
  16. -
  17. Gatenby RA et al. Adaptive therapy. Cancer Res. 2009. PMC2676449
  18. -
  19. Gomila J et al. OnCo. onco.cc
  20. -
  21. Ogbonna K. Project Confluence PR #9. pull/9
  22. -
  23. Validation protocol. validation_protocol.md
  24. +
  25. Sung H, Filho AM, Laversanne M, Ferlay J, Siegel RL, Soerjomataram I, et al. Global cancer statistics 2024: GLOBOCAN estimates of incidence and mortality worldwide for 34 cancers in 186 countries. CA Cancer J Clin. 2026;76(4):e70090. doi:10.3322/caac.70090. PMID: 42417444.
  26. +
  27. International Agency for Research on Cancer. Global cancer statistics 2024: GLOBOCAN estimates of incidence and mortality worldwide for 34 cancers in 186 countries [Internet]. Lyon: IARC; 2026 Jul 8 [cited 2026 Sep 20]. Available from: https://www.iarc.who.int/news-events/global-cancer-statistics-2024-globocan-estimates-of-incidence-and-mortality-worldwide-for-34-cancers-in-186-countries/
  28. +
  29. World Health Organization. Cancer [Internet]. Geneva: World Health Organization; 2026 [cited 2026 Sep 20]. Available from: https://www.who.int/news-room/fact-sheets/detail/cancer
  30. +
  31. World Health Organization. Global status report on cancer 2026: the future we choose together [Internet]. Geneva: World Health Organization; 2026 Jul 8 [cited 2026 Sep 20]. Available from: https://www.who.int/publications/i/item/9789240123977
  32. +
  33. International Agency for Research on Cancer. Nigeria fact sheet (GLOBOCAN 2022 estimates) [Internet]. Lyon: IARC Global Cancer Observatory; 2022 [cited 2026 Sep 20]. Available from: https://gco.iarc.who.int/media/globocan/factsheets/populations/566-nigeria-fact-sheet.pdf
  34. +
  35. National Cancer Institute. Triple-negative breast cancer [Internet]. Bethesda (MD): National Cancer Institute; 2026 [cited 2026 Sep 20]. Available from: https://www.cancer.gov/types/breast/patient/triple-negative-brochure
  36. +
  37. National Cancer Institute. Tumor heterogeneity [Internet]. Bethesda (MD): National Cancer Institute; 2026 [cited 2026 Sep 20]. Available from: https://www.cancer.gov/about-nci/organization/dcb/research-programs/tumor-heterogeneity
  38. +
  39. Altrock PM, Liu LL, Michor F. The mathematics of cancer: integrating quantitative models. Nat Rev Cancer. 2015;15(12):730-745. doi:10.1038/nrc4029. PMID: 26597528.
  40. +
  41. Gatenby RA, Silva AS, Gillies RJ, Frieden BR. Adaptive therapy. Cancer Res. 2009;69(11):4894-4903. doi:10.1158/0008-5472.CAN-08-3658. PMID: 19487300.
  42. +
  43. Gomila J, OnCo contributors. OnCo: a public, cited knowledge graph of oncology [Internet]. Version 1.0.0. OnCo; 2026 Sep 16 [cited 2026 Sep 20]. Available from: https://onco.cc
  44. +
  45. Ogbonna KE. feat/onco-adapter-p0 (pull request #9) [Internet]. GitHub; 2026 Sep 18 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/pull/9
  46. +
  47. Ogbonna KE. Validation protocol [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/validation/validation_protocol.md
  48. +
  49. Hanahan D, Weinberg RA. The hallmarks of cancer. Cell. 2000;100(1):57-70. doi:10.1016/S0092-8674(00)81683-9. PMID: 10647931.
  50. +
  51. Hanahan D, Weinberg RA. Hallmarks of cancer: the next generation. Cell. 2011;144(5):646-674. doi:10.1016/j.cell.2011.02.013. PMID: 21376230.
  52. +
  53. Hanahan D. Hallmarks of cancer: new dimensions. Cancer Discov. 2022;12(1):31-46. doi:10.1158/2159-8290.CD-21-1059. PMID: 35022204.
  54. +
  55. Nowell PC. The clonal evolution of tumor cell populations. Science. 1976;194(4260):23-28. doi:10.1126/science.959840. PMID: 959840.
  56. +
  57. Merlo LMF, Pepper JW, Reid BJ, Maley CC. Cancer as an evolutionary and ecological process. Nat Rev Cancer. 2006;6(12):924-935. doi:10.1038/nrc2013. PMID: 17109012.
  58. +
  59. Marusyk A, Almendro V, Polyak K. Intra-tumour heterogeneity: a looking glass for cancer? Nat Rev Cancer. 2012;12(5):323-334. doi:10.1038/nrc3261. PMID: 22513401.
  60. +
  61. Gerlinger M, Rowan AJ, Horswell S, Larkin J, Endesfelder D, Gronroos E, et al. Intratumor heterogeneity and branched evolution revealed by multiregion sequencing. N Engl J Med. 2012;366(10):883-892. doi:10.1056/NEJMoa1113205. PMID: 22397650.
  62. +
  63. McGranahan N, Swanton C. Clonal heterogeneity and tumor evolution: past, present, and the future. Cell. 2017;168(4):613-628. doi:10.1016/j.cell.2017.01.018. PMID: 28187284.
  64. +
  65. Dagogo-Jack I, Shaw AT. Tumour heterogeneity and resistance to cancer therapies. Nat Rev Clin Oncol. 2018;15(2):81-94. doi:10.1038/nrclinonc.2017.166. PMID: 29115304.
  66. +
  67. Quail DF, Joyce JA. Microenvironmental regulation of tumor progression and metastasis. Nat Med. 2013;19(11):1423-1437. doi:10.1038/nm.3394. PMID: 24202395.
  68. +
  69. Hanahan D, Coussens LM. Accessories to the crime: functions of cells recruited to the tumor microenvironment. Cancer Cell. 2012;21(3):309-322. doi:10.1016/j.ccr.2012.02.022. PMID: 22439926.
  70. +
  71. Anderson NM, Simon MC. The tumor microenvironment. Curr Biol. 2020;30(16):R921-R925. doi:10.1016/j.cub.2020.06.081. PMID: 32810447.
  72. +
  73. Joyce JA, Fearon DT. T cell exclusion, immune privilege, and the tumor microenvironment. Science. 2015;348(6230):74-80. doi:10.1126/science.aaa6204. PMID: 25838376.
  74. +
  75. Spranger S, Gajewski TF. Impact of oncogenic pathways on evasion of antitumour immune responses. Nat Rev Cancer. 2018;18(3):139-147. doi:10.1038/nrc.2017.117. PMID: 29326431.
  76. +
  77. Wherry EJ, Kurachi M. Molecular and cellular insights into T cell exhaustion. Nat Rev Immunol. 2015;15(8):486-499. doi:10.1038/nri3862. PMID: 26205583.
  78. +
  79. Foulkes WD, Smith IE, Reis-Filho JS. Triple-negative breast cancer. N Engl J Med. 2010;363(20):1938-1948. doi:10.1056/NEJMra1001389. PMID: 21067385.
  80. +
  81. Bianchini G, Balko JM, Mayer IA, Sanders ME, Gianni L. Triple-negative breast cancer: challenges and opportunities of a heterogeneous disease. Nat Rev Clin Oncol. 2016;13(11):674-690. doi:10.1038/nrclinonc.2016.66. PMID: 27184417.
  82. +
  83. Dent R, Trudeau M, Pritchard KI, Hanna WM, Kahn HK, Sawka CA, et al. Triple-negative breast cancer: clinical features and patterns of recurrence. Clin Cancer Res. 2007;13(15):4429-4434. doi:10.1158/1078-0432.CCR-06-3045. PMID: 17671126.
  84. +
  85. Lehmann BD, Bauer JA, Chen X, Sanders ME, Chakravarthy AB, Shyr Y, et al. Identification of human triple-negative breast cancer subtypes and preclinical models for selection of targeted therapies. J Clin Invest. 2011;121(7):2750-2767. doi:10.1172/JCI45014. PMID: 21633166.
  86. +
  87. Warburg O. On the origin of cancer cells. Science. 1956;123(3191):309-314. doi:10.1126/science.123.3191.309. PMID: 13298683.
  88. +
  89. Vander Heiden MG, Cantley LC, Thompson CB. Understanding the Warburg effect: the metabolic requirements of cell proliferation. Science. 2009;324(5930):1029-1033. doi:10.1126/science.1160809. PMID: 19460998.
  90. +
  91. Pavlova NN, Thompson CB. The emerging hallmarks of cancer metabolism. Cell Metab. 2016;23(1):27-47. doi:10.1016/j.cmet.2015.12.006. PMID: 26771115.
  92. +
  93. Gatenby RA, Gillies RJ. Why do cancers have high aerobic glycolysis? Nat Rev Cancer. 2004;4(11):891-899. doi:10.1038/nrc1478. PMID: 15516961.
  94. +
  95. Brand A, Singer K, Koehl GE, Kolitzus M, Schoenhammer G, Thiel A, et al. LDHA-associated lactic acid production blunts tumor immunosurveillance by T and NK cells. Cell Metab. 2016;24(5):657-671. doi:10.1016/j.cmet.2016.08.011. PMID: 27641098.
  96. +
  97. Colegio OR, Chu NQ, Szabo AL, Chu T, Rhebergen AM, Jairam V, et al. Functional polarization of tumour-associated macrophages by tumour-derived lactic acid. Nature. 2014;513(7519):559-563. doi:10.1038/nature13490. PMID: 25043024.
  98. +
  99. Fischer K, Hoffmann P, Voelkl S, Meidenbauer N, Ammer J, Edinger M, et al. Inhibitory effect of tumor cell-derived lactic acid on human T cells. Blood. 2007;109(9):3812-3819. doi:10.1182/blood-2006-07-035972. PMID: 17255361.
  100. +
  101. Anderson ARA, Quaranta V. Integrative mathematical oncology. Nat Rev Cancer. 2008;8(3):227-234. doi:10.1038/nrc2329. PMID: 18273038.
  102. +
  103. Gatenby RA, Brown JS. Integrating evolutionary dynamics into cancer therapy. Nat Rev Clin Oncol. 2020;17(11):675-686. doi:10.1038/s41571-020-0411-1. PMID: 32699310.
  104. +
  105. Zhang J, Cunningham JJ, Brown JS, Gatenby RA. Integrating evolutionary dynamics into treatment of metastatic castrate-resistant prostate cancer. Nat Commun. 2017;8(1):1816. doi:10.1038/s41467-017-01968-5. PMID: 29180633.
  106. +
  107. Gatenby RA, Gillies RJ. A microenvironmental model of carcinogenesis. Nat Rev Cancer. 2008;8(1):56-61. doi:10.1038/nrc2255. PMID: 18059462.
  108. +
  109. Kitano H. Systems biology: a brief overview. Science. 2002;295(5560):1662-1664. doi:10.1126/science.1069492. PMID: 11872829.
  110. +
  111. Kitano H. Computational systems biology. Nature. 2002;420(6912):206-210. doi:10.1038/nature01254. PMID: 12432404.
  112. +
  113. Bellman R, Åström K. On structural identifiability. Math Biosci. 1970;7(3-4):329-339. doi:10.1016/0025-5564(70)90132-X.
  114. +
  115. Ljung L, Glad T. On global identifiability for arbitrary model parametrizations. Automatica. 1994;30(2):265-276. doi:10.1016/0005-1098(94)90029-9.
  116. +
  117. Raue A, Kreutz C, Maiwald T, Bachmann J, Schilling M, Klingmüller U, et al. Structural and practical identifiability analysis of partially observed dynamical models by exploiting the profile likelihood. Bioinformatics. 2009;25(15):1923-1929. doi:10.1093/bioinformatics/btp358. PMID: 19505944.
  118. +
  119. Chis OT, Banga JR, Balsa-Canto E. Structural identifiability of systems biology models: a critical comparison of methods. PLoS One. 2011;6(11):e27755. doi:10.1371/journal.pone.0027755. PMID: 22132135.
  120. +
  121. Villaverde AF, Banga JR. Reverse engineering and identification in systems biology: strategies, perspectives and challenges. J R Soc Interface. 2014;11(91):20130505. doi:10.1098/rsif.2013.0505. PMID: 24307566.
  122. +
  123. Villaverde AF, Barreiro A, Papachristodoulou A. Structural identifiability of dynamic systems biology models. PLoS Comput Biol. 2016;12(10):e1005153. doi:10.1371/journal.pcbi.1005153. PMID: 27792726.
  124. +
  125. Villaverde AF. Observability and structural identifiability of nonlinear biological systems. Complexity. 2019;2019:8497093. doi:10.1155/2019/8497093.
  126. +
  127. Wieland FG, Hauber AL, Rosenblatt M, Tönsing C, Timmer J. On structural and practical identifiability. Curr Opin Syst Biol. 2021;25:60-69. doi:10.1016/j.coisb.2021.03.005.
  128. +
  129. Himmelstein DS, Lizee A, Hessler C, Brueggeman L, Chen SL, Hadley D, et al. Systematic integration of biomedical knowledge prioritizes drugs for repurposing. Elife. 2017;6:e26726. doi:10.7554/eLife.26726. PMID: 28936969.
  130. +
  131. Bray F, Laversanne M, Sung H, Ferlay J, Siegel RL, Soerjomataram I, et al. Global cancer statistics 2022: GLOBOCAN estimates of incidence and mortality worldwide for 36 cancers in 185 countries. CA Cancer J Clin. 2024;74(3):229-263. doi:10.3322/caac.21834. PMID: 38572751.
  132. +
  133. Sung H, Ferlay J, Siegel RL, Laversanne M, Soerjomataram I, Jemal A, et al. Global cancer statistics 2020: GLOBOCAN estimates of incidence and mortality worldwide for 36 cancers in 185 countries. CA Cancer J Clin. 2021;71(3):209-249. doi:10.3322/caac.21660. PMID: 33538338.
  134. +
  135. Ogbonna KE. DISCLAIMER.md [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/DISCLAIMER.md
  136. +
  137. Ogbonna KE. OnCo–CONFLUENCE ontology and evidence-ingestion specification, v0.3 [Internet]. Project Confluence / GitHub; 2026 Sep 18 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/docs/ONCO_CONFLUENCE_ONTOLOGY_SPEC.md
  138. +
  139. Ogbonna KE. OnCo adapter (P0) [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/docs/ONCO_ADAPTER.md
  140. +
  141. Ogbonna KE. Citation policy (CONFLUENCE public surfaces) [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/docs/CITATION_POLICY.md
  142. +
  143. Ogbonna KE. Project Confluence [Internet]. GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence
  144. +
  145. Gomila J, OnCo contributors. OnCo source repository [Internet]. Version 1.0.0. GitHub; 2026 Sep 16 [cited 2026 Sep 20]. Available from: https://github.com/judegomila/OnCo
  146. +
  147. Ogbonna KE. TNBC-Metabolic-Strain-MOD [Internet]. GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/TNBC-Metabolic-Strain-MOD
  148. +
  149. Ogbonna KE. validation/gene_to_parameter_map.json [Internet]. Project Confluence / GitHub; 2026 [cited 2026 Sep 20]. Available from: https://github.com/cloudynirvana/project-confluence/blob/main/validation/gene_to_parameter_map.json
  150. +
  151. International Agency for Research on Cancer. Global Cancer Observatory [Internet]. Lyon: IARC; 2026 [cited 2026 Sep 20]. Available from: https://gco.iarc.who.int/
-

OnCo data CC BY-NC 4.0 where cited [10]. Numbered references are Vancouver-style; DOIs are included only when verified. Not medical advice. See DISCLAIMER.md.

+

OnCo data CC BY-NC 4.0 where cited [10,61]. Numbered references are Vancouver-style and match the manuscript. DOIs are included only when verified on Crossref or PubMed. Not medical advice. See DISCLAIMER.md [56].

diff --git a/evidence/thesis.pdf b/evidence/thesis.pdf index 85cac24..bce2129 100644 Binary files a/evidence/thesis.pdf and b/evidence/thesis.pdf differ diff --git a/scripts/build_thesis_pdf.py b/scripts/build_thesis_pdf.py index 595f680..0897166 100644 --- a/scripts/build_thesis_pdf.py +++ b/scripts/build_thesis_pdf.py @@ -43,13 +43,15 @@ ABSTRACT = ( "Cancer research now produces knowledge graphs, multi-omic assays and " - "dynamical simulators in parallel. The failure mode is collapsing those " - "layers. This study asks whether a provenance-controlled pipeline can keep " - "the layers apart while still allowing testable predictions. Scientific " + "dynamical simulators in parallel [10,53,61]. The failure mode is collapsing " + "those layers. This study asks whether a provenance-controlled pipeline can " + "keep the layers apart while still allowing testable predictions. Scientific " "success is a staged chain — traceability, mathematical validity, " "identifiability, out-of-sample prediction, experimental falsification — " - "not disease eradication. PR #9 is architectural evidence for the gates, " - "not therapeutic efficacy." + "not disease eradication [43-52]. PR #9 is architectural evidence for the " + "gates, not therapeutic efficacy [11,56]. GLOBOCAN 2024 estimates, published " + "2026, report about 20.6 million diagnoses and 9.8 million deaths; that " + "statistic is context, not a CONFLUENCE parameter [1,2,64]." ) DISCLAIMER = ( @@ -299,7 +301,7 @@ def flush() -> None: continue blocks.append(("p", " — ".join(cells))) continue - if stripped in {"---", "***"}: + if stripped in {"---", "***"} or stripped.startswith("" +BIB_END = "" + + +def sync_manuscript() -> None: + raw = MANUSCRIPT.read_text(encoding="utf-8") + block = f"{BIB_START}\n{numbered_markdown()}\n{BIB_END}" + pattern = re.compile(re.escape(BIB_START) + r".*?" + re.escape(BIB_END), re.S) + if not pattern.search(raw): + raise SystemExit("manuscript is missing BIBSTART/BIBEND markers") + MANUSCRIPT.write_text(pattern.sub(block, raw), encoding="utf-8") + + +def sync_html() -> None: + raw = HTML.read_text(encoding="utf-8") + entries = load_entries() + metas = "\n".join( + f' ' + for entry in entries + ) + raw = re.sub( + r"(?: \n)+", + metas + "\n", + raw, + count=1, + flags=re.S, + ) + items = "\n".join(f" {html_item(entry)}" for entry in entries) + raw = re.sub( + r'(
    ).*?(
)', + r"\1\n" + items + r"\n \2", + raw, + count=1, + flags=re.S, + ) + HTML.write_text(raw, encoding="utf-8") + + +def main() -> None: + sync_manuscript() + sync_html() + n = len(load_entries()) + print(f"synced {n} Vancouver references into manuscript and thesis.html") + + +if __name__ == "__main__": + main() diff --git a/scripts/thesis_bibliography.py b/scripts/thesis_bibliography.py new file mode 100644 index 0000000..44cd551 --- /dev/null +++ b/scripts/thesis_bibliography.py @@ -0,0 +1,128 @@ +"""Vancouver rendering for Thesis #1. Data: docs/manuscript/thesis_01_bibliography.json.""" + +from __future__ import annotations + +import json +import re +from pathlib import Path + +REPO = Path(__file__).resolve().parents[1] +BIB_PATH = REPO / "docs" / "manuscript" / "thesis_01_bibliography.json" +CITED = "2026 Sep 20" +PLACEHOLDERS = ("TBD", "doi:pending", "10.xxxx", "xxxx/xxxxx") + + +def load_entries() -> list[dict]: + data = json.loads(BIB_PATH.read_text(encoding="utf-8")) + entries = data["entries"] + if len(entries) < 40: + raise ValueError("bibliography must contain at least 40 entries") + for i, entry in enumerate(entries, start=1): + if int(entry["id"]) != i: + raise ValueError(f"entry id {entry['id']} is not sequential at {i}") + text = vancouver(entry) + for token in PLACEHOLDERS: + if token.lower() in text.lower(): + raise ValueError(f"placeholder {token!r} in ref {i}") + if "doi:" in text.lower(): + if not re.search(r"doi:10\.\S+", text): + raise ValueError(f"ref {i} has doi: but no 10. pattern") + return entries + + +def vancouver(entry: dict) -> str: + kind = entry["type"] + if kind == "journal": + loc = _journal_location(entry) + authors = entry["authors"].rstrip(".") + title = entry["title"].rstrip() + title_sep = "" if title.endswith(("?", "!")) else "." + bits = [ + f"{authors}. {title}{title_sep} {entry['journal']}. {loc}.", + ] + if entry.get("doi"): + bits.append(f"doi:{entry['doi']}.") + if entry.get("pmid"): + bits.append(f"PMID: {entry['pmid']}.") + return " ".join(bits) + if kind in {"internet", "software"}: + place = entry.get("place") + publisher = entry.get("publisher") + imprint = "" + if place and publisher: + imprint = f"{place}: {publisher}; " + elif publisher: + imprint = f"{publisher}; " + date = entry.get("date") or str(entry.get("year") or "") + version = entry.get("version") + authors = entry["authors"].rstrip(".") + head = f"{authors}. {entry['title']} [Internet]." + if version: + head = f"{head} {version}." + return ( + f"{head} {imprint}{date} [cited {entry.get('cited', CITED)}]. " + f"Available from: {entry['url']}" + ) + raise ValueError(f"unknown bibliography type {kind}") + + +def _journal_location(entry: dict) -> str: + year = entry["year"] + volume = entry.get("volume") + issue = entry.get("issue") + pages = entry.get("pages") + if volume and issue and pages: + return f"{year};{volume}({issue}):{pages}" + if volume and pages: + return f"{year};{volume}:{pages}" + if volume and issue: + return f"{year};{volume}({issue})" + if volume: + return f"{year};{volume}" + return str(year) + + +def highwire(entry: dict) -> str: + parts = [f"citation_title={entry['title']}"] + for author in entry.get("hw_authors") or [entry["authors"]]: + parts.append(f"citation_author={author}") + date = entry.get("hw_date") or str(entry.get("year") or "") + if date: + parts.append(f"citation_publication_date={date}") + if entry["type"] == "journal": + parts.append(f"citation_journal_title={entry['journal']}") + if entry.get("volume"): + parts.append(f"citation_volume={entry['volume']}") + if entry.get("issue"): + parts.append(f"citation_issue={entry['issue']}") + if entry.get("pages"): + first = str(entry["pages"]).split("-")[0] + parts.append(f"citation_firstpage={first}") + if entry.get("doi"): + parts.append(f"citation_doi={entry['doi']}") + else: + inst = entry.get("publisher") or entry.get("authors") + parts.append(f"citation_technical_report_institution={inst}") + return "; ".join(parts) + + +def html_item(entry: dict) -> str: + text = vancouver(entry) + if entry.get("doi"): + doi = entry["doi"] + href = f"https://doi.org/{doi}" + text = text.replace(f"doi:{doi}.", f'doi:{doi}.') + elif entry.get("url"): + url = entry["url"] + text = text.replace(url, f'{url}') + if entry["type"] == "journal": + journal = entry["journal"] + text = text.replace(f". {journal}.", f". {journal}.", 1) + return f"
  • {text}
  • " + + +def numbered_markdown() -> str: + lines = [] + for entry in load_entries(): + lines.append(f"{entry['id']}. {vancouver(entry)}") + return "\n".join(lines) diff --git a/tests/test_scholar_indexing.py b/tests/test_scholar_indexing.py index f678d66..4904a22 100644 --- a/tests/test_scholar_indexing.py +++ b/tests/test_scholar_indexing.py @@ -17,10 +17,12 @@ "Oncology Knowledge Graphs with Adaptive Cancer-State Models" ) SUNG_DOI = "10.3322/caac.70090" +GATENBY_DOI = "10.1158/0008-5472.CAN-08-3658" +ALTROCK_DOI = "10.1038/nrc4029" FORBIDDEN_DOIS = ( - "10.1158/0008-5472.CAN-08-3658", "10.5281/zenodo", "10.2471/", + "10.xxxx", ) @@ -64,11 +66,13 @@ def test_thesis_html_has_scholar_citation_tags() -> None: assert "citation_doi" not in tags assert "citation_arxiv_id" not in tags refs = tags.get("citation_reference", []) - assert len(refs) == 12 + assert len(refs) >= 40 blob = "\n".join(refs) assert "Global cancer statistics 2024" in blob assert SUNG_DOI in blob - assert blob.count("citation_doi=") == 1 + assert GATENBY_DOI in blob + assert ALTROCK_DOI in blob + assert blob.count("citation_doi=") >= 30 for banned in FORBIDDEN_DOIS: assert banned not in blob assert AUTHOR in html @@ -79,7 +83,8 @@ def test_thesis_html_has_scholar_citation_tags() -> None: assert "cc by-nc" in lowered assert "not a confluence parameter" in lowered listed = re.findall(r'
      (.*?)
    ', html, flags=re.S) - assert listed and listed[0].count("
  • ") == 12 + assert listed and listed[0].count("
  • ") >= 40 + assert listed[0].count("
  • ") == len(refs) def test_sitemap_lists_thesis_html_and_pdf() -> None: @@ -136,3 +141,8 @@ def test_citeable_pdf_is_present_and_honest() -> None: gsc = (REPO / "docs" / "SCHOLAR_INDEXING.md").read_text(encoding="utf-8") assert "Search Console" in gsc assert "Zenodo" in gsc + assert (REPO / "docs" / "CITATION_STYLE.md").is_file() + style = (REPO / "docs" / "CITATION_STYLE.md").read_text(encoding="utf-8") + assert "Never invent" in style + assert "Crossref" in style + assert "PMID" in style diff --git a/tests/test_thesis_bibliography.py b/tests/test_thesis_bibliography.py new file mode 100644 index 0000000..b48edda --- /dev/null +++ b/tests/test_thesis_bibliography.py @@ -0,0 +1,156 @@ +"""Journal-worthy Vancouver bibliography for Thesis #1.""" + +from __future__ import annotations + +import re +import sys +from html.parser import HTMLParser +from pathlib import Path + +REPO = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(REPO / "scripts")) + +from thesis_bibliography import load_entries, vancouver # noqa: E402 + +MANUSCRIPT = REPO / "docs" / "manuscript" / "thesis_01_confluence_onco.md" +HTML = REPO / "evidence" / "thesis.html" +PLACEHOLDERS = ("TBD", "doi:pending", "10.xxxx", "xxxx/xxxxx") +DOI_FIELD = re.compile(r"doi:\s*(10\.\S+)", re.I) +NUMBERED = re.compile(r"^(\d+)\.\s+(.+)$") + + +class _MetaParser(HTMLParser): + def __init__(self) -> None: + super().__init__() + self.refs: list[str] = [] + + def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: + if tag != "meta": + return + mapping = {k: v or "" for k, v in attrs} + if mapping.get("name") == "citation_reference": + self.refs.append(mapping.get("content", "")) + + +def _markdown_refs(text: str) -> list[str]: + started = False + out: list[str] = [] + for line in text.splitlines(): + if line.strip().lower() == "## references": + started = True + continue + if started and line.startswith("## "): + break + if started: + match = NUMBERED.match(line.strip()) + if match: + out.append(match.group(2)) + return out + + +def _html_refs(html: str) -> list[str]: + block = re.search(r'
      (.*?)
    ', html, flags=re.S) + assert block, "thesis.html is missing ol.refs" + items = re.findall(r"
  • (.*?)
  • ", block.group(1), flags=re.S) + cleaned = [re.sub(r"<[^>]+>", "", item).strip() for item in items] + return cleaned + + +def test_bibliography_has_at_least_forty_verified_entries() -> None: + entries = load_entries() + manuscript = MANUSCRIPT.read_text(encoding="utf-8") + html = HTML.read_text(encoding="utf-8") + md_refs = _markdown_refs(manuscript) + html_refs = _html_refs(html) + assert len(entries) >= 40 + assert len(md_refs) >= 40 or len(html_refs) >= 40 + assert len(md_refs) == len(entries) + assert len(html_refs) == len(entries) + parser = _MetaParser() + parser.feed(html) + assert len(parser.refs) == len(entries) + + +def test_journal_doi_fields_are_real_and_placeholders_absent() -> None: + manuscript = MANUSCRIPT.read_text(encoding="utf-8") + html = HTML.read_text(encoding="utf-8") + blob = manuscript + "\n" + html + for token in PLACEHOLDERS: + assert token.lower() not in blob.lower() + for source in (_markdown_refs(manuscript) + _html_refs(html)): + if "doi:" in source.lower(): + match = DOI_FIELD.search(source) + assert match, f"doi: without 10. pattern: {source[:120]}" + assert match.group(1).startswith("10.") + assert "xxxx" not in match.group(1).lower() + assert "pending" not in match.group(1).lower() + for entry in load_entries(): + text = vancouver(entry) + if entry.get("doi"): + assert entry["doi"].startswith("10.") + assert f"doi:{entry['doi']}" in text + if entry["type"] == "journal": + assert entry.get("volume") + assert entry.get("year") + assert "et al." in entry["authors"] or entry["authors"].count(",") >= 0 + + +def test_manuscript_and_html_share_the_same_vancouver_list() -> None: + entries = load_entries() + md_refs = _markdown_refs(MANUSCRIPT.read_text(encoding="utf-8")) + html_refs = _html_refs(HTML.read_text(encoding="utf-8")) + expected = [vancouver(entry) for entry in entries] + assert md_refs == expected + assert html_refs == expected + sung, altrock, gatenby = expected[0], expected[7], expected[8] + assert "Sung H, Filho AM, Laversanne M" in sung + assert "CA Cancer J Clin. 2026;76(4):e70090" in sung + assert "doi:10.3322/caac.70090" in sung + assert "PMID: 42417444" in sung + assert "Altrock PM, Liu LL, Michor F" in altrock + assert "Nat Rev Cancer. 2015;15(12):730-745" in altrock + assert "Gatenby RA, Silva AS, Gillies RJ, Frieden BR" in gatenby + assert "Cancer Res. 2009;69(11):4894-4903" in gatenby + + +def test_every_bibliography_number_is_cited_in_the_manuscript_body() -> None: + manuscript = MANUSCRIPT.read_text(encoding="utf-8") + body, _sep, _refs = manuscript.partition("## References") + cited = set() + for match in re.finditer(r"\[(\d+(?:[-,]\d+)*)\]", body): + token = match.group(1) + parts = token.split(",") + for part in parts: + part = part.strip() + if "-" in part: + start, end = part.split("-", 1) + cited.update(range(int(start), int(end) + 1)) + else: + cited.add(int(part)) + expected = {entry["id"] for entry in load_entries()} + missing = sorted(expected - cited) + assert not missing, f"uncited bibliography numbers: {missing}" + + +def test_core_required_records_are_present() -> None: + texts = [vancouver(entry) for entry in load_entries()] + blob = "\n".join(texts) + assert "10.3322/caac.70090" in blob + assert "gco.iarc.who.int/media/globocan/factsheets/populations/566-nigeria" in blob + assert "who.int/news-room/fact-sheets/detail/cancer" in blob + assert "9789240123977" in blob + assert "triple-negative" in blob.lower() + assert "tumor heterogeneity" in blob.lower() or "tumour heterogeneity" in blob.lower() + assert "10.1038/nrc4029" in blob + assert "10.1158/0008-5472.CAN-08-3658" in blob + assert "onco.cc" in blob + assert "pull/9" in blob + assert "validation_protocol.md" in blob + assert "DISCLAIMER.md" in blob + assert "ONCO_CONFLUENCE_ONTOLOGY_SPEC.md" in blob + assert "ONCO_ADAPTER.md" in blob + assert "Hanahan D, Weinberg RA" in blob + assert "Warburg O" in blob + assert "Villaverde AF" in blob + style = (REPO / "docs" / "CITATION_STYLE.md").read_text(encoding="utf-8") + assert "doi:10.xxxx/xxxxx" not in style or "Never invent" in style