Methodology
What this is
Ground Truth is a self-hostable, single-container news aggregator. It fetches headlines from curated RSS feeds, tags each item with its outlet's political lean, groups stories covering the same event, and shows you how balanced coverage across the political spectrum is for each story.
How lean is assigned
Each outlet has a lean score from -1.0 (far left) to +1.0 (far right). These are assigned by a curated dataset informed by the Ad Fontes Media Bias Chart and Ground News-style categorization. Each score is stored alongside its source (curated / manual / LLM). You can edit any outlet's lean from admin.
How stories are grouped
Each article is scanned for entities (people, organizations, countries, and recurring topics from a curated dictionary) and keywords (weighted by inverse-document-frequency over the rolling corpus).
Two articles become candidates if they share at least two terms including at least one entity. A similarity score combines shared entity count (1.0 each) with 0.3 * sum of shared keyword IDF weights.
Clusters are formed via Union-Find at a score of 2.0+. Each cluster gets a stable identity from its top terms, so the grouping does not reshuffle between refreshes.
How balance is measured
Each article's lean is its outlet's lean (optionally nudged by an LLM tone score when enabled). Articles are bucketed into seven bands: far left, left, center-left, center, center-right, right, far-right.
A "coverage gap" flag appears when one side of the spectrum has no coverage at all for a given story.
Optional LLM enhancer
When enabled, the app uses any OpenAI-compatible API to refine cluster titles/summaries and score per-article tone (blended 50/50 with the outlet prior). It is strictly optional — the app works offline without it.
Limits
- The entity dictionary is curated and English-centric; newsworthy people or orgs not in it will not be picked up except as keywords.
- Headlines without a shared entity do not cluster together.
- The bias scores are editorial judgments, not measurements.