-- 0047_taste_profile_moods.up.sql — mood taste facet. A fourth taste facet -- alongside artists + tags + eras: signed weights over canonical mood buckets -- (melancholic / energetic / chill / …) derived from a track's enriched -- folksonomy tags via the internal/mood vocabulary, rebuilt daily. Weight is a -- signed float — positive = drawn to that mood, negative = passively avoided. -- Coverage is partial (grows with tag enrichment), so it's a supplement, not a -- foundation. Mirrors taste_profile_tags: CASCADE on user delete, indexed by -- (user_id, weight DESC). CREATE TABLE taste_profile_moods ( user_id uuid NOT NULL REFERENCES users(id) ON DELETE CASCADE, mood text NOT NULL, weight double precision NOT NULL, updated_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (user_id, mood) ); CREATE INDEX taste_profile_moods_user_weight_idx ON taste_profile_moods (user_id, weight DESC); -- Mood-facet build knob, tunable in the lab (mirrors era_scale / enriched_tag_ -- scale): scales how strongly a mood-tagged play imprints on the profile. -- DEFAULT 0.5 backfills the existing singleton and matches -- taste.DefaultConfig().MoodScale; 0 disables the mood facet entirely. ALTER TABLE taste_tuning ADD COLUMN mood_scale double precision NOT NULL DEFAULT 0.5;