Claudio Ortolina
ba2566828c
Fix FTS5 crashes when searching with special characters
...
Always wrap FTS5 query terms in phrase double-quotes instead of
checking a hardcoded list of special characters. Characters like
|, ;, +, #, @ were missing from the list, causing FTS5 syntax
errors (production errors #1 and #1398 ). Phrase-quoting every term
produces identical results for normal ASCII search (verified via
SQL) while safely handling any character FTS5 chokes on.
Add regression tests for bare special characters and special
characters mixed with normal words.
2026-05-05 12:05:12 +01:00
Claudio Ortolina
3b558044b4
refactor: extract Records sub-contexts (Search, Import, Enrichment)
...
Split the 450+ line Records context into focused modules:
- Records.Search — FTS5 search, SearchParser integration, genre listing
- Records.Import — MusicBrainz release/group import, release status
- Records.Enrichment — genre population, cover refresh, color extraction,
MusicBrainz data refresh
- Records.Query — shared helpers (essential_fields, order_alphabetically macro)
Records module is now a facade with defdelegate for compile-time safety.
CRUD and PubSub stay directly in Records. Tests moved alongside each
sub-module. Zero callers changed, 886 tests pass.
2026-04-30 17:20:37 +01:00
Claudio Ortolina
d588e5738f
Remove redundant tests
2026-04-25 06:57:03 +01:00
Claudio Ortolina
a1c665b490
ML-21: Classify API errors as transient vs permanent
2026-04-24 14:02:15 +01:00
Claudio Ortolina
0d1f580379
Refactor TracklistPdf to take release alone
2026-04-23 07:48:53 +01:00
Claudio Ortolina
0ee0dcb118
Match decoded OpenAI error body, not raw JSON
...
Switch the 500-response stubs to Req.Test.json so Req decodes the
body, then match the map shape. Avoids coupling the assertion to
the exact JSON serialization.
Refs #176
2026-04-20 06:50:04 +01:00
Claudio Ortolina
60e95804ad
Tighten similarity test assertions
...
Bind returned embeddings and assert record_id / text_representation match.
Pin OpenAI error path to the actual raw string body returned by the stub.
Refs #176
2026-04-20 06:50:04 +01:00
Claudio Ortolina
beaf38fcfe
Add record_release tests
2026-04-19 16:11:32 +01:00
Claudio Ortolina
82e4882aa9
Assert embedding enqueues in batch test
2026-04-11 21:43:00 +01:00
Claudio Ortolina
a608be7387
Move regenerate_artist_embeddings into Similarity
2026-04-11 21:43:00 +01:00
Claudio Ortolina
2f9460d2cb
Regenerate embeddings only when the test representation changes
2026-04-04 08:32:29 +01:00
Claudio Ortolina
1301f888f3
Remove "it" from the test descriptions
2026-03-27 08:38:41 +00:00
Claudio Ortolina
170a52b3e4
Fix test descriptions for consistency
2026-03-26 11:54:47 +00:00
Claudio Ortolina
715a1e1f69
Consolidate handling of artist joinphrases
2026-03-19 15:09:34 +00:00
Claudio Ortolina
43dc81d051
Assert that generated PDF file always has one page
2026-03-10 15:09:33 +00:00
Claudio Ortolina
95302e069b
Improve column detection heuristics
2026-03-10 14:56:25 +00:00
Claudio Ortolina
c352ad4809
Can print an individual medium tracklist
2026-03-09 14:52:26 +00:00
Claudio Ortolina
4c6baa6e13
Improve printout PDF layout
...
Support multiple columns in case the tracklist is long, or there's
multiple media.
2026-03-09 14:44:28 +00:00
Claudio Ortolina
4569c6727e
Add function to download a record's tracklist for printing
2026-03-09 13:39:12 +00:00
Claudio Ortolina
f9b381570f
Extract artist infos fixtures
2026-03-06 08:58:59 +00:00
Claudio Ortolina
854e293902
Add large battery of tests, primarily workers
2026-03-01 17:03:36 +00:00
Claudio Ortolina
1dfb2d2a6f
Use Wikipedia data for record similarity and raise similarity threshold
2026-02-19 15:51:12 +00:00
Claudio Ortolina
5692be4e63
Update dependencies
...
credo 1.7.13 => 1.7.14 - requires updates to pass updated checks
2025-12-01 16:09:51 +00:00
Claudio Ortolina
d38089d82d
Show similarity in % points
2025-10-12 20:46:01 +02:00
Claudio Ortolina
ee199272b1
Use sqlite vector
2025-10-12 13:36:42 +02:00
Claudio Ortolina
9cae972bc5
Add similar records
...
Initial stab by Claude
2025-10-11 21:39:59 +02:00
Claudio Ortolina
90b3fa1fdc
Refactor Records.Cover to Assets.Image
2025-09-20 07:42:38 +03:00
Claudio Ortolina
aa72692eaf
Cache transformations
2025-09-17 16:54:47 +03:00
Claudio Ortolina
df4ca83aeb
Add ability to rotate dominant colors
2025-08-27 21:11:13 +03:00
Claudio Ortolina
07d9db6011
Speed up tests by caching cover data
...
Suggested and executed by Claude
2025-06-14 21:15:06 +03:00
Claudio Ortolina
676c2e4290
Enable quokka with :module_directives rule
2025-05-28 19:41:57 +01:00
Claudio Ortolina
e083950138
Rename record.release to record.release_date
...
Includes changes to dependent tables (i.e. the record search index) and
related functions.
2025-05-01 14:04:57 +01:00
Claudio Ortolina
b2daa561d7
Use aliases
2025-02-20 15:27:01 +00:00
Claudio Ortolina
94a2784020
Move function in MusicBrainz main module
2025-02-17 22:07:49 +00:00
Claudio Ortolina
513ce6363f
Rename RecordsFixtures -> Fixtures.Records
2025-02-17 16:08:19 +00:00
Claudio Ortolina
ea7b5b646a
Namespace MusicBrainz fixtures
2025-02-17 16:03:23 +00:00
Claudio Ortolina
027b3af547
Rename ReleaseGroup to ReleaseGroupSearchResult
2025-02-10 16:38:04 +00:00
Claudio Ortolina
224bcdba38
Extract MusicbrainzData module
2025-02-10 09:49:34 +00:00
Claudio Ortolina
791807c137
Fix issue with formatting of "" release dates
2025-02-10 09:33:26 +00:00
Claudio Ortolina
b42a774936
Remove unused functionality and make functions private
2025-02-09 17:01:00 +00:00
Claudio Ortolina
015863d25e
Add missing test for Record.add_musicbrainz_data/2
2025-02-07 20:17:21 +00:00
Claudio Ortolina
9b25556245
Refactor Record.child_release_groups/1 to use stored ids
2025-02-06 21:03:38 +00:00
Claudio Ortolina
96bd453900
When not possible to determine otherwise, assums a record has been released
2025-01-29 10:21:41 +00:00
Claudio Ortolina
06f1997d59
Show if a wishlisted album is unreleased
2025-01-29 10:13:39 +00:00
Claudio Ortolina
cf51cab7ce
Add basic test for Records.Cover module
2024-11-29 22:08:40 +00:00
Claudio Ortolina
e30ba5ef3f
Implement basic parser
2024-10-10 10:02:26 +01:00
Claudio Ortolina
b6ae022a6a
Move obsidian-related imports under Obsidian
2024-09-24 09:21:13 +01:00
Claudio Ortolina
170f195aae
Fix edge cases with parser
...
- Remove front_matter dependency, and use a hand-rolled simpler parser
which is suitable for the data to parse (which is well-formed).
- Fix a couple of edge cases with years and titles with commas
2024-09-15 20:28:37 +01:00
Claudio Ortolina
2c42f3ea32
Can parse an obsidian entry to retrieve correct metadata
2024-09-15 20:28:37 +01:00