Discogs (new; needs a Discogs token):
- Complete curated record labels, chosen with the
type-ahead chip picker (search, pick a match, it
becomes a removable chip). - Complete an owned artist's discography, covering
artists the MusicBrainz sources cannot (no
MusicBrainz id), with conservative exact-name artist
resolution. - Resolve real id->label names.
- Recognize an owned album by a conservative
artist-and-title name match as well as by Discogs id,
so it works on MusicBrainz-tagged libraries.
Diagnose (deeper and wider):
- Deeper analysis compares external ids to tell a real
misidentification from a coincidental title clash. - Episode and season gaps get their own diagnosis
that spots a same-named reboot mis-tagged onto
a series (the V 1984 versus V 2009 case). - Album and book gaps are diagnosable.
- The Diagnose button shows on every gap kind.
- Name-plus-year matching prefers an exact-year hit
over the one-year tolerance.
Reboot handling:
- The series cross-checks skip a same-named reboot
resolved for a series, by year. - The library source no longer reports a reboot's later
seasons as missing episodes of the single-season
original (it compares against the owned-episode year
range).
Music and books:
- The OpenLibrary Books source is hardened using
real author data: resolve the author from an owned
work, a conservative shortest-name matcher for the
name search, works listed via the search endpoint
so they carry a year, and de-duplication of works
that share a title. Captured fixtures added for the
new endpoints.
External calls (stay clear of rate-limit bans, scan faster):
- Every external API call now goes through a
read-through memory cache, so a repeated lookup
within or across scans does not hit the network again. - Proactive per-service rate pacing for MusicBrainz
and Discogs (one request a second). - A per-service circuit breaker moves the scan past a
down service, and each source skips a service once
it has been given up on. - Stable id-to-name lookups (studio, keyword, and
label names) are cached for far longer. - The scan runs its sources concurrently, so a slow
provider no longer holds up the fast ones, and
streams results into the report per item, so gaps
appear as they are found.
Dashboard and UI:
- The Type chooser always shows every media
domain, even one with zero entries this scan. - The settings panel no longer reloads the report
on scan-status polls while it is open. - The dashboard is authored as separate report,
settings, CSS, and JS files, concatenated at build
time.
Housekeeping:
- Shared TextKey.Normalize for title and name
matching; one ServiceNames constant for the
HTTP service names; the Discogs provider-id
constant for the artist id check; explanatory
comments removed from the build files;
README, catalog description, and roadmap
updated for the grown scope.