You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Provider seam: where TIDAL assumptions live in the Waves codebase #7
Internal codebase research (no code changes). Map every place Waves assumes a single TIDAL provider, so a Provider abstraction can be designed on facts. Go through:
Deliverable: a seam inventory (file:line per touchpoint) grouped by: session/auth, catalog metadata shapes, search, quality tiers, download pipeline, lyrics, artwork, ownership/library detection, queue presentation, settings. Conclude with the minimum interface a second provider must implement and which parts of the current engine are reusable as-is vs TIDAL-specific.
Biggest surprises: (a) metadata_write (download.py:3772) is the implicit provider fact schema — reads ~15 tidalapi attrs inline with no helper seam; (b) the dict boundary to QML is already provider-neutral, so UI work is nearly free; (c) three cross-cutting vocabularies (item ids incl. WAVES_TIDAL_ID on-disk tags, the QUALITY_RANK tier scale, MediaType) must be namespaced/shared or ownership breaks silently.
Inventory tables cite file:line for every touchpoint across 11 groups: session/auth, catalog shapes, search, quality tiers, download pipeline, lyrics, artwork, ownership, queue, settings, browse.
Activity
ranokay commentedon Sep 1, 2026
Provider seam analysis complete — full inventory in
docs/research/provider-seam-analysis.mdon branchresearch/provider-seam-analysis.Summary of findings:
_get_stream_info/StreamManifest, refusal taxonomy, tier vocabulary.metadata_write(download.py:3772) is the implicit provider fact schema — reads ~15 tidalapi attrs inline with no helper seam; (b) the dict boundary to QML is already provider-neutral, so UI work is nearly free; (c) three cross-cutting vocabularies (item ids incl.WAVES_TIDAL_IDon-disk tags, the QUALITY_RANK tier scale, MediaType) must be namespaced/shared or ownership breaks silently.Ticket #7 can be closed; no other issues touched.