Delivered: the scheduler now prioritizes items it has never searched before, via an ordered per-instance searched-log replacing the integer cursor.
Key accomplishments:
- Pure prioritize_batch() dispatcher (never-searched-first, top-up oldest-first, mark-on-attempt, reset-per-pass, prune-to-eligible, commit-at-cycle-end) wired into all 6 cycle call sites; slice_batch removed.
- Per-app key_fn (Sonarr composite seriesId:seasonNumber); _merge_defaults strips legacy cursor keys on load (no migration step); count-only refresh stays queue-independent.
- Codex adversarial review (2 design blockers + 2 mediums) + deep review APPROVED (2 findings fixed) + audit passed (11/11 reqs) + live NAS walkthrough (0 bugs). 1090 tests passing, ruff clean.
See .planning/MILESTONES.md for full details.