Mondo-anchoring audit (dismech → Mondo)
Date: 2026-07-30
Issue: #7175 — tripartite gap-exchange (dismech ⇄ Monarch KG ⇄ Mondo)
Scope: kb/disorders/*.yaml (n = 1,640). Fully local, deterministic.
Regenerate:
uv run python scripts/mondo_anchor_audit.py # summary
uv run python scripts/mondo_anchor_audit.py --tsv research/mondo_anchoring_worklist.tsv
This is the first of the six directed gap-flows in #7175 — the one that needs no
external data. It measures how well dismech disorder records are anchored to Mondo,
and surfaces the concrete dismech → Mondo handoff items (new-term / subtype
requests) plus dismech-internal fixes. It does not decide how any individual
concept should be modeled — that per-entry policy is #7178.
Headline
| Metric | Value |
|---|---|
Disorders with a MONDO primary disease_term |
1,611 / 1,640 (98.2%) |
| MONDO ids missing from the current Mondo release | 0 |
| MONDO ids obsolete/deprecated in Mondo | 0 |
| Stored-label drift vs Mondo canonical | 3 |
| Unanchored primary slot, no MONDO anywhere (Mondo candidates) | 17 |
| Unanchored primary slot, MONDO present elsewhere (promote-anchor fix) | 12 |
mondo_mappings narrowMatch / broadMatch (granularity mismatch) |
5 / 7 |
| MONDO ids used as primary anchor by >1 entry | 22 ids / 54 entries |
The anchoring layer is in good shape: no dangling or obsolete Mondo ids. The actionable work splits cleanly into dismech → Mondo requests (17 concepts) and dismech-internal fixes (3 label drifts + 12 anchor promotions).
A. dismech → Mondo: new-term / subtype candidates (17)
Entries with no MONDO id anywhere in the file. Six carry an OMIM id that anchors a Mondo lookup or new-term request; the remainder are exposure / iatrogenic / viral / gene-level concepts that test Mondo's scope.
| Entry | OMIM anchor | Note |
|---|---|---|
EEFSEC_Deficiency |
OMIM:607695 | gene-level neurodevelopmental |
GOLGA2-Related_Golgin_A2_Deficiency |
OMIM:620240 | gene-level |
HAO1-Related_Glycolate_Oxidase_Deficiency |
OMIM:605023 | gene-level metabolic |
RAB5C-Related_Neurodevelopmental_Disorder_with_Macrocephaly |
OMIM:604037 | gene-level |
SLC26A6-Related_Hyperoxaluria_and_Nephrolithiasis |
OMIM:610068 | gene-level transporter |
VPS51-Related_Pontocerebellar_Hypoplasia-CDG |
OMIM:618606 | gene-level CDG |
KATNB1-related_Cortical_Malformation |
— | gene-level |
NDE1-related_Microcephaly_Lissencephaly |
— | gene-level |
TUBB_TUBB5-related_Microcephaly |
— | gene-level |
UGGT1-congenital_disorder_of_glycosylation |
— | gene-level CDG (has term, no id) |
Arsenic_Poisoning |
— | exposure/toxicology |
Chemotherapy_Induced_Nausea_and_Vomiting |
— | iatrogenic |
Spaceflight_Associated_Neuro-Ocular_Syndrome |
— | exposure/environmental |
Volumetric_Muscle_Loss |
— | acquired injury |
Transient_Neonatal_Pustular_Melanosis |
— | dermatologic (has term, no id) |
Human_Metapneumovirus_Infection |
— | infectious |
Seasonal_Coronavirus_Infection |
— | infectious |
B. dismech-internal fixes (no Mondo action)
B1. Label drift — stored term.label ≠ Mondo canonical (3)
| Entry | MONDO id | Stored label | Canonical label |
|---|---|---|---|
Chronic_Myeloid_Leukemia |
MONDO:0011996 | chronic myelogenous leukemia, BCR-ABL1 positive | chronic myeloid leukemia |
Minimal_Change_Disease |
MONDO:0006835 | lipoid nephrosis | minimal change disease |
Multiple_Mitochondrial_Dysfunctions_Syndrome_9B |
MONDO:0971174 | multiple mitochondrial dysfunctions syndrome 9B | multiple mitochondrial dysfunctions syndrome 9b |
The first two store a Mondo synonym rather than the canonical label; the third is a
case-only difference. preferred_term may stay as-is (it is allowed to differ);
term.label should be corrected to the canonical string.
B2. Promote-anchor — MONDO present elsewhere but not in the primary slot (12)
These already reference a plausible MONDO id (in mappings/genetic) but leave
disease_term.term.id empty. The fix is to promote the correct id into the primary
slot — no Mondo request needed. Care is required where several MONDO ids appear (some
are comorbidities/related terms, not the entity's own class):
AIP-related_pituitary_adenoma_predisposition, Acute_Post-Surgical_Pain,
Adenovirus_Respiratory_Infection, CKD-Mineral_Bone_Disorder, FICUS_syndrome,
GNAS-related_pituitary_adenoma_3, GPR101-related_pituitary_adenoma_2,
Green_Tobacco_Sickness, MCM9-related_gametogenic_failure,
SLC26A1-Related_Oxalate_Transporter_Deficiency,
SRPX2-related_Speech_Epilepsy_Polymicrogyria, USP8-related_pituitary_adenoma_4.
The three pituitary-adenoma entries all point at MONDO:0006373 (pituitary adenoma) — a signal they may want a shared intermediate anchor with gene-specific subtypes, which is exactly the record-altitude question in #7178.
C. Granularity mismatch (mondo_mappings)
These are candidate inputs to the mechanism-gated split decision (#7178), recorded here only as discrepancies — not adjudicated.
- narrowMatch (dismech finer than mapped Mondo), 5:
ER_Positive_Breast_Cancer,Familial_Thoracic_Aortic_Aneurysm_and_Aortic_Dissection(×9),GABRG2-Related_Epilepsy,GRIN1-Related_Neurodevelopmental_Disorder(×3),Parkinsons_Disease. - broadMatch (dismech broader than mapped Mondo), 7:
Acetaminophen_Hepatotoxicity,Focal_Articular_Cartilage_Defect_of_the_Knee,GABRG2-Related_Epilepsy,Rhizomelic_Chondrodysplasia_Punctata_Plasmalogen_Synthesis_Defect(×2),Stargardt_Disease,Stickler_Syndrome_Type_1,Trimethylaminuria.
mondo_mappings skos-predicate totals: exactMatch 288 · closeMatch 30 · narrowMatch 15
· relatedMatch 14 · broadMatch 8. (Predicate occurrences; the narrow/broad file
counts above are distinct entries.)
D. Shared primary anchors (same MONDO id on >1 entry)
22 MONDO ids are used as the primary disease_term by 54 entries. Detected by
scripts/mondo_anchor_audit.py; per-entry counts are in the shared_anchor_n column
of the worklist TSV. Three tiers:
Tier 1 — intentional finer-than-Mondo splits (~45 entries; correct as-is)
Precision-oncology driver subtypes and metastatic-stage variants sharing a parent term because Mondo has no molecular-subtype term. Simultaneously a strong dismech → Mondo subtype-request signal.
| MONDO id | Label | × | Entries |
|---|---|---|---|
| MONDO:0005061 | lung adenocarcinoma | 5 | EGFR / KRAS-G12C / MET-ex14 / RET / ROS1 NSCLC |
| MONDO:0005233 | non-small cell lung carcinoma | 4 | ALK / BRAF-V600E / Metastatic / generic |
| MONDO:0005575 | colorectal cancer | 4 | BRAF-V600E / HER2+ / MSI-high / Metastatic |
| MONDO:0005012 | cutaneous melanoma | 3 | BRAF-V600 / Metastatic / NRAS |
| MONDO:0005075 | thyroid gland papillary carcinoma | 3 | BRAF / generic / RET-fusion |
| MONDO:0007256 | hepatocellular carcinoma | 3 | Aflatoxin / generic / Metastatic |
| MONDO:0001056 | gastric cancer | 2 | EBV / HER2+ |
| MONDO:0003210 | intrahepatic cholangiocarcinoma | 2 | FGFR-altered / IDH-mutant |
| MONDO:0004950 | gastric carcinoma | 2 | H. pylori / Metastatic |
| MONDO:0004989 | breast carcinoma | 2 | Metastatic / PIK3CA |
| MONDO:0005086 | renal cell carcinoma | 2 | Metastatic / generic |
| MONDO:0005211 | ovarian serous adenocarcinoma | 2 | Metastatic / HGSC |
| MONDO:0008315 | prostate cancer | 2 | BRCA / Metastatic |
| MONDO:0007915 | systemic lupus erythematosus | 2 | Neuropsychiatric SLE / generic |
| MONDO:0100038 | complex neurodevelopmental disorder | 2 | ANK2 / BLOC1S1 (two-gene-at-generic-term) |
Tier 2 — likely mis-anchor (a more specific Mondo term probably exists)
- Confirmed: the Waardenburg pair both sit on generic MONDO:0018094, but type-level
terms exist — MONDO:0008670 (WS type 1) for
PAX3_Waardenburg_Spectrum, MONDO:0019517 (WS type 2) forMITF_Waardenburg_Tietz_Spectrum. Caveat: these are "spectrum" records and may be intentionally broader than one numbered type — curator's call. - Worth a targeted check (OAK search inconclusive, not asserting absence):
Obesity_Due_to_MC4R_Pathway_Disruption(on MONDO:0011122 obesity disorder);SLC6A1-Related_Disorder(on MONDO:0014633 epilepsy with myoclonic-atonic seizures, likely too narrow for the gene's full phenotype);Malnutrition-related_Diabetes_Mellitus(on the diabetes umbrella MONDO:0005015, which the umbrella entry itself already holds viacloseMatch);Pacak-Zhuang_syndrome(on MONDO:0035540 pheochromocytoma-paraganglioma).
Tier 3 — possible genuine redundancy / lump
Neuromyelitis_Optica+Neuromyelitis_Optica_Spectrum_Disorder→ MONDO:0019100. Mondo folds NMOSD into the same term (no separate NMOSD class found), so these may be the same entity modeled twice — the clearest duplication candidate.Chemotherapy_Induced_Diarrhea+Travelers_Diarrhea→ MONDO:0001673 (diarrheal disease). Two etiologically unrelated conditions pinned to a generic symptom-level term; both are under-anchored.
Tiers 2/3 are flagged for curator review, not auto-fixed — they intersect the record-altitude policy call (#7178).
E. Groupings & modules anchoring
Different classes anchor differently, so the disorder audit doesn't apply verbatim.
Regenerate: uv run python scripts/grouping_anchor_audit.py.
Groupings (kb/groupings/, n=49). A Grouping carries an optional MONDO cross-ref in
mappings.mondo_mappings — not a disease_term (a grouping stands on its own curated
rationale and need not recapitulate a MONDO class).
- 30 map to MONDO — all valid (0 missing / obsolete / label-drift).
- 19 have no MONDO mapping. Two sub-cases (OAK
basic_searchis imperfect, so treat as provisional): - Existing MONDO term → just add the mapping:
Mucolipidoses(MONDO:0019248). - Likely novel mechanism/treatment-response unions → Mondo grouping-class candidates:
Fibrotic Disorders,Polyglutamine Disorders,TDP-43 Proteinopathies,FGFR-Related Skeletal Dysplasias,DNA Repair Synthetic-Lethality Cancers,Immune Checkpoint-Responsive Cancers,Digenic and Oligogenic Disorders,Parkinsonism Dopaminergic Degeneration Disorders,Epilepsy Excitation-Inhibition Imbalance Disorders, and others (full list in the script output). Many are mechanism-based unions Mondo is unlikely to carry — consistent with dismech leading Mondo on mechanism-defined groupings.
Modules (kb/modules/, n=118). Deliberately not Mondo-anchored — they model
conserved processes anchored to process ontologies (GO / OGMS / MPATH / UBERON), so they
are out of scope for the Mondo dimension. 0 carry a disease_term; the 11 with a stray
MONDO reference (in evidence/notes) carry no obsolete ids. (The MPATH continuant gaps for
Xogenesis modules — amyloid/thrombus/atheroma — are a separate OBO-request track.)
Corrections to earlier ad-hoc figures
An earlier chat-level count (before this reproducible pass) was wrong on three points, recorded here so the numbers don't propagate:
- "17 unanchored" → 29 primary-slot (17 no-MONDO-anywhere + 12 promote-anchor).
- "9 narrowMatch subtype candidates" → 5 MONDO-narrower entries (the earlier count
swept in ICD10CM/NCIT narrowMatches from other
*_mappingsblocks). - "6 files with explicit gap flags" → a crude text-regex detector was unreliable and is
omitted; explicit
MONDO lacks …prose flags need a better pass before being trusted.
Related flows (all delivered in this PR)
- Groupings & modules anchoring — §E above (
grouping_anchor_audit.py). - Mondo → dismech (curation-target direction) —
docs/reports/mondo-to-dismech-gaps-2026-07-31.md(mondo_to_dismech_gaps.py), bounded to the neighborhood of curated terms. - Monarch KG ⇄ dismech — gene–disease (
kg-gene-gap-audit-2026-07-30.md) and disease–phenotype (kg-phenotype-gap-audit-2026-07-31.md).
Machine-readable worklist
Full per-disorder inventory (all 1,640 rows): research/mondo_anchoring_worklist.tsv
(name, anchor_state, mondo_id, stored_label, oak_flag, mondo_mapping_preds,
shared_anchor_n — the number of entries sharing that MONDO id as a primary anchor).