News Analytics
FastAPI-backed source, lens, workflow, and event diagnostics
The news surface reads from the backend contract and exposes exploratory comparisons, data quality checks, workflow health, and same-event analysis.
Index
Pages
All routes below stay inside the same shared analytics surface.
News Integration
Live FastAPI data
What this page does
Verify app-to-upstream integration status and runtime contract signals.
Data Mode
Snapshot mode requires a valid date (`YYYY-MM-DD`). Falling back to current data until provided.
Refresh
Refresh checksIntegration Banner
Integration check failure. Review endpoint statuses.Integration Summary
Checks Passing3 / 4
Generated At2026-07-20T15:30:36Z
Digest Items5
Latest TitleU.S. vows to "swiftly punish" Iran as at least 3 troops killed
Freshness Statusstale
Upstream Analysis Contract
Confirms that the upstream RSS/scoring bundle contains enough lens and source-analysis material for the dashboard contract, independent of page-level rendering.
Upstream Articles4,611
Digest Articles137
History Added4,499
Scored Articles172
Lens-Scored Articles172
Upstream Lenses12
Upstream Sources9
Upstream LOOCV Accuracy30.6%
| Source differentiation status | ok |
|---|---|
| Articles in source analysis | 195 |
| Multivariate F | 3.6159 |
| Multivariate p_perm | 0.0010 |
| Classifier baseline | 35.9% |
| Lens | Rubrics | Max Total | Items With Scores |
|---|---|---|---|
| Agency and Voice Lens | 2 | 20.0 | 195 |
| Authority and Source Positioning Lens | 2 | 20.0 | 195 |
| Causal Attribution Lens | 2 | 20.0 | 195 |
| Credibility Lens | 2 | 20.0 | 195 |
| Emotional Intensity Lens | 2 | 20.0 | 195 |
| Entity-Level Sentiment Lens | 2 | 20.0 | 195 |
| Epistemic Modality and Certainty Lens | 2 | 20.0 | 195 |
| Hegemonic Common-Sense Lens | 2 | 20.0 | 195 |
| Linguistic Quality Lens | 1 | 10.0 | 195 |
| Objectivity vs Opinion Lens | 2 | 20.0 | 195 |
| Omission and Silence Lens | 2 | 20.0 | 195 |
| Sentiment Clarity Lens | 2 | 20.0 | 195 |
Contract Checks
| Check | Endpoint | Status | Detail |
|---|---|---|---|
| Digest endpoint reachable | /api/news/digest?limit=5&refresh=true | HTTP 200 | current |
| Latest endpoint reachable | /api/news/digest/latest?refresh=true | HTTP 200 | current |
| Stats endpoint reachable | /api/news/stats?refresh=true | HTTP 200 | current |
| Freshness endpoint reachable | /health/news-freshness | HTTP 503 | current |
| Payload includes generated_at | digest.meta.generated_at | ok | generated_at=2026-07-20T15:30:36Z |
| Payload has articles | digest.data | ok | items=5 |
Debug Payload
{
"digest_status_code": 200,
"latest_status_code": 200,
"stats_status_code": 200,
"freshness_status_code": null,
"digest_status": "ok",
"latest_status": "ok",
"stats_status": "ok",
"freshness_status": "stale",
"from_cache": false,
"using_last_good": false,
"fetch_error": null,
"freshness_reason": null
}