Ranking. Articles are ranked by article_weight descending, ties broken by source_url ascending. Rank 1 is the anchor.
Scope. Every rank and every count is defined over the story’s whole membership, never over one ingest batch.
Invariants.
core_article_count + background_article_count <= article_count- a story with 2 or more articles has singleton_score = 0
representative_article_uid, _source_url, _title and _domain describe one and the same article

