Commit Graph

  • 725ddca950 Merge pull request 'Milestone 127: recommendation quality — provenance, tiered mixes, For You v2, tuning lab' (#107) from dev into main main bvandeusen 2026-07-03 10:13:49 -04:00
  • 29e1e7c64c test(web/tuning): marker summary appears in tooltips too — use getAllByText dev bvandeusen 2026-07-03 09:35:51 -04:00
  • 9ad4343c76 feat(tuning): weekly trend view — per-surface series + knob-turn markers bvandeusen 2026-07-03 09:29:33 -04:00
  • 0d0a8f46b1 feat(tuning): scoring weights → DB-backed admin tuning lab bvandeusen 2026-07-03 09:22:03 -04:00
  • 9e02878b61 feat(playlists): For You composition v2 — multi-seed blend + weighted fresh tail bvandeusen 2026-07-03 09:02:35 -04:00
  • 48f288e2e5 feat(mixes): tiered rebuilds for New for you + First listens (rule #131) bvandeusen 2026-07-03 08:54:20 -04:00
  • 2be07ef271 fix(mixes): close three intent gaps found in the system-playlists audit bvandeusen 2026-07-03 08:47:01 -04:00
  • a670840114 fix(playlists): Songs-like mixes no longer vanish after a quiet week bvandeusen 2026-07-03 08:38:54 -04:00
  • 5faa57634b feat(metrics): provenance as standard — pick_kind for all system mixes bvandeusen 2026-07-02 23:26:52 -04:00
  • fb4431207d feat(recommendation): For You exploration attribution — taste vs fresh picks bvandeusen 2026-07-02 20:39:41 -04:00
  • 60533073ad feat(metrics): bucketed surface families + manual-plays baseline (#1248, milestone 127) bvandeusen 2026-07-02 18:00:40 -04:00
  • 4b150a277e fix(recommendation): Rediscover no longer ships a one-song playlist (#1246) bvandeusen 2026-07-02 17:29:41 -04:00
  • d145fee35d Merge pull request 'fix(android/resilience): auto-recover failed loads on reconnect' (#106) from dev into main v2026.07.02 bvandeusen 2026-07-02 16:45:13 -04:00
  • 7628330f72 test(android/library): stub SyncController.lastSyncError with a real StateFlow bvandeusen 2026-07-02 16:10:45 -04:00
  • 09102dc615 fix(android/resilience): auto-recover failed loads on reconnect (#1245) bvandeusen 2026-07-02 16:02:14 -04:00
  • 611715154b Merge pull request 'M9 diagnostics follow-ups: playback relabel, sort, connected fix, per-skip + track-identity' (#105) from dev into main v2026.06.30 bvandeusen 2026-06-30 19:19:15 -04:00
  • 392454b249 feat(android/diagnostics): track-identity enrichment + zero stale Sonos state bvandeusen 2026-06-30 19:15:12 -04:00
  • cdfc79e6ab feat(android/diagnostics): per-skip track-change event bvandeusen 2026-06-30 18:48:35 -04:00
  • 79f2d79a2e feat(diagnostics): 'playback' kind, newest-first sort, fix active-route subtitle bvandeusen 2026-06-30 16:33:01 -04:00
  • 96b15b75e6 feat(web/diagnostics): default to recent 500, move time window to Advanced bvandeusen 2026-06-30 12:42:25 -04:00
  • 23a82fb38d Merge pull request 'M9 — Device diagnostics & debug reporting (connectivity + UPnP desync)' (#104) from dev into main bvandeusen 2026-06-29 19:24:16 -04:00
  • 782f152d37 test(web/admin): AdminTabs now has seven tabs (Diagnostics added) bvandeusen 2026-06-29 19:11:39 -04:00
  • bffa5b28bd fix(diagnostics): StateFlow distinctUntilChanged build error + AdminUser test fixtures bvandeusen 2026-06-29 19:05:50 -04:00
  • 8a58f07237 fix(android/diagnostics): keep uploader drain within ReturnCount gate bvandeusen 2026-06-29 18:59:05 -04:00
  • 4d42e298dd feat(android+web/diagnostics): on-device debug reporter + admin timeline (M9) bvandeusen 2026-06-29 18:56:36 -04:00
  • 4ed831d9c3 feat(server/diagnostics): device debug-reporting ingest + admin timeline + retention (M9) bvandeusen 2026-06-29 18:38:56 -04:00
  • 0de2437689 Merge pull request 'Image rendering + player resilience (#968, #980)' (#103) from dev into main v2026.06.20 bvandeusen 2026-06-20 20:57:39 -04:00
  • f4f4df7708 feat(android/playlists): stale-view snackbar + Refresh on open system playlist after rebuild bvandeusen 2026-06-20 19:52:13 -04:00
  • e932ab438c feat(web/playlists): stale-view banner + Refresh on an open system-playlist after rebuild bvandeusen 2026-06-20 19:48:52 -04:00
  • d05264ff80 fix(web/playlists): attribute source when playing a system playlist from its detail page bvandeusen 2026-06-20 17:35:45 -04:00
  • a23e2e36ca feat(android/home): refresh Home on playlist.system_rebuilt bvandeusen 2026-06-20 15:46:35 -04:00
  • 5a80a1e460 feat(web): subscribe to SSE and refresh home/playlists on playlist.system_rebuilt bvandeusen 2026-06-20 15:44:05 -04:00
  • 16f76ea707 feat(server): emit playlist.system_rebuilt on daily + manual system-playlist rebuild bvandeusen 2026-06-20 12:59:27 -04:00
  • d4cc177db4 feat(android/player): self-heal a stale system-playlist / radio queue on total failure bvandeusen 2026-06-20 12:56:01 -04:00
  • 27766ae063 feat(web/player): self-heal a stale system-playlist / radio queue on total failure bvandeusen 2026-06-20 12:51:47 -04:00
  • 335d782215 fix(android/player): auto-skip a failed track on load error, not just zero-duration bvandeusen 2026-06-20 12:41:30 -04:00
  • 2a8de82a17 fix(web/player): auto-skip a failed track instead of dead-ending on "Try again" bvandeusen 2026-06-20 12:40:08 -04:00
  • 096a3c0b15 fix(clients): never leave cover tiles blank — shared web <Cover> + Android Coil placeholder/error bvandeusen 2026-06-20 12:29:05 -04:00
  • a251dce7e3 Merge pull request 'feat: scan on startup by default + README first-run walkthrough & screenshots' (#102) from dev into main bvandeusen 2026-06-20 11:40:56 -04:00
  • 97e0e88483 feat(server): scan library on startup by default + README first-run walkthrough bvandeusen 2026-06-20 11:35:22 -04:00
  • 938dae7163 Merge pull request 'docs: correct README setup/OOBE + fix data-volume mount' (#101) from dev into main bvandeusen 2026-06-20 10:58:07 -04:00
  • ad37937949 docs: correct README setup/OOBE + fix data-volume mount bvandeusen 2026-06-20 10:57:28 -04:00
  • 93365cb555 Merge pull request 'ci(release): bundle the latest release APK into non-tag :latest builds' (#100) from dev into main bvandeusen 2026-06-14 22:55:23 -04:00
  • 2c5c477a0d ci(release): bundle the latest release APK into non-tag :latest builds bvandeusen 2026-06-14 22:54:54 -04:00
  • eeabdf1f2c Merge pull request 'Web UI: Most Played hover fix, narrower seek bar, Android-parity track kebab' (#99) from dev into main bvandeusen 2026-06-14 22:26:52 -04:00
  • f7278f2417 feat(web): drop "Remove from library" from the track kebab bvandeusen 2026-06-14 22:17:35 -04:00
  • 9a166f9032 test(web): update TrackMenu spec for Android-parity kebab bvandeusen 2026-06-14 21:48:57 -04:00
  • b3d6785543 feat(web): match track kebab to Android + add it to full-screen Now Playing bvandeusen 2026-06-14 21:46:54 -04:00
  • 773275e916 feat(web): surface "Start radio" in the track kebab menu bvandeusen 2026-06-14 21:40:16 -04:00
  • 066616e196 fix(web): de-overlap Most Played hover controls + narrow desktop seek bar bvandeusen 2026-06-14 21:36:26 -04:00
  • 3e258507bb Merge pull request 'fix(android): UPnP cast resilience — drop-suppression, session adopt, recovery hardening' (#98) from dev into main v2026.06.12 bvandeusen 2026-06-12 21:25:25 -04:00
  • fd7d6dac4c feat(android): adopt a running UPnP session + tighten cast recovery/anti-stickiness bvandeusen 2026-06-12 21:20:26 -04:00
  • d6290a3ef0 fix(android): don't drop Sonos (or blast local audio) when the phone's own network is down bvandeusen 2026-06-12 20:48:40 -04:00
  • 9550d8daaf Merge pull request 'fix(android): hold WiFi+wake lock during UPnP cast (locked-screen poll starvation)' (#97) from dev into main bvandeusen 2026-06-12 19:45:44 -04:00
  • 4d5af3599e fix(android): hold WiFi+wake lock during UPnP cast so a locked screen doesn't starve the poll bvandeusen 2026-06-12 19:39:42 -04:00
  • db393bbe65 Merge PR #96: recommendation batch (You-might-like fallback + taste 2b + observability) bvandeusen 2026-06-12 01:10:09 -04:00
  • 1a7515e6ea feat(taste): phase 4 — recommendation observability (#796) bvandeusen 2026-06-12 00:28:30 -04:00
  • 6c26ba807e feat(taste): phase 2b — taste_overlap candidate arm (#796) bvandeusen 2026-06-12 00:05:50 -04:00
  • c7adf2c87a fix(recommendation): broaden You-might-like fallback to liked album/track artists (#790) bvandeusen 2026-06-11 23:55:08 -04:00
  • 7b7bd0c3e8 Merge PR #95: You-might-like liked-entity fallback (#790) v2026.06.11 bvandeusen 2026-06-11 23:33:25 -04:00
  • 26c368c35e fix(recommendation): use type conversion for fallback rows (staticcheck S1016) bvandeusen 2026-06-11 23:26:35 -04:00
  • 36786defd1 feat(recommendation): fall back to liked entities when You-might-like is thin (#790) bvandeusen 2026-06-11 23:24:21 -04:00
  • 8019537b02 Merge PR #94: "You might like" web client row (#790) bvandeusen 2026-06-11 23:01:38 -04:00
  • 3f240bc777 feat(web): "You might like" Home row (#790 web client slice) bvandeusen 2026-06-11 22:59:58 -04:00
  • e41d603c12 Merge PR #93: move "You might like" under system-playlists row bvandeusen 2026-06-11 22:55:52 -04:00
  • 1cc9553d1f fix(android): move "You might like" directly under the system-playlists row bvandeusen 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 bvandeusen 2026-06-11 22:19:13 -04:00
  • abc225e12a feat(android): "You might like" Home rows (#790 client slice) bvandeusen 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) bvandeusen 2026-06-11 21:29:42 -04:00
  • 13b3fca949 fix(taste): drop unused now param + tighten test (golangci-lint revive) bvandeusen 2026-06-11 20:58:43 -04:00
  • 6e0d0e5723 feat(taste): phase 1 — persistent per-user taste profile from graded engagement (#796) bvandeusen 2026-06-11 20:55:14 -04:00
  • 752906b054 fix(playlists): pin candidate order before jitter to make daily builds deterministic bvandeusen 2026-06-11 19:56:13 -04:00
  • fdd14ef04c feat(server): "You might like" album/artist Home rows (#790) bvandeusen 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) bvandeusen 2026-06-11 12:11:54 -04:00
  • d2a22e49e3 fix: harden offline/playback recording (contract-audit follow-ups) bvandeusen 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 bvandeusen 2026-06-11 00:01:13 -04:00
  • b2c6f6f0e9 fix(server): apply skip rule on auto-close instead of force-hiding orphans bvandeusen 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 bvandeusen 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 bvandeusen 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) bvandeusen 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