65bb4e6dfd
Manual playlists only — schema (migration 0014), backend service + collage generator, /api/playlists* endpoints, /playlists list + detail pages, AddToPlaylistMenu wired into TrackMenu's reserved slot. 10 locked decisions captured: private-by-default, manual-only, api-only (no Subsonic), 2×2 collage always (glyph fills missing cells), soft-mark cascade with denormalized snapshot, full-list reorder, inline collage gen, composite PK on (playlist_id, position), denormalized track_count + duration_sec rollups. Slices 2 (system-generated daily mixes) and 3 (home-page playlists row) are sibling cycles; per v1=full-product all three ship before tag.