feat(cloud,mobile): sync taste across devices and upgrade personalization - #94
Merged
Merged
Conversation
…tion Backend: - Add taste_state table (migration 0016 + journal entry) syncing adaptive priorities, recommendation preferences, and listening events per profile with last-writer-wins semantics - New collaborative layer: privacy-safe 'Listeners like you' shelf built from taste-neighbor favorites; community counts give a bounded boost across search ordering, radio, and home ranking - Smart Mix sequences queues for mood flow after diversity-aware build - Adaptive skip learning matches Android parity (early skip < 30s or half, double weight), discovery wins boost unfamiliar artists you come to like - Time-aware mixes, On Repeat, Fresh Finds home shelves; dislike button hard-rejects tracks from recommendations - Hybrid search adds youtube.com web videos and playback falls back across providers when a track has no Music streams; wedged InnerTube sessions reset after client failures - Bump SPICE_MEDIA_CORE_VERSION to 1.0.169 with walkthrough notes Android: - Home feed gains the Listeners like you shelf and adopts cloud adaptive priorities; pushes local learning after feedback (debounced) - Search results subtly re-ranked by shared affinity signals with debounced search jobs
…on builds - Replace a stray Windows-1252 byte in smart-queue.ts with a proper UTF-8 em dash; Linux Turbopack failed reading sources otherwise - Register tasteState in db/local-schema-stub.ts so the local runtime build resolves the new table export like the cloud schema does
The /api/listeners route family is cloud-only but was unknown to both prune lists in the local packager, so the route survived pruning while still referencing DB-bearing server chunks and failed the safety check. Register it alongside the other cloud-only prefixes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The personalization upgrade: cloud taste sync plus the collaborative and contextual recommendation layers, shipped together across backend + Android per the repo's cross-platform policy.
Backend
taste_statetable (migration0016): adaptive priorities, recommendation preferences, and listening events sync per profile — last-writer-wins per kind, events merge by idSPICE_MEDIA_CORE_VERSION→1.0.169with walkthrough notesAndroid
Test plan
Verification
npm test(root desktop): 104 passed / 0 failedbackend:typecheck✅ ·backend:lint✅ ·backend:test408 passed / 0 failed (6 skipped = live-DB integration tests)npm run mobile:android:checkBUILD SUCCESSFULnpm ciblocked install scripts, soffmpeg-static's binary had to be fetched manually before backend audio-transcode tests could run — environment issue, not code.