If your Paywalls v2 paywall is served through a workflow, the dashboard's play_store_product_change_mode setting gets silently dropped. WorkflowScreenMapper rebuilds the paywall's component data from the workflow payload and hardcodes productChangeConfig to null, so ProductChangeCalculator never runs and the purchase goes out with no oldProductId.
End result: an existing subscriber who taps a different tier doesn't get upgraded — they end up with two concurrent Google Play subscriptions, both billed, with no error or warning anywhere. onPurchaseCompleted fires like nothing went wrong.
Filed with full repro steps, logs, and the disassembly behind the root cause here:
👉 https://github.com/RevenueCat/purchases-android/issues/4002
Posting here too because we couldn't find any dashboard or API way to opt an offering out of the workflow path, and setPurchaseLogic is rejected under the default purchasesAreCompletedBy = REVENUECAT (SDK logs a warning and ignores it). If anyone has found a supported workaround short of taking over billing entirely with MY_APP, we'd love to hear it.
Related earlier thread with the same symptom class — an RC engineer confirmed there that paywall-driven plan changes were "not working as expected with Paywalls v2" (not workflow-specific, but the same category of breakage):
https://community.revenuecat.com/sdks-51/subscription-product-change-issue-6244
