Traceability Matrix and References¶
Legend¶
- US-xx = User Story
- AC-xx.x = Acceptance Criterion for a given story
- TS-xx = Technical Story (Milestone enabler)
- UT-… = Unit tests (Vitest/Jest/RTL)
- IT-… = Integration/API tests (Supertest/Nock)
- E2E-… = End-to-end tests (Cypress)
- Status: Planned | In Progress | Passed | Blocked
Matrix¶
This matrix maps User Stories (US) and Technical Stories (TS) → Acceptance Criteria (AC) → Test Cases (Unit / Integration / E2E), and links Smokes, Defects, and Risks.
Traceability Matrix¶
| Story ID | User Story | Acceptance Criteria | Unit Tests | UI Tests | Integration Tests | E2E Tests | Smokes | Defects | Risks | Status |
|---|---|---|---|---|---|---|---|---|---|---|
| US-01 | Authenticate with Spotify | AC-01.1 AC-01.2 AC-01.3 AC-01.4 AC-01.5 |
UT-001-Auth UT-002-Auth UT-008-Auth |
UI-001-AuthGuard | IT-001-Auth IT-002-Auth IT-010-Auth IT-001d |
E2E-003-Auth | SMK-00 SMK-01 |
DEF-001 | R-01 R-02 |
Passed |
| US-02 | Export ranked songs by current filter | AC-02.1 AC-02.2 AC-02.3 AC-02.4 |
UT-003-Export UT-004-Export UT-009-Export UT-010-Export UT-011-Export |
UI-010-SelectionInline UI-011-SelectionInline |
IT-003-Export IT-004-Export IT-005-Export IT-013-MappingSearch IT-012-Ranked |
E2E-001-Export E2E-002-Export E2E-008-Mobile |
SMK-09 | – | R-04 R-14 |
Passed |
| US-03 | Review and remove before export | AC-03.1 AC-03.2 AC-03.3 |
– | UI-010-SelectionInline UI-012-SelectionSummary UI-013-SelectionLifecycle UI-002-ExportModal UI-003-ExportModal |
IT-005-Export | – | SMK-09 | – | R-15 R-20 |
Passed |
| US-04 | Add playlist name and description | AC-04.1 AC-04.2 |
UT-006-Export | UI-014-NameFields UI-004-ExportModal |
IT-006-Export | – | SMK-09 | – | R-10 R-20 |
Passed |
| US-05 | Real-time feedback during export | AC-05.1 AC-05.2 AC-05.3 |
– | UI-005-Progress | IT-007-Errors | E2E-001-Export E2E-004-Errors |
SMK-09 | – | R-10 | Passed |
| US-06 | Error handling | AC-06.1 AC-06.2 AC-06.3 |
UT-005-Export UT-007-Export |
UI-006-Errors | IT-008-Export IT-011-Errors |
E2E-005-RateLimit E2E-009-Errors |
SMK-09 | – | R-03 R-11 |
Passed |
| US-07 | Confirmation with playlist link | AC-07.1 AC-07.2 |
– | UI-007-Confirm UI-008-DeepLink |
IT-009-Confirm | E2E-001-Export E2E-006-DeepLink |
SMK-09 | – | R-09 R-10 |
Passed |
| US-08 | Revoke Spotify access | AC-08.1 AC-08.2 AC-08.3 |
UT-002-Auth | UI-001-AuthGuard | IT-010-Auth | E2E-007-Revoke | SMK-00 | – | R-02 | Passed |
| TS-01 | Mapping service toggle & rules (Milestone A) | AC-TS2.3.A AC-TS2.3.B AC-TS2.3.C AC-TS2.3.D AC-TS2.3.E AC-TS2.3.F |
UT-004-Export | – | IT-013-MappingSearch | – | – | – | R-04 | Passed |
| TS-02 | Progress & error contract (Milestone B) | AC-TS2.1 AC-TS2.2 AC-TS2.3 AC-TS2.4 |
– | UI-005-Progress | IT-007-Errors | E2E-004-Errors | – | – | R-10 | Passed |
| TS-03 | Per-track pipeline & 429 policy (Milestone C) | AC-TS3.1 AC-TS3.2 AC-TS3.3 AC-TS3.4 AC-TS3.5 |
UT-005-Export UT-007-Export |
UI-006-Errors | IT-008-Export IT-011-Errors |
E2E-005-RateLimit E2E-009-Errors |
– | – | R-03 R-11 |
Passed |
| TS-04 | Real Spotify playlist creation & track add (Milestone D) | AC-TS4.1 AC-TS4.2 AC-TS4.3 AC-TS4.4 AC-TS4.5 AC-TS4.6 |
UT-004-Export UT-007-Export |
– | IT-004-Export IT-006-Export IT-008-Export IT-013-MappingSearch IT-015-ExportPartialFailures |
E2E-001-Export E2E-010-ExportRealUrl |
– | – | R-03 R-09 R-11 |
Passed |
| Baseline | Ranking flows and filters | AC-F.1 AC-F.2 AC-F.3 |
UT-012-Ranking | UI-009-ExportModal | – | – | SMK-02 SMK-03 SMK-08 |
DEF-003 | R-21 | Passed |
| Baseline | Rankings playback stability | AC-P.1 AC-P.2 |
– | – | IT-012-Ranked | – | SMK-06 SMK-07 |
DEF-002 | R-05 | Passed |
Acceptance Criteria + Test Case Inventory Reference¶
For full inventory with descriptors see test plan.
Feature & Technical Story Testing¶
-
US-01 — Authenticate with Spotify
- AC-01.1 Redirect back with valid session
- UT-001-Auth — Cookie flags httpOnly SameSite Secure max-age
- IT-001-Auth — Callback success sets cookies plus 302
- AC-01.2 Prompt login if unauthenticated protected action
- UI-001-AuthGuard — Export CTA prompts connect when unauthenticated
- IT-002-Auth — Auth session connected flag
- IT-010-Auth — Revoke blocks export
- E2E-003-Auth — Unauth prompt; no export call
- AC-01.3 No tokens stored on cancel
- IT-001 — Callback with error=access_denied → no cookies, redirect to login
- AC-01.4 Tokens stored securely
- UT-001-Auth — Cookie flags httpOnly SameSite Secure max-age
- IT-001-Auth — Callback success sets cookies plus 302
- AC-01.5 Token refresh works
- UT-008-Auth — Refresh on 401
- IT-010-Auth — Revoke requires reconnect to export
- AC-01.1 Redirect back with valid session
-
US-02 — Export ranked songs by current filter (Inline)
- AC-02.1 Inline selection creates playlist with checked/filtered songs
- UT-003-Export — Filter builder
- UT-004-Export — Deezer→Spotify mapping (expanded)
- UI-010-SelectionInline — Enter selection mode; all checked by default
- IT-003-Export — Creates playlist with only selected (filtered)
- E2E-001-Export — Happy path including auth (inline)
- AC-02.2 Empty filter or zero selected disables export
- UI-011-SelectionInline — Export disabled at 0 selected; hint visible
- IT-004-Export — Empty filter message
- E2E-002-Export — Empty selection path (inline)
- AC-02.3 Spotify track mapping applied
- UT-004-Export — Expanded mapping rules
- IT-013-MappingSearch — Toggle, search shape, caching, errors
- IT-012-Ranked — Ranked contract deps
- UT-011-Export — Selector rules (genre/subgenre/decade)
- AC-02.4 Only checked, ranked, unskipped included
- UT-009-Export — Batch add in chunks of N
- UT-010-Export — Selector empty result returns proper status
- UT-011-Export — Selector rules (genre/subgenre/decade)
- IT-005-Export — Respects unselected/unchecked items
- IT-006-Export — Name and description in Spotify payload
- E2E-008-Mobile — Mobile viewport happy path
- AC-02.1 Inline selection creates playlist with checked/filtered songs
-
US-03 — Review and remove before export (Inline)
- AC-03.1 Inline uncheck updates list
- UI-010-SelectionInline — Checkbox toggles update selection
- IT-005-Export — Respects unchecked
- UI-002-ExportModal — Remove updates list in real time
- AC-03.2 Only remaining checked songs exported
- UI-012-SelectionSummary — Count/summary updates
- IT-005-Export — Respects unchecked
- UI-003-ExportModal — Count/summary reflect removals
- AC-03.3 Re-enter reflects latest filters; defaults checked
- UI-013-SelectionLifecycle — Cancel/filter change resets selection
- IT-005-Export — Respects reset state
- AC-03.1 Inline uncheck updates list
-
TS-01 — Mapping service toggle & rules (Milestone A)
- AC-TS2.3.A–F toggle/defaults, ISRC canonical, variant rules + duration tie, structured reasons, per-batch caching, 429/timeout
- UT-004-Export — Expanded cases
- IT-013-MappingSearch — Toggle/search/caching/error paths
- AC-TS2.3.A–F toggle/defaults, ISRC canonical, variant rules + duration tie, structured reasons, per-batch caching, 429/timeout
-
US-04 — Add playlist name and description (Inline)
- AC-04.1 Name/description applied
- UT-006-Export — Name/description in payload
- UI-014-NameFields — Default name editable; description optional
- IT-006-Export — Name/description in Spotify payload
- UI-004-ExportModal — Default name “Melodex Playlist [YYYY-MM-DD]”
- AC-04.2 Default name format
- UI-014-NameFields — Default name visible/editable
- IT-006-Export — Payload contains final name
- AC-04.1 Name/description applied
-
US-05 — Real-time feedback during export
- AC-05.1 Progress shown
- UI-005-Progress — Idle → loading → success/error
- IT-007-Errors — Backend failure returns error contract
- E2E-004-Errors — Progress shows error
- AC-05.2 Success state
- E2E-001-Export — Happy path including auth
- AC-05.3 Error state
- UI-005-Progress — Idle → loading → success/error
- IT-007-Errors — Backend failure returns error contract
- E2E-004-Errors — Progress shows error
- AC-05.1 Progress shown
-
TS-02 — Progress & error contract (Milestone B)
- AC-TS2.1–2.4 success/failure envelopes; partial passthrough; UI transitions
- UI-005-Progress — State machine
- IT-007-Errors — Contract enforcement
- E2E-004-Errors — End-to-end state changes
- AC-TS2.1–2.4 success/failure envelopes; partial passthrough; UI transitions
-
US-06 — Error handling
- AC-06.1 Per-song errors surfaced
- UT-007-Export — Per-item error surfacing
- UI-006-Errors — List plus skip or retry actions
- IT-011-Errors — Per-track 404 list
- E2E-009-Errors — Partial failures
- AC-06.2 429 shows try again later
- UT-005-Export — 429 backoff policy
- IT-008-Export — Inject 429 with retry guidance
- E2E-005-RateLimit — 429 path
- AC-06.3 Retry or skip available
- UT-007-Export — P-item error surfacing
- UI-006-Errors — List plus skip or retry actions
- IT-011-Errors — Per-track 404 list
- E2E-009-Errors — Partial failures
- AC-06.1 Per-song errors surfaced
-
TS-03 — Per-track pipeline & 429 policy (Milestone C)
- AC-TS3.1–3.5 chunking, aggregate results, per-track failures, Retry-After/bounded backoff, determinism
- UT-005-Export, UT-007-Export
- IT-008-Export, IT-011-Errors
- E2E-005-RateLimit, E2E-009-Errors
- AC-TS3.1–3.5 chunking, aggregate results, per-track failures, Retry-After/bounded backoff, determinism
-
US-07 — Confirmation with playlist link
- AC-07.1 Confirmation link present
- UI-007-Confirm — Link present and correct
- IT-009-Confirm — Response includes playlist URL
- AC-07.2 Deep link with fallback
- UI-008-DeepLink — App deep link and web fallback
- E2E-006-DeepLink — App versus web fallback
- AC-07.1 Confirmation link present
-
US-08 — Revoke Spotify access
- AC-08.1 Disconnect invalidates tokens
- UT-002-Auth — Revoke clears tokens
- IT-010-Auth — Revoke requires reconnect to export
- E2E-007-Revoke — Blocked until reconnect
- AC-08.2 Export prompts reconnect
- UI-001-AuthGuard — Export CTA prompts connect when unauthenticated
- IT-010-Auth — Revoke requires reconnect to export
- E2E-007-Revoke — Blocked until reconnect
- AC-08.3 Removed from Spotify connected apps
- IT-010-Auth — Revoke requires reconnect to export
- AC-08.1 Disconnect invalidates tokens
-
TS-04 — Real Spotify playlist creation & track add (Milestone D)
- AC-TS4.1–4.6 playlist created under user account; canonical URIs resolved; kept/skipped/failed correctly classified; 429/backoff applied to playlist ops; stub mode in CI; UI uses
playlistUrlfrom envelope- UT-004-Export — Mapping + canonical URIs for playlist add
- UT-007-Export — Aggregation of kept/skipped/failed with real playlist outcomes
- IT-004-Export, IT-006-Export, IT-008-Export, IT-013-MappingSearch, IT-015-ExportPartialFailures — Real-like playlist create/add, chunking, 429, partial failures
- E2E-001-Export, E2E-010-ExportRealUrl — Happy path export + confirmation link wiring
- AC-TS4.1–4.6 playlist created under user account; canonical URIs resolved; kept/skipped/failed correctly classified; 429/backoff applied to playlist ops; stub mode in CI; UI uses
Baseline Testing¶
-
Baseline — Ranking flows & filters
- AC-F.1 No auto-fetch until Apply
- UT-012-Ranking — ELO/ranking math sanity
- AC-F.2 Background burst capped about 33
- UT-012-Ranking — ELO/ranking math sanity
- AC-F.3 Filters do not clip UI
- UI-009-ExportModal — Renders zero items confirm disabled
- AC-F.1 No auto-fetch until Apply
-
Baseline — Rankings playback stability
- AC-P.1 Older previews refresh
- IT-012-Ranked — Ranked endpoint contract
- AC-P.2 No broken players
- IT-012-Ranked — Ranked endpoint contract
- AC-P.1 Older previews refresh
Coverage Status (roll-up)¶
| Layer | Planned | In Progress | Passed | Notes |
|---|---|---|---|---|
| Unit | 12 | 0 | 12 | |
| UI (component) | 14 | 0 | 14 | |
| Integration | 13 | 0 | 13 | |
| E2E | 9 | 0 | 9 |