Little Thot Articles

Same news, different words

A duplicate check meant to keep the news quiet threw away the best story of the week. Re-scoring every story showed why: headline similarity barely tells the same news from different news.

Little Thot is built for serendipity: the useful accident. You read something today, and it tells you that it connects to a note you wrote months ago, or to something you're in the middle of. You can't search for a connection you don't know is there, so the system has to notice it for you, and then decide whether it's worth interrupting you.

That decision can fail in two directions. Too loose, and it becomes noise you learn to ignore, and the useful accidents get lost in it. Too strict, and they never happen at all. The second failure is the dangerous one, because it's silent: nobody misses a message they never received.

This is a write-up of the second kind of failure, found in the smallest part of the system. Little Thot is also a laboratory for studying agent systems: where code should decide and where a model should, what data leaves our own machines, what it costs. We run it every day and write up what we find.

A quiet news feed

At regular points during the day, Little Thot reads technology news front pages and flags the few stories that touch what we're working on. It turns each headline into a vector with a small embedding model running locally, and compares that with the topics in our working profile and with our own notes and ideas. No language model is involved, and our notes and profile never leave our own machines. A story that scores high enough against either is a match.

After two days it had sent three stories. That felt low, so we followed every story through.

  1. 317front-page stories seen in the first two and a bit days
  2. 311never came close to either bar
  3. 6cleared a bar, against a profile topic or a note
  4. 2skipped: we'd already read them, hours before they reached the front page
  5. 4matched
  6. 1dropped as a repeat of news already sent
  7. 3sent
Where 317 stories went. Skipping pages already read is deliberate, and it worked. The story dropped as a repeat was the strongest match of the period.

The plot below shows the same thing from the other side: every story's best score against a profile topic and against a note or idea. Almost everything sits in a dense cloud far from both bars. The handful that clear one are on their own.

  • Sent
  • Already read, skipped
  • Dropped as a repeat
  • Every other story
