Part of #320. Governing: ADR-0014, ADR-0017, SPEC vibes REQ-VIBES-013 vs SPEC similar-artists REQ-SIM-011. Depends on: #339 (same files), #330 (matcher API). All review CONFIRMED.
Requirements
Acceptance Criteria
- One generation goroutine implementation, one form parser, one fuzzy-matching stack
- Behavior parity verified for all three entry points (album, artist, vibes page)
Branch
feature/340-vibes-dedup-unify-matching
PR Convention
PR title references the story; body ends with Closes #340, references the parent epic and governing artifacts above.
🤖 Posted on behalf of @joestump by Claude.
Part of #320. Governing: ADR-0014, ADR-0017, SPEC vibes REQ-VIBES-013 vs SPEC similar-artists REQ-SIM-011. Depends on: #339 (same files), #330 (matcher API). All review CONFIRMED.
Requirements
h.generateMixtapeAsync(...): the ~65-line background generation goroutine is byte-identical in albums.go:536 and artists.go:764, and the vibes.go:628 copy has drifted (value captures to avoid stale pointers,TokensUsed > 0guard, seed persistence) — the drifted copy is the correct one; unify on itparseMixtapeForm(...): the dj_id/GetDJForUser/max_tracks parse block repeats in 5 handlers (albums.go:484, artists.go:711, playlists.go:927, vibes.go:329,422)fallbackPrompt()pattern generator.go implements — pick a policy, amend the losing spec (coordinate with the contradiction story under EPIC: Spec Governance Cleanup #304)Acceptance Criteria
Branch
feature/340-vibes-dedup-unify-matchingPR Convention
PR title references the story; body ends with
Closes #340, references the parent epic and governing artifacts above.🤖 Posted on behalf of
@joestumpby Claude.