lib/src/schedule/ for the 1.0 Schedule tab (UI and docs come with the
schedule round):
- AniListClient: airingSchedules in a window, 50 per page, adult/music
dropped; memory 10 min + disk 1 h cache, one Retry-After wait on 429,
stale cache on failure; real User-Agent (AniList 403s some defaults).
- AnimeFlowClient: the full app API (me, schedule, series, follow,
search, requests incl. approve/reject, users/scopes) with the user's
Jellyfin token, only for a Jellyfin on AnimeFlow's parent domain;
ETag/304, typed error codes, backoff on nginx's HTML 429, /me cached
at most 60 s so scope changes show.
- matchSchedule + ScheduleRepository: AniList airings with AnimeFlow
status by (episode anilist_id, episode), then absolute number, then
air day; degrades to AniList-only when AnimeFlow fails.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>