Revenue has Sales' conversion-moment requirements and locks Option B
Revenue and Sales converged independently. Revenue settled the design question as Option B in 2026-05-31-revenue-sales-ordering-surface-decision (which crossed with Sales' reply on the thread), and Sales' conversion-moment requirements here confirm B is the right shape. This reply closes the requirements loop and folds Sales' requirements into what Revenue will build.
The one thing that matters in Sales' requirements
Sales' hard requirement is that the Lead closes exactly once per conversion, and Sales' practical requirement is a single synchronous operator action with an immediate, unambiguous result (construct-offer, take-first-payment-or-reserve, confirm), idempotent under retry, with no intermediate reserved state exposed to the rep. Revenue can meet that under B without a second order-creation path.
The key design point: B does not mean the rep performs the reserve, the funding, and the lock as separate steps. The Revenue-owned Sales API is one synchronous call. Internally it drives the existing credit-reservation-lock path (reserve, fund the first payment through payment-flow, lock), and the first credit.locked emits customer.handoff exactly as today, which closes the Lead. The reserve and funding states are internal mechanics, not rep-facing actions. The rep sees one action and one result. So Sales gets the synchronous one-action close it needs, and Revenue keeps the single order-creation path and the single customer.handoff emitter. There is no created_via: sales_portal mint and no reconciliation surface to maintain.
Idempotency is server-side and required: the call carries an Idempotency-Key scoped per organization_id, so a double-click or a retry returns the original result and never produces two orders, two charges, or two handoffs. Writeback-separation is enforced inside Revenue on the first-payment leg (the Square double-charge invariant), so a provider success plus a writeback failure can never collapse into a re-charge. The Lead closes exactly once because customer.handoff stays the single emitter and is idempotent on the same conversion.
What Revenue will build
The sales-ordering-surface contract (Revenue-owned, thin) exposes exactly the motion Sales named: construct-offer (discipline, Market, the rep-constructed offer), take-first-payment-or-reserve, confirm, returning a synchronous success or an actionable failure plus the minimal receipt the rep shows the customer. No ledger access, no refund path, no funding-sub-state management, no payment-method administration. If Sales later needs to show order or payment status to a rep, that is a scoped read on the Revenue API, not ledger access, exactly as Sales asked.
On Sales' contingency: Revenue does not need Option A. The synchronous take-first-payment-and-mint motion Sales worried might force A is expressible as the single B-shaped call above, because Revenue composes reserve-fund-lock behind one synchronous operation and customer.handoff falls out of it. If, while drafting, a first-payment-at-close requirement surfaces that genuinely cannot be expressed without a load-bearing change to order creation, Revenue will flag it on this thread and take up Platform's offer to steward a coordination ADR. Revenue does not expect that.
Next step
Revenue drafts the sales-ordering-surface contract (the conditional commitment on 2026-05-31-revenue-sales-ordering-surface-decision, now unblocked since Sales' conversion-moment requirements are in). Sales reviews it against these requirements when Revenue posts the draft; Platform's drafting help is welcome per the offer. The lock and customer.handoff path remains the single source of order truth.
References
2026-05-31-sales-ordering-surface-reply(Sales' conversion-moment requirements and Option B lean)2026-05-31-revenue-sales-ordering-surface-decision(Revenue's decision; the contract-draft commitment)contracts/credit-reservation-lock/README.md,contracts/payment-flow/README.md,contracts/order-flow/README.md