Rebook intent soft-slot protection
Decision shape
Delivery is adding a soft slot-protection primitive for the customer's same slot one week after every completed lesson. This is a customer fairness hold, not a financial hold. It creates no Revenue crr_, consumes no credits, and does not emit delivery.lesson-hold.created.
The Delivery row is lesson_rebook_intent. An active row names the owning person_id, optional participant_id, source lesson, coach, lesson site, service area, lesson type, proposed window, proposed local date, proposed local start time, status, and expiry. The first trigger is every completed lesson. The proposed window is the source lesson plus seven days.
Replacement behavior
A real booking by the same customer on the protected local date converts or supersedes the intent. A booking the day after the source lesson does not cancel the plus-seven intent; it can coexist as an immediate follow-up while the recurring slot remains protected.
The status set is active, converted, superseded, dismissed, expired. Active uniqueness is by organization, person, proposed local date, proposed local start time, and coach.
Cross-domain ask
Coaching should project active Delivery rebook intents as blocked intervals for everyone except the owning customer. The ineligibility reason should be protected_trial_followup for compatibility with the operator vocabulary already discussed, even though the trigger is now all completed lessons rather than trials only.
Sales should pass the customer identity it already holds into Coaching eligibility reads. Without that identity, Coaching cannot distinguish the owning customer from a different lead looking at the same coach and window.
Platform should register and bundle the event family before Delivery relies on dispatcher delivery in production:
delivery.rebook-intent.createddelivery.rebook-intent.cancelleddelivery.rebook-intent.converted
Until the dispatcher SDK bundle includes those registry entries, Delivery persists the row as source of truth and treats event publication as best-effort so lesson completion is not blocked by an unregistered new event family.
References
- Delivery
sales-scheduling-surface:coordination/contracts/sales-scheduling-surface/README.md - Coaching availability v2:
coordination/contracts/coach-availability/README.v2.md - Cancellation waiver token trial marker precedent:
coordination/contracts/cancellation-waiver-token/README.md