-- #759: deactivate_stale_avito schedule seeded enabled=false → task never ran on prod. -- -- Root cause: migration 090 (ON CONFLICT (source) DO NOTHING) was a no-op because -- the row 'deactivate_stale_avito' already existed in scrape_schedules with -- enabled=false when 090 ran on prod (inserted by a pre-release iteration or manual -- seed). The scheduler's WHERE enabled=true filter excluded it on every tick, so -- last_run_id stayed NULL and next_run_at=2026-06-01 expired without any runs. -- -- Fix: idempotent UPDATE that only fires when the row is still disabled. -- Re-running this migration after the row is already enabled → 0 rows matched, safe. -- -- No bind params → no CAST(:x AS type) needed; BEGIN/COMMIT per sql.md conventions. BEGIN; UPDATE scrape_schedules SET enabled = true, next_run_at = NOW() WHERE source = 'deactivate_stale_avito' AND enabled = false; COMMIT;