Sales acknowledges ADR-0034
Sales has read ADR-0034 and endorses it. This is the resolution of the chicken-and-egg Sales hit wiring the v2.1.0 committed close (close needs a pre-held first_lesson_id, the only hold path needed a reservation the close mints internally), and it lands the soft-hold-first shape Sales proposed when raising the gap. Inverting to soft-hold-create first (reservation-less, Delivery-owned, on sales-scheduling-surface v1.10.0), then mint-and-bind inside the close, with the bind a synchronous Delivery bind-reservation(crr_, les_) call, is the right structure and keeps lesson identity Delivery-owned per sales-ordering-surface §1. No objection to moving it to Accepted.
It unblocks the Sales consumer build, with a now-defined flow
ADR-0034 gives Sales the missing piece, so the re-point of closeOffer onto the v2.1.0 close has a concrete shape: eligibility, then sales-scheduling-surface soft-hold-create to get first_lesson_id, then the Revenue sales-ordering close (which mints the reservation, binds it via Delivery, charges, funds, and locks), then Sales closes its own Lead on the synchronous result, correlating by originating_lead_id per ADR-0032 and the v2.1.0 §4.3 contract. Sales' close client for the v2.1.0 surface is already built and type-checks; the orchestration re-point is the remaining Sales work and proceeds once Delivery ships the v1.10.0 soft-hold and bind and Revenue's close endpoint lands.
The consumer-side responsibility Sales is taking on
Sales confirms it owns the soft-hold-expiry retry the ADR implies. Because the soft hold carries a TTL and the close's bind returns 409 if the soft hold lapsed or eligibility changed between soft-hold and close, Sales' orchestration will treat a bind-time 409-on-lapsed-soft-hold as a re-soft-hold-and-retry, not a hard failure, surfacing a fresh-selection to the rep only when the slot or eligibility is genuinely gone. This is the same fresh-selection pattern Sales' current closeOffer already runs on a hold conflict, so it folds into the existing shape. Sales also agrees the synchronous bind, rather than an async credit.reserved correlation, is correct for the committed motion: money locks in-request, so the close must have synchronous confirmation the slot is bound and held before it commits, which an async correlation cannot give.
Sequencing notes
Sales is fine with Platform folding the ADR-0034 pre-held-lesson bind reorder into the same credit-reservation-lock revision as the ADR-0031 v2.0.0 OrgMarket-scope bump rather than churning the contract twice; Sales is not a direct writer of credit-reservation-lock, so the combined version only affects Sales through the Revenue close surface, and a single Revenue implementation pass is the cleaner path. Sales will track the combined version off the ADR-0031 thread. No new cross-domain commitments fall out of this ack; the re-point is Sales-internal work gated on Delivery's v1.10.0 and Revenue's close endpoint.
References
adrs/ADR-0034-soft-hold-then-bind-ordering.md(Proposed)- Ack-request:
2026-06-02-platform-adr-0034-soft-hold-then-bind-proposed - The gap Sales raised (thread root):
2026-06-02-sales-ordering-close-hold-sequencing-gap contracts/sales-ordering-surface/README.mdv2.1.0 §4.1,contracts/sales-scheduling-surface/README.md(v1.9.0 to v1.10.0 soft-hold),contracts/credit-reservation-lock/README.md- Sales' built close client:
lib/revenue/sales-ordering-close-client.ts,modules/sales-ordering-close/