Commit Graph

2971 Commits

Author SHA1 Message Date
Claudio Ortolina 1068de3096 Update npm dependencies
type-fest 5.5.0 => 5.6.0
2026-04-18 20:21:38 +01:00
Claudio Ortolina 84cb3ac7b8 Update dependencies
lumis 0.3.0 => 0.4.0 (minor)
2026-04-18 20:20:51 +01:00
Claudio Ortolina fb1b60373d Fix max width issue for release selector on mobile 2026-04-18 10:57:14 +01:00
Claudio Ortolina f6bcf3d970 Partial fix for barcode scan camera persisting after disconnection 2026-04-18 10:50:41 +01:00
Claudio Ortolina b37162fce3 Fix colors of mixed badges 2026-04-17 22:30:27 +01:00
Claudio Ortolina 94143010c0 Fix doubly-wrapped safe tuple in artist bio render 2026-04-17 16:00:22 +01:00
Claudio Ortolina 2ef86ae75a Add mise task to summarize codebase shape 2026-04-17 15:12:19 +01:00
Claudio Ortolina fd6eab82c0 Track fixture files as external resources 2026-04-17 14:02:45 +01:00
Claudio Ortolina 079f2a5f0f Add BraveSearch facade tests 2026-04-17 13:57:36 +01:00
Claudio Ortolina be6f4d2338 Enforce coverage threshold inline in CI test step
Closes #177
2026-04-17 13:37:13 +01:00
Claudio Ortolina 028c2a1b8d Configure test coverage and enable on CI 2026-04-17 13:30:04 +01:00
Claudio Ortolina d8d5524e41 Replace Process.sleep with sys.get_state in error notifier tests
Deterministic GenServer state polling instead of timing-based waits.
Fixes #169.
2026-04-17 12:58:50 +01:00
Claudio Ortolina e6a8488137 Use Notes.change_note/2 instead of Note.changeset/2 in notes component
Closes #171
2026-04-17 12:56:08 +01:00
Claudio Ortolina 4c5a3393e2 Run query reporter tests with async false
Avoid getting spurious failures due to interference by other tests
2026-04-17 10:29:43 +01:00
Claudio Ortolina e98d7d1d8a Add asset build step to lint CI job 2026-04-17 10:19:10 +01:00
Claudio Ortolina 96a1ea0923 Update node to 25.9.0 2026-04-17 10:19:10 +01:00
dependabot[bot] ae14149a42 Bump node from 24-slim to 25-slim
Bumps node from 24-slim to 25-slim.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 25-slim
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 10:19:10 +01:00
Claudio Ortolina f1013070bd Monitor Dockerfile updates via Dependabot
Closes #175
2026-04-17 08:14:44 +01:00
Claudio Ortolina d0d9c4ea75 Ignore some Claude working directories 2026-04-17 08:11:48 +01:00
Claudio Ortolina 2648d10034 Formalize standard set of Claude permissions 2026-04-17 08:11:31 +01:00
Claudio Ortolina bbe1722c9f Handle unencodable structs in QueryReporter params 2026-04-17 07:10:45 +01:00
Claudio Ortolina 90838d1a3f Add tests for RecordActions and Chat component
Covers all action handlers on LiveHelpers.RecordActions and all
update/event clauses on Components.Chat — including streaming
chunk/done/error transitions and the retry re-send path.

Closes #179
2026-04-17 07:01:07 +01:00
Claudio Ortolina 298c1dfc57 Document why multipart dependency is needed
Closes #182
2026-04-16 23:16:03 +01:00
Claudio Ortolina fbc548e903 Explicitly trust Wikipedia's HTML
Closes #168
2026-04-16 23:14:00 +01:00
Claudio Ortolina 464e627a63 Remove unnecessary padding from detail views 2026-04-16 22:54:39 +01:00
Claudio Ortolina e511d352e3 Use cheaper model for mechanical skills 2026-04-16 19:27:49 +01:00
Claudio Ortolina 6b35b5cde5 Trigger search on Enter in search inputs inside forms 2026-04-16 15:15:47 +01:00
Claudio Ortolina 58c60193f2 Use pipe 2026-04-16 10:38:08 +01:00
Claudio Ortolina 840547c509 Speed up structured modal animation 2026-04-16 09:31:30 +01:00
Claude 6781c41fdf Fix mobile click delay with touch-action manipulation
Closes the 300ms tap delay on mobile browsers by setting
touch-action: manipulation on all interactive elements.

