Part of #303 (EPIC: Unified Tag Taxonomy Completion). Governing: ADR-0025, SPEC unified-tag-taxonomy REQs "Enricher Integration", "Tag Normalization", "Denormalized Entity Tags Table". Complements #309 (dual-write removal — this story must land first).
Requirements
Acceptance Criteria
- Regenerating AI tags from any show page immediately reflects in tag browsing/filtering
- Concurrent upserts of the same (name, type, user) tag both succeed (race test)
Branch
feature/349-tag-write-path-correctness
PR Convention
PR title references the story; body ends with Closes #349, references the parent epic and governing artifacts above.
🤖 Posted on behalf of @joestump by Claude.
Part of #303 (EPIC: Unified Tag Taxonomy Completion). Governing: ADR-0025, SPEC unified-tag-taxonomy REQs "Enricher Integration", "Tag Normalization", "Denormalized Entity Tags Table". Complements #309 (dual-write removal — this story must land first).
Requirements
ai_tagsJSON and discarddata.TypedTags, never callingtags.UpsertTagsForEntity— regenerated tags are invisible to the taxonomy until the next background cycle (internal/handlers/tracks.go:343-375, albums.go:406-438, artists.go:548-585; metadata.go:741/1158/1453 shows the correct calls). Extract a shared persistence helper used by both pathsnameper the normalization REQ (" shoegaze " → name "shoegaze"); currently stored verbatim (upsert.go:51) — audit WARNINGAcceptance Criteria
Branch
feature/349-tag-write-path-correctnessPR Convention
PR title references the story; body ends with
Closes #349, references the parent epic and governing artifacts above.🤖 Posted on behalf of
@joestumpby Claude.