PaymentStep
One observable step in a payment's lifecycle, emitted by the orchestrator as a stream. The Lab screen renders these as a live timeline (order created → launching → client result → verifying → terminal), each carrying its RedactedPayload so the user sees the actual data at every hop.
This is the app's teaching surface: the sequence, and the fact that a client Success still has to pass through Verifying before it's trusted, is the whole point.
Inheritors
Types
The SDK returned a client-side result — a hint, not yet trusted.
The wallet leg was reversed because the gateway leg failed (or the split couldn't complete) — the compensating credit from the split-payment design. Net wallet movement is zero.
The flow itself broke (network, config, unexpected) — distinct from a declined payment.
About to hand off to the provider SDK / UPI chooser. Journal row already written.
One leg of a split payment (PaymentOrchestrator.paySplit) reached a terminal state. Wraps the leg's own Settled step so the Lab timeline can render "wallet leg settled" / "gateway leg settled" distinctly, while still carrying the same server-authoritative outcome.
Backend created the order; price came from the server.
Server-authoritative terminal outcome.
Confirming the client result against the server (signature check / status).