Removing a series from the watchlist on full watch stranded it once new
episodes aired: nothing ever re-added it. Split the behavior by type:
- watchlist.Maintainer now auto-removes only fully-watched movies (still
propagating removals to connected providers).
- Series stay on the watchlist; the new catalog.WatchlistVisibility
filter hides series whose available episodes are all completed on the
display surfaces (sections rail, catalog watchlist source, GET
/watchlist). A newly added episode makes the series reappear on the
next fetch, and nothing is synced upstream since the entry never
leaves the list.
Sync, recommendations, notifications, and the watchlist check endpoint
intentionally keep seeing the full list. The filter honors the existing
per-profile remove-watched preference and uses batch lookups only.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>