0.000.100.200.300.400.500.100.200.300.400.500.60topic bar 0.32note bar 0.50Topic 0.22, note 0.31Topic 0.10, note 0.27Topic 0.12, note 0.23Topic 0.20, note 0.19Topic 0.26, note 0.19Topic 0.12, note 0.26Topic 0.15, note 0.26Topic 0.08, note 0.25Topic 0.28, note 0.26Topic 0.29, note 0.25Topic 0.06, note 0.31Topic 0.18, note 0.30Topic 0.26, note 0.18Topic 0.09, note 0.20Topic 0.01, note 0.22Topic 0.15, note 0.28Topic 0.08, note 0.27Topic 0.11, note 0.28Topic 0.17, note 0.25Topic 0.15, note 0.26Topic 0.11, note 0.22Topic -0.01, note 0.34Topic 0.18, note 0.29Topic 0.26, note 0.20Topic 0.30, note 0.29Topic 0.07, note 0.27Topic 0.04, note 0.17Topic 0.20, note 0.19Topic 0.05, note 0.27Topic 0.15, note 0.22Topic 0.23, note 0.24Topic 0.25, note 0.29Topic 0.04, note 0.32Topic 0.05, note 0.34Topic 0.09, note 0.15Topic 0.12, note 0.22Topic 0.21, note 0.24Topic 0.16, note 0.24Topic 0.11, note 0.18Topic 0.25, note 0.25Topic 0.07, note 0.25Topic 0.09, note 0.26Topic 0.06, note 0.30Topic 0.19, note 0.22Topic 0.30, note 0.24Topic 0.12, note 0.20Topic 0.21, note 0.20Topic 0.23, note 0.28Topic 0.07, note 0.19Topic 0.26, note 0.32Topic 0.23, note 0.26Topic 0.16, note 0.20Topic 0.12, note 0.24Topic 0.18, note 0.27Topic 0.07, note 0.24Topic 0.10, note 0.31Topic 0.09, note 0.23Topic 0.17, note 0.23Topic 0.17, note 0.24Topic 0.07, note 0.29Topic 0.06, note 0.25Topic 0.12, note 0.24Topic 0.13, note 0.29Topic 0.12, note 0.21Topic 0.05, note 0.23Topic 0.07, note 0.22Topic 0.09, note 0.26Topic 0.13, note 0.20Topic 0.08, note 0.23Topic 0.25, note 0.21Topic 0.23, note 0.38Topic 0.07, note 0.37Topic 0.13, note 0.26Topic 0.14, note 0.22Topic 0.20, note 0.29Topic 0.09, note 0.28Topic 0.09, note 0.29Topic 0.15, note 0.22Topic -0.00, note 0.35Topic 0.17, note 0.22Topic 0.00, note 0.37Topic 0.18, note 0.39Topic 0.23, note 0.18Topic 0.21, note 0.19Topic 0.02, note 0.27Topic 0.20, note 0.34Topic 0.20, note 0.24Topic 0.12, note 0.21Topic 0.28, note 0.29Topic 0.14, note 0.24Topic 0.21, note 0.28Topic 0.23, note 0.20Topic 0.08, note 0.30Topic 0.09, note 0.45Topic 0.16, note 0.21Topic 0.20, note 0.22Topic 0.19, note 0.24Topic 0.14, note 0.29Topic 0.12, note 0.22Topic 0.15, note 0.25Topic 0.30, note 0.29Topic 0.27, note 0.33Topic 0.27, note 0.33Topic 0.10, note 0.25Topic 0.10, note 0.22Topic 0.22, note 0.29Topic 0.13, note 0.19Topic 0.20, note 0.19Topic 0.12, note 0.23Topic 0.08, note 0.31Topic 0.17, note 0.35Topic 0.12, note 0.21Topic 0.23, note 0.22Topic 0.17, note 0.27Topic 0.14, note 0.24Topic 0.22, note 0.19Topic 0.19, note 0.28Topic 0.25, note 0.30Topic 0.07, note 0.34Topic 0.17, note 0.35Topic 0.24, note 0.24Topic 0.18, note 0.21Topic 0.05, note 0.25Topic 0.25, note 0.25Topic 0.08, note 0.23Topic 0.27, note 0.32Topic 0.17, note 0.20Topic 0.21, note 0.23Topic 0.05, note 0.27Topic 0.06, note 0.27Topic 0.05, note 0.28Topic 0.17, note 0.24Topic 0.30, note 0.20Topic 0.14, note 0.23Topic 0.00, note 0.35Topic 0.21, note 0.19Topic 0.17, note 0.23Topic 0.18, note 0.29Topic 0.16, note 0.26Topic 0.23, note 0.29Topic 0.13, note 0.21Topic 0.23, note 0.23Topic 0.10, note 0.23Topic 0.05, note 0.27Topic 0.15, note 0.19Topic 0.10, note 0.23Topic 0.11, note 0.21Topic 0.06, note 0.28Topic 0.04, note 0.30Topic 0.08, note 0.35Topic 0.15, note 0.24Topic 0.22, note 0.22Topic 0.10, note 0.35Topic 0.07, note 0.30Topic 0.16, note 0.27Topic 0.13, note 0.29Topic 0.21, note 0.26Topic 0.11, note 0.30Topic 0.19, note 0.27Topic 0.25, note 0.28Topic 0.30, note 0.43Topic 0.14, note 0.19Topic 0.14, note 0.27Topic 0.28, note 0.22Topic 0.16, note 0.25Topic 0.19, note 0.23Topic 0.13, note 0.20Topic 0.19, note 0.31Topic 0.11, note 0.29Topic 0.03, note 0.35Topic 0.02, note 0.26Topic 0.07, note 0.16Topic 0.10, note 0.24Topic 0.03, note 0.26Topic 0.07, note 0.25Topic 0.05, note 0.30Topic 0.29, note 0.30Topic 0.14, note 0.18Topic 0.11, note 0.18Topic -0.00, note 0.20Topic 0.09, note 0.27Topic 0.14, note 0.23Topic 0.09, note 0.34Topic 0.04, note 0.31Topic 0.24, note 0.22Topic 0.09, note 0.19Topic 0.14, note 0.31Topic 0.23, note 0.29Topic 0.14, note 0.31Topic 0.06, note 0.27Topic 0.14, note 0.18Topic 0.20, note 0.21Topic 0.10, note 0.24Topic 0.14, note 0.23Topic 0.18, note 0.22Topic 0.20, note 0.23Topic 0.19, note 0.23Topic 0.20, note 0.28Topic 0.20, note 0.29Topic 0.18, note 0.28Topic 0.15, note 0.26Topic 0.06, note 0.26Topic 0.10, note 0.27Topic 0.24, note 0.19Topic 0.23, note 0.20Topic 0.09, note 0.23Topic 0.15, note 0.16Topic 0.04, note 0.29Topic 0.21, note 0.23Topic 0.11, note 0.27Topic 0.24, note 0.22Topic 0.30, note 0.31Topic 0.07, note 0.24Topic 0.10, note 0.25Topic 0.11, note 0.18Topic 0.03, note 0.31Topic 0.14, note 0.23Topic 0.12, note 0.21Topic 0.08, note 0.17Topic 0.13, note 0.20Topic 0.09, note 0.23Topic 0.13, note 0.27Topic 0.23, note 0.28Topic 0.15, note 0.20Topic 0.16, note 0.26Topic 0.06, note 0.18Topic 0.22, note 0.25Topic 0.04, note 0.23Topic 0.12, note 0.22Topic 0.16, note 0.22Topic 0.12, note 0.20Topic 0.20, note 0.29Topic 0.05, note 0.25Topic 0.27, note 0.28Topic 0.31, note 0.43Topic 0.06, note 0.36Topic 0.14, note 0.27Topic 0.12, note 0.22Topic 0.25, note 0.28Topic 0.18, note 0.27Topic 0.15, note 0.22Topic 0.16, note 0.24Topic 0.14, note 0.29Topic 0.17, note 0.22Topic 0.19, note 0.28Topic 0.16, note 0.23Topic 0.14, note 0.22Topic 0.05, note 0.26Topic 0.10, note 0.26Topic 0.11, note 0.24Topic 0.13, note 0.37Topic 0.21, note 0.26Topic 0.14, note 0.17Topic 0.20, note 0.43Topic 0.21, note 0.30Topic 0.27, note 0.25Topic 0.12, note 0.31Topic 0.24, note 0.21Topic 0.15, note 0.29Topic 0.13, note 0.43Topic 0.12, note 0.27Topic 0.25, note 0.27Topic 0.06, note 0.34Topic 0.17, note 0.28Topic 0.09, note 0.23Topic 0.17, note 0.20Topic 0.26, note 0.23Topic 0.20, note 0.26Topic 0.09, note 0.21Topic 0.29, note 0.24Topic 0.21, note 0.23Topic 0.06, note 0.23Topic 0.17, note 0.26Topic 0.15, note 0.22Topic 0.09, note 0.22Topic 0.19, note 0.19Topic 0.10, note 0.24Topic 0.26, note 0.36Topic 0.04, note 0.26Topic 0.05, note 0.23Topic 0.21, note 0.24Topic 0.06, note 0.36Topic 0.26, note 0.34Topic 0.13, note 0.30Topic 0.06, note 0.23Topic 0.15, note 0.26Topic 0.19, note 0.17Topic 0.08, note 0.25Topic 0.03, note 0.36Topic -0.01, note 0.30Topic 0.13, note 0.19Topic 0.15, note 0.21Topic 0.18, note 0.21Topic 0.12, note 0.21Topic 0.09, note 0.27Topic 0.09, note 0.26Topic 0.11, note 0.23Topic 0.11, note 0.32Topic 0.11, note 0.29Topic 0.07, note 0.28Topic 0.18, note 0.22Topic 0.09, note 0.39Topic 0.08, note 0.26Topic 0.17, note 0.28Topic 0.10, note 0.26Topic 0.01, note 0.29Topic 0.01, note 0.27Topic 0.09, note 0.24Topic 0.11, note 0.23Topic 0.18, note 0.31Topic 0.13, note 0.35sent: topic 0.320, note 0.204sentalready read: topic 0.343, note 0.313already readalready read: topic 0.361, note 0.576already readsent: topic 0.363, note 0.335sentsent: topic 0.110, note 0.540sentdropped as repeat: topic 0.459, note 0.180dropped as repeatBest match against a profile topic →Best match against a note or idea →
Every story's best match. A story is a match if it clears either bar. Scores were recomputed on 23 October, and one story that was sent on day one now sits just under the topic bar (0.320 then, 0.3197 now), because the notes everything is compared against have changed since. Scores drift as the reference material grows.
The six stories as a table
OutcomeBest topicBest note
Dropped as a repeat0.4590.180
Already read0.3620.576
Sent0.3630.335
Already read0.3430.313
Sent0.3200.204
Sent0.1100.540

