soulsync/core/enrichment
BoulderBadgeDad 62ee1f8520 Enrichment manager: 6 UX improvements
- #1 Unconfigured-source banner: when a source has enabled=false, show a
  notice that browsing works but matches/retries won't run until it's set up.
- #2 Rate-limit detail: when rate_limited, surface 'resumes in ~Xm' (from the
  status payload) instead of just a pill.
- #3 Richer rows: unmatched items now show parent context — an album's artist,
  a track's album — via a parent expression in the query (+ test).
- #4 Bulk select: per-row checkboxes + a bulk bar to retry several at once
  (capped concurrency), reusing the /retry item endpoint.
- #5 Remember last worker: selection persists in localStorage and is restored
  on open; openEnrichmentManager(workerId) supports future deep-linking
  (bubbles left on their pause-on-click behaviour).
- #6 Keyboard nav: ArrowUp/Down moves focus between rows; actions are native
  buttons (Enter/Space) and Escape closes — list isn't poll-refreshed so focus
  is stable.

53 enrichment tests green; JS syntax clean.
2026-06-02 19:50:57 -07:00
..
__init__.py Consolidate enrichment bubble routes behind a service registry 2026-05-01 20:14:30 -07:00
api.py Enrichment manager: 'process this group first' + refined hero header 2026-06-02 19:45:04 -07:00
manual_match_honoring.py Honor manually-matched source IDs in per-source enrichment workers 2026-05-06 19:00:53 -07:00
services.py Consolidate enrichment bubble routes behind a service registry 2026-05-01 20:14:30 -07:00
unmatched.py Enrichment manager: 6 UX improvements 2026-06-02 19:50:57 -07:00