Effort: thorough
Today a researcher who lands on /disease/alzheimers is bounced through a
301 to a wiki page (see api.py:61436) that shows static prose. SciDEX
actually has, for each disease, hundreds of artifacts spread across every
layer — top hypotheses, debates, open questions, prediction markets,
notebooks, citations, challenges, funding flows. None of this is surfaced
in one place. Build a real per-disease landing page that pulls EVERY
artifact type linked to the disease and renders a synthesized
"state of the field" view, auto-refreshing as new artifacts arrive.
This is the canonical demonstration of the artifact-unification spine
(wave-1 Q-DSC/Q-OPENQ/Q-LIVE/Q-PROP/Q-PERC) paying off: cross-layer
synthesis no human or single agent can produce by hand.
GET /disease-landing/{slug} in api.py. The legacy/disease/{name} 301 redirect (api.py:61436) is updated so anyentity_id pointing at a known/disease-landing/{slug}.
register_dashboard (scidex/atlas/artifact_registry.py:2318)disease-landing-<slug>. One artifact perscripts/seed_disease_landing_dashboards.py,scidex/senate/dashboard_engine.py:_validate_query:top_hypotheses — hypotheses joined to hypothesis_entitiesentity_links) on disease entity_id, ordered bycomposite_score DESC, top 10.open_debates — debate_sessions joined to those hypothesisclosed, archived), most recent 10.unanswered_questions — Q-OPENQ artifacts (artifact_type =open_question) tagged with the disease, ranked by score, top 10.live_markets — markets joined on the hypothesis ids, statusactive, ordered by liquidity_usd DESC, top 10.recent_notebooks — artifacts WHERE artifact_type IN
('notebook','analysis','figure','dataset') linked viaartifact_links, last 30 days.key_citations — top 10 papers by citation_count whosemesh_terms or wiki_entities link includes the disease.funding_flows — challenges (Q-CW bounties) for the disease,recent_proposals — Q-PROP proposed_artifact rows fromeb6ff576-9d5 continuous-proposal pipeline tagged withwhats_changed — count of every artifact type from #1-8render.template = new disease_landing.html added todashboard_engine._TEMPLATES. Layout:cache_ttl_seconds=600; manual refresh via existing/api/dashboard/{id}/refresh.
tests/test_disease_landing.py seeds 1 disease + 3 hyps +/disease-landing/alzheimers-disease and/disease-landing/parkinsons-disease against production DB and/agora/new).api.py:61436 to know the slugdiseases-<name>).
entity_links, wiki_entities, orcanonical_entity_links — seescidex/atlas/canonical_entity_links.py). One join per data_source_pc() ILIKE-escape helper landed forq-live-ad-therapeutic-landscape (work log notes the bug it fixed).
WHERE created_at >CASE WHEN created_at >
NOW() - INTERVAL '7 days' bucketing — keep all math in SQL solandscape_heatmap.html for visuale352460b-2d76 — view_spec_json DSL (done)41620b88-115d — seed-dashboard pattern (done)Approach: Implemented two complementary paths:
GET /disease/{name:path} (api.py:61748) — direct synthesis page using the samescience_field_page pattern. Queries live DB on every request (no cache). Usestranslate(LOWER(col), '''', '') normalization to match apostrophe-containing diseaseGET /disease-landing/{slug:path} (api.py:62180) — 302 redirect to /disease/{slug};GET /diseases/{name:path} — 301 redirect to /disease/{name} (was going to wiki).scidex/senate/dashboard_engine.py:challenges, prediction_markets, allocation_proposals to ALLOWED_TABLESdisease_landing.html Jinja2 template to _TEMPLATES (three-column synthesisscripts/seed_disease_landing_dashboards.py — registers the generic "disease-landing":disease_pat, :disease_stem/api/dashboard/disease-landing/render?params={"disease_pat":"%alzheimers%",...}.tests/test_disease_landing.py — 9 pytest tests: template registration, ALLOWED_TABLES,Acceptance criteria status:
GET /disease/{name} returns 200 HTML (landing page, not redirect)/diseases/{name} redirects to /disease/{name}disease_landing.html added to dashboard_engine._TEMPLATESchallenges, prediction_markets, allocation_proposals in ALLOWED_TABLESscripts/seed_disease_landing_dashboards.py — 9 parameterized data sourcestests/test_disease_landing.py — 9 passing tests{
"_watchdog_repair_task_id": "8802a54c-fcbc-4bdd-937a-47cf244e31d7",
"_watchdog_repair_created_at": "2026-04-28T04:11:17.240344+00:00",
"completion_shas": [
"d734ea71d"
],
"completion_shas_checked_at": ""
}