fix(playlists): Songs-like mixes no longer vanish after a quiet week
PickSeedArtists had a hard 7-day window with no fallback: a week without listening emptied the seed pool, produceSeedMixes returned zero playlists, and the daily atomic-replace build deleted every existing "Songs like X" mix until the user played something again (#1255). The query now falls back through widening engagement windows — 7d → 30d → all-time → liked artists — the same tiered shape that fixed the identical vanish for For You's seeds (PickTopPlayedTracksForUser). Like-boost scoring is preserved in every tier. All returned rows share the winning tier, and produceSeedMixes maps it onto the rule-#131 pick-kind ladder (7d = tier1 exact, 30d = tier2, all-time/liked = tier3) and stamps the built tracks — the #1270 provenance pipeline then attributes plays and skips to seed freshness, so the metrics card can say whether stale-seeded mixes actually perform worse. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TsF3cNoKrqCYsU78cXC8U6
This commit is contained in:
@@ -46,6 +46,26 @@ func TestPickSeedArtistsFromRows_Empty(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPickKindForSeedTier(t *testing.T) {
|
||||
// The seed query's fallback tiers map onto the rule-#131 ladder:
|
||||
// fresh 7-day engagement is the exact desire, everything past the
|
||||
// 30-day step-back collapses into the far tier (#1255).
|
||||
cases := []struct {
|
||||
tier int32
|
||||
want string
|
||||
}{
|
||||
{0, pickKindTier1},
|
||||
{1, pickKindTier2},
|
||||
{2, pickKindTier3},
|
||||
{3, pickKindTier3},
|
||||
}
|
||||
for _, c := range cases {
|
||||
if got := pickKindForSeedTier(c.tier); got != c.want {
|
||||
t.Errorf("pickKindForSeedTier(%d) = %q, want %q", c.tier, got, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// userIDHash is the per-user, per-day hash that drives the daily-
|
||||
// determinism RNGs. Same family as tieBreakHash, just keyed on user
|
||||
// ID instead of track ID.
|
||||
|
||||
Reference in New Issue
Block a user