This website requires JavaScript.
2ca09749d9
feat(db): add artist_similarity_unmatched schema (migration 0012)
bvandeusen
2026-05-01 05:50:22 -04:00
cf1b75ca12
docs(plan): add M5c suggested-additions implementation plan
bvandeusen
2026-04-30 23:02:41 -04:00
a0a9fb201b
docs(spec): add M5c suggested-additions design
bvandeusen
2026-04-30 22:48:55 -04:00
3e3ad89645
fix: T16 verification cleanups
bvandeusen
2026-04-30 20:49:11 -04:00
3bfec944c7
feat(web): /admin/quarantine aggregated queue with resolution actions
bvandeusen and Claude Opus 4.7
2026-04-30 20:40:34 -04:00
0d7a65cffb
feat(web): /library/hidden user-facing quarantine view
bvandeusen and Claude Opus 4.7
2026-04-30 20:35:11 -04:00
88ff997af7
feat(web): mount TrackMenu in TrackRow + PlayerBar
bvandeusen
2026-04-30 20:31:56 -04:00
8da4a3f9c0
feat(web): TrackMenu overflow + FlagPopover for the quarantine flow
bvandeusen
2026-04-30 20:29:07 -04:00
b653e83478
feat(web): API client modules for quarantine + admin quarantine
bvandeusen
2026-04-30 20:26:07 -04:00
b7f8136502
fix(server): wire real Lidarr clientFn for requests + quarantine services
bvandeusen
2026-04-30 20:23:07 -04:00
6fedd495be
feat(api): /api/quarantine user + admin endpoints + Service wiring
bvandeusen
2026-04-30 20:19:39 -04:00
ba81e4f2ac
feat(api): route track-list reads through user-context quarantine filter
bvandeusen
2026-04-30 20:09:04 -04:00
559fb5dd2c
feat(db): add user-context track query variants honoring quarantine
bvandeusen
2026-04-30 19:49:00 -04:00
ef3fffb3ea
fix(lidarrquarantine): keep LidarrAlbumMbid nil on Resolve/DeleteFile audit rows + cover idempotent Resolve
bvandeusen
2026-04-30 19:42:19 -04:00
782e72b595
feat(lidarrquarantine): admin actions Resolve/DeleteFile/DeleteViaLidarr
bvandeusen
2026-04-30 19:37:40 -04:00
7a0bc1f815
fix(lidarrquarantine): translate FK violation to ErrTrackNotFound + drop unneeded *string AlbumTitle
bvandeusen
2026-04-30 17:42:55 -04:00
b4fe224a67
feat(lidarrquarantine): Service Flag/Unflag/ListMine/ListAdminQueue
bvandeusen
2026-04-30 17:36:27 -04:00
e6e3f297d6
fix(dbtest,library): include quarantine tables in ResetDB; clarify DeleteTrackFile docstring
bvandeusen
2026-04-30 17:32:08 -04:00
d0523da520
feat(library): DeleteTrackFile (rm file + tracks row, album/artist preserved)
bvandeusen
2026-04-30 17:04:21 -04:00
dbe0e79f54
fix(lidarr): wrap MBID-lookup decode errors with ErrInvalidPayload + fill test gaps
bvandeusen
2026-04-30 17:01:50 -04:00
f2cdd23fd5
feat(lidarr): LookupArtistByMBID, LookupAlbumByMBID, DeleteAlbum
bvandeusen
2026-04-30 16:57:14 -04:00
71a9bd8dee
fix(db): drop redundant quarantine user index + tighten ListQuarantineForUser
bvandeusen
2026-04-30 16:54:03 -04:00
a8df73fe42
feat(db): add lidarr_quarantine + actions schema (migration 0011)
bvandeusen
2026-04-30 16:48:33 -04:00
0806a37a42
docs(plan): add M5b quarantine workflow implementation plan
bvandeusen
2026-04-30 15:15:53 -04:00
0b3919e4a1
docs(spec): add M5b quarantine workflow design
bvandeusen
2026-04-30 14:54:44 -04:00
db37deb6f8
test(lidarrrequests): expand coverage on Service.Approve + Reconciler
bvandeusen
2026-04-30 10:58:21 -04:00
ab9be40bb2
feat(web): add /admin/requests approval queue with override modal
bvandeusen
2026-04-29 23:31:18 -04:00
b895e9ef7e
feat(web): add /admin/requests approval queue with override modal
bvandeusen and Claude Opus 4.7
2026-04-29 23:24:34 -04:00
b1b50187b3
fix(web): integrations panel review fixes
bvandeusen
2026-04-29 23:11:32 -04:00
c281c8b5dd
feat(web): add /admin/integrations Lidarr connection panel
bvandeusen and Claude Opus 4.7
2026-04-29 23:06:19 -04:00
041e63744d
fix(web): promote bg-accent-tint to a real Tailwind utility
bvandeusen
2026-04-29 22:54:30 -04:00
bfd48f5a02
feat(web): add /admin layout with role-gated load + sidebar
bvandeusen and Claude Opus 4.7
2026-04-29 22:48:26 -04:00
dd86ffca94
fix(web): a11y on /requests aria-labels when titles are absent
bvandeusen
2026-04-29 22:29:07 -04:00
ad904afaf6
feat(web): add /requests user-facing request history
bvandeusen and Claude Opus 4.7
2026-04-29 22:24:17 -04:00
a7506d9413
fix(web): drop dead onkeydown stopPropagation on discover modal
bvandeusen
2026-04-29 22:20:35 -04:00
8a12b8c571
feat(web): add /discover route with search + request flow
bvandeusen and Claude Opus 4.7
2026-04-29 22:15:52 -04:00
d27b381250
feat(web): add StatusPill semantic-color status indicator
bvandeusen
2026-04-29 22:08:09 -04:00
dcb49e9687
fix(web): a11y on DiscoverResultCard + drop test-only inline styles
bvandeusen and Claude Opus 4.7
2026-04-29 21:05:27 -04:00
c8bd19d6f1
feat(web): add DiscoverResultCard with reserved badge slot + anchored button
bvandeusen and Claude Opus 4.7
2026-04-29 20:27:58 -04:00
ce7424219c
feat(web): adminRequests cache key + staleTime polish
bvandeusen
2026-04-29 20:04:51 -04:00
d7eaa189e2
feat(web): add API client modules for Lidarr, requests, admin
bvandeusen and Claude Opus 4.7
2026-04-29 19:53:04 -04:00
29968ae8da
feat(web): wire Tailwind fontFamily to FS font tokens
bvandeusen
2026-04-29 19:42:53 -04:00
a7090c3768
feat(web): introduce FabledSword design system tokens + Tailwind aliases
bvandeusen and Claude Opus 4.7
2026-04-29 18:48:20 -04:00
d1c1853d49
fix(auth): silence revive unused-parameter on stub test handlers
bvandeusen
2026-04-29 17:58:32 -04:00
1bde1787b9
feat(cmd): start Lidarr reconciler worker alongside HTTP server
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:57:42 -04:00
82ffb12f68
feat(api): add /api/admin/requests approval queue
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:56:25 -04:00
6fcae8dee4
feat(api): add /api/admin/lidarr/* config + profiles + folders + test
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:44:54 -04:00
03cbd4d0c1
feat(api): add /api/requests user-facing CRUD
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:40:49 -04:00
9192eb9f0a
fix(api): gofmt + revive cleanup on lidarr search handler
bvandeusen
2026-04-29 17:35:45 -04:00
905e27a988
feat(api): add /api/lidarr/search proxy with library/request enrichment
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:35:00 -04:00
4492826354
feat(auth): add RequireAdmin middleware for /api/admin/* routes
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:27:47 -04:00
f73a5ccef5
feat(lidarrrequests): add Reconciler worker matching approved requests to library
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:17:32 -04:00
b11fc117e7
feat(lidarrrequests): request lifecycle service (create/list/approve/reject/cancel)
bvandeusen and Claude Sonnet 4.6
2026-04-29 17:12:03 -04:00
429b75131b
feat(lidarrconfig): typed singleton config wrapper
bvandeusen and Claude Sonnet 4.6
2026-04-29 16:29:22 -04:00
ebff8f69a0
fix(lidarr): address review findings on HTTP client
bvandeusen and Claude Sonnet 4.6
2026-04-29 16:26:23 -04:00
a43fa09a04
feat(lidarr): typed HTTP client for v1 API (lookup, add, profiles, ping)
bvandeusen and Claude Sonnet 4.6
2026-04-29 15:25:10 -04:00
a5bb79f2a8
fix(db): clarify lidarr_requests query semantics
bvandeusen and Claude Sonnet 4.6
2026-04-29 15:19:54 -04:00
9ceac5c639
feat(db): add lidarr_config + lidarr_requests schema (migration 0010)
bvandeusen and Claude Sonnet 4.6
2026-04-29 15:10:01 -04:00
d77f2d4459
docs(plan): add M5a Lidarr connection + search/add implementation plan
bvandeusen and Claude Opus 4.7
2026-04-29 15:01:20 -04:00
17406eebee
docs(spec): add M5a Lidarr connection + search/add design
bvandeusen and Claude Opus 4.7
2026-04-29 14:25:08 -04:00
2238a8a209
Merge pull request 'test: stop wiping admin user during integration tests' (#29 ) from dev into main
bvandeusen
2026-04-29 16:24:07 +00:00
21310e7716
test: bootstrap test saves/restores non-test users
bvandeusen and Claude Opus 4.7
2026-04-29 12:04:16 -04:00
937a1930ad
test: add dbtest.ResetDB helper that preserves admin user
bvandeusen and Claude Opus 4.7
2026-04-29 11:55:06 -04:00
132dddbc37
Merge pull request 'feat: M4c radio similarity-driven candidate pool + 80% queue refresh (closes M4)' (#28 ) from dev into main
bvandeusen
2026-04-29 14:45:17 +00:00
d8b955ff0c
feat(web): radio queue auto-refreshes at 80% via ?exclude= param
bvandeusen
2026-04-29 08:50:24 -04:00
8647f9ebe0
feat(api): radio uses similarity pool with exclude param + M3 fallback
bvandeusen and Claude Sonnet 4.6
2026-04-29 08:47:31 -04:00
b8e3019654
fix(db): split seed_info CTE so similar-artist works without seed genre
bvandeusen
2026-04-29 08:43:42 -04:00
51811c9d35
feat(recommendation): add LoadCandidatesFromSimilarity (5-source candidate pool)
bvandeusen and Claude Sonnet 4.6
2026-04-29 08:30:53 -04:00
bb3f911761
feat(recommendation): extend Score with SimilarityScore + SimilarityWeight
bvandeusen
2026-04-29 08:01:53 -04:00
362cb2c9ce
feat(db): add LoadRadioCandidatesV2 sqlc query (5-way UNION)
bvandeusen
2026-04-29 07:56:57 -04:00
2e6d2ffd03
docs(plan): add M4c radio similarity-driven candidate pool plan
bvandeusen
2026-04-29 06:58:22 -04:00
267c4ad80b
docs(spec): add M4c radio similarity-driven candidate pool design
bvandeusen and Claude Opus 4.7
2026-04-28 23:02:01 -04:00
d9cbf4e434
Merge pull request 'feat: M4b inbound ListenBrainz similarity ingest' (#27 ) from dev into main
bvandeusen
2026-04-29 01:22:37 +00:00
358bfd9453
feat(cmd): start similarity worker alongside HTTP server
bvandeusen
2026-04-28 20:25:11 -04:00
893adf04c9
feat(similarity): implement Worker.tickOnce with track + artist passes
bvandeusen and Claude Sonnet 4.6
2026-04-28 20:06:47 -04:00
9adad094b0
feat(similarity): add Worker skeleton with constructor + Run loop
bvandeusen
2026-04-28 20:02:15 -04:00
b0d1d6bb46
feat(listenbrainz): add SimilarArtists client method
bvandeusen
2026-04-28 20:01:17 -04:00
23d55a868b
feat(listenbrainz): add SimilarRecordings client method
bvandeusen
2026-04-28 19:59:38 -04:00
d4e0e5fae3
feat(db): add similarity sqlc queries (list-needing, get-by-mbids, upsert)
bvandeusen
2026-04-28 19:58:05 -04:00
fc2d35d33c
feat(db): add migration 0009 for similarity (track_similarity + artist_similarity)
bvandeusen
2026-04-28 19:57:02 -04:00
9ec9caf667
docs(plan): add M4b ListenBrainz inbound similarity ingest plan
bvandeusen
2026-04-28 19:51:57 -04:00
86cb8e5cbf
docs(spec): add M4b ListenBrainz inbound similarity ingest design
bvandeusen and Claude Opus 4.7
2026-04-28 19:46:23 -04:00
6b5526788e
Merge pull request 'feat: M4a outbound ListenBrainz scrobble worker' (#26 ) from dev into main
bvandeusen
2026-04-28 22:36:57 +00:00
13e12d97ae
feat(web): add /settings page with ListenBrainz section
bvandeusen and Claude Sonnet 4.6
2026-04-28 15:45:42 -04:00
46b23424c2
feat(cmd): start scrobble worker alongside HTTP server
bvandeusen
2026-04-28 09:28:13 -04:00
1d1119ac32
feat(api): add GET/PUT /api/me/listenbrainz endpoints
bvandeusen and Claude Sonnet 4.6
2026-04-28 09:27:06 -04:00
4d123f1b71
feat(playevents): post-commit MaybeEnqueue in RecordPlayEnded + Synthetic
bvandeusen
2026-04-28 09:23:21 -04:00
9490bad360
feat(scrobble): add Worker with tickOnce, batched submit, retry/fail/auth handling
bvandeusen and Claude Sonnet 4.6
2026-04-28 09:20:23 -04:00
8ce39a8868
feat(scrobble): add backoffDelay schedule (1m, 5m, 30m, 2h, 6h, give up)
bvandeusen
2026-04-28 09:14:08 -04:00
dba1deaad1
feat(scrobble): add MaybeEnqueue with idempotent insert + threshold gate
bvandeusen and Claude Sonnet 4.6
2026-04-28 09:13:11 -04:00
767e246b73
feat(scrobble): add pure Qualifies threshold function
bvandeusen
2026-04-28 09:10:39 -04:00
5359a16091
style(scrobble): rename unused r *http.Request to _ in client tests
bvandeusen
2026-04-28 09:09:45 -04:00
3d23f4930c
feat(scrobble): add pure ListenBrainz HTTP client with typed errors
bvandeusen
2026-04-28 08:45:13 -04:00
a0e21f21b6
feat(db): add ListenBrainz user-config and scrobble_queue queries
bvandeusen
2026-04-28 08:42:38 -04:00
efc2308348
feat(db): add migration 0008 for scrobble (users LB columns + scrobble_queue table)
bvandeusen
2026-04-28 08:40:39 -04:00
08b360b67e
Merge pull request 'ci: drop push:dev trigger; PR is the gate' (#25 ) from dev into main
bvandeusen
2026-04-28 12:35:52 +00:00
a90deab862
docs(plan): add M4a outbound scrobble worker implementation plan
bvandeusen
2026-04-28 08:34:26 -04:00
791c6c7fd6
docs(spec): add M4a outbound scrobble worker design
bvandeusen and Claude Opus 4.7
2026-04-28 08:21:43 -04:00
4f67dd6b0a
ci: drop push:dev trigger; PR is the gate
bvandeusen
2026-04-28 00:05:33 -04:00
bda35c73ef
Merge pull request 'fix: M3.5 polish — genre splitting, radio button, search focus' (#24 ) from dev into main
bvandeusen
2026-04-28 04:04:13 +00:00