86cb8e5cbf
Second M4 sub-plan (Fable #346). Periodic worker pulls track-track and artist-artist similarity edges from LB's public /explore/* endpoints, filters to the local library, stores top-20 per source track in two new tables (track_similarity, artist_similarity). Hourly tick, batch=5, weekly re-fetch cap per row, passive retry via timer. No auth (public endpoints). Discovery within library handled by LB's collaborative- filtering response naturally surfacing unplayed library tracks; spec notes M4c will add a serendipity floor + lazy fetch + sparse-fallback. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>