Traceability Appendix¶
This appendix is the receipts page: it confirms that for each requirement (US/AC), the planned tests exist in the repo at the scope-freeze commit.
- Scope freeze commit:
2fdb518 - Note on Baseline: Items labeled “Baseline” in the plan were manual checks performed pre-automation. See the separate baseline report for details.
Baseline (Manual, pre-automation)¶
| Area | Notes | Link |
|---|---|---|
| Ranking flows & filters | Manual baseline prior to automation; see report. | baseline.md |
| Rankings playback stability | Manual baseline prior to automation; see report. | baseline.md |
US-01 — Authenticate with Spotify¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-01.1 — Redirect back with valid session | UT-001-Auth IT-001-Auth |
ut-001-auth.spec.ts it-001-auth.spec.ts |
| AC-01.2 — Prompt login if unauthenticated protected action |
UI-001-AuthGuard IT-002-Auth IT-010-Auth E2E-003-Auth |
ui-001-authguard.spec.tsx it-002-auth.spec.ts it-010-auth.spec.ts e2e-003-auth.cy.ts |
| AC-01.3 — No tokens stored on cancel | IT-001 (callback error path) | it-001-auth.spec.ts |
| AC-01.4 — Tokens stored securely | UT-001-Auth IT-001-Auth |
ut-001-auth.spec.ts it-001-auth.spec.ts |
| AC-01.5 — Token refresh works | UT-008-Auth IT-010-Auth |
ut-008-auth.spec.ts it-010-auth.spec.ts |
US-02 — Export ranked songs by current filter (Inline)¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-02.1 — Inline selection creates playlist with checked/filtered songs | UT-003-Export UT-004-Export UI-010-SelectionInline IT-003-Export E2E-001-Export |
ut-003-export.spec.ts ut-004-export-mapping.spec.ts ui-010-selection-inline.spec.tsx it-003-export.spec.ts e2e-001-export.cy.ts |
| AC-02.2 — Empty filter or zero selected disables export | UI-011-SelectionInline IT-004-Export E2E-002-Export |
ui-011-selection-inline.spec.tsx it-004-export.spec.ts e2e-002-export.cy.ts |
| AC-02.3 — Spotify track mapping applied | UT-004-Export IT-013-MappingSearch IT-012-Ranked UT-011-Export |
ut-004-export-mapping.spec.ts it-013-mappingsearch.spec.ts it-012-ranked.spec.ts ut-011-export-selector.spec.ts |
| AC-02.4 — Only checked, ranked, unskipped included | UT-009-Export UT-010-Export UT-011-Export IT-005-Export IT-006-Export E2E-008-Mobile |
ut-009-export-chunking.spec.ts ut-010-export-selector-empty.spec.ts ut-011-export-selector.spec.ts it-005-export.spec.ts it-006-export.spec.ts e2e-008-mobile.cy.ts |
US-03 — Review and remove before export (Inline)¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-03.1 — Inline uncheck updates list | UI-010-SelectionInline IT-005-Export UI-002-ExportModal |
ui-010-selection-inline.spec.tsx it-005-export.spec.ts ui-002-exportmodal.spec.tsx |
| AC-03.2 — Only remaining checked songs exported | UI-012-SelectionSummary IT-005-Export UI-003-ExportModal |
ui-012-selection-summary.spec.tsx it-005-export.spec.ts ui-003-exportmodal.spec.tsx |
| AC-03.3 — Re-enter reflects latest filters; defaults checked | UI-013-SelectionLifecycle IT-005-Export |
ui-013-selection-lifecycle.spec.tsx it-005-export.spec.ts |
TS-01 — Mapping service toggle & rules (Milestone A)¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-TS2.3.A–F — toggle/defaults, ISRC canonical, variant tie, structured reasons, per-batch caching, 429/timeout |
UT-004-Export IT-013-MappingSearch |
ut-004-export-mapping.spec.ts it-013-mappingsearch.spec.ts |
US-04 — Add playlist name and description (Inline)¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-04.1 — Name/description applied | UT-006-Export UI-014-NameFields IT-006-Export UI-004-ExportModal |
ut-006-export-payload-name.spec.ts ui-014-namefields.spec.tsx it-006-export.spec.ts ui-004-exportmodal.spec.tsx |
| AC-04.2 — Default name format | UI-014-NameFields IT-006-Export |
ui-014-namefields.spec.tsx it-006-export.spec.ts |
US-05 — Real-time feedback during export¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-05.1 — Progress shown | UI-005-Progress IT-007-Errors E2E-004-Errors |
ui-005-progress.spec.tsx it-007-errors.spec.ts e2e-004-errors.cy.ts |
| AC-05.2 — Success state | E2E-001-Export | e2e-001-export.cy.ts |
| AC-05.3 — Error state | UI-005-Progress IT-007-Errors E2E-004-Errors |
ui-005-progress.spec.tsx it-007-errors.spec.ts e2e-004-errors.cy.ts |
TS-02 — Progress & error contract (Milestone B)¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-TS2.1–2.4 — success/failure envelopes; partial passthrough; UI transitions |
UI-005-Progress IT-007-Errors E2E-004-Errors |
ui-005-progress.spec.tsx it-007-errors.spec.ts e2e-004-errors.cy.ts |
US-06 — Error handling¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-06.1 — Per-song errors surfaced | UT-007-Export UI-006-Errors IT-011-Errors E2E-009-Errors |
ut-007-export-per-item.spec.ts ui-006-errors.spec.tsx it-011-errors.spec.ts e2e-009-errors.cy.ts |
| AC-06.2 — 429 shows “Try again later” | UT-005-Export IT-008-Export E2E-005-RateLimit |
ut-005-export-429.spec.ts it-008-export-429.spec.ts e2e-005-ratelimit.cy.ts |
| AC-06.3 — Retry or skip available | UT-007-Export UI-006-Errors IT-011-Errors E2E-009-Errors |
ut-007-export-per-item.spec.ts ui-006-errors.spec.tsx it-011-errors.spec.ts e2e-009-errors.cy.ts |
TS-03 — Per-track pipeline & 429 policy (Milestone C)¶
| AC | Tests (IDs) | File links |
|---|---|---|
| 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 |
ut-005-export-429.spec.ts ut-007-export-per-item.spec.ts it-008-export-429.spec.ts it-011-errors.spec.ts e2e-005-ratelimit.cy.ts e2e-009-errors.cy.ts |
US-07 — Confirmation with playlist link¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-07.1 — Confirmation link present | UI-007-Confirm IT-009-Confirm |
ui-007-confirm.spec.tsx it-009-confirm.spec.ts |
| AC-07.2 — Deep link with fallback | UI-008-DeepLink E2E-006-DeepLink |
ui-008-deeplink.spec.tsx e2e-006-deeplink.cy.ts |
US-08 — Revoke Spotify access¶
| AC | Tests (IDs) | File links |
|---|---|---|
| AC-08.1 — Disconnect invalidates tokens | UT-002-Auth IT-010-Auth E2E-007-Revoke |
ut-002-auth-revoke.spec.ts it-010-auth.spec.ts e2e-007-revoke.cy.ts |
| AC-08.2 — Export prompts reconnect | UI-001-AuthGuard IT-010-Auth E2E-007-Revoke |
ui-001-authguard.spec.tsx it-010-auth.spec.ts e2e-007-revoke.cy.ts |
| AC-08.3 — Removed from Spotify connected apps | IT-010-Auth | it-010-auth.spec.ts |
TS-04 — Real Spotify integration (Milestone D)¶
| AC | Tests (IDs) | File links |
|---|---|---|
AC-TS4.1–4.4 — real Spotify client for create/add; real-worker integration on /api/playlist/export; partial-failure envelope coverage; UI wiring of backend playlistUrl |
UT-013-SpotifyClient IT-004-Export IT-015-ExportPartialFailures E2E-010-ExportRealUrl |
ut-013-spotify-client.spec.ts it-004-export.spec.ts it-015-export-partial-failures.spec.ts e2e-010-real-url.cy.ts |