Skip to content

feat: scan-to-import unknown deck flow - #26

Merged
damarals merged 4 commits into
mainfrom
feat/scan-to-import
May 7, 2026
Merged

damarals merged 4 commits into
mainfrom
feat/scan-to-import

Conversation

@damarals

@damarals damarals commented May 7, 2026

Copy link
Copy Markdown
Owner

Summary

  • TDD'd lib/deck-pointer.ts — reconstructPlaylistUrl (DZ → canonical Deezer URL; other providers → null) and deckMatchesPointer (matches by parsed Deezer playlist id, robust to legacy/foreign sourceUrls)
  • lib/import-session.ts — module-level Set of declined pointers; cleared on app relaunch per AC's "during the session"
  • app/import.tsx — prompt screen: fetches playlist metadata via extractFromDeezerUrl, shows playlist name + track count, primary "Import this deck" → /resolving?url=... (reuses YearResolver + Cache + RateLimiter + DeckGenerator with Resolving screen #4 pipeline), outline "Not now" → markDeclined then /
  • app/playback.tsx end-of-round logic branches on parsed code: extended+unknown → prompt; extended+known → /scan; extended+declined → /scan; legacy bare ISRC → /scan. Import never auto-runs without explicit user tap. Anti-spoiler discipline preserved (existence-only Library check, no track strings)
  • Closes Scan-to-import unknown deck flow #13 — implements PRD User Story 30

Test plan

  • npm test — 140 pass (9 new for deck-pointer)
  • npm run typecheck clean
  • npm run lint clean
  • Manual: scan a friend's card whose deck is unknown locally; play; on end, prompt appears with deck name + count; Import builds and routes to Review; "Not now" silences prompt for the same card during the session

@damarals
damarals merged commit 850be60 into main May 7, 2026
1 check passed
@damarals
damarals deleted the feat/scan-to-import branch May 7, 2026 17:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Scan-to-import unknown deck flow

1 participant