feat(feed): name the ids merge absorbed, and carry marks off them

When merge fuses two sources' copies, the loser's id leaves the calendar, and it may already hold a reader's ticks from a day it was published alone. Until now that needed a hand-edited RETIRED_IDS entry per fusion.

The survivor now lists what it absorbed in an optional mergedIds field. When a feed arrives the client turns those into carry-forward pairs, skipping any id the feed still publishes, and an import takes the same table. Optional, so an older cached feed still validates and an older bundle drops it unread. RETIRED_IDS stays for parser changes, whose old ids no feed will name again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas WintherandClaude Opus 5.5 committed 2026-10-14 17:48:15 +02:00
1 parent 59403ca2cc
commit 2924605bd4
13 files changed
+296 -90

No files matched your search

+4
View File
@@ -486,6 +486,10 @@ Only meaningful when a game has more than one source; a single-source game passe
across sources — an identical id is the same row seen twice, whatever it is called.
2. **Near match** — **different sources**, same game, title similarity ≥ 0.80, starts within 24h —
→ same event under different titles; keep the higher-confidence copy.
**The survivor lists what it absorbed** in `mergedIds`, and the client moves readers' marks off
those ids when the feed arrives — so a rule that starts fusing two published ids costs nobody a
tick, with no table to edit (`docs/DATA-MODEL.md` § ID stability).
3. **Otherwise** → distinct events; keep both.
Title similarity alone would merge a rerun with its original, since reruns reuse the name. The