feat: autotag scoring overhaul, dump-based explore index, and lyrics search
Consolidates in-progress work across autotag, explore, and library: - autotag: beets/Picard-informed scoring engine — ID-first matching, VA handling, recommendation tiers, and a merged distance/rank cascade, with an eval harness for regression tracking. - explore: offline MusicBrainz dump import/incremental refresh replaces the legacy tier crawl; index-first local search with fuzzy matching and a dedicated ranker; disk-free guards for dump downloads. - library: artist-credit extraction and matching. - lyrics: owned-library lyric search (FTS) with LRCLIB backfill. Also: rewrite README to be user-focused, and migrate upstream to git.ljones.me/yonlu/yellowjacket. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,26 +0,0 @@
|
||||
# 011 — Autotag: Auto-Accept & Entry Points
|
||||
|
||||
> Fourth v1.3 phase. The strict all-match auto-accept path runs as a background job; the tool is reachable from every place a user expects.
|
||||
|
||||
**Status:** pending · **Requirements:** AUTO-01..06 · **Depends on:** 010 (needs the apply pipeline)
|
||||
|
||||
## Success criteria
|
||||
|
||||
1. An album-group qualifies for auto-accept iff: exact track-count match, every track's normalized title matches, every track's length within ±2s, no cover-art replacement required, no existing-MBID conflicts. Decision uses already-cached candidate data — **no additional MB calls**.
|
||||
2. Auto-accept job processes all qualifying groups in the queue, emits progress events, is cancellable at any point, honors the shared rate limiter.
|
||||
3. Right-click on a track / album / artist exposes "Autotag this album" (queues + jumps to review) and "Retag" (flips status to `untagged` and requeues).
|
||||
4. After a library scan finishes with N new untagged albums, a non-blocking toast appears linking to `/autotag`.
|
||||
5. Sidebar has an "Autotag" nav entry with a pending-count badge, updates reactively.
|
||||
6. Pasting a MB release URL into the Paste-URL dialog renders a full diff against the current album with one `LookupRelease` call.
|
||||
|
||||
## Sub-plans
|
||||
|
||||
- Strict all-match rule + unit tests.
|
||||
- Auto-accept background job — progress events, cancellation, queue traversal.
|
||||
- Context menu integrations on track/album/artist views.
|
||||
- Post-scan toast wiring via the existing scan-complete event.
|
||||
- Sidebar nav entry + pending-count badge store integration.
|
||||
|
||||
## Risk callout
|
||||
|
||||
Release selection can pick the wrong edition. The exact-track-count gate prevents most silent misbehavior, but bonus-track editions and remaster reissues with matching track counts are genuine ambiguity. Manual review handles the edge cases — that's why auto-accept is strict by design, and the slider for fuzzy auto-accept is explicitly out of scope.
|
||||
@@ -1,31 +0,0 @@
|
||||
# 012 — Autotag: Settings & Polish
|
||||
|
||||
> Fifth and final v1.3 phase. Configuration surfaces in the existing settings system; the known sharp edges (rate-limit contention, VA compilations, singleton files) get sanded; the fingerprinting seam is in place for the future.
|
||||
|
||||
**Status:** pending · **Requirements:** CFG-01..06 · **Depends on:** 011
|
||||
|
||||
## Success criteria
|
||||
|
||||
1. Autotag settings panel accessible via the existing templ/HTMX settings UI. Exposes: enable/disable auto-accept, per-library file-write warning reset, default review filter, default sort order.
|
||||
2. Shared rate limiter distinguishes interactive from background requests. User-initiated MB calls (paste-URL, opening a review, explore browsing) are never blocked behind a running auto-accept job.
|
||||
3. VA compilation albums (per-track artist credits differ from album-artist) are detected. The auto-accept artist-match rule relaxes for them; the ranker prefers MB releases credited to "Various Artists".
|
||||
4. Singleton files (`track_count = 1`, no sibling context) use a recording-level match path (`SearchRecordings` with title + artist + length filters). Lower confidence ceiling — never eligible for auto-accept regardless of confidence.
|
||||
5. `type Identifier interface { Identify(path) ([]Candidate, error) }` exists with `MetadataIdentifier` as the v1 implementation. No fpcalc integration, but the seam is in place for a future `AcoustIDIdentifier`.
|
||||
6. User-facing quickstart docs exist; CLAUDE.md gets a `backend/autotag/` package description; scoring-function dev notes are committed.
|
||||
|
||||
## Sub-plans
|
||||
|
||||
- Autotag settings panel (templ + HTMX).
|
||||
- Rate-limiter priority support.
|
||||
- VA compilation detection and scoring adjustments.
|
||||
- Singleton-file match path.
|
||||
- `Identifier` interface seam with `MetadataIdentifier`.
|
||||
- Docs — user quickstart + dev notes + CLAUDE.md update.
|
||||
|
||||
## Ship criteria for v1.3 overall
|
||||
|
||||
- All 29 SCHEMA/MATCH/REVIEW/AUTO/CFG requirements complete.
|
||||
- All five phases' success criteria verified end-to-end on a real library (10k+ tracks, mixed match quality).
|
||||
- Auto-accept run against a well-tagged subset produces zero incorrect matches.
|
||||
- Manual review workflow can process 100 albums in under 30 minutes without mouse use.
|
||||
- Recap files moved to `.planning/plans/completed/`.
|
||||
Reference in New Issue
Block a user