Skip to content

Commit ad63e39

Browse files
cursor[bot]cursoragentraymondjacobson
authored
Fix duplicate upload notifications for collection track publishes (#14031)
## Summary - Ensure collection (playlist/album) child tracks are explicitly marked as playlist uploads before publish. - Preserve `is_playlist_upload` through web upload metadata adaptation and SDK upload schema parsing. - Prevent backend `create` track notifications from fanning out for each child track in collection upload retries. ## Changes - `packages/common/src/api/tan-query/upload/usePublishCollection.ts`: set `metadata.is_playlist_upload = true` when composing child track metadata for collection uploads. - `packages/common/src/adapters/track.ts`: include `is_playlist_upload` in `trackMetadataForUploadToSdk()` output. - `packages/sdk/src/sdk/api/tracks/types.ts`: add `isPlaylistUpload` to `UploadTrackMetadataSchema` so strict parsing keeps the field. ## Notes - Root cause traced to missing propagation of `is_playlist_upload`; discovery-provider trigger logic only suppresses per-track create notifications when this field is true. - Targeted tests were not runnable in this environment because `vitest` is not available in the package runtime path. <div><a href="https://cursor.com/agents/bc-2d121f4b-259a-5b96-9d0e-f1b7d29f50af"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/automations/c63aa103-66df-4558-b31d-675358e5c6a1"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/view-automation-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/view-automation-light.png"><img alt="View Automation" width="141" height="28" src="https://cursor.com/assets/images/view-automation-dark.png"></picture></a>&nbsp;</div> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Ray Jacobson <raymondjacobson@users.noreply.github.com>
1 parent 0a737dc commit ad63e39

3 files changed

Lines changed: 4 additions & 0 deletions

File tree

packages/common/src/adapters/track.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ export const trackMetadataForUploadToSdk = (
280280
'is_download_gated',
281281
'is_downloadable',
282282
'is_original_available',
283+
'is_playlist_upload',
283284
'is_scheduled_release',
284285
'bpm',
285286
'is_custom_bpm',

packages/common/src/api/tan-query/upload/usePublishCollection.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ function combineMetadata(
239239
// Set download & hidden status
240240
metadata.is_downloadable = !!collectionMetadata.is_downloadable
241241

242+
// Marks child tracks so backend suppresses per-track follower create notifications.
243+
metadata.is_playlist_upload = true
242244
metadata.is_unlisted = !!collectionMetadata.is_private
243245
if (collectionMetadata.is_private && collectionMetadata.field_visibility) {
244246
// Convert any undefined values to booleans

packages/sdk/src/sdk/api/tracks/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ export const UploadTrackMetadataSchema = z.object({
194194
coverArtSizes: z.optional(z.string()),
195195
isDownloadable: z.optional(z.boolean()),
196196
isOriginalAvailable: z.optional(z.boolean()),
197+
isPlaylistUpload: z.optional(z.boolean()),
197198
ddexReleaseIds: z.optional(z.record(z.string()).nullable()),
198199
ddexApp: z.optional(z.string()).nullable(),
199200
artists: z.optional(z.array(DDEXResourceContributor)).nullable(),

0 commit comments

Comments
 (0)