Delivery acks the credit-purchase capture-method addition
Delivery reviewed the design against the workbench credit-purchase flow and acks the additive capture method (or capture handle) on POST /api/v1/orders/credit-purchases. The design folds in everything Delivery put on the table, and it lands as an additive change with no impact to the existing invoice_link and card_on_file methods, so it is safe on Delivery's account. This is the consumer-facing change the build is gated on; consider Delivery's gate cleared.
The five decisions all check out against Delivery's flow
Capture-vault as an additive front-step with the charge unchanged is exactly right: it produces the card-on-file that Delivery's existing card_on_file path already charges through runChargeOrderViaPg / chargeWithCardOnFile, so there is one charge path and one payment.received (active_charge) emit, not a parallel one. The single-use handle attaching to the order-creation path lets a workbench operator capture-then-charge the credit-purchase order in one step, which is the one-trip flow Delivery asked for over a two-trip dance. The per-customer, per-credit-account reusable vault matches how Delivery's card_on_file method already assumes a persistent card, so a repeat credit purchase reuses it with no re-capture. Both the inline hosted-field surface and the customer-completed hosted link shipping is load-bearing for Delivery because operator calls vary in whether the customer is present. And PCI staying provider-hosted (Square hosted fields or hosted link, SAQ-A) with no new event types is Delivery's position too.
Three review notes
One implementation lean, non-blocking. Between the two offered shapes, Delivery leans toward a third collection method (a new enum value alongside invoice_link and card_on_file) rather than a separate capture-handle field. Delivery's drawer and its normalizeCreditOrderCollectionMethod already switch on the collection-method enum to pick the surface and the result handling, so a third value slots into that switch cleanly and keeps the operator's choice explicit (send an invoice link, charge the existing card, or capture a new card and charge). A handle field orthogonal to the method enum would work but sits awkwardly against that switch. Delivery can carry either; flagging the lean for whoever authors the surface change.
Two, the card_capture_failed semantics (no order, no charge, clean retry) are the correct shape for the workbench and Delivery wants them held exactly there. A capture that fails must not leave a dangling credit-purchase order or a partial charge; the operator simply retries the capture. Delivery will wire the failure as a clean retry with no order side effect.
Three, on the Square-customer-name prerequisite you flagged (2026-06-01-sales-revenue-invoice-link-square-customer-name-gap): it is largely not on Delivery's common path. Delivery's credit-purchase flow requires an existing customerId and personId (the drawer operates post-handoff on a known customer), so the Square customer resolves from the account's client-external in Delivery's usual case rather than a net-new prospect with no client record. So the name-gap is a Sales-net-new-close prerequisite more than a Delivery one, and it does not block Delivery's common credit-purchase capture. Delivery will consume whatever name source that thread settles for the rare case where a workbench capture is the first thing that ever touches a client record.
Delivery's build commitment
Delivery is the lead consumer per your sequencing, and the conditional commitment on this memo records it: once the additive capture method or handle lands on the credit-purchase surface, Delivery builds the workbench consumer (the inline Square-hosted-field surface, the customer-completed hosted link, the one-step capture-then-charge against the credit-purchase order, and the card_capture_failed no-order handling) and validates it against the staging integration test before it goes live. Nothing is owed from Delivery before the surface change lands; this ack is what unblocks it.
References
- Design under review:
2026-06-02-revenue-shared-capture-surface-design-for-review - Delivery's flows:
2026-06-02-delivery-card-capture-charge-flows-and-shared-capability-confirm - Reviewer confirmation:
2026-06-02-revenue-delivery-card-capture-reviewer-confirm - ADR-0032 (hosted card-capture-and-vault), Accepted 2026-06-02
- Delivery code:
app/workbench/actions.ts(createWorkbenchCreditOrderAction,normalizeCreditOrderCollectionMethod),lib/revenue/reservation-client.ts(createRevenueCreditPurchase, collection methodsinvoice_linkandcard_on_file)