bvandeusen
1ed6ca0309
feat(db/m7-381): sqlc queries for scan_runs
2026-05-04 20:04:55 -04:00
bvandeusen
031f4bef8b
feat(db/m7-381): scan_runs table for admin scan-status view
2026-05-04 20:04:04 -04:00
bvandeusen
835580ef1e
fix(web/m7-380): convert PlaylistTrack to TrackRef in PlaylistCard play handler
2026-05-04 19:46:43 -04:00
bvandeusen
b290b4ff0b
feat(web/m7-380): animate pending placeholder + add play overlay to PlaylistCard
2026-05-04 19:42:30 -04:00
bvandeusen
34615fffbd
feat(server/m7-380): one-shot MBID backfill worker for existing libraries
...
Adds a boot-time goroutine that walks albums with NULL mbid, re-reads
tags from one track per album via dhowden/tag, and persists album + artist
MBIDs. Healed albums also get their cover_art_source='none' cleared so the
enricher's next batch retries the MBCAA fetch. Caps at 5000 albums per
boot to avoid stalling startup on huge libraries.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 19:40:27 -04:00
bvandeusen
26f4c7a79f
fix(web/m7-352): use typographic apostrophe in failed-variant copy
2026-05-04 19:16:25 -04:00
bvandeusen
b8f9b3891b
fix(server/m7-379): enricher leaves cover_art_source NULL when MBID missing
2026-05-04 19:04:16 -04:00
bvandeusen
6c6c4bc1e4
feat(server/m7-379): heal existing artist+album mbid on rescan
2026-05-04 19:03:12 -04:00
bvandeusen
ab8fff834a
feat(server/m7-379): extract MusicBrainz IDs from audio tags during scan
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 19:01:55 -04:00
bvandeusen
412a1c00ac
fix(web/m7-352): update listPlaylists test URL after kind filter addition
2026-05-04 18:52:40 -04:00
bvandeusen
5698cfe8e4
feat(web/m7-352): home Playlists row — For-You + Songs-like + user playlists
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 18:34:03 -04:00
bvandeusen
b8bb1c1fa7
feat(web/m7-352): PlaylistPlaceholderCard with 4 state variants
2026-05-04 18:31:42 -04:00
bvandeusen
886903ae27
feat(web/m7-352): kind-aware createPlaylistsQuery + system-playlists-status helper
2026-05-04 18:30:43 -04:00
bvandeusen
56f0998f84
feat(web/m7-352): Playlist type gains kind/system_variant/seed_artist_id fields
2026-05-04 18:14:46 -04:00
bvandeusen
a8630a1355
feat(server/m7-352): GET /api/me/system-playlists-status for home placeholders
2026-05-04 18:13:13 -04:00
bvandeusen
db361c8305
feat(web/m7-377): CompactTrackCard gains like + queue + kebab overlays
2026-05-04 17:49:19 -04:00
bvandeusen
a062c8229f
fix(server/m7-353): rename unused r in handleAdminBulkRefetchCovers
2026-05-04 17:43:22 -04:00
bvandeusen
1691290875
fix(server): forward-fix CI — gofmt convert/types + rename unused r in enricher_test
2026-05-04 17:41:16 -04:00
bvandeusen
0dbe326d8b
fix(server,web): forward-fix CI lint + vitest failures
...
- gofmt -s on system.go, system_cron.go, api.go
- rename unused r → _ in 3 fetcher_test.go HTTP handlers
- TrackRow +queue test uses /add .* to queue/i (track-aware aria-label from #377 )
- /library/artists page test mocks likes + tanstack-query (ArtistCard now embeds LikeButton)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-04 17:39:06 -04:00
bvandeusen
93f54e00a4
fix(server,web/m7-353): forward-fix CI — Mount call + AlbumRef test fixtures
2026-05-04 17:31:27 -04:00
bvandeusen
4e3bd46d69
fix(server,web/m7-353): post-review fixes (test compilation, AlbumRef field, bulk handler, design system)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 15:21:24 -04:00
bvandeusen
28617df5bd
feat(web/m7-353): admin cover-refetch UI (per-album + bulk)
...
Adds cover_art_source to AlbumRef, two admin API helpers (refetchAlbumCover,
refetchMissingCovers), a per-album retry button gated on is_admin in the album
detail page, and a bulk-refetch section in the admin overview.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 15:15:26 -04:00
bvandeusen
d4a837b904
feat(server/m7-353): admin endpoints for cover refetch (per-album + bulk)
...
Adds POST /api/admin/albums/{id}/cover/refetch (synchronous single-album
retry) and POST /api/admin/covers/refetch-missing (async bulk drain).
Wires coverart.Enricher through server.New → api.Mount → handlers struct.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 15:11:53 -04:00
bvandeusen
6c33acf062
feat(server/m7-353): config + main.go wiring for coverart enricher
2026-05-04 15:06:28 -04:00
bvandeusen
64475d45dc
fix(server/m7-353): log retry-missing errors + tighten 404 test + cover EnrichRetryMissing
2026-05-04 15:04:23 -04:00
bvandeusen
78994a60cf
feat(server/m7-353): coverart.Enricher orchestrates sidecar + MBCAA + record
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 15:00:28 -04:00
bvandeusen
2d3841966e
feat(server/m7-353): coverart.Fetcher MBCAA HTTP client + rate limiter
2026-05-04 14:49:28 -04:00
bvandeusen
ef6c09dbfb
refactor(server/m7-353): consolidate findSidecarCover into coverart package
2026-05-04 14:46:28 -04:00
bvandeusen
70defdb5bc
feat(server/m7-353): coverart.FindSidecar shared helper + tests
2026-05-04 14:45:20 -04:00
bvandeusen
15170ed7c6
feat(db/m7-353): sqlc queries for album cover enrichment
2026-05-04 14:30:55 -04:00
bvandeusen
458a183099
feat(db/m7-353): add albums.cover_art_source enum column
2026-05-04 14:29:13 -04:00
bvandeusen
40be3bf917
feat(web/m7-377): album detail header gets LikeButton + Play/Shuffle row
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 13:10:47 -04:00
bvandeusen
ebafdbfb05
feat(web/m7-377): artist detail moves LikeButton inline with heading at size lg
2026-05-04 13:09:25 -04:00
bvandeusen
8fff7f62d6
refactor(web/m7-377): TrackRow +queue uses Lucide Plus icon + scoped aria-label
2026-05-04 13:08:26 -04:00
bvandeusen
d35ed5945a
feat(web/m7-377): AlbumCard gains bottom-right kebab
2026-05-04 13:07:06 -04:00
bvandeusen
4e42fc8280
feat(web/m7-377): ArtistCard top-right cluster + bottom-right kebab
2026-05-04 13:05:11 -04:00
bvandeusen
43a3dc47a8
feat(web/m7-377): AlbumMenu component + listAlbumTracks helper
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 11:59:38 -04:00
bvandeusen
ce01b3d992
feat(web/m7-377): ArtistMenu component with like/queue/playlist actions
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 11:53:41 -04:00
bvandeusen
72496852a5
feat(web/m7-377): LikeButton gains size prop (sm/md/lg)
2026-05-04 11:50:31 -04:00
bvandeusen
9eeb79e99f
fix(web/m7-377): update AddToPlaylistMenu tests for tracks-array prop
2026-05-04 11:48:55 -04:00
bvandeusen
7ddf77ace5
refactor(web/m7-377): AddToPlaylistMenu accepts tracks: TrackRef[]
2026-05-04 11:47:53 -04:00
bvandeusen
2b286a9bfd
docs(db/m7-352): note ListPlaylistsByUserAndKind is test-only
...
Production list-playlists handler reuses Service.List + in-memory kind
filter so other users' public playlists can surface alongside the
caller's filtered own. Comment clarifies the divergence so future
readers don't expect this query to be wired into the API path.
2026-05-04 10:31:09 -04:00
bvandeusen
0a1e76564d
feat(server/m7-352): 403 system_playlist_readonly on playlist edit endpoints
...
Push kind='system' guard into each of the five Service edit methods
(Update, Delete, AppendTracks, RemoveTrack, Reorder) immediately after
the ownership check; map the typed error to 403 in writePlaylistErr;
add table-driven test covering all five verbs against a seeded system
playlist.
2026-05-04 09:29:37 -04:00
bvandeusen
a90ff11f0f
feat(server/m7-352): kind filter on GET /api/playlists + lazy fallback
...
Adds ?kind= filter (user|system|all, default user) to GET /api/playlists
so system mixes don't leak into slice-1 SPA views. Lazy background build
fires when kind=system|all and the caller's run row is stale (>24h).
Propagates Kind/SystemVariant/SeedArtistID through PlaylistRow and
playlistRowView wire types.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 09:24:27 -04:00
bvandeusen
391f5f16a1
feat(server/m7-352): cron loop + main.go wiring for system playlist build
2026-05-04 09:16:07 -04:00
bvandeusen
797a2c8a45
fix(server/m7-352): log Finish/Fail run errors; drop unused seed-limit constant
2026-05-04 09:14:40 -04:00
bvandeusen
46a9de8e9a
feat(server/m7-352): BuildSystemPlaylists with atomic replace + concurrency guard
...
Implements T5 of #352 slice 2: adds CreateSystemPlaylist sqlc query,
BuildSystemPlaylists function (For-You + Songs-like mixes, tx atomic
replace, in_flight guard, tieBreakHash determinism), and 7 integration
tests covering activity, quarantine exclusion, atomic replace, concurrency,
daily nonce stability, ListActiveUsers, and stale-in-flight recovery.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 08:35:02 -04:00
bvandeusen
ef478778ef
feat(server/m7-352): system mix helpers (tieBreakHash, pickSeedArtists)
2026-05-04 08:24:39 -04:00
bvandeusen
d7aebafa5d
feat(server/m7-352): AssertEditable + ErrSystemPlaylistReadonly on playlists service
2026-05-04 08:21:39 -04:00
bvandeusen
58a27e2f0f
fix(db/m7-352): cast COALESCE to uuid so sqlc emits typed return
2026-05-04 08:15:21 -04:00