docs: log freshness-decay bug — old stories never leave the top of the feed
Live-verified against the backend API: 13/20 top stories are 5+ days old by firstSeenAt but still score 90+. Freshness decays from lastUpdatedAt (cluster last touched) instead of the actual news event age, and it compounds with the known over-clustering bug (#2) — tangential articles keep attaching to old clusters, resetting their clock indefinitely. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -28,6 +28,22 @@ Status: 🔴 open · 🟡 mitigated client-side (real fix still pending) · 🟢
|
||||
3. 🔴 **[backend] Add accurate per-story tags (topic + region).** So the client can read
|
||||
tags (sport, uganda, south-africa, …) instead of keyword-guessing. Unblocks #6.
|
||||
4. 🔴 **[backend] Topic-classifier coverage for the 47 feeds.** science/world/tech mapping.
|
||||
15. 🔴 **[backend] Freshness score decays from `lastUpdatedAt` (cluster last touched), not
|
||||
from the actual news event age — old stories never leave the top of the feed.**
|
||||
Confirmed live on `/api/v1/stories`: 13 of the top 20 stories are 5+ days old by
|
||||
`firstSeenAt` but still score 90+; the #1 story (`story_511c67eb064d`) has
|
||||
`firstSeenAt: 2026-06-17`, `lastUpdatedAt: 2026-07-09` (21 days later), `freshnessScore:
|
||||
1.0`, signal 100. Compounds with #2 (over-clustering): a loose cluster keeps absorbing
|
||||
tangential articles indefinitely (this story's timeline includes "Security forces ready
|
||||
for June 30 marches: Ramaphosa" — unrelated to the football story it's attached to),
|
||||
each attachment resets `lastUpdatedAt` to now, so the cluster's clock never runs out and
|
||||
its canonical headline drifts to whatever was clustered last (list view showed "South
|
||||
Africa stun South Korea…"; story detail showed "Updated FIFA rankings after Bafana
|
||||
Bafana exit" for the *same* `story_id`). **Fix: decay freshness from `firstSeenAt` (or
|
||||
the newest article whose relevance to the cluster core is verified), not from
|
||||
"last touched."** Tightening the TF-IDF threshold in #2 should also reduce how often
|
||||
unrelated articles keep a stale cluster's clock alive. *No client fix possible — the
|
||||
story object's freshness field itself is wrong before it reaches the app.*
|
||||
|
||||
## Backend — features
|
||||
|
||||
|
||||
Reference in New Issue
Block a user