Skip to content

Explain autopilot picks in the UI (MAD-760) - #52

Merged
madeofpendletonwool merged 1 commit into
mainfrom
mad-760-explain-picks
Oct 7, 2026
Merged

madeofpendletonwool merged 1 commit into
mainfrom
mad-760-explain-picks

Conversation

@madeofpendletonwool

Copy link
Copy Markdown
Owner

People forgive picks they understand. Each DJ pick now carries a short reason and where the knowledge came from, and the app shows them. Phase 7, stage 4.

Server

  • queue.AutopilotInfo gets Summary and Source. Autopilot writes them when it picks a song (autopilot/explain.go):

    Pick Summary
    similar artist Because Sam's Radiohead → Portishead (similar 0.82)
    two steps out Further out from Sam's Radiohead → Portishead
    the room's artist A top song by Radiohead, an artist the room loves (or "A deep cut by …")
    similar song Like Jo's Creep
    bridge Bridging Sam's Radiohead and Jo's Massive Attack
    throwback A throwback to Blur, a favorite from past nights

    Picks with no member behind them say "the room's Radiohead". Source lists the music knowledge sources, e.g. "Last.fm, Deezer".

  • The API's AutopilotPick has new reason and source fields. Songs a service recommended or that were picked at random don't have them, and still read "Like {seedTitle}".

  • Summaries use members' display names as they were when the song was picked.

Web

  • autopilotReason prefers the DJ's reason. The new autopilotSource returns "via Last.fm, Deezer".
  • Up next: the autopilot row's byline shows the reason.
  • Now playing sheet: the reason and its source sit under the badges.
  • /tv: the reason and source show next to the Autopilot mark for the song playing, and a reason line is added on autopilot cards in up next.

Tests

  • TestExplain covers each kind of pick. TestDJPicksFromTheGraph checks that the summary and source are stored.
  • autopilot.test.ts covers the reason and source helpers.
  • go test -race ./... passes, golangci-lint reports 0 issues, and the web suite (169 tests), tsc -b and oxlint are clean.

🤖 Generated with Claude Code

People forgive picks they understand. Each DJ pick now carries a short
reason and the music knowledge it came from, shown on now playing, up
next and the big screen.

- AutopilotInfo gains Summary and Source, written when autopilot picks:
  "Because Sam's Radiohead → Portishead (similar 0.82)", "A top song by
  Radiohead, an artist the room loves", "Bridging Sam's Radiohead and
  Jo's Massive Attack", deep cuts, songs like a member's, throwbacks.
  Source names the knowledge sources ("Last.fm, Deezer").
- The API's AutopilotPick has them as reason and source.
- The web app shows the reason in place of "Like {seed}" when there is
  one: in up next, under the title in the now playing sheet (with its
  source), and on /tv, both for the song playing and in up next.
- ADR 0012 notes it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@madeofpendletonwool
madeofpendletonwool merged commit 9e3fd05 into main Oct 7, 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