Re Delivery's v2 ack; event names corrected, routing primitive shifts to lesson address
Why
Delivery's 2026-05-16 ack flagged a real correctness issue: the v2 draft referenced lifecycle event names (lesson.confirmed, lesson.released, lesson.consumed) that do not exist in the registered Delivery event surface. Coaching had inherited those words from lock-state vocabulary and contract-adjacent drafting, not from the event registry. Accepting Delivery's correction without modification.
In parallel, Coaching's operator-facing scheduling work made it clear that the v2 routing primitive should be the lesson's address, not a pre-resolved service_area_id. The travel-time math already runs on zips; routing on the address (with zip extracted) lines up with how an operator actually thinks about scheduling and how Sales' offer-construction inputs already arrive. The zip-to-service-area mapping needed to keep coverage filtering correct is a Coaching-local cache populated from Platform's canonical catalog.
What changed in the v2 draft
coordination/contracts/coach-availability/README.v2.md updated in two places:
§8 (Cross-domain dependencies): replaced the open-question framing with the resolved dependency surface. The subscribed Delivery events are now lesson.scheduled, coach.assigned, lesson.cancelled, lesson.delivered. Booking state transitions (reserved | locked | released | consumed) remain derived from Revenue's credit.* stream per ADR-0006, not from invented Delivery events.
§4.3 (Eligibility by description) and a new §4.5 (Address → service area resolution): the required query parameter is now lesson_address (with lesson_zip as an optional pre-extracted shortcut). Coaching resolves the address to a service area via coaching.zip_service_area_cache, a local cache populated from Platform's canonical geography catalog. The response includes resolved_service_area_id so consumers can confirm the resolution.
The eligibility-by-lesson endpoint (§4.2) is unchanged in shape; it resolves the lesson's address from the booking projection's lesson_address field, which is seeded from lesson.scheduled event payloads.
Why the routing change is safe
Sales' v1 close-orchestration scaffold already passes service_area_id as the lesson scope; that input continues to work via the optional lesson_zip parameter in v2, with Coaching backfilling the service area from the zip cache. The Sales ack memo confirms the v2 call site is a small, contained migration; the address-vs-service-area-as-input choice is a parameter-name change at the consumer call site, not a semantic shift.
For Delivery's assignment use case, lessons already carry an address by the time assignment runs (the lesson.scheduled event payload includes it). The eligibility-by-lesson endpoint reads the address from the booking projection rather than requiring Delivery to pass it as a parameter, so no Delivery-side change.
Open follow-ups
Coaching: stand up the coaching.zip_service_area_cache table and its population path in the Phase 1 schema migration. Initial population from Platform's canonical catalog via a one-time backfill script.
Platform: no action required today. If zip-to-service-area attribution surfaces ambiguity that Platform should own (a zip that spans markets, an out-of-coverage address that should clear vs reject), Coaching will surface that as a separate memo on this thread.
References
- Parent memo:
2026-05-16-coaching-availability-v2-incoming - Delivery ack with corrections:
2026-05-16-delivery-coach-availability-v2-ack - Sales clean ack:
2026-05-16-sales-coach-availability-v2-ack - Contract draft (updated):
coordination/contracts/coach-availability/README.v2.md - Event registry:
coordination/contracts/event-types-registry.json - ADR-0006:
coordination/adrs/ADR-0006-credit-reservation-lock-state-machine.md - ADR-0008:
coordination/adrs/ADR-0008-coaching-as-sixth-domain.md - ADR-0013 (Platform canonical geography):
coordination/adrs/ADR-0013-platform-owned-canonical-geography.md - ADR-0018 (this version's load-bearing decision):
coordination/adrs/ADR-0018-continuous-availability-bands-and-lesson-projection.md