Commit Graph

72 Commits

Author SHA1 Message Date
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 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 2a9c54cb42 Sync docs: Elixir 1.20.0-rc.5, Oban pruner 7d, Docker builder 2026-05-13 21:13:51 +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 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 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 51bd24d5b4 ML-162: enable /api/v1/errors endpoint 2026-05-04 13:14:40 +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 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 ed7dd8de03 Update architecture docs for scrobble route restructure 2026-04-23 15:26:08 +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 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 50407f154e Update architecture docs for Collection Chat 2026-04-13 12:17:27 +01:00
Claudio Ortolina a983698c72 Document SQLite query optimization conventions 2026-04-11 23:46:23 +01:00
Claudio Ortolina d3da4e4559 Update architecture docs for embedding ownership 2026-04-11 21:48:59 +01:00
Claudio Ortolina 90a0491924 Update architecture docs with QueryReporter 2026-04-10 10:31:21 +01:00
Claudio Ortolina eeb0763466 Deduplicate and consolidate project docs
Remove redundant sections from production-infrastructure.md that
duplicated architecture.md (Oban queues/plugins/cron, external API
integrations, SQLite extensions, scheduled maintenance). Absorb API
rate limits into architecture.md's integration table. Replace tool
versions table with pointer to mise.toml. Add two conventions from
project history: scoped test setup and single-path shared components.
2026-04-09 15:19:32 +01:00
Claudio Ortolina 67c01ab1fa Update architecture and infrastructure docs 2026-04-09 15:09:32 +01:00
Claudio Ortolina 4be9db6417 Refactor DefaultPrompt into Chats.Prompt with build/2 2026-04-05 08:32:03 +01:00
Claudio Ortolina ec12be613b Extract a default prompt 2026-04-04 23:35:30 +01:00
Claudio Ortolina 690846021e Update architecture documentation 2026-04-04 15:07:55 +01:00
Claudio Ortolina 74f514afc1 Update architecture documentation 2026-04-04 08:34:10 +01:00
Claudio Ortolina 3f7da55e50 Add a release tracked badge to records in lists 2026-04-02 11:52:07 +01:00
Claudio Ortolina 24f061646e Fix migration strategy docs to match production
Coolify runs migrations post-deploy via rel/overlays/bin/migrate,
not on boot. Update both architecture and infrastructure docs.

Closes #141
2026-03-30 14:15:23 +01:00
Claudio Ortolina c39202c5eb Update documentation 2026-03-30 10:59:14 +01:00
Claudio Ortolina 76b2ce6eea Update documentation 2026-03-29 23:11:36 +01:00
Claudio Ortolina 4db7442ad5 Update architecture docs 2026-03-28 10:26:46 +00:00
Claudio Ortolina 5c5a523fe6 Move scrobble refresh infra to Oban 2026-03-28 09:00:18 +00:00
Claudio Ortolina 47f8eddff1 Move BackfillScrobbledTracks worker under MusicLibrary namespace 2026-03-28 08:05:02 +00:00
Claudio Ortolina 4e2e0605ed Update architecture docs for ListeningStats refactor 2026-03-27 23:18:23 +00:00
Claudio Ortolina fa20428989 Update documentation 2026-03-26 23:04:53 +00:00
Claudio Ortolina 7342256afe Update documentation 2026-03-24 15:14:18 +00:00
Claudio Ortolina 58d1fc62c2 Update architecture and infrastructure docs 2026-03-22 17:19:50 +00:00
Claudio Ortolina 3639043882 Update architecture docs 2026-03-22 08:18:32 +00:00
Claudio Ortolina b12e70f471 Refactor charts to use plain HTML
More responsive, less edge cases, and simpler to maintain.
2026-03-21 18:00:06 +00:00
Claudio Ortolina 47b6f44273 Update architecture and infrastructure docs 2026-03-21 09:31:03 +00:00
Claudio Ortolina 56d9d6bfd7 Use MDEx streaming to render chat content 2026-03-20 23:42:10 +00:00
Claudio Ortolina 1ee4d3465a Move /dev/maintenance to /maintenance 2026-03-18 07:44:22 +00:00
Claudio Ortolina 49aef5a4cb Update architecture docs 2026-03-17 14:31:52 +00:00
Claudio Ortolina 8fd8dde73d Persist chat history 2026-03-17 13:50:01 +00:00