PeachGateway
Peach Payments as a second vault-pattern target (roadmap #12) — proves the stored-instrument card_id vault (VaultStore/VaultRoutes/VaultBackend, roadmap #7) generalizes across processors, not just Stripe's Customer shape it was modeled on. Mirrors provider:cash's lightest-module shape: no Compose, no hosted-webview.
pay() charges a saved instrument via the same processor-agnostic VaultBackend the Stripe-style vault already exposes — customerId/instrumentId are threaded through providerParams (prepare() just repackages them, same passthrough shape as cash/paystack). No live Peach API call — VaultBackend itself is the mock backend round-trip.