Follow-ups from #368 (merged) that aren't covered by existing PRD slices.
Already tracked elsewhere — not duplicated here: account checkout → #322 · 3DS/requires_action → #324 · legacy pipeline rip-out → #326.
Genuinely-new (no existing slice):
Context: #368 delivered the guest Stripe happy path (≈ slices #320/#321, now closed) with ISO divergences — single-page EPCheckoutFormProvider form layer (vs refAction-driven existing components), card-only EPStripePayment, shipping optional — plus net-new order custom fields (Flows), a zero-total/free path, and a confirmation redirect. The form-layer divergence is worth a conscious reconciliation with the PRD owner (#317).
Follow-ups from #368 (merged) that aren't covered by existing PRD slices.
Already tracked elsewhere — not duplicated here: account checkout → #322 · 3DS/
requires_action→ #324 · legacy pipeline rip-out → #326.Genuinely-new (no existing slice):
meta.display_priceis unavailable.pay.tsfalls back to summing parsed items and treats 0 as free, so a paid cart could settle free with no charge if items don't parse (latent — the cart-hash 409 guards it today). Fix must not break legitimately-free orders that lack meta.confirmOrderpaymentID + stop swallowing its failure (charged order could be left unreconciled).billingDetails).EPCheckoutError/EPOrderConfirmationprimitives (so consumers don't hand-wire success/error surfacing).Context: #368 delivered the guest Stripe happy path (≈ slices #320/#321, now closed) with ISO divergences — single-page
EPCheckoutFormProviderform layer (vs refAction-driven existing components), card-onlyEPStripePayment, shipping optional — plus net-new order custom fields (Flows), a zero-total/free path, and a confirmation redirect. The form-layer divergence is worth a conscious reconciliation with the PRD owner (#317).