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
|
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.
|
tags (sport, uganda, south-africa, …) instead of keyword-guessing. Unblocks #6.
|
||||||
4. 🔴 **[backend] Topic-classifier coverage for the 47 feeds.** science/world/tech mapping.
|
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
|
## Backend — features
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user