Effort: thorough
Most users return weekly, not daily. They want one page that answers
"What's new across all of SciDEX since I last looked?" Today we have
nothing. Build a whats-changed dashboard that diffs every quest's
artifact counts week-over-week and renders a single timeline.
This dashboard also serves as the trigger source for the brief-writer
auto-mode (q-synth-brief-writer-agent), the daily digest emit
(q-onb-daily-digest), and the agent-of-the-month award
(q-impact-agent-of-month).
whats-changed registered viaregister_dashboard.
windows CTE that computes THIS_WEEK = (NOW() - INTERVAL '7
days') vs. LAST_WEEK = (NOW() - INTERVAL '14 days', NOW() -
INTERVAL '7 days'):hypotheses_delta — count + avg composite_score change.debates_delta — count + verdict-mix change (resolved /markets_delta — count + total liquidity_usd change.notebooks_delta — count + execution success rate change.open_questions_delta — count opened + count answered + nettop_movers — disease entities with the largest WoW changerender.template = new whats_changed.html in _TEMPLATES./brief/topic/<slug> for any disease whosecache_ttl_seconds=1800. A weekly snapshot (POSTscidex-whats-changed-weekly-snapshot.timer; the snapshot/dashboard/whats-changed; linked from the global_window_counts(table, ts_col, scope) SQL helper_pc() ILIKE-escape fromq-live-ad-therapeutic-landscape.
whats_changed.html template; reuse sparkline JS fromq-live-market-liquidity-heatmap.
scripts/seed_whats_changed_dashboard.py and the systemdsystemd/units/).
/api/whats-changed/topics?min_delta_pct=20 JSON endpointe352460b-2d76 — view_spec_json DSL.q-synth-brief-writer-agent (sibling) — consumes the/api/whats-changed/topics JSON endpoint.Files created / modified:
scidex/senate/dashboard_engine.py — added whats_changed.html template to_TEMPLATES: 5-card KPI hero strip with SVG sparklines + WoW % delta + coloredscripts/seed_whats_changed_dashboard.py — registers artifact IDdashboard-whats-changed with 6 view_spec_json data sources (all using sharedwindows CTE), cache_ttl_seconds=1800, template=whats_changed.api_routes/activity.py (new) — GET /api/whats-changed/topics endpoint feedingmin_delta_pct query param filters diseases below thedisease, slug, WoW counts, brief_url.api_shared/nav.py — "What's Changed" link added under Atlas dropdown and sidebar.deploy/bootstrap/systemd/scidex-whats-changed-snapshot.service andscidex-whats-changed-snapshot.timer — weekly Monday 08:00 UTC snapshot viaPOST /api/dashboard/dashboard-whats-changed/snapshot.tests/test_whats_changed_dashboard.py — 12 passing tests: 6 query-level testsNotes on implementation choices:
top_movers uses knowledge_gaps.domain as the disease-entity proxy (noDISTINCT ON (disease) fetches/dashboard/dashboard-whats-changed (the seeded artifact ID)./dashboard/{id} route already handles this without a new route.
scidex-whats-changed-snapshot (not the spec'sscidex-whats-changed-weekly-snapshot literal) to match existing naming convention.