* fix(perf): skip Performance Probe CPU snapshot poll on Windows
Windows has no Rust CPU/RSS sampler, but the probe still invoked
performance_cpu_snapshot every 2s when the modal or overlay pins were
active. Skip the IPC on unsupported platforms and only poll JS-side
metrics; do not start overlay polling for CPU/memory pins alone.
* fix(analysis): park backfill coordinator until Advanced is configured
#881 started run_coordinator_forever at app init with a 2s sleep even when
disabled, waking tokio on every platform for no work. Park on Notify instead;
wake on configure (enable/disable) and library sync-idle. Long sleeps use
select with wake so sync-idle can interrupt COMPLETED_RECHECK waits.
Investigation branch — not for merge until periodic CPU root cause is confirmed.
* fix(perf): stop probe overlay flicker on live poll updates
Publish CPU samples only after a valid jiffies baseline, skip no-op
snapshot emits, and sync sparkline history atomically in the store.
Overlay uses wall-clock sparkline time and auto-scales low CPU values.
* fix(perf): cut idle Rust CPU from probe scan, cover prefetch, and storage poll
Move performance_cpu_snapshot /proc work to spawn_blocking so tokio
workers are not charged with probe sampling. Stop lazy cover strategy
from running route prefetch disk stats every 1.5s, and slow hot-cache
size refresh on Settings → Storage to 15s.
* fix(perf): stabilize probe sparkline clock between live poll ticks
Track sampleAt separately from updatedAt so CPU rate history and overlay
sparklines only advance on real % changes, not FPS re-renders or RSS-only
poll ticks. Hold CPU sparkline Y scale with a peak ref to avoid scale jumps.
* fix(cover): restore lazy route prefetch without idle disk stats poll
Re-enable lazy cover registry warm-up so cached WebP paths reach
diskSrcCache before cells mount. Skip cover_cache_stats on every 1.5s
tick — drain batches via ensure only, poll full disk usage every 30s
when the registry is idle.
* docs: CHANGELOG and credits for PR #939 idle CPU perf fix
* fix(cover): peek before route prefetch ensure to match main responsiveness
Route prefetch moved batch drain ahead of cover_cache_stats for idle CPU,
which removed the accidental throttle and flooded ensure invoke slots.
Use warmCoverDiskSrcBatch first (cached hits skip ensure), ensure misses
only, and yield while high-priority viewport work is queued.
* fix(analysis): persist backfill scan phase and cursor across coordinator ticks
Keep HashBpmGaps progress when the candidate SQL page is empty only because
id > cursor; store scan phase in the native worker so each tick does not
restart from Candidates and rescan the first ~10k ready tracks.
* docs: CHANGELOG and credits for PR #882 backfill scan phase fix
* fix(analysis): move backfill tests below production code for clippy
Clippy items_after_test_module requires all non-test items before mod tests.
* feat(analysis): native library backfill coordinator for advanced strategy
Move advanced analytics scheduling from the webview loop into a Rust
background worker (configure + spawn_blocking batch/enqueue), matching
cover backfill. Scan hash+BPM gap tracks instead of the full library;
suppress low-priority analysis UI events; limit loudness refresh IPC to
the playback window.
* fix(analysis): flat backfill configure IPC and restore probe track-perf
Use flattened Tauri args like cover backfill so release/prod invoke works;
keep emitting analysis:track-perf for library low-priority work so Performance
Probe tpm/last-track stats update while waveform/enrichment UI events stay suppressed.
* chore(analysis): fix clippy and drop duplicate TS backfill policy
Allow too_many_arguments on library_analysis_backfill_configure for CI;
remove unused frontend batch API and TS watermark helpers now owned in Rust;
clarify analysis_emits_ui_events comment for low-priority track-perf.
* docs: CHANGELOG and credits for PR #881 native analysis backfill