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.
Refresh
Refresh checksIntegration Banner
Integration checks passing. Data is fresh.Integration Summary
Checks Passing4 / 4
Generated At2026-04-30T16:10:42Z
Digest Items5
Latest TitleIran war pushes oil prices to 4-year high as Hegseth faces lawmakers
Freshness Statusfresh
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 Articles1,427
Digest Articles44
History Added1,383
Scored Articles363
Lens-Scored Articles363
Upstream Lenses12
Upstream Sources11
Upstream LOOCV Accuracy22.3%
| Source differentiation status | ok |
|---|---|
| Articles in source analysis | 385 |
| Multivariate F | 7.1506 |
| Multivariate p_perm | 0.0010 |
| Classifier baseline | 11.9% |
| Lens | Rubrics | Max Total | Items With Scores |
|---|---|---|---|
| Agency and Voice Lens | 2 | 20.0 | 385 |
| Authority and Source Positioning Lens | 2 | 20.0 | 385 |
| Causal Attribution Lens | 2 | 20.0 | 385 |
| Credibility Lens | 2 | 20.0 | 385 |
| Emotional Intensity Lens | 2 | 20.0 | 385 |
| Entity-Level Sentiment Lens | 2 | 20.0 | 385 |
| Epistemic Modality and Certainty Lens | 2 | 20.0 | 385 |
| Hegemonic Common-Sense Lens | 2 | 20.0 | 385 |
| Linguistic Quality Lens | 1 | 10.0 | 385 |
| Objectivity vs Opinion Lens | 2 | 20.0 | 385 |
| Omission and Silence Lens | 2 | 20.0 | 385 |
| Sentiment Clarity Lens | 2 | 20.0 | 385 |
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 200 | current |
| Payload includes generated_at | digest.meta.generated_at | ok | generated_at=2026-04-30T16:10:42Z |
| 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": 200,
"digest_status": "ok",
"latest_status": "ok",
"stats_status": "ok",
"freshness_status": "ok",
"from_cache": false,
"using_last_good": false,
"fetch_error": null,
"freshness_reason": null
}