fix(playlists): allow the 5 discovery-mix variants in DB constraints
HOTFIX for v2026.05.15.0. R3 added deep_cuts/rediscover/new_for_you/ on_this_day/first_listens producers + registry entries but not their system_variant values to the playlists_kind_variant_consistent / playlists_seed_consistent CHECK constraints (0021's whitelist). insertSystemPlaylist for any new mix → SQLSTATE 23514, and since BuildSystemPlaylists is one all-or-nothing txn that aborts the ENTIRE build — For-You/Discover refresh 500s and the daily lazy build fails too. System playlists are fully broken in prod. Migration 0028 drops + re-adds both constraints with all five new seedless variants (mirrors the 0021 drop-and-readd pattern). CHECK-only — sqlc/dbq unaffected (regen produced no drift). Bumps to 2026.5.15+7 for the v2026.05.15.1 patch release. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
name: minstrel
|
name: minstrel
|
||||||
description: Minstrel mobile client
|
description: Minstrel mobile client
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
version: 2026.5.15+6
|
version: 2026.5.15+7
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.5.0 <4.0.0'
|
sdk: '>=3.5.0 <4.0.0'
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
-- Reverts to the 0021 constraint set (for_you, songs_like_artist,
|
||||||
|
-- discover only). Fails if any playlists row still has one of the
|
||||||
|
-- five new system_variant values — delete/rebuild system playlists
|
||||||
|
-- first if rolling back.
|
||||||
|
|
||||||
|
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_kind_variant_consistent;
|
||||||
|
ALTER TABLE playlists
|
||||||
|
ADD CONSTRAINT playlists_kind_variant_consistent CHECK (
|
||||||
|
(kind = 'user' AND system_variant IS NULL)
|
||||||
|
OR
|
||||||
|
(kind = 'system' AND system_variant IN ('for_you', 'songs_like_artist', 'discover'))
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_seed_consistent;
|
||||||
|
ALTER TABLE playlists
|
||||||
|
ADD CONSTRAINT playlists_seed_consistent CHECK (
|
||||||
|
(system_variant IS NULL AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'for_you' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'discover' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'songs_like_artist' AND seed_artist_id IS NOT NULL)
|
||||||
|
);
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
-- #411 R3 bugfix: the five discovery mixes (deep_cuts, rediscover,
|
||||||
|
-- new_for_you, on_this_day, first_listens) were added as producers +
|
||||||
|
-- registry entries but their system_variant values were never added
|
||||||
|
-- to the two playlists CHECK constraints. Result: insertSystemPlaylist
|
||||||
|
-- for any new mix fails with playlists_kind_variant_consistent
|
||||||
|
-- (SQLSTATE 23514), which — because BuildSystemPlaylists is one
|
||||||
|
-- all-or-nothing transaction — aborts the WHOLE build, so For-You /
|
||||||
|
-- Discover refresh 500s and the lazy daily build fails too.
|
||||||
|
--
|
||||||
|
-- All five are seedless (like for_you/discover): seed_artist_id IS
|
||||||
|
-- NULL. Drop + re-add both constraints with the expanded set, same
|
||||||
|
-- pattern as 0021_discover_variant (Postgres has no ALTER CONSTRAINT
|
||||||
|
-- for CHECK).
|
||||||
|
|
||||||
|
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_kind_variant_consistent;
|
||||||
|
ALTER TABLE playlists
|
||||||
|
ADD CONSTRAINT playlists_kind_variant_consistent CHECK (
|
||||||
|
(kind = 'user' AND system_variant IS NULL)
|
||||||
|
OR
|
||||||
|
(kind = 'system' AND system_variant IN (
|
||||||
|
'for_you', 'songs_like_artist', 'discover',
|
||||||
|
'deep_cuts', 'rediscover', 'new_for_you',
|
||||||
|
'on_this_day', 'first_listens'
|
||||||
|
))
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE playlists DROP CONSTRAINT IF EXISTS playlists_seed_consistent;
|
||||||
|
ALTER TABLE playlists
|
||||||
|
ADD CONSTRAINT playlists_seed_consistent CHECK (
|
||||||
|
(system_variant IS NULL AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'for_you' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'discover' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'deep_cuts' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'rediscover' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'new_for_you' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'on_this_day' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'first_listens' AND seed_artist_id IS NULL)
|
||||||
|
OR
|
||||||
|
(system_variant = 'songs_like_artist' AND seed_artist_id IS NOT NULL)
|
||||||
|
);
|
||||||
Reference in New Issue
Block a user