Skip to content

Personal discovery stage 4: Want list, sets that learn, room taste (MAD-824..826) - #70

Merged
madeofpendletonwool merged 2 commits into
mainfrom
mad-814-discovery-stage-4
Oct 14, 2026
Merged

madeofpendletonwool merged 2 commits into
mainfrom
mad-814-discovery-stage-4

Conversation

@madeofpendletonwool

Copy link
Copy Markdown
Owner

The last stage of Phase 12 (MAD-814): the Want list with automatic got-it, sets that learn from thumbs, starred import, and a room's taste as a set's source. ADR 0017 is updated.

MAD-824: Want list with automatic got-it

  • A 👍 on a song, or Want on a Fresh release, adds it to want_items along with the set it came from. Feeds already leave wanted things out.
  • library.Service gets a Built hook. After every index build it calls discover.CheckWants, which matches wanted items with Has (ISRC or MBID first, then names) and HasRelease. Matches become got with got_by = auto.
  • Discover shows "N wanted things landed in your library" until you open the Want list.
  • /discover/want has Wanted, Got and Dismissed tabs, grouped by artist. Wanted items have a preview, YouTube, "Got it" and dismiss. Got items link back into Syncphony: the album for a release, a song search for a track.
  • The set list shows what each set yielded ("2 of 5 wanted got").

MAD-825: Sets that learn

  • Each thumbs-down from a set's feed lowers that artist in the set by 0.6×, applied at the next build.
  • Two 👍 for one artist suggest adding them to the set. With Grow by itself on (off by default), they're added automatically, with added_from = thumb.
  • Three 👎 suggest blocking the artist. Dismissed suggestions aren't offered again (discovery_dismissed).
  • The "Not for me" list and library status move to /discover/settings.
  • Starred import: a new optional provider.Starrer, implemented for Navidrome with getStarred2, feeds a checklist. Only the artists you check are added.

MAD-826: Room taste as a set source

  • Snapshot: GET /me/discover/room-taste returns a room's or a past night's favorite artists, optionally only your own picks. You check the ones to keep and add them to an existing or new set (added_from = room).
  • Live: a set can link to a room with a low, medium or high weight. The feed then walks from the room's top artists as weaker seeds.
  • Read-only on the room: dj.Peek reads the DJ's stored rows without folding nights, so discovery never writes DJ memory. Only rooms you can open (rooms.CanEnter) are allowed.

Notes

  • Migration 00032 (want_items.cover/got_by/got_seen, discovery_sets.grow_auto/room_id/room_weight, discovery_dismissed).
  • postDiscoveryFeedback now returns 200 with {want, grew} instead of 204.
  • Fresh feeds and maps still follow only the seeds, not a linked room.

Testing

  • go test -race ./... passes, and golangci-lint reports 0 issues. New tests: discover/stage4_test.go (want/got-it, growing, the thumbs-down penalty, starred import, room taste and access, live link shifting the feed), library Built and Starred, and an HTTP round-trip in TestDiscoverWantsAndLearning.
  • Web: typecheck, lint and 281 vitest tests pass, including new ones for the lib helpers, PickList and the release card's Want button.
  • I haven't clicked through the new UI in a browser.

🤖 Generated with Claude Code

madeofpendletonwool and others added 2 commits October 14, 2026 08:42
…D-824..826)

- Want list: a thumbs-up or "Want" on a release keeps it in want_items
  until it turns up in the library. library.Service's Built hook runs
  CheckWants after every index build, marking matches got (auto) and
  counting what landed. Sets report what they yielded (wanted, got).
- Sets that learn: thumbs-down lower an artist in that set's feed; two
  thumbs-up suggest adding an artist (or add them, with grow_auto); three
  thumbs-down suggest blocking. Dismissed suggestions are remembered.
  Starred import lists Navidrome stars via a new provider.Starrer, and
  only the picked artists are added.
- Room taste: a room's or a past night's favorite artists to pick from,
  and a live link with a weight that the feed walks from. Read only:
  dj.Peek reads the DJ's rows without folding nights.

Migration 00032; ADR 0017 updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e web (MAD-824..826)

- /discover/want: wanted, got and dismissed, grouped by artist, with
  previews, YouTube, got it and dismiss; got things link back into
  Syncphony. Discover says what landed in your library.
- A set's page offers what its thumbs suggest, imports from Navidrome
  stars or a room's taste through a checklist, and can grow by itself
  or mix in a linked room. Releases can be wanted.
- /discover/settings holds the library status and the "Not for me" list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@madeofpendletonwool
madeofpendletonwool merged commit 70b78d8 into main Oct 14, 2026
5 checks passed
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