https://claude.ai/code/session_01BnwMp4VhD3HK9zkycqmiFh
2026-04-16 09:01:52 +01:00
Claudio Ortolina fea1231304 Replace refresh scrobble list icon
Makes it for a better animation
2026-04-15 22:52:28 +01:00
Claudio Ortolina 7899f621f3 Preserve rule picker state across parent re-renders 2026-04-15 15:11:17 +01:00
Claudio Ortolina 2124c982f7 Handle possible non-existent record id in search filter 2026-04-15 15:10:28 +01:00
Claudio Ortolina f6e78022a4 Update project conventions 2026-04-15 15:03:41 +01:00
Claudio Ortolina 9fa94714c8 Update architecture docs 2026-04-15 15:03:21 +01:00
Claudio Ortolina c816f2de4a Add scrobbled tracks search parser
Introduces ListeningStats.SearchParser with NimbleParsec supporting
record:, album_mbid:, artist_mbid:, artist:, album:, track: filters.
Links scrobble count on record page to filtered scrobbled tracks view.
2026-04-15 14:56:38 +01:00
Claudio Ortolina 851cb36858 Fix dl accessibility violations on stats dashboard 2026-04-15 14:16:24 +01:00
Claudio Ortolina 4194fb8b6d Update dependencies
oban_web 2.12.2 => 2.12.3
2026-04-15 13:50:52 +01:00
Claudio Ortolina 405235e2b3 Add picker to create scrobble rules on the fly 2026-04-15 10:53:58 +01:00
Claudio Ortolina b9612a2a26 Fix records on this day for partial release dates
SQLite interprets bare years (e.g. "1970") as Julian day numbers
in strftime, producing wrong month-day matches. Filter to only
full YYYY-MM-DD dates before comparing.
2026-04-15 07:29:58 +01:00
Claudio Ortolina ebd9e5445f Fix how long ago for records with year release dates 2026-04-15 07:20:01 +01:00
Claudio Ortolina d75508531e Generate parse_type/parse_format from module attributes 2026-04-14 16:56:04 +01:00
Claudio Ortolina 2bb755b1c8 Parse matching record fields in Records.Record 2026-04-14 16:51:06 +01:00
Claudio Ortolina 8db324d74a Extract shared badge/dropdown to ScrobbleComponents 2026-04-14 16:50:40 +01:00
Claudio Ortolina 888b5a68e6 Update all callers to use matching_records
Migrate StatsLive.Index, ScrobbledTracksLive.Index, and TopAlbums to
consume matching_records list instead of scalar record IDs. Remove the
derive_legacy_record_ids bridge function. TopAlbums now uses a dropdown
for multi-record badges with play count display.
2026-04-14 16:14:59 +01:00
Claudio Ortolina 9ef918a621 Update record_status_badges with matching_records and dropdown 2026-04-14 16:10:57 +01:00
Claudio Ortolina dd3bb47989 Add tests for mixed collected/wishlisted matching records 2026-04-14 16:07:14 +01:00
Claudio Ortolina 2c6e6e7ca2 Return matching_records list from top_albums_attach_metadata
Apply the same release-group JSON aggregation pattern to top albums
queries. Add JSON parsing in get_top_albums/1 and
get_top_albums_by_days/2.
2026-04-14 16:05:51 +01:00
Claudio Ortolina cfd267627c Return matching_records list from tracks_with_record_info_query
Replace scalar collected_record_id/wishlisted_record_id subqueries with
a single matching_records JSON array grouped by release group
(records.musicbrainz_id). Add parse_matching_records/1 for JSON parsing
and derive_legacy_record_ids/2 as a temporary bridge for existing
templates. Update tests to use shared musicbrainz_id fixtures.
2026-04-14 14:17:02 +01:00
Claudio Ortolina 9f4135661e Replace scalar record IDs with matching_records JSON array in tracks query
Replaces collected_record_id and wishlisted_record_id correlated
subqueries in tracks_with_record_info_query with a single
matching_records json_group_array subquery that returns all records
sharing the same release ID. Adds parse_matching_records/1 for JSON
deserialization. Updates recent_activity/2 and list_tracks/1 to parse
the JSON at the boundary. Derives legacy collected_record_id and
wishlisted_record_id from matching_records so existing LiveViews keep
working. The get_top_albums test is temporarily skipped pending the
top_albums_attach_metadata update.
2026-04-14 14:12:14 +01:00