a07f6aa1a8
Phase 4: automation. ColumbiaCatalogSyncBackgroundService wakes hourly and runs a full sync only when ColumbiaSyncEnabled is on and ColumbiaSyncIntervalDays has elapsed since the last successful run (tracked via the ColumbiaLastSyncedAt setting). No-ops quietly when disabled or unconfigured. The hourly due-check is negligible; the actual sync runs at most once per interval. Sync failures are recorded on the result/settings, never thrown, so a bad run can't kill the loop. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>