Skip to content

Conversation

@NicolasGorga
Copy link
Contributor

@NicolasGorga NicolasGorga commented Jan 17, 2026

Summary

What — What changes are introduced in this PR?

Guarantee that updateCartPromotionsWorkflow has the latest snapshot of the cart.

Why — Why are these changes relevant or necessary?

We were avoiding refetching the cart in updateCartPromotionsWorkflow, which doesn't cause issues unless:

  • You have a shipping option whose price depends on the cart context, like items. i.e Adding $X for each item in the cart.
  • You have an automatic promotion targeting shipping amount. i.e 100% off for carts with item_subtotal >= 100.

In this case, if we don't force the refresh inside the workflow, refreshCartShippingMethodsWorkflow runs and updates the shipping totals correctly, but we pass a cart object with stale data for the shipping totals and thus, adding/removing an item from the cart will compute the promotion based on the shipping total before the modification happened.

How — How have these changes been implemented?

Force the cart to be refreshed inside updateCartPromotionsWorkflow so that if the shipping total changed because it had a calculated price dependent on the cart context, then the promotion is computed using the latest information of the cart.

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


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.

fixes #14484


Note

Ensures promotions are computed against the latest cart state when items change, avoiding stale shipping totals.

  • In refresh-cart-items.ts, remove passing cart to updateCartPromotionsWorkflow, forcing it to refetch the cart before applying REPLACE on promo_codes.
  • Add changeset marking a patch for @medusajs/core-flows.

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

@NicolasGorga NicolasGorga requested a review from a team as a code owner January 17, 2026 21:41
@changeset-bot
Copy link

changeset-bot bot commented Jan 17, 2026

🦋 Changeset detected

Latest commit: 937ae7a

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/medusa Patch
@medusajs/test-utils Patch
integration-tests-http Patch
@medusajs/medusa-oas-cli 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/order 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/draft-order Patch
@medusajs/oas-github-ci Patch
@medusajs/cache-inmemory Patch
@medusajs/cache-redis Patch
@medusajs/event-bus-local Patch
@medusajs/event-bus-redis 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/framework Patch
@medusajs/js-sdk Patch
@medusajs/modules-sdk Patch
@medusajs/orchestration Patch
@medusajs/types Patch
@medusajs/utils Patch
@medusajs/workflows-sdk Patch
@medusajs/cli Patch
@medusajs/deps Patch
@medusajs/telemetry Patch
@medusajs/admin-bundler Patch
@medusajs/admin-sdk Patch
@medusajs/admin-shared Patch
@medusajs/admin-vite-plugin Patch
@medusajs/dashboard 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 17, 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 17, 2026 9:41pm
api-reference-v2 Ignored Ignored Jan 17, 2026 9:41pm
cloud-docs Ignored Ignored Jan 17, 2026 9:41pm
docs-ui Ignored Ignored Jan 17, 2026 9:41pm
docs-v2 Ignored Ignored Jan 17, 2026 9:41pm
medusa-docs Ignored Ignored Jan 17, 2026 9:41pm
resources-docs Ignored Ignored Jan 17, 2026 9:41pm
user-guide Ignored Ignored Jan 17, 2026 9:41pm

Request Review

@NicolasGorga NicolasGorga changed the title Fix/recompute shipping promotion item refresh fix(core-flows): force cart refresh on updatePromotionsWorkflow when refreshing items Jan 17, 2026
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] Shipping promotion discount uses stale shipping amount when cart items change (V2)

2 participants