Commit Graph

143 Commits

Author SHA1 Message Date
Claudio Ortolina e36d80818e Update project conventions for partitioned tests and new credo check
Mix Dependency Submission / Report Mix Dependencies (push) Failing after 1m8s
Test & Deploy / test (push) Has been cancelled
Test & Deploy / Deploy (push) Has been cancelled
Test & Deploy / lint (push) Has been cancelled
2026-05-31 22:38:25 +03:00
Claudio Ortolina 0bdffbc12a Update erlang to 28.5.0.1 2026-05-31 22:33:16 +03:00
Claudio Ortolina 75e2ec5c70 ML-199: extract shared record show logic 2026-05-29 08:50:27 +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 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 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 974ef45c29 ML-187: restructure pre-commit checks to run conditionally
Gate each check behind staged file pattern matching so a docs
or backlog change no longer triggers the full test suite. Add
presto pytest and Docker image validation guards. Fall back to
running all checks when invoked directly (not via git commit).
2026-05-18 16:09:34 +01:00
Claudio Ortolina 1a5313cff0 Update testing docs for async helper 2026-05-16 22:35:06 +01:00
Claudio Ortolina 8391cf275a ML-180: remove backup download feature
Delete ArchiveController, its routes, the maintenance UI backup
button, and the test file. Management scripts and Litestream
supersede this functionality.
2026-05-15 07:13:33 +01:00
Claudio Ortolina a59dd22a18 ML-168: broadcast index_changed event after background import
Import workers now broadcast :records_index_changed on
"records:index_changed" after successful import via
Records.broadcast_index_changed/0.

CollectionLive.Index and WishlistLive.Index subscribe to the
topic in mount/3 and reload their record streams on receipt,
with a live_action guard to skip reloads when the grid is
hidden behind a modal (:import, :barcode_scan).

IndexActions.handle_index_changed/1 refreshes total_entries
before reloading to keep the pagination bar accurate.
2026-05-14 17:15:06 +01:00
Claudio Ortolina d878364423 Add mise task to run pi tests 2026-05-14 12:35:36 +01:00
Claudio Ortolina 2a9c54cb42 Sync docs: Elixir 1.20.0-rc.5, Oban pruner 7d, Docker builder 2026-05-13 21:13:51 +01:00
Claudio Ortolina 3f4ea5d760 Update to debian trixie-20260505 2026-05-13 07:12:28 +01:00
Claudio Ortolina 731c82cf30 Update architecture docs for collection API changes 2026-05-11 07:48:52 +01:00
Claudio Ortolina 777eec46f8 Update architecture docs: PubSub starts before Oban 2026-05-08 18:02:34 +01:00
Claudio Ortolina 829d0a2caa Update docs for Presto, PubSub, and Node.js 26
Add Presto companion display to architecture overview. Document collection API cover sizes (cover, thumb/480px, mini/150px, micro/40px). Update PubSub topic table and LiveView conventions for handle_params subscription management. Bump Node.js version from 25 to 26 in production infrastructure.
2026-05-07 10:57:23 +01:00
Claudio Ortolina afbce40de9 Update dependencies
mix:
  phoenix 1.8.6 => 1.8.7

Manually port update to filter_parameters now including "token" by default
2026-05-06 12:01:27 +01:00
Claudio Ortolina cccd28a9f9 ML-165: implementation 2026-05-05 13:43:18 +01:00
Claudio Ortolina 5888324cc7 Run prettier on all relevant files 2026-05-05 10:45:25 +01:00
Claudio Ortolina bcbfe2be75 Move skills to .agents/skills 2026-05-05 07:18:08 +01:00
Claudio Ortolina 41f4f08831 Streamline project conventions 2026-05-04 22:32:37 +01:00
Claudio Ortolina 7c6760d7db ML-158: force single-line log output in production
Three-layer architecture:
- Logster v2 handles HTTP request and LiveView socket telemetry in logfmt format
- Custom formatter as safety net escaping any remaining embedded newlines
- Config flag (single_line_logging) gating Logster attachment to prod only

