93ac86f748
- Escape LIKE wildcards (% and _) in search queries using fragment ESCAPE to prevent accidental pattern expansion and potential DoS vectors - Use Repo.aggregate for occurrence_count instead of loading all occurrences into memory in get_error/1 - Use Repo.aggregate(:min, :inserted_at) for first_occurrence_at instead of fragile List.last/1 that depends on query ordering - Add MusicLibrary.ErrorsTest with 15 tests covering list_errors/1 (default, status/muted/search filters, wildcard escaping, pagination, empty results) and get_error/1 (with/without occurrences, not_found)