fn enumerate_candidates(
watch_paths: &[WatchPathEntry],
fallback_catchup_mode: StartupCatchupMode,
last_sync: f64,
shared_state: &Arc<Mutex<AppState>>,
global_xmp_enabled: bool,
) -> (Vec<ScanCandidate>, HashSet<String>, usize, usize)Expand description
Stage 1: Walk all watch paths in parallel using rayon.
Returns (candidates, seen_paths, skipped_count, error_count).