Dev environment retains multi-line format for readability.
2026-05-04 15:01:10 +01:00
Claudio Ortolina 26a9469b3f ML-164: implementation 2026-05-04 13:47:34 +01:00
Claudio Ortolina 904f540031 ML-163: implementation 2026-05-04 13:25:08 +01:00
Claudio Ortolina 51bd24d5b4 ML-162: enable /api/v1/errors endpoint 2026-05-04 13:14:40 +01:00
Claudio Ortolina 3e74577a3a Add production infra critical rule 2026-05-03 08:00:09 +01:00
Claudio Ortolina 2de9c5e705 Add guidance about working with Backlog.md tasks 2026-05-02 16:54:54 +01:00
Claudio Ortolina b8b3b24ffa ML-151: document Assets.Cache TTL and invalidation strategy
Expand @moduledoc with cache key structure, 7-day TTL via
@one_week_seconds, periodic pruning by PruneAssetCache (every 12h),
and rationale for TTL-only invalidation (content-addressable immutable
assets). Update architecture.md entry accordingly.
2026-04-30 13:07:06 +01:00
Claudio Ortolina c489fde1cc ML-152: add /api/v1/ version prefix to all API routes 2026-04-30 11:57:43 +01:00
Claudio Ortolina 83ebfb7961 Update commit message conventions for dependencies 2026-04-28 22:46:09 +01:00
Claudio Ortolina 9113df5879 ML-146: honour API retry headers 2026-04-25 07:39:49 +01:00
Claudio Ortolina ed2e91400c Update documentation for ML-21, ML-9, and Erlang 28.5
- architecture.md: document new ErrorResponse behaviour, HttpError, and
  Worker.ErrorHandler modules plus per-API ErrorResponse pattern
- project-conventions.md: capture API-failure → Oban tuple convention and
  mix_audit CI/pre-commit run
- production-infrastructure.md: bump builder image Erlang to 28.5 and
  note mix_audit in the lint step
2026-04-24 14:29:35 +01:00
Claudio Ortolina 252caf31ce ML-11: Improve performance of Telemetry.Storage with in-memory buffer 2026-04-24 10:30:28 +01:00
Claudio Ortolina f79e1e4ddf Update project conventions around backlog.md and GH issues 2026-04-24 08:09:24 +01:00
Claudio Ortolina ed7dd8de03 Update architecture docs for scrobble route restructure 2026-04-23 15:26:08 +01:00
Claudio Ortolina 71936f6173 Update project conventions and infrastructure docs 2026-04-22 21:01:52 +01:00
Claudio Ortolina 9eece7e861 Add litestream-based backup script 2026-04-21 14:47:29 +01:00
Claudio Ortolina 8d004d39cc Extract shared cart sidebar component 2026-04-20 15:57:44 +01:00
Claudio Ortolina fd93aaed30 Update architecture docs 2026-04-20 15:15:29 +01:00
Claudio Ortolina c12b84bc23 Update production infrastructure docs 2026-04-19 07:55:09 +01:00
Claudio Ortolina 4422d8b02b Document alias-at-top convention 2026-04-19 07:52:06 +01:00
Claudio Ortolina 2ef86ae75a Add mise task to summarize codebase shape 2026-04-17 15:12:19 +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 e43bccb9bc Extract shared index logic into LiveHelpers.IndexActions
Closes #150
2026-04-13 23:09:22 +01:00
Claudio Ortolina a1b775f0ae Fix architecture docs to reflect gpt-5.1 for CollectionChat 2026-04-13 13:15:10 +01:00
Claudio Ortolina ac1954f9c8 Document ExSlop Credo checks convention 2026-04-13 12:18:17 +01:00
Claudio Ortolina 50407f154e Update architecture docs for Collection Chat 2026-04-13 12:17:27 +01:00
Claudio Ortolina 834226921e Update production infrastructure docs 2026-04-12 12:46:51 +01:00
Claudio Ortolina 65135a618d Add script/command to validate Dockerfile args versions 2026-04-12 12:10:34 +01:00