An infinite list can show the same podcast twice when requests overlap, a retry returns the same page, or catalog data changes while someone is browsing. The listener sees two cards and wonders whether they are different shows.

A title is a poor duplicate key. Different shows can share a name, and one show can change its title. Feed addresses can also change. Use the stable catalog identifier documented by your provider.

Merge without shuffling

Maintain an ordered list plus a map keyed by ID. When a new page arrives, append unseen IDs in the order received. If a known ID appears again, update its stored metadata without moving its existing card unless your product explicitly supports a refreshed order.

Do not deduplicate episodes only by audio URL. A publisher may change an enclosure address. At the same time, a provider may represent records differently, so keep the API's identity rules separate from guesses about RSS content.

Prevent a second “load more” request while the current one is pending. Keep a retry attached to the failed cursor, rather than silently jumping ahead to another page.

Check what the listener notices

Create a fixture where the final item on page one is also the first item on page two. Change that item's artwork in the second response. The screen should contain one card with a consistent position and a reasonable metadata update.

Also test two genuinely different shows with identical titles. Both should remain. Correct deduplication is about identity, not making the list look tidy at the cost of deleting real options.

If a duplicate pattern persists, log non-secret request context and record IDs so you can investigate it.