This website requires JavaScript.
6df02428b0
fix(playlists): surface playlist-load failures with SnackBar feedback (#479 )
bvandeusen and Claude Opus 4.7
2026-05-21 09:16:00 -04:00
b93b116e4f
test(quarantine): skip throwing-path test pending Fable #476
bvandeusen and Claude Opus 4.7
2026-05-20 20:00:20 -04:00
26c4eb46d4
test(flutter): delete stale like_button rollback test; harden quarantine connectivity override
bvandeusen and Claude Opus 4.7
2026-05-20 19:52:24 -04:00
83a7099db3
test(flutter): stub the transitive provider deps the drift cohort needs
bvandeusen and Claude Opus 4.7
2026-05-20 19:12:23 -04:00
a9e277eb13
test(flutter): fix 6 latent failures uncovered by the drift cohort un-skip
bvandeusen and Claude Opus 4.7
2026-05-20 18:52:05 -04:00
8fb6b4fbb3
test(flutter): fix two latent failures exposed by un-skipping the drift cohort
bvandeusen and Claude Opus 4.7
2026-05-20 18:15:18 -04:00
85183c455a
test(flutter): re-enable drift tests after ci-flutter:1.26 ships libsqlite3-0
bvandeusen and Claude Opus 4.7
2026-05-20 18:02:17 -04:00
461c6bf514
fix(go): collapse struct-literal copies to type conversions (S1016)
bvandeusen and Claude Opus 4.7
2026-05-20 15:23:39 -04:00
88f2c43947
ci(go): trigger test-go.yml on .golangci.yml changes too
bvandeusen and Claude Opus 4.7
2026-05-20 15:17:38 -04:00
70529de9d3
fix(ci): golangci-lint v2 schema + Flutter 3.44 ListTile strictness
bvandeusen and Claude Opus 4.7
2026-05-20 15:10:56 -04:00
c1fb2355c4
ci: migrate to ci-runners.md (container.image consumption)
bvandeusen and Claude Opus 4.7
2026-05-20 14:24:38 -04:00
6a62120457
chore(deps): Go server bumps (x/crypto, pgx, migrate, pgerrcode)
bvandeusen and Claude Opus 4.7
2026-05-20 13:02:32 -04:00
750bc69204
chore(deps): Tier A cross-ecosystem patch/minor sweep
bvandeusen and Claude Opus 4.7
2026-05-20 12:58:24 -04:00
66caee76fd
chore(deps): drop unused cupertino_icons + tslib
bvandeusen and Claude Opus 4.7
2026-05-20 12:30:50 -04:00
ccbd3b62a0
Merge pull request 'v2026.05.19.3 — playback stall resilience + legacy home cleanup' (#56 ) from dev into main
v2026.05.19.3
bvandeusen
2026-05-19 15:48:08 -04:00
5c1a5f5e8b
chore(flutter): bump version to 2026.5.19+13 for v2026.05.19.3
bvandeusen and Claude Opus 4.7
2026-05-19 15:47:28 -04:00
bb1ab3a2e3
test(web): un-skip discover/requests route tests — mock $app (#374 )
bvandeusen and Claude Opus 4.7
2026-05-19 15:42:11 -04:00
154626ae94
feat(player): stall watchdog + bounded retry + skip-to-cached (#66 )
bvandeusen and Claude Opus 4.7
2026-05-19 14:14:25 -04:00
1646b02ca2
refactor(flutter): drop legacy home snapshot path (#406 )
bvandeusen and Claude Opus 4.7
2026-05-19 13:04:43 -04:00
19de0c2874
Merge pull request 'v2026.05.19.2 — hotfix: restore media notification (remove broken custom favorite)' (#55 ) from dev into main
v2026.05.19.2
bvandeusen
2026-05-19 07:48:10 -04:00
1dc298c111
chore(flutter): bump version to 2026.5.19+12 for v2026.05.19.2
bvandeusen and Claude Opus 4.7
2026-05-19 07:47:45 -04:00
e605335339
fix(player): remove custom favorite MediaControl — it killed the notification
bvandeusen and Claude Opus 4.7
2026-05-19 07:19:42 -04:00
22a4649bfc
Merge pull request 'v2026.05.19.1 — hotfix: notification permission + full-player auto-minimize' (#54 ) from dev into main
v2026.05.19.1
bvandeusen
2026-05-18 23:08:33 -04:00
01a1ac148e
chore(flutter): bump version to 2026.5.19+11 for v2026.05.19.1
bvandeusen and Claude Opus 4.7
2026-05-18 23:08:13 -04:00
bc34d96329
fix(player): request POST_NOTIFICATIONS; auto-minimize player on teardown
bvandeusen and Claude Opus 4.7
2026-05-18 23:03:31 -04:00
8e7660c05e
Merge pull request 'fix(ci): scope integration Postgres discovery to this job's network' (#53 ) from dev into main
bvandeusen
2026-05-18 22:50:36 -04:00
eaddb2478a
fix(ci): scope integration Postgres discovery to this job's network
bvandeusen and Claude Opus 4.7
2026-05-18 22:50:04 -04:00
53be834e89
Merge pull request 'v2026.05.19.0 — MediaSession lifecycle, Lidarr hardening, Lucide migration' (#52 ) from dev into main
v2026.05.19.0
bvandeusen
2026-05-18 21:42:48 -04:00
c681191b42
chore(flutter): bump version to 2026.5.19+10 for v2026.05.19.0
bvandeusen and Claude Opus 4.7
2026-05-18 21:42:14 -04:00
94871437dd
feat(player): resume on media-button when session torn down (#448 )
bvandeusen and Claude Opus 4.7
2026-05-18 21:31:40 -04:00
359a072937
test(playlists): playlist_card finds LucideIcons.ellipsis_vertical
bvandeusen and Claude Opus 4.7
2026-05-18 20:50:10 -04:00
835592f073
refactor(ui): Lucide migration unit 2 — Icons.* -> LucideIcons.* sweep (#60 )
bvandeusen and Claude Opus 4.7
2026-05-18 20:43:05 -04:00
84f16c25f6
feat(ui): Lucide migration unit 1 — dependency + heart (#60 )
bvandeusen and Claude Opus 4.7
2026-05-18 20:18:22 -04:00
25ee54fca0
feat(player): surface playback errors via debounced SnackBar (#58 )
bvandeusen and Claude Opus 4.7
2026-05-18 19:39:58 -04:00
c659165218
fix(player): backtick doc-comment generics (analyze --fatal-infos)
bvandeusen and Claude Opus 4.7
2026-05-18 19:00:43 -04:00
0d80a113fa
feat(player): notification favorite via MediaControl.custom (6c)
bvandeusen and Claude Opus 4.7
2026-05-18 18:37:20 -04:00
5d37616d52
feat(player): downscale + preload external cover art (8a)
bvandeusen and Claude Opus 4.7
2026-05-18 18:04:51 -04:00
77a4a55522
feat(player): periodic PlaybackState refresh for smooth external scrubber
bvandeusen and Claude Opus 4.7
2026-05-18 16:28:46 -04:00
41dd2892e3
feat(player): resume last session on launch (#54 )
bvandeusen and Claude Opus 4.7
2026-05-18 15:57:58 -04:00
c80dc0b306
fix(player): const AudioSessionConfiguration.music() (analyze --fatal-infos)
bvandeusen and Claude Opus 4.7
2026-05-18 15:47:41 -04:00
57ce3d2d0a
feat(player): audio focus, interruptions & becoming-noisy
bvandeusen and Claude Opus 4.7
2026-05-18 15:43:52 -04:00
905f05c120
feat(player): tear down MediaSession when idle/dismissed
bvandeusen and Claude Opus 4.7
2026-05-18 14:38:42 -04:00
e68e1b10a6
fix(player+lidarr): mini-player sync race; durable approve + dedup
bvandeusen and Claude Opus 4.7
2026-05-18 12:24:20 -04:00
0d410630a2
Merge pull request 'Release v2026.05.18.0 — integration-tests-in-CI + recommendations/cover-art/discover batch' (#51 ) from dev into main
v2026.05.18.0
bvandeusen
2026-05-17 22:41:20 -04:00
b76ea66165
chore(flutter): bump version to 2026.5.18+9 for v2026.05.18.0
bvandeusen and Claude Opus 4.7
2026-05-17 22:40:44 -04:00
412b9e37eb
test(coverart): no-MBID enrich settles 'none' (per canonical behavior)
bvandeusen and Claude Opus 4.7
2026-05-17 22:27:01 -04:00
a86b7a5e07
test(coverart): DrainsNullSourceOnly — stamp id2 'none' at current version
bvandeusen and Claude Opus 4.7
2026-05-17 22:22:44 -04:00
5e91efe695
test(coverart): fix registry-wipe + stale provider signature
bvandeusen and Claude Opus 4.7
2026-05-17 21:05:36 -04:00
47572b2e95
feat(flutter): Discover suggestions feed — web parity
bvandeusen and Claude Opus 4.7
2026-05-17 20:48:54 -04:00
53a02322fb
fix: A2 (relax art-source CHECK) + D + E integration residual
bvandeusen and Claude Opus 4.7
2026-05-17 20:22:30 -04:00
75163ea483
test: correct the A regression + finish B residual (coverart boot, stale system_test)
bvandeusen and Claude Opus 4.7
2026-05-17 15:05:18 -04:00
d212621eaa
test: fix 4 integration-suite root causes surfaced by CI (C+A+B+F)
bvandeusen and Claude Opus 4.7
2026-05-17 13:32:42 -04:00
5a048cbea2
fix(ci): serialize integration test packages (-p 1) to stop TRUNCATE deadlocks
bvandeusen and Claude Opus 4.7
2026-05-17 12:22:06 -04:00
760b4a7c6c
feat(cli,ci): admin reset-password + migrate subcommands; test-DB isolation + CI integration job
bvandeusen and Claude Opus 4.7
2026-05-16 23:36:36 -04:00
a7bea43a13
feat(discover): on-demand Lidarr artist art for suggestions
bvandeusen and Claude Opus 4.7
2026-05-16 20:16:56 -04:00
62db8edcdb
Merge pull request 'Release v2026.05.16.0 — recommendations working end-to-end + cover-art uncap' (#50 ) from dev into main
v2026.05.16.0
bvandeusen
2026-05-16 18:58:55 -04:00
9ffe33a6f2
chore(flutter): bump version to 2026.5.16+8 for v2026.05.16.0
bvandeusen and Claude Opus 4.7
2026-05-16 18:58:19 -04:00
3b142e5332
test(server): drop removed coverArtBackfillCap arg from New() calls
bvandeusen and Claude Opus 4.7
2026-05-16 18:45:24 -04:00
005965d6de
feat(coverart): #388 remove global cover-art backfill cap
bvandeusen and Claude Opus 4.7
2026-05-16 18:41:21 -04:00
4fca0e66cb
fix(listenbrainz): similarity hits Labs API, not the 404'ing main API
bvandeusen and Claude Opus 4.7
2026-05-16 15:50:32 -04:00
4d2aebe3ed
test(similarity): update default-batch assertion 5→25
bvandeusen and Claude Opus 4.7
2026-05-16 14:51:22 -04:00
ca1bc5af62
perf(similarity): worker batch 5→25; track-MBID backfill uncapped
bvandeusen and Claude Opus 4.7
2026-05-16 14:24:45 -04:00
e2432caa65
fix(library): extract recording MBID → tracks.mbid; unblock LB similarity
bvandeusen and Claude Opus 4.7
2026-05-16 13:49:38 -04:00
2e7b81fdfe
fix(playlists): robust For-You seed + deep fill; young-library mix fallbacks
bvandeusen and Claude Opus 4.7
2026-05-16 12:48:20 -04:00
ec0cc37bc9
Merge pull request 'Hotfix v2026.05.15.1 — allow discovery-mix variants in playlists CHECK constraints' (#49 ) from dev into main
v2026.05.15.1
bvandeusen
2026-05-16 00:32:25 -04:00
1e2c486356
fix(playlists): allow the 5 discovery-mix variants in DB constraints
bvandeusen and Claude Opus 4.7
2026-05-15 23:39:21 -04:00
e772938a3b
Merge pull request 'Release v2026.05.15.0 — system playlists v2, offline cache rework, CI speedup' (#48 ) from dev into main
v2026.05.15.0
bvandeusen
2026-05-15 23:15:48 -04:00
0c2b86e736
chore(flutter): bump version to 2026.5.15+6 for v2026.05.15.0
bvandeusen and Claude Opus 4.7
2026-05-15 23:15:10 -04:00
ce36760819
feat(playlists): #417 — "Refreshed …" subtitle on system tiles
bvandeusen and Claude Opus 4.7
2026-05-15 23:03:41 -04:00
2d9775244c
feat(offline): #427 S4b — offline pools on Home beside system tiles
bvandeusen and Claude Opus 4.7
2026-05-15 22:12:51 -04:00
035b000bb0
fix(analyze): drop unused drift import in shuffle_source
bvandeusen and Claude Opus 4.7
2026-05-15 21:44:46 -04:00
a59967be20
fix(offline): move Shuffle all from Home to Library only
bvandeusen and Claude Opus 4.7
2026-05-15 21:41:48 -04:00
a5e2abb8c4
feat(offline): #427 S4a — Shuffle all + offline system-playlist gate
bvandeusen and Claude Opus 4.7
2026-05-15 21:37:29 -04:00
a4f293b7cf
ci(flutter): build debug APK on main only, not every dev push
bvandeusen and Claude Opus 4.7
2026-05-15 21:20:10 -04:00
3f61079c02
feat(offline): #427 S2(+S3) — two-bucket cache model
bvandeusen and Claude Opus 4.7
2026-05-15 21:07:45 -04:00
a0aea00667
feat(offline): #427 S1 — reachability offline marker
bvandeusen and Claude Opus 4.7
2026-05-15 16:13:55 -04:00
c7ee0871a5
feat(playlists): #411 R3 — five discovery mixes (#419-423)
bvandeusen and Claude Opus 4.7
2026-05-15 13:55:27 -04:00
b9accf6934
style: gofmt playlists.go after Refreshable field add (#411 R2)
bvandeusen and Claude Opus 4.7
2026-05-15 13:33:52 -04:00
222742e368
test(api): replace per-kind refresh tests with generic system tests
bvandeusen and Claude Opus 4.7
2026-05-15 13:29:27 -04:00
d67c0de596
refactor(playlists): #411 R2 — generic registry-driven system endpoints
bvandeusen and Claude Opus 4.7
2026-05-15 13:21:09 -04:00
e3957b8eed
fix(lint): rename unused now param in produceDiscover to _
bvandeusen and Claude Opus 4.7
2026-05-15 12:33:05 -04:00
1379595e82
refactor(playlists): #411 R1 — system-playlist kind registry
bvandeusen and Claude Opus 4.7
2026-05-15 12:25:54 -04:00
a571282031
feat(flutter): #426B client — offline play capture via mutation queue
bvandeusen and Claude Opus 4.7
2026-05-15 11:19:11 -04:00
47aa178850
feat(playevents): #426B server — RecordOfflinePlay + /api/events play_offline
bvandeusen and Claude Opus 4.7
2026-05-15 11:14:21 -04:00
8652d7124e
fix(web): #426 classify in-queue track end as play_ended, not skip
bvandeusen and Claude Opus 4.7
2026-05-15 10:45:11 -04:00
3054e8702b
feat(flutter): #415 stage 3 — play-events reporter + rotation wiring
bvandeusen and Claude Opus 4.7
2026-05-15 08:15:32 -04:00
179519689b
feat(web): #415 stage 3 (web) — rotation-aware system playlist play
bvandeusen and Claude Opus 4.7
2026-05-15 07:57:00 -04:00
e43281d1d0
feat(playlists): #415 stage 2 — rotation-aware shuffle endpoint
bvandeusen and Claude Opus 4.7
2026-05-15 07:47:57 -04:00
d2a0b7d780
feat(playlists): #415 stage 1 — rotation-state schema + play ingest
bvandeusen and Claude Opus 4.7
2026-05-15 07:40:17 -04:00
69569a5c2b
feat(playlists): expand For You to 100 tracks (Discover parity)
bvandeusen and Claude Opus 4.7
2026-05-15 07:32:55 -04:00
45c72993f3
feat(flutter): replace Download with Regenerate on system playlist detail
bvandeusen and Claude Opus 4.7
2026-05-15 06:55:37 -04:00
7a0437087a
feat(flutter): refresh kebab on system playlist cards (#416 parity)
bvandeusen and Claude Opus 4.7
2026-05-15 06:35:55 -04:00
d12afdad6e
feat(playlists): system playlists default to shuffle on tile play
bvandeusen and Claude Opus 4.7
2026-05-14 22:55:57 -04:00
33b11a3b3d
feat(settings): About section with version + force update check
bvandeusen and Claude Opus 4.7
2026-05-14 22:26:22 -04:00
29fee5aa37
Merge pull request 'Release v2026.05.14.0 — player polish, CacheFiller, offline mutation queue' (#47 ) from dev into main
v2026.05.14.0
bvandeusen
2026-05-15 01:17:44 +00:00
02336967b4
chore(flutter): bump version to 2026.5.14+5 for v2026.05.14.0
bvandeusen and Claude Opus 4.7
2026-05-14 21:17:14 -04:00
452e29bc59
fix(analyze): restore connectivity_provider import for drain()
bvandeusen and Claude Opus 4.7
2026-05-14 21:01:55 -04:00
f6ee837be6
fix(test): drop eager connectivity listener in MutationReplayer
bvandeusen and Claude Opus 4.7
2026-05-14 20:57:59 -04:00
d27dd69bfc
fix(test): cancel one-shot Timers on CacheFiller / MutationReplayer dispose
bvandeusen
2026-05-14 18:38:38 -04:00
b991fde3fe
fix(flutter): drop unnecessary String? casts on nullable map reads
bvandeusen
2026-05-14 18:31:57 -04:00