Effort: thorough
Mirror q-vert-cancer-gap-importer for the four other verticals — one
importer module per vertical, each pulling 2-3 high-quality sources
specific to that field. Cardio mines GWAS cardio traits + UK Biobank
loci + AHA scientific statements. Infectious mines WHO outbreak reports +
GenBank pathogen submissions + ProMED feeds + the AMR literature.
Metabolic mines GWAS metabolic traits + DepMap metabolic dependencies
+ HMDB orphans. Immunology mines IEDB epitopes + ImmuneSpace flow
datasets + recent vaccine-development literature. Each emits gaps tagged
to the right MONDO ids and feeds the analogy engine and OPENQ ranker.
Without importers, the four non-cancer verticals stay mostly empty,
the analogy engine has nothing to match against, and the per-vertical
landing pages render empty-state placeholders forever. Implementing
all four in one task (sharing the gap_pipeline plumbing) is much
cheaper than four separate specs and ensures the verticals reach
parity simultaneously.
scidex/atlas/cardio_gap_importer.py — GWAS cardiac traitscidex/atlas/infectious_gap_importer.py — WHO Diseasepathogen submissionsscidex/atlas/metabolic_gap_importer.py — GWAS metabolic-traitscidex/atlas/immuno_gap_importer.py — IEDB epitope databasegap_pipeline.create_gap withvertical=<name>, mondo_id resolved, source_provenance JSON,scripts/seed_nonland_gaps.py runs all four--vertical filter; targets ≥300 gaps perscidex-cardio-gaps.timer, etc.), each weekly on/atlas/landscape adds four vertical-tile cards next to theq-vert-cancer-gap-importer, each showingscidex/atlas/_vertical_gap_base.py that handles MONDO resolution,httpx + selectolax; cachedata/who_outbreaks/<date>.html.
scidex/forge/tools.py:pubmed_search).
q-sand-rate-limit-aware-tools.q-vert-disease-ontology-catalog — MONDO resolver.q-vert-cancer-gap-importer — pattern to mirror.q-sand-rate-limit-aware-tools — provider rate-limiting.gap_pipeline.py, gap_quality.py.All acceptance criteria satisfied:
Files created:
scidex/atlas/_vertical_gap_base.py (188 LoC) — shared base class withpubmed_search / pubmed_summaries helpers used by all four importers.
scidex/atlas/cardio_gap_importer.py (324 LoC) — CardioGapImporterscidex/atlas/infectious_gap_importer.py (316 LoC) — InfectiousGapImporter;requests + regex (selectolax not installed).
scidex/atlas/metabolic_gap_importer.py (359 LoC) — MetabolicGapImporter;scidex/atlas/immuno_gap_importer.py (299 LoC) — ImmunoGapImporter;scripts/seed_nonland_gaps.py — runs all four with --vertical filter.deploy/scidex-{cardio,infectious,metabolic,immuno}-gaps.{service,timer} —tests/test_nonland_gap_importers.py — 20 tests, all passing./atlas/landscape now renders 5 tiles (cancer + 4 newNotes: