CHANGELOG
Every product and methodology change, dated.
2026-05-23 — Trust layer round 3
- Same-event validator (broad-topic guard). When the strongest left/right headlines share only topic nouns (e.g. “silicon valley”) and zero action-like tokens (verbs, numbers, concrete events), the cluster is demoted to Needs Review. Catches loose topic clusters that the event-type vocabulary check missed.
- Outlier filter in strongest-pair selection. If a source disagrees with the cluster's center article on event type or shares zero substantive tokens with it, it's dropped before the leftmost/rightmost pair is chosen for display. The public-facing pair stays clean even when the cluster has one obvious outlier.
- Homepage main grid: high-confidence only. “Today's clearest examples” no longer accepts medium-confidence 3-source matches. Those drop into /search and the developing shelves.
- Search results split. “Cleanest same-event matches” now also requires the same-event validator to pass, not just the trust-category gate. Failures appear under a renamed “Developing / Needs Review” section with explicit caveats.
- Terms aligned with web billing. Terms now describe both web and iOS subscription surfaces explicitly, including the separation between them during open beta.
2026-05-23 — Trust layer round 2
- Same-event validator added. Detects when a cluster mixes different event types (explosion vs flood, shooting vs stabbing, crash vs poisoning, …) or when the strongest left/right headlines share <18% substantive tokens. Demotes the story to Needs Review across every public surface. First test case caught: a coal-mine explosion cluster that included an unrelated Hunan flood article.
- Share-card and embed trust gate.
/story/<id>/shareand/embed/<id>now return 404 when a story is Needs Review, fails the same-event check, or has a news-vs-opinion format mismatch. Bad matches can no longer generate viral images or embeds even by direct URL. - Frontend source canonicalization. “Daily Wire” / “The Daily Wire” and “The Hill” / “The Hill Home” now collapse to a single source by canonical domain at render time. Source counts and bias-bucket counts no longer inflate from feed-name duplicates.
- Compare index / pair-page consistency.
topOutletPairsnow applies the sameSLUG_ALIASESas the pair-page lookup, fixing the case where the index claimed N live comparisons but the pair page rendered an empty state. Pair pages with no live matches now suggest live working pairs instead of dead-ending. - Blindspot card imbalance label. Cards now show explicit counts (“Right underrepresented: 6L / 2C / 0R”) instead of contradictory “true blindspot + all three buckets included” copy.
2026-05-23 — Trust layer round 1
- Match-confidence panel. “Can I trust it? Yes” replaced with “Match confidence: High / Medium / Developing / Watch” with explicit caveats and a “not a fact-check” disclaimer on the high tier.
- Report bad match. Story rail now has a “Spotted a bad match?” form. Submissions go to a corrections webhook.
- Daily Different Spin lifted to live. Homepage hero now opens with the email-capture funnel instead of a search box. Pricing pitch rewritten from “support a tool” to value-led copy.
- Backend source dedup.
canonicalSourceKey()in the worker keys sources by canonical domain instead of raw feed name, preventing feed-name duplicates from inflating source counts on cron. - Square share-card layout. Tighter padding, smaller headline, drops the description block — fixes the overlap of headline and footer in 1:1 exports.
2026-05-15 — Public launch
- Public Optics companion site launched on Vercel.
- Added Wording Gap meters, source-spread bars, Frame Lens, Blindspot Watch, public methodology, and crawler metadata.