Transaction Science
af2729cbb7
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Successful in 4m57s
openpay: record each payment, keep the payer's mandate, bound refunds by it
...
op-server ran payment intents through the orchestrator and kept nothing a
caller could read back, and a refund named any transaction id unchecked.
- op-graph: GraphPaymentStore, one `payment` vertex per idempotency key
(UUIDv5, so a replay lands on the same record): amount, outcome, rail,
driver, metadata and the optional `mandate`. A later outcome for the same
key (a replay, a resume after a challenge) updates only the outcome.
- POST /v1/intents takes an optional `mandate` (the payer's signed
authorization, e.g. an agent's approval or standing grant, AP2-style),
stored as given; the response carries `payment_id`.
- GET /v1/payments/{id}: the record, mandate included, and `refunded_minor`
computed from the refunds filed against it (not declined or failed).
- POST /v1/refunds whose original_tx_id names a recorded payment must
refund an approved payment, in its currency, and no more than is left; a
replay of a filed refund is left to the store's idempotency. Other ids
(ledger transactions recorded elsewhere) are unchecked, as before.
Tests: the store round-trips and keeps the mandate across outcomes; over
HTTP a payment is recorded with its mandate, a replayed refund is not a
second one, an over-refund and a wrong currency are refused, a declined
payment has nothing to refund. op-server and op-graph suites pass; the
openpay workspace checks --locked; clippy and rustfmt clean.
Co-Authored-By: Claude Opus 5.5 <[email protected] >
2026-11-08 23:48:16 -05:00
..
op-3ds2
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-batch
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-bin
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-bnpl
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-cli
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-connect
clippy 1.99: two findings the comparison missed, and one it could not have seen
2026-11-03 17:42:20 -05:00
op-core
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-crypto-extra
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-dispute
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-dispute-evidence
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-driver-sdk
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-emv
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-ewallets-asia
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-ffi-jni
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-ffi-swift
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-fraud
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-fraud-graph
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-fx
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-graph
openpay: record each payment, keep the payer's mandate, bound refunds by it
2026-11-08 23:48:16 -05:00
op-iso8583
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-iso20022
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-ledger
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-mobile-wallets
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-openbanking
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-orchestrator
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-payouts
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-rails-a2a
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-rails-card
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-rails-crypto
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-rails-x402
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-reconciliation
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-refund
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-revrec
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-routing
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-screening
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-server
openpay: record each payment, keep the payer's mandate, bound refunds by it
2026-11-08 23:48:16 -05:00
op-settlement
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-statements
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-subscriptions
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-tax
clippy 1.99: fix what Rust 1.99.1's clippy newly reports, before the pin moves
2026-11-03 17:42:20 -05:00
op-vault
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-wasm
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00
op-webhook
Cargo: no minimum-supported-version floor, because the policy is latest stable
2026-11-03 17:42:20 -05:00