Claudio Ortolina
f347f56218
ML-169.8: reduce Stats mount sync queries to 3
...
Move 7 non-critical queries out of synchronous mount into assign_async
and start_async tasks with skeleton loading placeholders.
Only scalar badge counters (collection count, wishlist count, scrobble
count) remain synchronous. All async sections use <.async_result> with
loading and failed slots. Scrobble activity preserves LiveView streams
via handle_async. On-this-day date changes use AsyncResult.ok/2.
2026-05-25 09:31:43 +03:00
Claudio Ortolina
5c80a6d6ad
ML-169.11: archive as invalid
2026-05-23 20:23:01 +01:00
Claudio Ortolina
1ccd9ccc91
ML-182: finish audit and subsequent improvements
2026-05-23 07:18:25 +01:00
Claudio Ortolina
69245d8d15
ML-156: extend and improve plan
2026-05-22 23:46:04 +01:00
Claudio Ortolina
b10be7ba3c
ML-169.10: async delete actions with initial implementation
2026-05-22 16:19:54 +01:00
Claudio Ortolina
9f02e12414
ML-169.10: refine implementation plan
2026-05-22 15:37:09 +01:00
Claudio Ortolina
ee4eecd1c6
ML-169.9: archive invalid stream pagination task
...
Pagination is page-based (not load-more), so reset: true on each
page navigation is correct. Using at: -1 would accumulate records
across pages, breaking the pagination model.
2026-05-22 15:29:07 +01:00
Claudio Ortolina
67a2e6eac6
ML-196: add application-task pi prompt template
...
Introduces /application-task for working on Backlog.md tasks end-to-end:
- Pre-flight: read docs, load task plan, load relevant skills
- Execution: present plan, short loops, log progress, handle scope
- Done vs Complete: finalize without archiving, per Backlog.md workflow
2026-05-22 15:17:12 +01:00
Claudio Ortolina
ff3f809c2c
ML-170: add enrichment fields to collection API
...
Add MusicLibrary.Collection.Enrichment module with batch scrobble, artist
country, and selected release enrichment from existing tables.
Wire enrichment into all four collection API endpoints (index, latest,
random, on_this_day). New JSON fields: scrobble_count, last_listened_at,
artist_country, selected_release.
Uses 3 fixed-count batch queries regardless of page size — no N+1 risk.
No schema changes or migrations required.
2026-05-22 13:21:14 +01:00
Claudio Ortolina
c41299f6c1
ML-196: pi template work on application task (capture)
2026-05-22 13:18:08 +01:00
Claudio Ortolina
00864ae994
Backlog cleanup
2026-05-22 10:28:26 +01:00
Claudio Ortolina
d8a67cd475
ML-181: harden assets endpoints
2026-05-22 08:20:35 +01:00
Claudio Ortolina
ca01e94d47
ML-194: add selective smoke coverage
...
Add smoke tests for bulk cron workers, CSP browser header, and
on_mount hooks (GetTimezone/StaticAssets). 9 tests across 4 files,
all passing alongside 135 existing related tests.
2026-05-21 12:01:32 +01:00
Claudio Ortolina
ec6980eea0
ML-193: add secondary parser, search, and API coverage tests
...
Add ~80 focused tests across 10 files covering:
- Record set search by name, description, contained record title, artist name
- Navigation events for records, artists, record sets, links, and view-all actions
- MusicBrainz.ReleaseGroup parser (artist credits, included RGs, release IDs, types)
- MusicBrainz.ReleaseSearchResult edge cases (missing RG, unknown formats)
- LastFm.Session XML edge cases (non-subscriber, missing nodes)
- MusicLibrary.HttpError default status-kind mapping
- Discogs.API.ErrorResponse fallback message and retry-delay behavior
- ArtistRefreshWikipediaData {:cancel, :no_english_wikipedia} worker path
- StatsComponents grouped on-this-day records and anniversary labels
2026-05-21 10:45:29 +01:00
Claudio Ortolina
ff42f24972
ML-195: Add credo check for put_toast/put_toast! usage in live components
2026-05-21 08:08:11 +01:00
Claudio Ortolina
2983313426
ML-192: add high value missing tests
...
- Record editing + cover search
- Barcode scan errors + cart editing
- Notes
- Scrobble rules application over set of tracks
- Image conversion
2026-05-21 06:38:02 +01:00
Claudio Ortolina
07f43e59bb
ML-192: plan refinement
2026-05-20 22:55:34 +01:00
Claudio Ortolina
ab48d4b13a
Add testing coverage backlog tasks
2026-05-20 18:22:08 +01:00
Claudio Ortolina
23960b5b23
ML-169.10.1: Add delete coverage
...
Cover current delete behavior across LiveView index and show paths, and strengthen existing delete tests with persistence assertions.\n\nValidation: mise run dev:precommit
2026-05-20 18:04:29 +01:00
Claudio Ortolina
c537ea0d21
Backlog cleanup
2026-05-20 13:15:11 +01:00
Claudio Ortolina
004d2a2318
ML-169.10: refine implementation plan
2026-05-20 11:20:33 +01:00
Claudio Ortolina
760c44ccb5
ML-169.10: rescope to list pages and use async handling
2026-05-20 10:42:35 +01:00
Claudio Ortolina
d2def9d0d3
ML-169.8: tighten task scope
2026-05-20 07:55:36 +01:00
Claudio Ortolina
4a6c80f7a9
ML-191: avoid VACUUM / scrobble refresh write collision
...
Set busy_timeout: 5_000 on MusicLibrary.Repo so SQLite waits up to
5 seconds on lock contention instead of throwing SQLITE_BUSY
immediately (default is 0).
Move RepoVacuum from 0 3 to 3 3 (3:03 AM London) to avoid the
deterministic collision with RefreshScrobbles which fires on the
every-5-min cadence at the hour mark.
2026-05-19 16:46:37 +01:00
Claudio Ortolina
78670268d5
ML-169.5: cancel task as it breaks functionality
2026-05-19 15:16:55 +01:00
Claudio Ortolina
be371cbf4e
ML-169.11: add correlated subquery fix task
2026-05-19 12:51:36 +01:00
Claudio Ortolina
ab8062ddc6
ML-169.9: add pagination stream reset fix task
2026-05-19 12:51:29 +01:00
Claudio Ortolina
e42e28992a
ML-169.10: add optimistic delete UI fix task
2026-05-19 12:51:19 +01:00
Claudio Ortolina
96248231fa
ML-169.7: add scrobble stream reset fix task
2026-05-19 12:51:05 +01:00
Claudio Ortolina
c9f00c9360
ML-169.8: add StatsLive TTFB performance fix task
2026-05-19 12:50:56 +01:00
Claudio Ortolina
e458f605c5
ML-169.6: add redundant stream reload fix task
2026-05-19 12:50:36 +01:00
Claudio Ortolina
0ec4b989c9
ML-169.5: add display toggle performance fix task
2026-05-19 12:50:09 +01:00
Claudio Ortolina
f1fde63d42
ML-189: simplify release-component notifications
...
- Use a tagged type
- Leave skipping responsibility to subscribed process
2026-05-19 12:18:07 +01:00
Claudio Ortolina
73046bb0f5
ML-190: fix record subscription lifecycle
2026-05-19 12:10:34 +01:00
Claudio Ortolina
e204e555bd
ML-188: guard PubSub record updates during edit mode
...
Add live_action guard to handle_info({:update, record}) in both
CollectionLive.Show and WishlistLive.Show. When the user is editing,
background worker updates are skipped and a warning toast is shown
instead of overwriting the socket. Normal show-mode updates and
mismatched-ID no-ops are unchanged.
6 tests added covering all three code paths.
2026-05-19 11:38:42 +01:00
Claudio Ortolina
2fca0bb106
ML-190: fix redundant unsubscribe (plan)
2026-05-19 10:38:41 +01:00
Claudio Ortolina
0f529daa4e
ML-189: fix dynamic tag type (plan)
2026-05-19 10:21:45 +01:00
Claudio Ortolina
5ee1d0b82a
ML-188: race condition in background update (plan)
2026-05-19 10:03:58 +01:00
Claudio Ortolina
70dfce1346
Move audit tasks to done (should have done that earlier)
2026-05-19 09:51:14 +01:00
Claudio Ortolina
0881971635
Backlog cleanup
2026-05-19 09:48:55 +01:00
Claudio Ortolina
54b682a663
ML-190: add same-record reconnect optimization task
...
From audit doc-25 (Phase 2), Recommendation #2 .
2026-05-19 09:46:31 +01:00
Claudio Ortolina
b858c27f52
ML-189: add Release component tag type-safety task
...
From audit doc-24 (Phase 1), Recommendation #1 .
2026-05-19 09:46:22 +01:00
Claudio Ortolina
8baaa7df27
ML-188: add form edit + background update race fix task
...
From audit doc-26 (Phase 3), Recommendation #1 .
2026-05-19 09:46:11 +01:00
Claudio Ortolina
762b64659b
ML-169: performed all audits
2026-05-19 08:47:08 +01:00
Claudio Ortolina
8de5d88c14
ML-169.2: performed performance audit
2026-05-19 08:45:58 +01:00
Claudio Ortolina
2a108660ae
ML-169.1: performed concurrent state change safety audit
2026-05-19 08:33:55 +01:00
Claudio Ortolina
2d4b82e7bb
ML-169.3: performed pubsub audit
2026-05-19 08:20:11 +01:00
Claudio Ortolina
a2bb98679c
ML-168.4: perform async messages audit
2026-05-19 07:38:37 +01:00
Claudio Ortolina
af62cf38a6
ML-187: done
2026-05-18 16:11:57 +01:00
Claudio Ortolina
795e511fc1
ML-187: smarter precommit hook (plan)
2026-05-18 15:55:15 +01:00