The repeat check

When something big happens, several sites cover it and each version can reach the front page. So before a match is sent, one more check runs: does this headline look like one already sent in the last three days? If its similarity to an earlier match is over a bar, it's dropped as the same news.

The bar was set on the first day from the 89 stories seen so far. A note in our code recorded that same-news headlines scored at least 0.36 against each other and different stories at most 0.24, so a bar at 0.33 looked safe.

On the second morning the strongest match we'd had, a disclosure about a compromised certificate authority, was dropped as a repeat of an earlier match about a compromised software package. The two have nothing in common except their first word. Their headlines scored 0.37 against each other, just over the bar.

What the scores actually look like

To see how often this happens, we compared every story's headline with every other one: 50,086 pairs. Then we labelled the pairs that really were the same news, by grouping the stories into news events by hand. Thirteen events had more than one story, from a court ruling reported by five outlets to a software vulnerability covered from ten angles over two days.

  • Different stories (share of pairs)
  • Same news (one dot per pair)
Day one: the first 89 stories3,897 different pairs, 19 same-news pairsAt 0.33: 54 different over the bar, 10 same caught. At 0.60: 0 over, 2 caught.0%5%10%15%Different stories, similarity -0.10 to -0.07: 0.1% of pairsDifferent stories, similarity -0.07 to -0.05: 0.0% of pairsDifferent stories, similarity -0.05 to -0.02: 0.3% of pairsDifferent stories, similarity -0.02 to 0.00: 0.8% of pairsDifferent stories, similarity 0.00 to 0.03: 2.1% of pairsDifferent stories, similarity 0.03 to 0.05: 4.1% of pairsDifferent stories, similarity 0.05 to 0.08: 7.1% of pairsDifferent stories, similarity 0.08 to 0.10: 9.9% of pairsDifferent stories, similarity 0.10 to 0.13: 11.4% of pairsDifferent stories, similarity 0.13 to 0.15: 14.1% of pairsDifferent stories, similarity 0.15 to 0.18: 12.8% of pairsDifferent stories, similarity 0.18 to 0.20: 11.0% of pairsDifferent stories, similarity 0.20 to 0.23: 9.8% of pairsDifferent stories, similarity 0.23 to 0.25: 6.9% of pairsDifferent stories, similarity 0.25 to 0.28: 4.1% of pairsDifferent stories, similarity 0.28 to 0.30: 2.4% of pairsDifferent stories, similarity 0.30 to 0.33: 1.5% of pairsDifferent stories, similarity 0.33 to 0.35: 0.9% of pairsDifferent stories, similarity 0.35 to 0.38: 0.3% of pairsDifferent stories, similarity 0.38 to 0.40: 0.2% of pairsDifferent stories, similarity 0.40 to 0.43: 0.1% of pairsDifferent stories, similarity 0.43 to 0.45: 0.1% of pairsDifferent stories, similarity 0.45 to 0.47: 0.0% of pairsSame news, similarity 0.48Same news, similarity 0.28Same news, similarity 0.28Same news, similarity 0.39Same news, similarity 0.31Same news, similarity 0.18Same news, similarity 0.20Same news, similarity 0.42Same news, similarity 0.37Same news, similarity 0.33Same news, similarity 0.39Same news, similarity 0.65Same news, similarity 0.26Same news, similarity 0.36Same news, similarity 0.37Same news, similarity 0.27Same news, similarity 0.29Same news, similarity 0.46Same news, similarity 0.63old bar 0.33new bar 0.60Two and a bit days: all 317 stories49,981 different pairs, 105 same-news pairsAt 0.33: 1,025 different over the bar, 67 same caught. At 0.60: 3 over, 22 caught.0%5%10%15%Different stories, similarity -0.15 to -0.13: 0.0% of pairsDifferent stories, similarity -0.13 to -0.10: 0.0% of pairsDifferent stories, similarity -0.10 to -0.07: 0.0% of pairsDifferent stories, similarity -0.07 to -0.05: 0.1% of pairsDifferent stories, similarity -0.05 to -0.02: 0.3% of pairsDifferent stories, similarity -0.02 to 0.00: 0.7% of pairsDifferent stories, similarity 0.00 to 0.03: 1.7% of pairsDifferent stories, similarity 0.03 to 0.05: 3.4% of pairsDifferent stories, similarity 0.05 to 0.08: 5.7% of pairsDifferent stories, similarity 0.08 to 0.10: 8.9% of pairsDifferent stories, similarity 0.10 to 0.13: 11.2% of pairsDifferent stories, similarity 0.13 to 0.15: 13.3% of pairsDifferent stories, similarity 0.15 to 0.18: 13.4% of pairsDifferent stories, similarity 0.18 to 0.20: 12.4% of pairsDifferent stories, similarity 0.20 to 0.23: 9.7% of pairsDifferent stories, similarity 0.23 to 0.25: 7.0% of pairsDifferent stories, similarity 0.25 to 0.28: 4.9% of pairsDifferent stories, similarity 0.28 to 0.30: 3.1% of pairsDifferent stories, similarity 0.30 to 0.33: 1.8% of pairsDifferent stories, similarity 0.33 to 0.35: 1.0% of pairsDifferent stories, similarity 0.35 to 0.38: 0.6% of pairsDifferent stories, similarity 0.38 to 0.40: 0.3% of pairsDifferent stories, similarity 0.40 to 0.43: 0.2% of pairsDifferent stories, similarity 0.43 to 0.45: 0.1% of pairsDifferent stories, similarity 0.45 to 0.47: 0.1% of pairsDifferent stories, similarity 0.47 to 0.50: 0.0% of pairsDifferent stories, similarity 0.50 to 0.53: 0.0% of pairsDifferent stories, similarity 0.53 to 0.55: 0.0% of pairsDifferent stories, similarity 0.55 to 0.58: 0.0% of pairsDifferent stories, similarity 0.58 to 0.60: 0.0% of pairsDifferent stories, similarity 0.60 to 0.63: 0.0% of pairsDifferent stories, similarity 0.63 to 0.65: 0.0% of pairsDifferent stories, similarity 0.72 to 0.75: 0.0% of pairsSame news, similarity 0.48Same news, similarity 0.28Same news, similarity 0.28Same news, similarity 0.39Same news, similarity 0.31Same news, similarity 0.31Same news, similarity 0.36Same news, similarity 0.31Same news, similarity 0.33Same news, similarity 0.18Same news, similarity 0.20Same news, similarity 0.42Same news, similarity 0.37Same news, similarity 0.24Same news, similarity 0.37Same news, similarity 0.33Same news, similarity 0.26Same news, similarity 0.33Same news, similarity 0.39Same news, similarity 0.38Same news, similarity 0.29Same news, similarity 0.26Same news, similarity 0.35Same news, similarity 0.37Same news, similarity 0.34Same news, similarity 0.65Same news, similarity 0.27Same news, similarity 0.38Same news, similarity 0.33Same news, similarity 0.31Same news, similarity 0.36Same news, similarity 0.34Same news, similarity 0.26Same news, similarity 0.36Same news, similarity 0.37Same news, similarity 0.42Same news, similarity 0.30Same news, similarity 0.39Same news, similarity 0.34Same news, similarity 0.27Same news, similarity 0.29Same news, similarity 0.22Same news, similarity 0.26Same news, similarity 0.30Same news, similarity 0.24Same news, similarity 0.46Same news, similarity 0.18Same news, similarity 0.36Same news, similarity 0.28Same news, similarity 0.33Same news, similarity 0.28Same news, similarity 0.41Same news, similarity 0.38Same news, similarity 0.39Same news, similarity 0.34Same news, similarity 0.46Same news, similarity 0.33Same news, similarity 0.47Same news, similarity 0.44Same news, similarity 0.39Same news, similarity 0.63Same news, similarity 0.75Same news, similarity 0.63Same news, similarity 0.63Same news, similarity 0.70Same news, similarity 0.66Same news, similarity 0.66Same news, similarity 0.68Same news, similarity 0.74Same news, similarity 0.78Same news, similarity 0.78Same news, similarity 0.76Same news, similarity 1.00Same news, similarity 0.78Same news, similarity 0.78Same news, similarity 1.00Same news, similarity 0.54Same news, similarity 0.23Same news, similarity 0.34Same news, similarity 0.46Same news, similarity 0.44Same news, similarity 0.24Same news, similarity 0.52Same news, similarity 0.43Same news, similarity 0.44Same news, similarity 0.40Same news, similarity 0.39Same news, similarity 0.28Same news, similarity 0.12Same news, similarity 0.41Same news, similarity 0.37Same news, similarity 0.31Same news, similarity 0.47Same news, similarity 0.90Same news, similarity 0.23Same news, similarity 0.23Same news, similarity 0.23Same news, similarity 0.23Same news, similarity 0.71Same news, similarity 0.76Same news, similarity 0.50Same news, similarity 0.44Same news, similarity 0.93Same news, similarity 0.77Same news, similarity 0.56old bar 0.33new bar 0.600.000.200.400.600.801.00Title similarity between two stories →
Headline similarity, same news against different stories. The grey bars are the 49,981 pairs of different stories, as a share of all of them; each dot below is one pair about the same news. A repeat check can only work if the dots sit to the right of the grey. They don't.
The numbers as a table
Day one (89)All 317
Pairs of different stories3,89749,981
Pairs about the same news19105
Highest-scoring different pair0.470.74
Same-news pairs, median score0.360.37
At 0.33: different pairs over the bar54 (1.4%)1,025 (2.1%)
At 0.33: same-news pairs caught10 of 1967 of 105
At 0.60: different pairs over the bar03
At 0.60: same-news pairs caught2 of 1922 of 105

