Commit Graph

3499 Commits

Author SHA1 Message Date
Claudio Ortolina f4648ce5d9 Scrobble entire release from wishlist show page 2026-05-29 08:22:14 +03:00
Claudio Ortolina 33474c1472 Allow scrobbling wishlisted records 2026-05-29 08:09:55 +03:00
Claudio Ortolina dd24258f33 Make stats formats and types counters sync 2026-05-27 23:45:29 +03:00
Claudio Ortolina aeca27d83d Use partitioned tests in precommit 2026-05-27 23:35:11 +03:00
Claudio Ortolina fed7f97b8e Increase partitioned test setup to 4 partitions 2026-05-27 23:32:17 +03:00
Claudio Ortolina 53652644b2 Update gh 2026-05-27 23:25:42 +03:00
Claudio Ortolina b895c9817f Remove duplicated usage_rules blocks in AGENTS.md 2026-05-27 23:16:21 +03:00
Claudio Ortolina f75e34211b Update dependencies
mix:
  decimal 3.1.0 => 3.1.1
  oban 2.22.1 => 2.23.0
2026-05-27 20:36:16 +03:00
Claudio Ortolina 87d2a59c3b Link included release groups to MusicBrainz
Render each included release group in the record detail page as a
link to its MusicBrainz release group page, opening in a new tab.
2026-05-27 13:00:45 +03:00
Claudio Ortolina 0adf6c6e6f Research image compression and optimization avenues 2026-05-27 11:31:01 +03:00
Claudio Ortolina d19a4a838c Add documentation writing guidelines 2026-05-27 07:40:32 +03:00
Claudio Ortolina 65f472c980 Convert screenshots to JPG 2026-05-27 07:27:25 +03:00
Claudio Ortolina 57866f4cad ML-198: document timezone plan 2026-05-27 01:11:07 +03:00
Claudio Ortolina 69101114ee Slightly compress screenshots 2026-05-27 01:05:17 +03:00
Claudio Ortolina 1d9fe12ca5 Update dependencies
mix:
  oban_web 2.12.4 => 2.12.5
  swoosh 1.25.2 => 1.25.3
2026-05-27 00:26:10 +03:00
Claudio Ortolina 45c52ee614 Tighten setup instructions 2026-05-26 18:48:12 +03:00
Claudio Ortolina 9939b53aa2 Fix compose variable name 2026-05-26 14:55:44 +03:00
Claudio Ortolina 19e097e514 ML-197: add Elm-style Presto application 2026-05-26 08:59:01 +03:00
Claudio Ortolina 631053b87e ML-197: track Elm-style Presto application 2026-05-26 08:45:04 +03:00
Claudio Ortolina c0af66190c [presto] Update dependencies 2026-05-25 23:02:09 +03:00
Claudio Ortolina 0d6d2fdc32 Ignore application and router in cover config 2026-05-25 22:15:31 +03:00
Claudio Ortolina 65b2f3e1f2 Update dependencies
ex_slop 0.4.1 => 0.4.2

Introduces a new check around misusing the `length/1` function which
require widespread fixes.
2026-05-25 19:45:33 +03:00
Claudio Ortolina bfcdfc1b90 ML-169.7: record audit findings 2026-05-25 12:52:01 +03:00
Claudio Ortolina 118171ed8a ML-169.8: restore formats/types stats position after counters
Formats and types stats should appear directly after the record counters,
before the TopArtists/TopAlbums/OnThisDay grid. The refactor had
accidentally moved them below.
2026-05-25 11:32:48 +03:00
Claudio Ortolina d75a683df0 Update README features section
Add missing features: collection chat, markdown notes, store templates, scrobbled tracks browsing, tracklist PDF, daily email, maintenance dashboard, cart-style import, color extraction, and search syntax details. Group into sub-sections for readability.
2026-05-25 10:06:47 +03:00
Claudio Ortolina 9f6848f1ab Fix gh actions to use mise lock as cache key 2026-05-25 09:54:19 +03:00
Claudio Ortolina 2d8989a8d0 ML-169.8: keep latest record query synchronous
get_latest_record is a single fast ORDER BY LIMIT 1 query --
no reason to async-load it. Removes the <.async_result> wrapper
and the now-unnecessary render_async() from its test.
2026-05-25 09:42:14 +03:00
Claudio Ortolina a3701de90e Backlog cleanup 2026-05-25 09:33:08 +03:00
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 6f5c959238 Show timezone settings in maintenance page 2026-05-25 09:16:56 +03:00
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