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 | ||
| test_cancel_sync_idempotent.py | ||
| test_discovery_beatport.py | ||
| test_discovery_deezer.py | ||
| test_discovery_endpoints.py | ||
| test_discovery_listenbrainz.py | ||
| test_discovery_playlist.py | ||
| test_discovery_spotify_public.py | ||
| test_discovery_sync.py | ||
| test_discovery_tidal.py | ||
| test_discovery_youtube.py | ||
| test_manual_match.py | ||
| test_quality_scanner_typed_album.py | ||
| test_similar_artists_library_filter.py | ||
| test_sync_database_only_matcher.py | ||