Two things stand out.

First, we couldn't reproduce our own calibration. Re-scoring the same 89 stories, different stories reach 0.47, not 0.24. The “same news” range still matches, so the note was probably drawn from a few obvious examples rather than from every pair. Nothing was kept that would let us check, which is part of the lesson.

Second, and more important, there is no gap to put a bar in. Half of the same-news pairs score below 0.37, right in among ordinary unrelated stories. Two sites covering the same event rarely use the same words, and two unrelated headlines often share one.

Why headlines fool similarity

A headline is a few words plus the site it links to, and at that length one word or one domain can carry the whole score.

Different news, looks alike 0.74

OpenAI CLI · github.com

Nvidia OpenShell · github.com

Different news, looks alike 0.37

Compromised LiteLLM 1.107.0 on PyPI Installs a Credential Stealer and Backdoor

CVE-2026-111943: Compromised Intermediate Certificate Authority

Same news, looks different 0.18

Today's PHP security release, and how we're strengthening security

PHP2Shell: AI uncovers critical RCE in PHP

Same news, looks alike 0.78

Meta fined $25B for 'lies' over user data privacy

Meta Ordered to Pay $25B for Deceiving Users on Privacy

Four pairs of real headlines and their similarity. Only the last is the case the repeat check was written for. The first two are why it fired when it shouldn't; the third is why it can't catch most real repeats.

