Payments plan
The current charge() path
threads a context through six layers.
Most of them only need the request ID.
Keep cancellation. Drop the five layers of context. your edit