This website requires JavaScript.
5b36d79ff9
fix(server): access log reports the real client, not the proxy — #2453
bvandeusen
2026-08-05 13:02:36 -04:00
11538095be
fix(net): validate hop range before checking availability — #2453
bvandeusen
2026-08-05 10:27:10 -04:00
d5ab3b0764
fix(net): update the in-package Mount call site in library_test — #2453
bvandeusen
2026-08-05 10:21:16 -04:00
a07fb3867a
fix(net): thread hops into session creation; disambiguate card tests — #2453
bvandeusen
2026-08-05 10:14:38 -04:00
381e9cedb7
feat(net): trusted-proxy depth so real client IPs survive a proxy — #2453
bvandeusen
2026-08-05 10:07:43 -04:00
bf649f3beb
feat(web): active sessions card in Settings — #370
bvandeusen
2026-08-05 09:25:20 -04:00
d86af7397d
feat(auth): active sessions API with origin/current IP — #370
bvandeusen
2026-08-05 09:17:40 -04:00
2e1a8a62d8
refactor(android): move cleartext opt-out into a networkSecurityConfig — #2439
bvandeusen
2026-08-05 08:41:05 -04:00
1bf0e388cb
docs(readme): state scope and responsible use up front
bvandeusen
2026-08-04 21:26:26 -04:00
a4b6f22d86
feat(update): silent self-update via PackageInstaller session — #2438
bvandeusen
2026-08-04 16:19:24 -04:00
57d2299180
Merge pull request 'Queue row gestures: album art as grab surface + swipe-to-remove' (#118 ) from dev into main
v2026.08.04
bvandeusen
2026-08-04 11:37:30 -04:00
8b630e71ca
refactor(player): split the queue row out of QueueScreen.kt — #2435
bvandeusen and Claude Opus 5
2026-08-04 10:52:14 -04:00
1910a5ce61
feat(player): swipe a queue row left to remove it — #2435
bvandeusen and Claude Opus 5
2026-08-04 10:47:48 -04:00
a92a9f2198
fix(player): extract the reorder a11y actions to clear detekt LongMethod — #2395
bvandeusen and Claude Opus 5
2026-08-04 08:52:40 -04:00
6dea45a634
feat(player): album art is the queue's grab surface — #2395
bvandeusen and Claude Opus 5
2026-08-04 08:43:36 -04:00
fa7ea41ccf
Merge pull request 'Minstrel gets a mark — favicon, header lockup, Android adaptive icon' (#117 ) from dev into main
bvandeusen
2026-08-03 20:52:27 -04:00
e1e591b520
feat(brand): Minstrel mark — favicon, header lockup, Android adaptive icon
bvandeusen and Claude Opus 5
2026-08-03 16:37:25 -04:00
324059b2bd
Merge pull request 'Discover request surface — taste-aware, rotating, snoozable, tag-targeted (milestone #268 )' (#116 ) from dev into main
v2026.08.03
bvandeusen
2026-08-03 08:38:24 -04:00
eec59193fa
feat(discover): explain the taste match on both clients — #2377 (clients)
bvandeusen and Claude Opus 5
2026-08-02 23:51:27 -04:00
ca4832e620
feat(discover): Discover tuning card on the admin lab — #2377 (web admin)
bvandeusen and Claude Opus 5
2026-08-02 23:49:17 -04:00
cf0d37bf8e
fix(discover): compare against a baseline run, not a hardcoded score — #2377
bvandeusen and Claude Opus 5
2026-08-02 23:45:48 -04:00
799dab029a
feat(discover): rank suggestions by taste-tag overlap — #2377 (server)
bvandeusen and Claude Opus 5
2026-08-02 20:31:12 -04:00
7315e37c15
fix(db): apply sqlc's actual output for candidate_artist_tags — #2376
bvandeusen and Claude Opus 5
2026-08-02 20:11:03 -04:00
4f9b083eec
feat(discover): artist-tag cache for out-of-library candidates — #2376
bvandeusen and Claude Opus 5
2026-08-02 20:04:15 -04:00
f17356560d
fix(discover): "in about a month" was unreachable in both clients — #2375
bvandeusen and Claude Opus 5
2026-08-02 19:19:05 -04:00
18a61f1065
fix(discover): complete the page-test mock + drop a return from returnsIn — #2375
bvandeusen and Claude Opus 5
2026-08-02 19:09:24 -04:00
6e39471a70
feat(discover): snooze affordance on Android + web suggestion cards — #2375
bvandeusen and Claude Opus 5
2026-08-02 19:03:10 -04:00
86af79bd2f
feat(discover): time-boxed suggestion snooze, server side — #2374
bvandeusen and Claude Opus 5
2026-08-01 22:51:51 -04:00
e006de5d4b
fix(db): apply sqlc's actual output for SuggestArtistsForUser — #2380
bvandeusen and Claude Opus 5
2026-08-01 22:23:35 -04:00
94e2cac03b
ci(go): verify committed sqlc output matches its .sql sources — #2380
bvandeusen and Claude Opus 5
2026-08-01 22:16:45 -04:00
b27029f674
feat(discover): rotate the suggestion deck daily + cap one seed's share — #2373
bvandeusen and Claude Opus 5
2026-08-01 12:56:42 -04:00
14aa22198f
feat(discover): seed request suggestions from the taste profile — #2372
bvandeusen and Claude Opus 5
2026-08-01 12:45:34 -04:00
1138d75a45
Merge pull request 'Playlist-track atomic replace + ci-requirements true-up' (#115 ) from dev into main
bvandeusen
2026-08-01 12:23:37 -04:00
cf7b489fec
fix(playlists): make the playlist-track replace atomic
bvandeusen and Claude Opus 5
2026-08-01 12:04:22 -04:00
8483948f23
docs(ci): true up ci-requirements.md — ci-android replaced ci-flutter
bvandeusen and Claude Opus 5
2026-08-01 10:38:50 -04:00
0cea82984c
Merge pull request 'Home updating-veil rework: change-triggered, settle-driven, with refresh feedback' (#114 ) from dev into main
v2026.08.01
bvandeusen
2026-07-31 23:32:05 -04:00
3acac985cd
feat(home): veil only when content changed; tell the user when it didn't — #2327
bvandeusen and Claude Opus 5
2026-07-31 23:16:49 -04:00
d3b40342b4
test(home): drive the veil tests' clock explicitly, not advanceUntilIdle
bvandeusen and Claude Opus 5
2026-07-31 20:47:20 -04:00
4f99b42844
ci(android): print full assertion messages for failing tests
bvandeusen and Claude Opus 5
2026-07-31 20:39:54 -04:00
5044e7a055
fix(home): hold the updating veil until Home actually settles — #2327
bvandeusen and Claude Opus 5
2026-07-31 20:31:30 -04:00
7d45a4e5c7
ci: artifacts that can actually be downloaded (issue 2270)
bvandeusen
2026-07-30 15:51:15 -04:00
fa0827f668
ci: pin the download mirror to v6, not v5 — match on @actions/artifact
bvandeusen and Claude Opus 5
2026-07-30 15:37:43 -04:00
52d53e0044
ci: swap artifact upload+download to the mirrored actions (issue 2270)
bvandeusen and Claude Opus 5
2026-07-30 15:28:10 -04:00
a26ef4e93c
Merge pull request 'Queue fix + cross-client queue enhancements' (#112 ) from dev into main
v2026.07.23
bvandeusen
2026-07-23 08:31:34 -04:00
0774f5f55f
fix(player): suppress TooManyFunctions on PlayerViewModel facade — #1944
bvandeusen and Claude Opus 4.8
2026-07-22 23:16:17 -04:00
509cbe79b2
feat(player): Android queue — reorder, remove, art, auto-follow, clear — #1944
bvandeusen and Claude Opus 4.8
2026-07-22 23:12:23 -04:00
dc7b9b78fa
feat(player): queue move/remove/clear on PlayerController + VM — #1944
bvandeusen and Claude Opus 4.8
2026-07-22 23:12:23 -04:00
cde74b5965
feat(player): web queue auto-follow + jump-to-current pill + clear-queue — #1944
bvandeusen and Claude Opus 4.8
2026-07-22 22:57:23 -04:00
0efbf5fcaa
feat(player): album-art thumbnails in web queue rows — #1944
bvandeusen and Claude Opus 4.8
2026-07-22 22:57:23 -04:00
2038028d42
test(web): no-op scrollIntoView in vitest setup (jsdom lacks it) — #1931
bvandeusen and Claude Opus 4.8
2026-07-22 21:27:35 -04:00
723293110d
feat(player): scroll web queue to now-playing track on open (Android parity) — #1931
bvandeusen and Claude Opus 4.8
2026-07-22 21:24:29 -04:00
41ebf1405b
fix(player): open Android queue scrolled to now-playing track — #1929
bvandeusen and Claude Opus 4.8
2026-07-22 21:11:32 -04:00
f2dcf2596d
fix(player): render QueueDrawer inside QueryClientProvider so queue LikeButtons resolve — #1928
bvandeusen and Claude Opus 4.8
2026-07-22 20:47:21 -04:00
47de7be472
fix(player): route notification next/prev to Sonos while casting — #171 (#111 )
v2026.07.15
bvandeusen
2026-07-15 19:17:11 -04:00
659554df0e
fix(player): route notification next/prev to Sonos while casting — #171
bvandeusen and Claude Opus 4.8
2026-07-15 19:11:40 -04:00
2ecdd46a2b
Player: unify local+UPnP behind one cursor (#171 ) + queue heart button (#1596 ) (#110 )
bvandeusen
2026-07-15 16:30:52 -04:00
41fe76b90c
fix(player): identity-locked UPnP cursor + single index writer — #171
bvandeusen and Claude Opus 4.8
2026-07-15 14:58:49 -04:00
6912dadf2b
fix(test): order likes mock before component import in queue tests — #1596
bvandeusen and Claude Opus 4.8
2026-07-15 13:12:37 -04:00
304e06acc8
test(player): stub likes API in queue component tests — #1596
bvandeusen and Claude Opus 4.8
2026-07-15 13:08:06 -04:00
235839b696
feat(player): heart/like button in queue view (web + android) — #1596
bvandeusen and Claude Opus 4.8
2026-07-15 13:02:32 -04:00
4f69c230c4
Merge pull request 'Taste-profile fidelity (M160) + Songs-like row + home polish' (#109 ) from dev into main
v2026.07.14
bvandeusen
2026-07-14 13:03:12 -04:00
5749f48b4a
feat(taste): device-class context conditioning — #1551
bvandeusen and Claude Opus 4.8
2026-07-14 12:47:59 -04:00
f0c08e7326
feat(taste): mood taste facet — #1534
bvandeusen and Claude Opus 4.8
2026-07-14 10:32:26 -04:00
199fec2058
feat(taste): household co-play similarity — #1533
bvandeusen and Claude Opus 4.8
2026-07-14 10:07:19 -04:00
65dd132b3d
feat(taste): time-of-day / weekday context conditioning — #1531
bvandeusen and Claude Opus 4.8
2026-07-14 09:31:43 -04:00
40384cc05e
feat(taste): era/decade taste facet — #1530
bvandeusen and Claude Opus 4.8
2026-07-14 09:01:00 -04:00
40056d2e9a
feat(android): admin tag-enrichment sources screen (#1521 )
bvandeusen and Claude Opus 4.8
2026-07-14 08:16:43 -04:00
2b3be8311a
feat(tuning): expose EnrichedTagScale in the tuning lab (#1520 )
bvandeusen and Claude Opus 4.8
2026-07-14 07:51:36 -04:00
c30511e71b
feat(tags): MusicBrainz artist-MBID tag fallback (#1519 )
bvandeusen and Claude Opus 4.8
2026-07-14 07:43:22 -04:00
797ed1f5ad
feat(web): tag enrichment sources admin card (#1490 Step 4 web)
bvandeusen and Claude Opus 4.8
2026-07-13 22:33:00 -04:00
96c2eb6afb
fix(dbtest): reset tag-sources settings between tests (#1490 )
bvandeusen and Claude Opus 4.8
2026-07-13 22:32:51 -04:00
cce928e584
feat(api): admin tag-sources endpoints (#1490 Step 4 backend)
bvandeusen and Claude Opus 4.8
2026-07-13 22:24:28 -04:00
7d18a3c808
feat(taste): fold enriched folksonomy tags into the profile (#1490 Step 3)
bvandeusen and Claude Opus 4.8
2026-07-13 22:09:31 -04:00
c34753f5b0
feat(tags): wire tag-enrichment worker at startup (#1490 wiring)
bvandeusen and Claude Opus 4.8
2026-07-13 22:09:31 -04:00
fbfd5550ff
feat(tags): folksonomy tag enricher — pluggable provider chain (#1490 Step 2)
bvandeusen and Claude Opus 4.8
2026-07-13 21:43:58 -04:00
d6ee5a304d
fix(home): un-clip CoverTile overlay so play button isn't cut off (#1495 )
bvandeusen and Claude Opus 4.8
2026-07-13 20:56:07 -04:00
d497c57d6c
fix(home/test): kotlin.test assertTrue message overload
bvandeusen and Claude Opus 4.8
2026-07-13 20:49:10 -04:00
2e92ba498c
fix(home): buildSongsLikeRow ReturnCount ≤ 2 (detekt)
bvandeusen and Claude Opus 4.8
2026-07-13 20:45:05 -04:00
c1d143cf4a
feat(home): Songs-like → dedicated row + wider spread (#1491 )
bvandeusen and Claude Opus 4.8
2026-07-13 20:41:08 -04:00
cb0af5efd3
fix(dbq): commit the rest of the 0042 regen (Track model + embedders)
bvandeusen
2026-07-13 18:47:34 -04:00
20a76f4b39
feat(taste): track_tags schema + enrichment queries (Opt 1 foundation)
bvandeusen
2026-07-13 18:46:49 -04:00
7226dab9ff
feat(discover): taste-targeted novelty bucket + rebalance toward discovery
bvandeusen
2026-07-13 18:16:04 -04:00
772a52b23e
feat(home): "Updating your mixes…" veil over daily-rebuild churn
bvandeusen and Claude Opus 4.8
2026-07-13 17:52:42 -04:00
725ddca950
Merge pull request 'Milestone 127: recommendation quality — provenance, tiered mixes, For You v2, tuning lab' (#107 ) from dev into main
bvandeusen
2026-07-03 10:13:49 -04:00
29e1e7c64c
test(web/tuning): marker summary appears in tooltips too — use getAllByText
bvandeusen and Claude Fable 5
2026-07-03 09:35:51 -04:00
9ad4343c76
feat(tuning): weekly trend view — per-surface series + knob-turn markers
bvandeusen and Claude Fable 5
2026-07-03 09:29:33 -04:00
0d0a8f46b1
feat(tuning): scoring weights → DB-backed admin tuning lab
bvandeusen and Claude Fable 5
2026-07-03 09:22:03 -04:00
9e02878b61
feat(playlists): For You composition v2 — multi-seed blend + weighted fresh tail
bvandeusen and Claude Fable 5
2026-07-03 09:02:35 -04:00
48f288e2e5
feat(mixes): tiered rebuilds for New for you + First listens (rule #131 )
bvandeusen and Claude Fable 5
2026-07-03 08:54:20 -04:00
2be07ef271
fix(mixes): close three intent gaps found in the system-playlists audit
bvandeusen and Claude Fable 5
2026-07-03 08:47:01 -04:00
a670840114
fix(playlists): Songs-like mixes no longer vanish after a quiet week
bvandeusen and Claude Fable 5
2026-07-03 08:38:54 -04:00
5faa57634b
feat(metrics): provenance as standard — pick_kind for all system mixes
bvandeusen and Claude Fable 5
2026-07-02 23:26:52 -04:00
fb4431207d
feat(recommendation): For You exploration attribution — taste vs fresh picks
bvandeusen and Claude Fable 5
2026-07-02 20:39:41 -04:00
60533073ad
feat(metrics): bucketed surface families + manual-plays baseline (#1248 , milestone 127)
bvandeusen and Claude Fable 5
2026-07-02 18:00:40 -04:00
4b150a277e
fix(recommendation): Rediscover no longer ships a one-song playlist (#1246 )
bvandeusen and Claude Fable 5
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 and Claude Fable 5
2026-07-02 16:10:45 -04:00
09102dc615
fix(android/resilience): auto-recover failed loads on reconnect (#1245 )
bvandeusen and Claude Fable 5
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 and Claude Opus 4.8
2026-06-30 19:15:12 -04:00