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
bvandeusen
3fe929cebd
feat(db/m7-352): sqlc queries for system playlist runs + seed selection
...
Adds internal/db/queries/system_playlists.sql with 12 named queries
covering active-user enumeration, per-user run tracking (claim/finish/fail),
seed-artist/track/cover selection, and playlist CRUD by kind.
Runs sqlc generate to emit dbq/system_playlists.sql.go; also updates
playlists.sql.go and models.go to reflect the new kind/system_variant/
seed_artist_id columns added in migration 0015.
Note: plan specified a.cover_path for PickTopAlbumCoverForArtistByUser
but albums uses cover_art_path — corrected in the query file.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-04 08:14:20 -04:00
bvandeusen
36d05310ce
feat(db/m7-352): system playlists schema (kind, variant, seed_artist_id, runs table)
2026-05-04 08:03:06 -04:00
bvandeusen
79d6045f7a
fix(server/m7-365): silence unused-pool-param lint in history test
2026-05-04 07:05:49 -04:00
bvandeusen
aa5b277b6b
fix(web/m7-365): history page error-state test asserts by role
2026-05-04 07:05:20 -04:00
bvandeusen
c04b288737
feat(web/m7-365): add History entry to Library nav
2026-05-04 06:59:05 -04:00