commerce: provider-neutral payment-request envelope (8 tests) — Phase 5 ext
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 1m10s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 1m10s
payment.sx — payment-request materialises {:order :amount :currency :return-url}
at the IO edge (amount from the ledger, currency/return-url host-supplied), so
lib/commerce stays vendor-agnostic; SumUp/Stripe adapters live in the orders
service and order-settle!(ref, amount) is the resume seam. pending-payments
enumerates suspended orders + envelopes (host poller seam). Gotcha handled: a
Scheme string flow-payload round-trips back wrapped as {:scm-string ...} —
unwrapped via scm->string. Total 209/209 across 13 suites.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -21,7 +21,7 @@ reconciliation — all auditable via the event log.
|
||||
|
||||
## Status (rolling)
|
||||
|
||||
`bash lib/commerce/conformance.sh` → **201/201** (12 suites; + attribution) — **roadmap complete; Phase 5 extensions in progress**
|
||||
`bash lib/commerce/conformance.sh` → **209/209** (13 suites; + payment) — **roadmap complete; Phase 5 extensions in progress**
|
||||
|
||||
## Ground rules
|
||||
|
||||
@@ -89,14 +89,23 @@ that unlocks the most tests per effort each iteration.
|
||||
flow-on-sx flow, recorded in the ledger; idempotent.
|
||||
- [ ] stock-constrained reservation — order-begin! fails (railway `fail`) when
|
||||
requested qty exceeds stocko availability; reservation decrements a stock view.
|
||||
- [ ] provider-neutral payment-request envelope — the `'payment` suspension carries
|
||||
`{:order :amount :currency :return-url}` (mirroring flow `host.sx`'s `request`
|
||||
envelope) so any provider's host adapter can initiate payment without the engine
|
||||
knowing the vendor. SumUp/Stripe/etc. adapters stay at the IO edge (orders
|
||||
service); `order-settle!(ref, amount)` remains the vendor-neutral resume seam.
|
||||
Keeps lib/commerce provider-agnostic; enables multi-provider support in the core.
|
||||
- [x] provider-neutral payment-request envelope — `payment.sx`: `payment-request`
|
||||
materialises `{:order :amount :currency :return-url}` at the IO edge (amount from
|
||||
the ledger, currency/return-url host-supplied); `pending-payments` enumerates
|
||||
suspended orders with their envelopes (host poller seam). Engine stays vendor-
|
||||
agnostic; `order-settle!(ref, amount)` is the resume seam.
|
||||
|
||||
## Progress log
|
||||
- 2026-06-07 — `payment.sx` (Phase 5 ext, the item the user asked about):
|
||||
provider-neutral payment-request envelope, materialised at the IO edge from the
|
||||
ledger amount + host-supplied currency/return-url — keeps lib/commerce vendor-
|
||||
agnostic (SumUp/Stripe adapters live in the orders service). `payment-request`
|
||||
builds the `{:order :amount :currency :return-url}` envelope; `pending-payments`
|
||||
is the host-poller seam listing suspended orders + their envelopes. Gotcha: a
|
||||
Scheme **string** carried as a flow payload round-trips back to SX wrapped as
|
||||
`{:scm-string "..."}` (numbers come back clean) — unwrap via `scm->string`
|
||||
before using it as the oid. payment suite 7/7 + 1 order-suite integration test;
|
||||
total 209/209 (13 suites).
|
||||
- 2026-06-07 — `attribution.sx` (Phase 5 ext): line-level discount attribution —
|
||||
the briefing's marquee "which line item triggered this discount?" query.
|
||||
`promo-lines` is the pure per-promo scope (percent/member → class lines, bundle
|
||||
|
||||
Reference in New Issue
Block a user