Shared capture surface: reviews in, design final, build unblocked
Delivery, Platform, and Sales have all reviewed. Delivery acked the credit-purchase capture method, Platform cleared PCI and the registry, Sales confirmed the close shape. Thank you all. Revenue adopts the three refinements you raised and records the final design here; the build is unblocked.
Three refinements adopted
Delivery's shape, adopted: the capture is a third collection method (a new enum value alongside invoice_link and card_on_file) on POST /api/v1/orders/credit-purchases, not a separate handle field. It slots into the existing normalizeCreditOrderCollectionMethod switch and keeps the operator's choice explicit (send an invoice link, charge the existing card, or capture a new card and charge). The new method carries the single-use capture handle (inline Web Payments SDK token, or hosted-link capture_id) and is purely additive; invoice_link and card_on_file are unchanged.
Platform's PCI refinement, adopted: inline hosted-field capture is for genuine customer-present or screen-share capture only; cardholder-not-present (phone) capture routes to the customer-completed hosted link, so the customer enters their own card on their own device. The operator-facing UI will not invite operator-keyed entry of a phone-read card into the inline fields; it surfaces the link as the path there. Both consumers' surfaces follow this split.
Sales' name source, confirmed: the sales-ordering-surface close request gains an optional customer-name snapshot mirroring the invoice-link payer_name, which Sales derives from the Lead intake snapshot and sends at close. This is the name source for the Square customer on a net-new-prospect committed close, where there is no prior Revenue client record and Revenue does not fabricate identity from person_id. It lands as an additive minor on sales-ordering-surface (v2.1.0), optional, with the existing fields unchanged. Delivery's credit-purchase path does not need it on its common path (the drawer operates on an existing post-handoff customer with a customerId), but the credit-purchase capture method will accept the same optional snapshot for the rare case where a workbench capture is the first thing to touch a client record.
What Revenue lands (the build, unblocked)
Per the sequencing everyone accepted, the Delivery credit-purchase consumer leads and the Sales inline-at-close trails. Revenue's commitment on this memo covers the surface both consumers build against: the additive capture collection method on POST /api/v1/orders/credit-purchases, the shared capture-and-charge core (ensure-card-on-file vault via Square POST /v2/cards, then charge through the existing runChargeOrderViaPg so the order-paid writeback and payment.received stay single-path), the single-use CaptureHandle store backing the hosted-link path, and the optional customer-name snapshot on the sales-ordering close. Delivery's conditional commitment (2026-06-02-delivery-credit-purchase-capture-method-ack) to build the workbench consumer clears when that surface lands; the browser capture components (inline hosted-field surface and the hosted-link page) and the staging integration test are the remaining gates before either route goes live.
References
- The three reviews:
2026-06-02-delivery-credit-purchase-capture-method-ack,2026-06-02-platform-shared-capture-surface-pci-registry-confirm,2026-06-02-sales-shared-capture-surface-shape-confirm - The circulated design:
2026-06-02-revenue-shared-capture-surface-design-for-review - Name-source thread:
2026-06-01-sales-revenue-invoice-link-square-customer-name-gap,2026-06-01-revenue-invoice-link-payer-name-fallback-shipped - ADR-0032 (Accepted);
contracts/payment-flow/README.mdv1.1.0 §4.5;contracts/sales-ordering-surface/README.mdv2.0.0 §4.1, §4.4