Find & Add was being forgotten on the next auto-sync. It persists two ways — a fast sync_match_cache override AND a durable manual_library_match (#787) that survives a rescan — but BOTH sync matchers (services.sync_service._find_track_in_media_server and the DB-only fallback) only consulted the volatile cache. A library rescan wipes that cache, so the next 'replace' auto-sync re-matched the track from scratch and the user had to Find & Add it again. Both matchers now fall back to the durable manual match when the cache misses (self-healing a stale library id via the stored file path), exactly like the compare view already does via resolve_durable_match_server_id. So a Find & Add pairing sticks across rescans + auto-syncs. Seam tests: cache-wiped→durable hit, stale-id self-heal, no-match→fuzzy fall-through. |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| beatport.py | ||
| deezer.py | ||
| endpoints.py | ||
| hero.py | ||
| listenbrainz.py | ||
| manual_match.py | ||
| matching.py | ||
| playlist.py | ||
| qobuz.py | ||
| quality_scanner.py | ||
| scoring.py | ||
| spotify_public.py | ||
| sync.py | ||
| tidal.py | ||
| youtube.py | ||