- handleExternalPSPErrors (V2 attach): mirror PR #1392's V1 semantics — scan
all customer_products and bypass only when attachProduct.prices are all
one-off via pricesOnlyOneOff. Recurring add-ons stay strictly blocked.
- handleAttachV2Errors: pass full customer_products + attachProduct so the
gate sees the customer's whole state, not just the upgrade source.
- buildStripeSubscriptionItemsUpdate: drop non-Stripe-managed cus products
before building recurring item specs. Without this, an RC product's
Stripe price would leak into a brand-new Stripe subscription created for
an add-on attach (Runable +$25 overcharge bug).
- Add filterCustomerProductsByProcessorType helper.
- Add unit tests for both layers.