Skip to content

feat(cloud,mobile): sync taste across devices and upgrade personalization - #94

Merged
OttoApocalypse69 merged 4 commits into
mainfrom
TeRiRi/taste-sync-personalization
Aug 25, 2026
Merged

feat(cloud,mobile): sync taste across devices and upgrade personalization#94
OttoApocalypse69 merged 4 commits into
mainfrom
TeRiRi/taste-sync-personalization

Conversation

@OttoApocalypse69

Copy link
Copy Markdown
Member

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_state table (migration 0016): adaptive priorities, recommendation preferences, and listening events sync per profile — last-writer-wins per kind, events merge by id
  • Listeners like you: privacy-safe shelf from taste-neighbor favorites (only track identities + listener counts ever leave the server); community counts give a bounded boost to search ordering, radio, and home ranking
  • Smart Mix mood flow: queues re-sequenced so consecutive tracks stay in related moods after the diversity-aware build
  • Adaptive skip learning reaches Android parity (early skip <30s or half-track counts double; completions count double); discovery wins lift unfamiliar artists you come to like
  • Time-aware mixes, On Repeat, Fresh Finds home shelves; Dislike button hard-rejects tracks from recommendations and syncs
  • Hybrid search adds youtube.com web videos; playback falls back across providers when Music streams are unavailable; wedged InnerTube sessions reset after client failures
  • SPICE_MEDIA_CORE_VERSION1.0.169 with walkthrough notes

Android

  • Home feed gains the Listeners-like-you shelf; adopts newer cloud adaptive priorities during sync and pushes local learning (debounced) after feedback
  • Search results subtly re-ranked by shared affinity signals with debounced search jobs

Test plan

  • New suites: taste-sync, taste-affinity, listeners-like-you, listening-context, mood-flow, playback-fallback, migration-journal
  • Updated recommendation/adaptive-priority tests; Android JVM tests + lint + APK build green

Depends on TeRiRi/account-moderation (stacked).

Verification

  • npm test (root desktop): 104 passed / 0 failed
  • Backend: backend:typecheck ✅ · backend:lint ✅ · backend:test 408 passed / 0 failed (6 skipped = live-DB integration tests)
  • Android: npm run mobile:android:check BUILD SUCCESSFUL
  • Note: local npm ci blocked install scripts, so ffmpeg-static's binary had to be fetched manually before backend audio-transcode tests could run — environment issue, not code.

…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
Base automatically changed from TeRiRi/account-moderation to main August 25, 2026 21:49
…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.
@OttoApocalypse69
OttoApocalypse69 merged commit 3746f3a into main Aug 25, 2026
12 checks passed
@OttoApocalypse69
OttoApocalypse69 deleted the TeRiRi/taste-sync-personalization branch August 25, 2026 22:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant