[Bug] Cart validation functions - two issues blocking migration from useBuyerJourneyIntercept()

Hey folks,

As checkout extensions now default to non-blocking behavior, I understand that cart/checkout validation functions are the way forward for validating checkouts. However, we’ve found two issues that prevent us from completing this migration.

Context: Our validation function is scoped to the checkout completion step.

Issue 1: Validation runs too late when the confirmation step is enabled

When a merchant has the confirmation step enabled (common in EU checkouts), buyers can advance from the checkout form to the review form without triggering validation. Validation only fires when the buyer clicks “Complete order” on the review step - but by that point the page is read-only.

Expected behavior: validation should run alongside Shopify’s built-in validations before the buyer reaches the review step, not after.

Issue 2 (critical): Validation errors are silently swallowed on the review step

When a buyer clicks “Complete order” on the review step, the button briefly shows a spinner and then resets to “Complete order” - with no error surfaced in the UI. The validation error and message are visible in DevTools in the SubmitForCompletion response from /checkouts/internal/graphql/persisted, but nothing is shown to the buyer.

Target: $.cart

For comparison, useBuyerJourneyIntercept() handles both of these correctly - validation runs before the buyer reaches the confirmation page, and errors are surfaced as expected.

Hi @Patrick_Jakubik

Thanks for flagging this - digging into this on my side now.

1 Like

Hi again @Patrick_Jakubik

It does appear that this is a bug on our side - it’s on our teams radar to address asap.

Thanks Liam! Could you look also into this similar issue? [Bug] Cart validation functions - Apple Pay / Google Pay shows unhelpful validation error on product/cart page

Thank you!:folded_hands:

Hi @Patrick_Jakubik,

Thank you for reporting. Re: issue 2, we are taking a look.

Re: issue 1,

Our validation function is scoped to the checkout completion step.

Expected behavior: validation should run alongside Shopify’s built-in validations before the buyer reaches the review step, not after.

If you are scoping logic to CHECKOUT_COMPLETION, it is the intended behaviour that the validation only runs at the very end when the buyer tries to complete the checkout. Is it an option for you to use CHECKOUT_INTERACTION here? Can you tell us more about your use case?

Hi @avocadomayo, thank you for looking into this.

Regarding Issue 1 - CHECKOUT_INTERACTION doesn’t work for our case because it triggers validation errors immediately when the checkout loads, before the buyer has had a chance to interact with anything. This is too aggressive.

What we need is behavior equivalent to Shopify’s own native field validation - errors appear only after the buyer attempts to proceed (e.g. clicking “Review order”), not on page load. Our validation should fire at the same point in the flow as Shopify’s built-in validations, so the buyer experiences a consistent, seamless error state.

CHECKOUT_COMPLETION runs too late (only at the final submit), and CHECKOUT_INTERACTION runs too early. There seems to be no step that mirrors the native validation timing.