The articles behind the headlines would tell these apart easily. But fetching and embedding every linked page, every time it checks, is a lot of work just to decide whether two stories are the same news.

What we changed, and why

We moved the bar from 0.33 to 0.60. That sounds like tuning; it's really a decision about which mistake to make.

  • At 0.33, about 2% of unrelated pairs clear the bar. Each new match is checked against every match from the last three days, so with five earlier matches in the window, roughly one good story in ten would be thrown away, and stories that match the same interests are more alike than random ones, so in practice it's worse. In return, the check catches about two-thirds of real repeats.
  • At 0.60, 3 unrelated pairs in 50,000 clear the bar, so a good story is almost never dropped. But the check now catches only near-identical headlines, about one real repeat in five.

The costs aren't symmetrical. A missed repeat costs one extra message, which we can see and rate. A dropped story costs the very thing the system exists to provide, and leaves no trace. With a few messages a day, we'll take the occasional duplicate.

We also considered only counting a story as a repeat if it matched the same profile topic as the earlier one. On this data it wouldn't have helped: the two “Compromised” stories matched the same topic.

What we're taking from it

  • Measure the whole distribution, not the examples. A handful of obvious duplicates and obvious non-duplicates will always suggest a clean gap. The overlap only shows up when every pair is scored.
  • Keep the data behind a threshold. We couldn't check a number we'd set two days earlier, because nothing behind it was kept. Every threshold now gets its data saved alongside it.
  • Silent failures need a log line. We found this one only because the system recorded why it dropped a story. The next step is to record the near misses as well, so the question “what are we not seeing?” becomes a query rather than an investigation.
  • For serendipity, prefer the visible mistake. When a filter has to choose, make it fail towards something the person can see and rate.

About the data

317 front-page stories seen between 21 and 23 October 2026, every pair of them scored with the same embedding model the live system uses, and centred the same way. Stories were grouped into news events by hand from their headlines: the same event, incident or announcement, including direct follow-ups within the three-day window the repeat check covers. Every pair outside a group counts as different. Scores were recomputed on 23 October, so they differ slightly from what the live system saw at the time. The scores and labels behind every chart are kept with this site's source, without headlines.