ADR-0032 Accepted; contracts landed
Both acks are in (Platform 2026-06-02-platform-adr-0032-ack for the PCI and provider/registry boundary, Sales 2026-06-02-sales-adr-0032-card-capture-close-ux-ack for close-UX), so Revenue has finalized the open mechanics, moved ADR-0032 to Accepted, and landed the contract edits in one commit.
What Revenue finalized
The three items the ADR left to Revenue are settled in the new "Finalized mechanics" section of ADR-0032. Capture uses the Square Web Payments SDK card component (Square-hosted iframe fields), which tokenizes the PAN client-side into a single-use token; Revenue vaults that token into a durable card-on-file with Square POST /v2/cards and charges it through the existing chargeWithCardOnFile path. Per Sales' close-UX inputs there are two rep-selectable shapes of the same SDK capture: inline hosted fields for customer-present and screen-shared closes, and a Revenue-issued single-use hosted capture link for phone closes where no card is in hand. Both keep the raw PAN inside the Square-hosted surface, so Sguild stays at SAQ-A; a full hosted-checkout redirect was not chosen, per Sales' inline-preferred input. Idempotency keys off the close Idempotency-Key with a new :Card Square suffix alongside the existing :Order and :Payment, so a retried close never double-vaults or double-charges. A capture or vault failure rolls back cleanly (no card-on-file, order, reservation, or customer.handoff) and surfaces as 422 card_capture_failed, distinct from the charge-time payment_declined.
Contract edits landed
sales-ordering-surface is now v2.0.0. The §4.1 payment block drops the raw method_token and carries intent-plus-amount: amount_cents plus a capture handle (source: inline with a single-use capture_token, or source: link with a completed capture_id). §4.4 gains the 422 card_capture_failed reason and §8 covers the single-use handle and the SAQ-A boundary. This is a major bump because it removes and reshapes a field; the committed-payment block had no shipped consumer (the committed motion was gated, not in production), so the two-week deprecation window on v1.0.0 is a formality and the reserved motion stays continuously available.
payment-flow is now v1.1.0. It gains §4.5 ensure-card-on-file (capture and vault), a synchronous capability rather than an event, defining the vault inputs, the POST /v2/cards provider interaction, the close-key idempotency, and the failure modes. The payment.received / payment.failed payloads and enums are unchanged, so this is additive with no consumer cutover.
What remains (Revenue-internal build)
Implementation is Revenue's to build and is tracked outside this ADR: the POST /v2/cards vault step, the inline SDK component and the hosted-link capture page, and the committed-close saga wiring (capture handle to vault to reserve-order to charge to fund-lock). Platform's standing item is to confirm SAQ-A holds under the finalized Web Payments SDK plus POST /v2/cards mechanism and to note any event-types-registry impact (none expected; the capability emits no new event). Sales wires the committed close against v2.0.0 once the Revenue surface lands; the offer to write up the exact in-person, screen-share, and phone rep motions is welcome and would feed the capture-page UX.
References
- ADR-0032 (Accepted):
adrs/ADR-0032-sales-ordering-committed-close-card-capture-and-vault.md contracts/sales-ordering-surface/README.md(v2.0.0),contracts/payment-flow/README.md(v1.1.0)- Acks:
2026-06-02-platform-adr-0032-ack,2026-06-02-sales-adr-0032-card-capture-close-ux-ack