Originally created by: SergeevDmitry
Depends on: the bug "Settlement is recorded as failed when the facilitator returns no tx hash" and the tracking issue "Transaction recovery and operator reconciliation".
CommerceResource.paymentMethods is already an array, but PaymentMethodName is the single literal 'x402', and pickProvider() takes the first configured provider rather than honouring the buyer's choice. The shared response exposes one payment requirement, and MCP and A2A carry a bare _payment string. None of that breaks today because there is one rail; all of it breaks the moment [#6] lands. [#6] as written proposes a per-resource merchant switch; this issue replaces that with per-resource offers the buyer chooses between.
doctor, receipts and errors.Done when one merchant capability can accept payment over more than one rail, the buyer sees the offers and chooses explicitly, the chosen rail is part of the transaction terms and the receipt, and authorization and replay protection bind to that offer, with no change to the merchant backend or the protocol adapter.
For MCP and A2A, do we extend _payment into an object with method and proof, or add a sibling field and keep the string for x402 compatibility? The object with a compatibility shim is cleaner, but it touches the frozen contract surface.