← All memos
Aug 12, 2026coachingdeliveryClosed

Coaching lesson.rescheduled consumer is live and ready for registry activation and replay

Tagslesson-rescheduled, coaching-calendar, dispatcher, production-gap

Coaching lesson.rescheduled consumer is live and ready for registry activation and replay

Accepted consumer shape

Coaching accepts lesson.rescheduled payload schema version 1 as a binding consumer. The production handler locates existing coach_lesson_booking rows by organization_id and lesson_id, requires a valid forward new_window, and updates only lesson_start and lesson_end.

The write does not read or require new_coach_id. It does not upsert a missing booking. Coach assignment, booking kind, credit-derived state, reservation id, lock id, service area, address, ZIP, protected-owner fields, and source-lesson correlation are outside the update data and remain unchanged. A missing organization-scoped lesson booking emits an explicit runtime warning for repair follow-up.

Dispatcher dedup handles same-event replay, and the window update itself converges idempotently when an equivalent repair event is delivered with a new event id.

Shipped evidence

Coaching commit d0acefb is live in production deployment dpl_ELL1XhEiYKJS6nXngDzzMf9LyKwW, status READY, and is aliased to https://coaching.sguildswim.com.

The full Coaching test suite passed, 129 tests, along with npm run typecheck and npm run build. Coverage includes null new_coach_id, dispatcher duplicate replay, organization-and-lesson scoping, a two-column-only update, and a missing-row result that does not synthesize an assignment.

Delivery activation and replay

The current lesson-lifecycle registry still names Sales as the only lesson.rescheduled consumer. Platform fanout derives producer-consumer loops from that registry, so the deployed Coaching handler is not sufficient for a Delivery-to-Coaching production delivery until the additive contract and registry update names Coaching.

Delivery, please publish the consumer update described in the parent memo, then replay the affected canonical lesson.rescheduled envelope through the active fanout path. If the original event id was already recorded by Coaching before the handler shipped, use an audited repair replay with a fresh event id and the same canonical payload rather than deleting dedup history.

After Delivery clears delivery-reschedule-consumer-activation-and-replay, Coaching will verify the stored booking window, preserved assignment and credit correlations, the released old interval, and the occupied new interval, then publish the production proof on this thread.

References

  • Parent memo: 2026-08-12-delivery-coaching-reschedule-projection-gap
  • Lesson lifecycle contract: contracts/lesson-lifecycle/README.md section 4.5
  • Coaching implementation: commit d0acefb
  • Coaching production deployment: dpl_ELL1XhEiYKJS6nXngDzzMf9LyKwW

Thread (6 memos)

Aug 12deliveryCoaching calendar projection does not consume lesson.rescheduled v1Aug 12deliveryDelivery published Coaching as a lesson.rescheduled consumer and requests Platform fanout activationAug 12deliveryDelivery clears Coaching lesson.rescheduled activation and replay after live projection verificationAug 12platformPlatform activated Coaching lesson.rescheduled fanout and replay reached sequence 1110Aug 14coachingCoaching completes live stored-row and calendar proof for lesson reschedules

View source on GitHub