feat: autotag mixed-bag splitting, search relevance fixes, and multi-library download imports
Build & publish Arch package / arch-package (push) Successful in 2m2s
Search index maintenance / maintain-index (push) Successful in 7s

Autotag: detect "junk drawer" folders with no artist/album consensus
and split them into synthetic per-cluster groups instead of forcing
one match on an unrelated pile of tracks; repair tagging_items rows
left behind by a prior scan orphan-cleanup gap.

Explore: fix an exact artist-name search being drowned out by its own
catalog entries in intent-prior scoring, and prune stale in_library
bookkeeping left behind when a referenced library row is deleted.

Download: fix a multi-library regression where every import failed
with "no library root configured" — the importer resolved the
library root from a legacy single-library config field that nothing
populates in the current multi-library model. It now resolves the
destination library per-request from the request's own library_id.
Also widen the Soulseek search window (12s -> 20s), measured against
real request history to be missing available peers on live queries.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y2Agd9af5hE7qzti2ackiS
This commit is contained in:
2026-08-10 11:52:26 -04:00
co-authored by Claude Sonnet 5
parent e190fd75b9
commit cbd82a5a74
70 changed files with 3617 additions and 129 deletions
+11
View File
@@ -130,6 +130,12 @@ type Config struct {
Enabled bool `json:"enabled"`
Priority int `json:"priority"`
Settings map[string]string `json:"settings"`
// SetSecrets names which of the descriptor's secret fields already
// have a stored value, without exposing it. Populated only when a
// Config is built for the frontend (see Service.withSecretFlags);
// empty when read from or written to the store.
SetSecrets map[string]bool `json:"setSecrets,omitempty"`
}
// Setting returns a config value, or fallback when unset.
@@ -197,6 +203,11 @@ type Field struct {
// provider config row, and rendered as a password input.
Secret bool `json:"secret"`
// Path marks a value that names a local filesystem directory, so
// the settings form can offer a native folder picker beside the
// text input rather than making the user type or paste it.
Path bool `json:"path"`
Required bool `json:"required"`
Default string `json:"default,omitempty"`
}