Commit Graph

  • 1cc9553d1f fix(android): move "You might like" directly under the system-playlists row bvandeusenandClaude Opus 4.8 2026-06-11 22:50:02 -04:00
  • a62f07bd3a Merge PR #92: "You might like" Android client row (#790) bvandeusen 2026-06-11 22:36:22 -04:00
  • c2f9bbaff4 fix(android): suppress detekt TooManyFunctions on HomeRepository bvandeusenandClaude Opus 4.8 2026-06-11 22:19:13 -04:00
  • abc225e12a feat(android): "You might like" Home rows (#790 client slice) bvandeusenandClaude Opus 4.8 2026-06-11 22:16:32 -04:00
  • 3c646c6974 Merge PR #91: "You might like" rows + taste profile (learn + apply) bvandeusen 2026-06-11 21:41:17 -04:00
  • aff346c731 feat(taste): phase 2a — apply the taste profile via a TasteMatch scoring term (#796) bvandeusenandClaude Opus 4.8 2026-06-11 21:29:42 -04:00
  • 13b3fca949 fix(taste): drop unused now param + tighten test (golangci-lint revive) bvandeusenandClaude Opus 4.8 2026-06-11 20:58:43 -04:00
  • 6e0d0e5723 feat(taste): phase 1 — persistent per-user taste profile from graded engagement (#796) bvandeusenandClaude Opus 4.8 2026-06-11 20:55:14 -04:00
  • 752906b054 fix(playlists): pin candidate order before jitter to make daily builds deterministic bvandeusenandClaude Opus 4.8 2026-06-11 19:56:13 -04:00
  • fdd14ef04c feat(server): "You might like" album/artist Home rows (#790) bvandeusenandClaude Opus 4.8 2026-06-11 19:33:46 -04:00
  • 9a57dc4bec Merge pull request 'Offline/playback recording robustness (contract-audit follow-ups)' (#90) from dev into main bvandeusen 2026-06-11 14:19:27 -04:00
  • 4ecb1680bf fix(android): drop second loop jump in supersededLikeToggleIds (detekt) bvandeusenandClaude Opus 4.8 2026-06-11 12:11:54 -04:00
  • d2a22e49e3 fix: harden offline/playback recording (contract-audit follow-ups) bvandeusenandClaude Opus 4.8 2026-06-11 12:05:35 -04:00
  • f167ddfbfb Merge pull request 'fix: restore native Android play-event recording (History was empty)' (#89) from dev into main bvandeusen 2026-06-11 09:08:20 -04:00
  • 653ed95f14 fix(android): always serialize event type so plays aren't dropped bvandeusenandClaude Opus 4.8 2026-06-11 00:01:13 -04:00
  • b2c6f6f0e9 fix(server): apply skip rule on auto-close instead of force-hiding orphans bvandeusenandClaude Opus 4.8 2026-06-10 23:15:22 -04:00
  • 962b4dbc8c Merge pull request 'v2026.06.07 — Sonos: one SOAP failure no longer drops to local' (#88) from dev into main v2026.06.07 bvandeusen 2026-06-07 19:14:45 -04:00
  • aa4089118e chore: configure Renovate (tuned) bvandeusen 2026-06-07 12:00:44 -04:00
  • dabca3ad24 fix(android): stop single SOAP failure from dropping Sonos to local bvandeusenandClaude Opus 4.8 2026-06-07 10:54:14 -04:00
  • 7c791dc8e4 v2026.06.06 — UPnP recovery, library watcher, artist discovery, request auto-poll (#87) v2026.06.06 bvandeusen 2026-06-06 23:31:27 -04:00
  • 8f29cc7414 feat: poll in-flight requests on native + refresh after submit (#369) bvandeusen 2026-06-06 23:18:44 -04:00
  • c8b21aa76e fix(android): grid items() resolution on artist detail (drop bad alias) bvandeusen 2026-06-06 22:56:58 -04:00
  • 483804fc9e fix(android): extract ArtistSuccessBody to satisfy detekt LongMethod bvandeusen 2026-06-06 22:48:45 -04:00
  • 12a8cfccb5 feat(android): similar-artists strip + top-tracks on artist detail bvandeusenandClaude Opus 4.8 2026-06-06 22:39:54 -04:00
  • e358a92cf4 feat(web): similar-artists strip + top-tracks panel on artist detail bvandeusen 2026-06-06 22:34:46 -04:00
  • 63b25e65ad feat(server): similar-artists + per-user artist top-tracks endpoints bvandeusen 2026-06-06 22:30:41 -04:00
  • a766b7193f test(server): drop removed scheduler arg from New() callers bvandeusen 2026-06-06 22:00:21 -04:00
  • e95138d412 style(server): gofmt watcher_test map alignment bvandeusen 2026-06-06 21:54:14 -04:00
  • 7426f6c718 feat(web): remove scan-schedule admin UI (scheduler retired) bvandeusenandClaude Opus 4.8 2026-06-06 21:52:20 -04:00
  • e994aae613 feat(server): retire scan scheduler for watcher + safety-net walk bvandeusen 2026-06-06 21:50:08 -04:00
  • c39a9ca18f feat(server): targeted ScanFiles + fsnotify library watcher bvandeusen 2026-06-06 21:43:27 -04:00
  • 06e155abb6 fix(android): rename IdleRevertDecision.kt to satisfy detekt MatchingDeclarationName bvandeusen 2026-06-06 17:36:07 -04:00
  • 6b11208e5a perf(android): fail-fast connect timeout for UPnP transport SOAP bvandeusen 2026-06-06 17:30:28 -04:00
  • 41da012494 fix(android): failed UPnP play reverts to phone and resumes locally bvandeusen 2026-06-06 17:29:58 -04:00
  • 8a3104443c feat(android): record play-intent on remote play/pause bvandeusen 2026-06-06 17:29:36 -04:00
  • 5f5ab69da6 feat(android): track UPnP play-intent surviving SOAP errors bvandeusen 2026-06-06 17:29:19 -04:00
  • 5386ae870f feat(android): revert UPnP output to phone after 5-min idle bvandeusen 2026-06-06 17:28:32 -04:00
  • d7b011e52f feat(android): pure idle-revert decision for UPnP output bvandeusen 2026-06-06 17:27:52 -04:00
  • 11466e1525 Merge pull request 'Unify offline detection + offline playlist UX (NetworkStatusController)' (#86) from dev into main v2026.06.05 bvandeusen 2026-06-05 13:27:36 -04:00
  • e185b36138 fix(android): arbitrate op-failure probe off the reducer thread bvandeusenandClaude Opus 4.8 2026-06-05 12:47:46 -04:00
  • 31d8c30dfe feat(android): grey offline-unavailable playlists, lead with cached pools bvandeusenandClaude Opus 4.8 2026-06-05 12:40:30 -04:00
  • 69ccd7b25d feat(android): per-playlist fullyCached via cache-index join bvandeusenandClaude Opus 4.8 2026-06-05 12:29:59 -04:00
  • 8b77c6be97 feat(android): 4-state connection banner with unstable + back-online flash bvandeusenandClaude Opus 4.8 2026-06-05 12:23:55 -04:00
  • c33ef18a50 fix(android): extract OfflineGatedDataSource gate to satisfy detekt ThrowsCount bvandeusenandClaude Opus 4.8 2026-06-05 12:19:29 -04:00
  • 4c9450c117 feat(android): feed API/playback/pull-refresh signals into NetworkStatusController bvandeusenandClaude Opus 4.8 2026-06-05 12:14:50 -04:00
  • b467cb7532 refactor(android): unify offline detection into NetworkStatusController bvandeusenandClaude Opus 4.8 2026-06-05 12:06:22 -04:00
  • c78bbb7ba5 feat(android): pure ReachabilityMachine + 4-state ServerHealth enum bvandeusenandClaude Opus 4.8 2026-06-05 11:35:22 -04:00
  • 301c3bfb86 Merge pull request 'fix(android): don't flip offline on WAN-validation flicker — trust /healthz' (#85) from dev into main v2026.06.04 bvandeusen 2026-06-04 23:02:28 -04:00
  • 5c0db429b3 fix(android): don't flip offline on WAN-validation flicker — trust /healthz bvandeusenandClaude Opus 4.8 2026-06-04 22:57:57 -04:00
  • 4d8c7d6566 Merge pull request 'fix(android): notification art uses album cover, not embedded stream tags' (#84) from dev into main bvandeusen 2026-06-04 22:35:21 -04:00
  • 58810a860b fix(android): notification art uses album cover, not embedded stream tags bvandeusenandClaude Opus 4.8 2026-06-04 22:24:20 -04:00
  • d6e6caa223 Merge pull request 'Sonos queue resync + cold-start prefetcher gate' (#83) from dev into main bvandeusen 2026-06-04 17:36:31 -04:00
  • 9a31955fa4 perf(android): gate audio prefetch on isPlaying bvandeusen 2026-06-04 17:29:19 -04:00
  • e7d7cb2471 fix(android): incremental Sonos queue sync for playNext + radio-append bvandeusen 2026-06-04 17:07:26 -04:00
  • 8017934334 fix(android): re-prime Sonos queue when user plays a different playlist bvandeusen 2026-06-04 17:00:24 -04:00
  • 8b08482d13 Merge pull request 'fix(android): hysteresis on /healthz reachable signal' (#82) from dev into main bvandeusen 2026-06-04 14:23:49 -04:00
  • faa0c7024b fix(android): hysteresis on /healthz reachable signal — 3 consecutive failures bvandeusen 2026-06-04 13:40:49 -04:00
  • 7cf04fe24b Merge pull request 'Android #618 offline-mode UX + Sonos polish + server DRY' (#81) from dev into main bvandeusen 2026-06-04 12:53:59 -04:00
  • 1e17eeda72 feat(android): #618 Phase 5 — confirm offline writes via shell snackbar bvandeusen 2026-06-04 12:40:59 -04:00
  • 1daea79f64 feat(android): #618 Phase 4 — row-level offline-unavailable affordance bvandeusen 2026-06-04 12:37:42 -04:00
  • 48de720514 feat(android): #618 Phase 2 — search falls back to cached entities when offline bvandeusen 2026-06-04 12:35:01 -04:00
  • fced6b681e feat(android): cache-only audio path when ServerHealth != Healthy bvandeusen 2026-06-04 11:27:11 -04:00
  • 80a6be25aa feat(android): ServerHealth tri-state composite + banner distinguishes offline vs server-down bvandeusen 2026-06-04 11:25:22 -04:00
  • 4d0a0b8e09 fix(android): throttle UPnP extend with 50ms delay per successful AddURIToQueue bvandeusen 2026-06-04 11:03:55 -04:00
  • 6184c62721 feat(android): MediaSession picks up UPnP state via direct listener invocation bvandeusen 2026-06-04 11:02:51 -04:00
  • 222a0ff636 Merge pull request 'dev → main: collage center-crop, server DRY, CI durability-off' (#80) from dev into main bvandeusen 2026-06-04 08:42:36 -04:00
  • 28300e19fd perf(ci): turn off Postgres durability in integration tests bvandeusen 2026-06-04 08:31:06 -04:00
  • 024493f2a7 refactor(server): unify stream URL builders + MIME tables + cover-path helper bvandeusen 2026-06-04 08:29:51 -04:00
  • edd198cdf5 fix(server): collage drawScaled uses center-crop instead of stretch bvandeusen 2026-06-04 08:22:59 -04:00
  • d75c1ae37f Merge pull request 'dev → main: Android UPnP/Sonos transport parity + server stream URL extension' (#79) from dev into main bvandeusen 2026-06-04 08:15:15 -04:00
  • 8cd2383a42 test(server): seed track for cast-token tests + assert file-ext in URL bvandeusen 2026-06-04 07:44:33 -04:00
  • 27bd38e005 feat(server): stream URL gets file extension so Sonos can probe duration bvandeusen 2026-06-04 07:29:28 -04:00
  • aa23a72693 fix(android): effectiveDuration uses desiredIdx so duration tracks the displayed title bvandeusen 2026-06-04 07:17:17 -04:00
  • 4021938046 fix(android): polling tick no longer force-syncs controller -- avoids Sonos seek-to-0 bvandeusen 2026-06-04 07:06:07 -04:00
  • 7486bc2444 fix(android): split tickPositionPoll into helpers for detekt complexity bvandeusen 2026-06-04 07:04:01 -04:00
  • ee8a1fdc93 fix(android): event-driven pending-transport clear (Sonos ack OR 5s safety) bvandeusen 2026-06-04 07:00:22 -04:00
  • 8e578d2068 fix(android): 2s transport-ack lockout so Prev/Next isn't undone by stale poll bvandeusen 2026-06-04 06:55:39 -04:00
  • cacb280832 fix(android): polling tick track update is forward-only so user Next isn't undone bvandeusen 2026-06-04 06:50:35 -04:00
  • 36054506c2 fix(android): polling tick owns track-change updates when delegate.seekTo silent bvandeusen 2026-06-04 06:46:38 -04:00
  • 5db90844cb fix(android): DIDL-Lite includes Rincon namespace + cdudn desc for Sonos bvandeusen 2026-06-04 06:34:00 -04:00
  • d5437d517e fix(android): single break in extend loop for detekt LoopWithTooManyJumpStatements bvandeusen 2026-06-04 01:07:57 -04:00
  • 3085d6f409 fix(android): DIDL-Lite restricted=true / id=-1 so Sonos accepts metadata bvandeusen 2026-06-04 00:59:31 -04:00
  • c5b326c620 fix(android): UPnP extend captures SOAP fault, aborts after 3 failures bvandeusen 2026-06-04 00:56:48 -04:00
  • 389c896d65 fix(android): force poll on ON_RESUME + cap interpolation drift at 5s bvandeusen 2026-06-04 00:55:10 -04:00
  • 41230b5afb fix(android): single jump per polling loop for detekt LoopWithTooManyJumpStatements bvandeusen 2026-06-04 00:42:35 -04:00
  • c245b1ef0b fix(android): hold UI patch until cursor sync lands; reanchor on track flip bvandeusen 2026-06-04 00:37:34 -04:00
  • 2425a305eb fix(android): interpolate UPnP position between polls + suppress post-seek race bvandeusen 2026-06-04 00:16:57 -04:00
  • 88b161193d fix(android): TrackRef.durationSec is final fallback so duration is never 0 bvandeusen 2026-06-04 00:03:48 -04:00
  • 9628ed1749 fix(android): duration falls back to local while Sonos hasn't reported one bvandeusen 2026-06-04 00:00:45 -04:00
  • 85926f4ec0 fix(android): keep service alive when UPnP is playing -- override playWhenReady bvandeusen 2026-06-03 23:51:54 -04:00
  • 47b0894ad6 test(android): update RemotePlayerState threshold expectation to 30 bvandeusen 2026-06-03 23:50:37 -04:00
  • e62fac3a0e fix(android): onEvents reads UPnP state so resume keeps duration bvandeusen 2026-06-03 23:48:52 -04:00
  • eae5dcad23 fix(android): correct ErrorCopy import path in PlaylistPlayback bvandeusen 2026-06-03 23:42:18 -04:00
  • 3576e241c0 fix(android): split playPlaylistShuffled to satisfy detekt ReturnCount bvandeusen 2026-06-03 23:37:30 -04:00
  • 8f89279fa4 fix(android): UPnP survives screen-off + cursor catches up to Sonos bvandeusen 2026-06-03 23:36:43 -04:00
  • b1a66f18bd feat(android): shuffle on system playlist tile play -- Home + Playlists list bvandeusen 2026-06-03 23:29:42 -04:00
  • 6a7958c921 fix(android): debounce non-PLAYING poll to suppress UPnP track-change flicker bvandeusen 2026-06-03 23:19:29 -04:00
  • 33285b53c6 fix(android): refresh uiState.isPlaying from remoteState during UPnP bvandeusen 2026-06-03 23:08:32 -04:00
  • 87ad7f4dc2 feat(android): lazy queue activation + loading spinner during UPnP load bvandeusenandClaude Sonnet 4.6 2026-06-03 22:56:06 -04:00
  • 9c0013f4b6 fix(android): defer holder.active until SOAP wired -- drop transport during load bvandeusenandClaude Sonnet 4.6 2026-06-03 22:46:57 -04:00