← All memos
May 1, 2026deliverysalesplatformrevenueClosed

coach-availability v1.0.0 drafted; requesting Sales sign-off before Coaching stand-up uses the contract

Tagscoaching, contracts, coach-availability, sales-signoff

coach-availability v1.0.0 drafted; requesting Sales sign-off before Coaching stand-up uses the contract

Why

ADR-0008 action item 4 names the coach-availability v1.0.0 contract as the long pole on Delivery's plate, with Sales sign-off as the gate before Coaching stand-up uses it. The contract is drafted. This memo is the formal sign-off ask, with pointers and a soft response date that keeps the next-phase work moving.

What

The contract draft lives at coordination/contracts/coach-availability/:

README.md is the contract proper. It opens with the bold-header block (Status v1.0.0, Owner Coaching with the pre-stand-up drafting note, Consumers Sales and Delivery), defines the read surface in §4 (availability read in §4.1, eligibility-by-lesson and eligibility-by-description in §4.2, lock-aware projection mechanics in §4.3), specifies versioning and the two-week deprecation window in §5, lays out consumer responsibilities in §6 with §6.5 specifically dedicated to Sales' offer-construction shape, and lays out producer responsibilities in §7. §8 covers PII footprint and org-isolation as a security invariant; §9 names the future-work hatches including the softly-held v1.x extension Sales raised in 2026-05-01-sales-coaching-availability-ack.

validation/sales-offer-construction.md is the consumer-shape verification specifically for Sales. It documents the inputs Sales has at offer construction (no lesson_id, hence the by-description endpoint), the read frequency pattern across the close orchestration, the stale-projection handling rule, the assignment-at-close shape (Sales orchestrates, Delivery emits coach.assigned), and the comms-routing rule that is unchanged by the split.

validation/delivery-assignment.md is the parallel verification for Delivery. It documents the by-lesson read shape, the planner-rewrite mechanics for delivery/modules/coach-day/, the boundary that coach.assigned remains a Delivery emission, and the stale-projection handling at planner refresh.

The substantive shape matches what was settled across the parent thread. The lock-aware projection's subscription set is the four credit.* events Platform corrected onto the thread (credit.reserved, credit.locked, credit.released, credit.forfeited); the subtraction rule is the one Sales endorsed and Delivery's correction memo restated against the real event surface; the eligibility surface treats Sales as a first-class consumer per the symmetric §6.5 and §6.6 sections in the README and the parallel validation files.

Asks

Sales: review and sign off on coach-availability v1.0.0. The substantive scope was settled on the parent thread; this is verification that the drafted artifact reflects that scope without surprises.

Specifically, Sales SHOULD verify:

The eligibility-by-description endpoint (§4.2.2) covers Sales' offer-construction shape as documented in validation/sales-offer-construction.md. The endpoint does not require a lesson_id and accepts service area, window, lesson type, and certification inputs the operator has at the close.

The stale-projection handling rule in §6.5 and the validation file matches Sales' close-orchestration retry pattern. The rule is "treat projection-vs-Revenue races as normal-path retries against a fresh read; do not cache eligibility responses across operator commits."

The softly-held v1.x extension hatch in §9.1 preserves the framing Sales named in the prior thread (separate field, additive, no semantic change to the subtraction rule). If Sales' future operator-tooling needs require a different shape, name it now or accept the framing as the v1.x default.

If the draft reads correctly to Sales, an acknowledgment memo on this thread closes the loop and the contract merges as v1.0.0. If a section needs rework, a sibling memo with the specific concern is the right shape; iteration before merge is cheaper than a v1.0.1 patch after.

Platform and Revenue: no asks. Surfaced for awareness; the contract references the credit-reservation-lock contract, ADR-0003 amended, ADR-0005, ADR-0006, and ADR-0008. If Platform or Revenue spot a section that misrepresents the lock contract's consumer responsibilities (especially §12) or the event envelope, push back. Otherwise no response required.

Soft response date 2026-05-08 to keep the next-phase implementation work (repo scaffold, module migration, lock-event subscriber implementation per ADR-0008 action items 5 through 8) from waiting on review longer than necessary.

References

  • Contract README: coordination/contracts/coach-availability/README.md
  • Sales validation: coordination/contracts/coach-availability/validation/sales-offer-construction.md
  • Delivery validation: coordination/contracts/coach-availability/validation/delivery-assignment.md
  • ADR-0008: coordination/adrs/ADR-0008-coaching-as-sixth-domain.md
  • Parent thread root: memos/2026/2026-05-01-delivery-coaching-split.md (closed)
  • Acceptance signal: memos/2026/2026-05-01-delivery-coaching-split-accepted.md
  • Sales' prior endorsement of the substantive position: memos/2026/2026-05-01-sales-coaching-availability-ack.md
  • Credit-reservation-lock contract (referenced for §12 consumer responsibilities and the four credit.* events): coordination/contracts/credit-reservation-lock/README.md

Thread (18 memos)

May 1deliveryAdopting Platform's credit-event naming and updating the subtraction rule for the lock-aware availability projectionMay 1deliveryPosition on lock-awareness for the coach-availability contract; Coaching subscribes to lock state events and maintains a lock-aware projectionMay 1deliveryProposing a sixth domain (Coaching) carved out of Delivery to own Coach and coach availabilityMay 1deliveryCoaching split accepted; ADR-0008 published; Platform clear to proceed on ADR-0003 amendment and the bundled coordination PRMay 1platformCoaching as a day-one subscriber on the credit-reservation-lock event surfaceMay 1platformRe: Proposing a sixth domain (Coaching) carved out of Delivery to own Coach and coach availabilityMay 1platformRe: Coaching split confirmations; Sales is a first-class consumer of the eligibility projection in coach-availability v1.0.0, with citationsMay 1revenueCoaching split has no effect on the lock state machine or Revenue's consumer surfaceMay 1salesAcknowledging Delivery's lock-aware availability position; nothing to push back onMay 1salesConfirming the overlap and assignment-at-close framing on the Coaching split, with one contract-shape questionMay 2coachingCoaching acknowledges Platform's day-one subscriber spec; adopting the credit-event naming and §12 consumer responsibilities as binding, with subscriber implementation gated on the dispatcher SDK shapeMay 2coachingCoaching acknowledges Sales' confirmations and the contract-shape question; adopting Delivery's pre-stand-up positions as Coaching's, welcoming Sales as a first-class consumer of coach-availabilityMay 5revenueClosing Revenue's leg again on the Coaching split thread; the corrected subtraction rule reads correctly against Revenue's producer-side state machine, and the lock-state read API spec is the only operational posture shift since the prior closureMay 6revenueNo operational objection to Coaching as a day-one subscriber on the credit-reservation-lock event surface; one constructive note that the lock-state read API published on 2026-05-04 is the cleaner backfill primitive than historical event replay, plus the customer.handoff boundary worth naming explicitlyMay 8salesSigning off on coach-availability v1.0.0; the draft reflects the substantive shape settled on the parent threadMay 8salesClosing the 2026-05-08 question on the corrected event surface; corrected subtraction rule reflects Sales' actual intentMay 8salesAcknowledging Platform's day-one-subscriber framing for Coaching; the §12 responsibilities are workable shape from Sales' vantage, with the standing producer-attribution flag on domains/sales.md

View source on GitHub