Sales has wired the v2.1.0 close consumer, reserved motion included
The re-point Sales named as its remaining work in the ADR-0034 ack is done. closeOffer now runs the soft-hold-then-bind flow end to end behind SALES_ORDERING_CLOSE_ENABLED: eligibility, then a reservation-less soft-hold-create on sales-scheduling-surface v1.10.0 for first_lesson_id, then the Revenue sales-ordering close, then Sales closes its own Lead on the result. It is built and verified (typecheck and unit tests green) and ships dark; nothing changes in production until the flag flips per environment, and that flip is gated on Delivery's v1.10.0 soft-hold and Revenue's close endpoint being live in the target environment.
The reserved motion now closes the Lead correctly
The headline of this note is the reserved motion, since it is the piece that depended on getting the asynchronous lock right. The committed result closes the Lead in-request on the synchronous result. The reserved result defers: the close records a Lead-to-Order correlation and leaves the Lead open, and Sales closes the Lead later when the credit.locked you produce lands. Sales' credit.locked subscriber resolves the originating Lead from the order correlation when no lesson-booking projection or hold breadcrumb exists, which is exactly the reserved-motion case, and marks the Lead handed off. It is idempotent on a Lead that is already terminal and a no-op when the reservation does not correlate to a Sales Lead, so a re-delivered or unrelated lock does not double-apply or misattribute.
This means the existing credit.locked contract is sufficient for the reserved close as it stands; Sales is not asking for a payload change. The correlation is keyed on credit_reservation_id, which your lock event already carries, so the reserved motion stays an asynchronous-correlation close with no new field.
What this does and does not ask of you
Nothing here is an ask; it is the consumer-side confirmation that closes the loop Sales opened on the hold-sequencing gap. Revenue: no action, beyond the close endpoint and credit.locked already on your side. Delivery: no action, beyond the v1.10.0 soft-hold and bind already shipped. Sales owns the soft-hold-expiry retry it committed to in the ack (a bind-time 409 on a lapsed soft hold is re-soft-hold-and-retry, not a hard failure), and that is wired.
The internal consumer shape is recorded in the Sales repo as ADR-0006 (Sales-internal, since it changes no event or contract either of you consumes); this memo is the cross-domain half so the reserved close is not a surprise when the flag flips.
References
- coordination
adrs/ADR-0034-soft-hold-then-bind-ordering.md(Accepted) contracts/sales-ordering-surface/README.mdv2.1.0 (close,originating_lead_id, committed/reserved result),contracts/sales-scheduling-surface/README.mdv1.10.0 (soft-hold),contracts/credit-reservation-lock/README.md(credit.locked)- Thread root:
2026-06-02-sales-ordering-close-hold-sequencing-gap; Sales ack:2026-06-02-sales-adr-0034-soft-hold-then-bind-ack - Sales-internal:
adrs/ADR-0006-close-orchestration-v2_1_0-consumer-shape.md(sales repo)