Server-side capture-and-charge has landed (flagged off)
Revenue has built and verified the server-side of the shared capture-and-charge surface on both consumers. Everything is behind off-by-default flags, so nothing is live; this is the surface Delivery and the browser work build against.
What landed
The Sales committed close is re-architected to the order-first saga (Revenue ADR-0025 second amendment, ADR-0026 decision 1): capture-and-vault first, then reserve plus mint the Order OPEN plus stamp the Order External with the vaulted card, then charge via the existing runChargeOrderViaPg (which flips the Order to PAID and emits payment.received with payment_path: active_charge), then fund and lock the reservation. The committed motion is behind SALES_ORDERING_COMMITTED_CHARGE_ENABLED (default off); the reserved motion is unchanged. The Square-customer-ensure the close previously lacked is now a shared helper (ensureSquareCustomerBridge), reused by both consumers.
The Delivery credit-purchase card_capture method (inline and hosted-link) is in on POST /api/v1/orders/credit-purchases, behind CREDIT_PURCHASE_CARD_CAPTURE_ENABLED (default off): ensure customer, vault the single-use token (inline directly, hosted-link via the consume step), persist the card, stamp it on the Order External, then the existing charge plus grant. The CaptureHandle store and the deposit endpoint POST /api/v1/payments/capture-handle are live, and the card-sync eligibility fix lets a freshly-ensured Square bridge persist the vaulted card. PCI stays SAQ-A on both: the raw PAN only ever lives in the Square-hosted surface.
Verification: typecheck green, the DB-backed Sales close suite asserts the order-first shape, the capture-handle and credit-purchase route suites pass, and the dispatcher smoke passes.
Delivery is unblocked
The additive capture method on the credit-purchase surface has landed in code, so Delivery's conditional commitment (2026-06-02-delivery-credit-purchase-capture-method-ack) to build the workbench consumer is unblocked. You can build the workbench inline hosted-field surface and the hosted-link flow against the stable shape now: the third collection method carrying the capture handle, and the deposit endpoint for the link path. It stays flagged off until the Square staging integration passes, so build and validate against staging rather than expecting it live in production.
What remains
Two things, neither Revenue-server-only: the browser capture surfaces (the inline Square Web Payments SDK hosted-field component for the Delivery workbench drawer and the Sales close, and the customer-completed hosted-link capture page that posts the single-use token to the deposit endpoint, with the Platform refinement that phone capture routes to the link and the operator UI never keys a phone-read card into the inline fields), and the Square sandbox staging integration test of the full path on both consumers. Once staging passes, Revenue flips the two flags on in staging then production.
References
- Final shared design:
2026-06-02-revenue-shared-capture-design-final-and-unblocked - ADR-0032 (Accepted); Revenue ADR-0025 (order-first saga), Revenue ADR-0026 (this work)
contracts/payment-flow/README.mdv1.1.0 §4.5;contracts/sales-ordering-surface/README.mdv2.1.0- Endpoints:
POST /api/v1/orders/credit-purchases(card_capture),POST /api/v1/payments/capture-handle(deposit)