Commit Graph

3469 Commits

Author SHA1 Message Date
Claudio Ortolina 2503b5e46e Sync docs: Elixir 1.20.0-rc.6, updated Docker tags, busy_timeout 2026-05-25 08:33:09 +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 27d3a9f285 Try and reduce test flakiness 2026-05-23 06:56:52 +01:00
Claudio Ortolina 8127eccd41 Reduce sensitive paths guard to paths in actual use in this application 2026-05-22 23:47:20 +01:00
Claudio Ortolina 69245d8d15 ML-156: extend and improve plan 2026-05-22 23:46:04 +01:00
Claudio Ortolina 484e9297b7 Update git-commit skill to instruct the LLM to skip manual run of precommit tasks 2026-05-22 16:28:55 +01:00
Claudio Ortolina 3f2e5f2e27 ML-169.10: drop socket-internals delete tests
Remove 12 unit tests that accessed socket internals via :sys.get_state
and called handle_async directly — these leak implementation details and
error/exit paths can't be reached through the DOM.

Keep the 3 integration delete tests that use pure DOM assertions: visit,
assert_has, click, refute_has, render_async, DB verification.
2026-05-22 16:27:42 +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 f1c9069c35 Expand enrichment query scope and streamline selected release 2026-05-22 13:40:40 +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 5601d681e9 Make some tests async 2026-05-22 07:42:54 +01:00
Claudio Ortolina c2b8ed2b4a Update elixir to 1.20.0-rc.6 2026-05-21 17:33:37 +01:00
Claudio Ortolina a8fecafe42 Update dependencies
ecto 3.14.0
ecto_sql 3.14.0
ecto_sqlite3 0.24.0

Requires overriding error_tracker dependencies.
2026-05-21 14:44:20 +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 e99597dc7e No need to load checks again, they're compiled 2026-05-21 08:50:00 +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 66fb688b2a Fix toasts not appearing for notes and barcode scan 2026-05-21 07:49:36 +01:00
Claudio Ortolina e46d890143 Extend testing skill for cross-process req stub instructions 2026-05-21 06:38:55 +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 6af942db7c Update dependencies
server_sent_events 1.0.0 => 1.1.0
2026-05-20 22:32:14 +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 981099511f Update dependencies
mix:
  req 0.5.17 => 0.5.18
2026-05-20 17:23:12 +01:00
Claudio Ortolina c537ea0d21 Backlog cleanup 2026-05-20 13:15:11 +01:00
Claudio Ortolina b28309ceb9 Make dev:lint work by default only changed files 2026-05-20 13:14:18 +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 f6792e08aa Update dependencies
quokka 2.13.0 => 2.13.1
2026-05-19 21:56:45 +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 d8b0dd2327 Update ui-framework skill with LV stream gotcha 2026-05-19 15:18:00 +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