Skip to content

Conversation

@NicolasGorga
Copy link
Contributor

@NicolasGorga NicolasGorga commented Jan 18, 2026

Summary

What — What changes are introduced in this PR?

Allow to update item metadata on ITEM_UPDATE order change action.

Why — Why are these changes relevant or necessary?

You are unable to update a draft order item metadata.

How — How have these changes been implemented?

Update item metadata if specified in the order change action details when the ITEM_UPDATE processing handler gets executed.

Testing — How have these changes been tested, or how can the reviewer test the feature?

Integration tests.


Examples

Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice.
This helps with documentation and ensures maintainers can quickly understand and verify the change.

// Example usage

Checklist

Please ensure the following before requesting a review:

  • I have added a changeset for this PR
    • Every non-breaking change should be marked as a patch
    • To add a changeset, run yarn changeset and follow the prompts
  • The changes are covered by relevant tests
  • I have verified the code works as intended locally
  • I have linked the related issue(s) if applicable

Additional Context

Add any additional context, related issues, or references that might help the reviewer understand this PR.

closes #14481


Note

Adds support for updating item metadata during draft order item updates.

  • Core flow update-draft-order-item now includes metadata in action details for ITEM_UPDATE
  • Order processing merges provided metadata into both item.detail.metadata and item.metadata
  • Types expanded to include optional metadata for new/existing items and related inputs
  • Admin validators allow metadata in draft order item update payloads
  • Order transform maps detail.metadata to exposed item metadata
  • Integration test added to verify metadata update behavior

Written by Cursor Bugbot for commit 350a79e. This will update automatically on new commits. Configure here.

@NicolasGorga NicolasGorga requested a review from a team as a code owner January 18, 2026 00:40
@changeset-bot
Copy link

changeset-bot bot commented Jan 18, 2026

🦋 Changeset detected

Latest commit: 350a79e

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 76 packages
Name Type
@medusajs/core-flows Patch
@medusajs/order Patch
@medusajs/types Patch
@medusajs/medusa Patch
@medusajs/test-utils Patch
integration-tests-http Patch
@medusajs/event-bus-redis Patch
@medusajs/draft-order Patch
@medusajs/framework Patch
@medusajs/js-sdk Patch
@medusajs/modules-sdk Patch
@medusajs/orchestration Patch
@medusajs/utils Patch
@medusajs/workflows-sdk Patch
@medusajs/medusa-oas-cli Patch
@medusajs/admin-bundler Patch
@medusajs/dashboard Patch
@medusajs/analytics Patch
@medusajs/api-key Patch
@medusajs/auth Patch
@medusajs/caching Patch
@medusajs/cart Patch
@medusajs/currency Patch
@medusajs/customer Patch
@medusajs/file Patch
@medusajs/fulfillment Patch
@medusajs/index Patch
@medusajs/inventory Patch
@medusajs/link-modules Patch
@medusajs/locking Patch
@medusajs/notification Patch
@medusajs/payment Patch
@medusajs/pricing Patch
@medusajs/product Patch
@medusajs/promotion Patch
@medusajs/rbac Patch
@medusajs/region Patch
@medusajs/sales-channel Patch
@medusajs/settings Patch
@medusajs/stock-location Patch
@medusajs/store Patch
@medusajs/tax Patch
@medusajs/translation Patch
@medusajs/user Patch
@medusajs/workflow-engine-inmemory Patch
@medusajs/workflow-engine-redis Patch
@medusajs/cache-inmemory Patch
@medusajs/cache-redis Patch
@medusajs/event-bus-local Patch
@medusajs/analytics-local Patch
@medusajs/analytics-posthog Patch
@medusajs/auth-emailpass Patch
@medusajs/auth-github Patch
@medusajs/auth-google Patch
@medusajs/caching-redis Patch
@medusajs/file-local Patch
@medusajs/file-s3 Patch
@medusajs/fulfillment-manual Patch
@medusajs/locking-postgres Patch
@medusajs/locking-redis Patch
@medusajs/notification-local Patch
@medusajs/notification-sendgrid Patch
@medusajs/payment-stripe Patch
@medusajs/oas-github-ci Patch
@medusajs/cli Patch
@medusajs/deps Patch
@medusajs/telemetry Patch
@medusajs/admin-sdk Patch
@medusajs/admin-shared Patch
@medusajs/admin-vite-plugin Patch
@medusajs/icons Patch
@medusajs/toolbox Patch
@medusajs/ui-preset Patch
create-medusa-app Patch
medusa-dev-cli Patch
@medusajs/ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link

vercel bot commented Jan 18, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

8 Skipped Deployments
Project Deployment Review Updated (UTC)
api-reference Ignored Ignored Jan 23, 2026 6:17pm
api-reference-v2 Ignored Ignored Preview Jan 23, 2026 6:17pm
cloud-docs Ignored Ignored Preview Jan 23, 2026 6:17pm
docs-ui Ignored Ignored Preview Jan 23, 2026 6:17pm
docs-v2 Ignored Ignored Preview Jan 23, 2026 6:17pm
medusa-docs Ignored Ignored Preview Jan 23, 2026 6:17pm
resources-docs Ignored Ignored Preview Jan 23, 2026 6:17pm
user-guide Ignored Ignored Preview Jan 23, 2026 6:17pm

Request Review

cursor[bot]

This comment was marked as outdated.

cursor[bot]

This comment was marked as outdated.

@NicolasGorga NicolasGorga requested a review from adrien2p January 23, 2026 18:17
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

expect(updatedItem.metadata).toEqual({
updated: "metadata",
custom_field: "modified",
})
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test expects metadata replacement instead of merge behavior

Medium Severity

The test expects metadata to be { updated: "metadata", custom_field: "modified" } after updating an item that originally had { initial: "value", custom_field: "original" }. However, the implementation uses mergeMetadata (per the PR discussion), which preserves existing keys not present in the update. The expected result should be { initial: "value", custom_field: "modified", updated: "metadata" } to include the preserved initial key.

Additional Locations (1)

Fix in Cursor Fix in Web

existing.metadata ?? {},
action.details.metadata
)
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passing null metadata causes runtime TypeError crash

High Severity

The validator accepts metadata: null via nullish(), but isDefined(null) returns true (it only checks for undefined). When null is passed to mergeMetadata, Object.entries(null) throws a TypeError: Cannot convert undefined or null to object. The internal service uses isPresent which properly handles null, but this code uses isDefined which does not.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Cannot Update Items metadata in draft order

3 participants