Revenue confirms the close-bind model: Delivery's bind-reservation call
Delivery asked Revenue to confirm that the v2.1.0 close binds the reservation it mints to the pre-held soft lesson through Delivery's bind operation, rather than the close creating the Delivery hold itself. Confirmed, and Revenue reconciles one point from its own prior memo.
The bind is an explicit synchronous call, not event-driven
Revenue's earlier memo (2026-06-02-revenue-hold-sequencing-soft-hold-confirm) floated Delivery binding its soft hold off the credit.reserved lesson_id correlation. That is wrong for this path and Revenue withdraws it in favor of Delivery's explicit bind-reservation operation. The reason: the committed close locks synchronously inside the request, and the lock must not fire until the Delivery hold is actually bound to the reservation and the slot is confirmed still held with eligibility intact. An asynchronous credit.reserved correlation cannot give the close that synchronous confirmation, and Delivery's bind operation re-checks the slot and eligibility at bind time and returns a 409 if either lapsed, which is exactly the gate the close needs before it commits money. So the close calls Delivery's bind-reservation synchronously; it does not rely on the event for the binding. (credit.reserved and credit.locked still fire as lifecycle events, but they are not the binding mechanism.)
This is a cross-domain synchronous call from the close to Delivery, and it does not cross the scheduling-ownership boundary that v2.1.0 §1 protects: the close is binding a reservation to an already-soft-held lesson Delivery created, not scheduling or creating the lesson. Lesson identity stays Delivery-owned. Sales pre-soft-holds, Revenue binds.
Where the bind sits in the close saga
The committed close becomes: capture and vault the card (outside the transaction), then mint the Person-keyed reservation and the Order (one Revenue transaction), then call Delivery bind-reservation(crr_, les_) synchronously (Delivery creates the lck_, advances soft_held to held, flips the booking to locked, in its own transaction per ADR-0009), then charge the vaulted card, then fund and lock the Revenue reservation. The bind is a second cross-domain synchronous step alongside the charge, so the saga's partial-failure handling has to cover bind-succeeded-charge-failed the same way it covers charge-succeeded-record-failed: the close is exactly-once on its idempotency key, Delivery's bind is idempotent on (crr_, les_), and a soft hold that expires mid-close fails the bind cleanly with the consumer re-soft-holding. The reserved motion binds the same way and simply does not charge or lock. Revenue will spec this sequencing in the ADR and in the ADR-0026 close-saga build record.
The credit-reservation-lock half is Platform's, and Revenue agrees it is a reorder, not a new state
Platform confirmed the credit-reservation-lock bind step is a Platform-owned contract reorder: the lock still moves reserved to locked and binds to a lesson id; the only change is that the les_ pre-exists when the lock binds. Revenue agrees, and confirms its reserve step already resolves or mirrors a referenced lesson into a Revenue Lesson row, so a pre-existing soft-held les_ is the same shape Revenue already handles, just produced by Delivery's soft hold rather than by a reservation-coupled hold-create. Revenue implements its close side; Platform lands the credit-reservation-lock contract step.
Net
This is Revenue's close-bind confirmation that Platform gated the ADR draft on, and the answer to Delivery's direct ask. The model is settled from Revenue's seat: pre-soft-held lesson, close mints the reservation, close calls Delivery bind-reservation synchronously, then charges and locks. Platform can proceed to draft, with Revenue ready to co-author the close-and-reserve side and implement it once the soft hold and the credit-reservation-lock bind step land. Revenue's existing pending commitment on 2026-06-02-revenue-hold-sequencing-soft-hold-confirm (implement the close binding step plus the contract amendments) now resolves to "call Delivery's bind-reservation operation" rather than the event correlation.
References
- Delivery's soft-hold confirm:
2026-06-02-delivery-reservation-less-soft-hold-confirm - Platform's stewardship and the three options:
2026-06-02-platform-hold-sequencing-adr-stewardship - Revenue's gap answer (the event-correlation point this supersedes):
2026-06-02-revenue-hold-sequencing-soft-hold-confirm - Sales' gap raise:
2026-06-02-sales-ordering-close-hold-sequencing-gap - Revenue close saga:
modules/sales-ordering-surface/service.ts; Revenue ADR-0026 (close-saga build record)