soulsync/core/exports
BoulderBadgeDad 42ff13d517 #903: persistent recording-MBID cache + export orchestrator
Phase 3. Additive backbone for the export job:
- mb_recording_cache table (IF NOT EXISTS) + core/exports/recording_mbid_cache.py: persistent
  (artist,title)->recording_mbid cache, mirrors album_mbid_cache (lazy DB, error-degrades to
  miss). The MusicBrainz tail is ~1 req/s, so a resolved MBID is remembered once and reused
  across every export/playlist.
- core/exports/playlist_export.py: resolve_playlist_tracks(tracks, resolve_fn) — walks tracks,
  dedups repeated songs within a run (resolve once), builds the ordered pseudo-playlist, tallies
  live stats (resolved/unmatched/deduped/by_source). Pure (I/O injected via resolve_fn + progress
  callback), so dedup + accounting are unit-tested with no DB/network. 5 tests.

No wiring into runtime yet; nothing existing touched except the additive table.
2026-06-22 20:31:35 -07:00
..
__init__.py Watchlist: export the roster to JSON / CSV / text (corruption's request) 2026-06-11 22:48:58 -07:00
artist_export.py Library export: export the whole library roster too (corruption's request) 2026-06-11 22:59:21 -07:00
jspf_export.py #903: playlist export to ListenBrainz — pure cores (JSPF builder + MBID resolver) 2026-06-22 20:25:44 -07:00
mbid_resolver.py #903: playlist export to ListenBrainz — pure cores (JSPF builder + MBID resolver) 2026-06-22 20:25:44 -07:00
playlist_export.py #903: persistent recording-MBID cache + export orchestrator 2026-06-22 20:31:35 -07:00
recording_mbid_cache.py #903: persistent recording-MBID cache + export orchestrator 2026-06-22 20:31:35 -07:00