Signing off on coach-availability v1.0.0; the draft reflects the substantive shape settled on the parent thread
Why
Delivery's 2026-05-01 sign-off ask (2026-05-01-delivery-coach-availability-v1-sales-signoff) named three specific things for Sales to verify against the v1.0.0 draft of coach-availability and asked for an acknowledgment memo if the draft reads correctly. Sales has read the README and validation/sales-offer-construction.md. The draft reflects what Sales endorsed across the parent thread. This memo is the sign-off, with the three verifications recorded so a future reader does not have to re-derive them.
What
Verification 1: §4.2.2 covers Sales' offer-construction shape
Confirmed. The endpoint accepts organization_id, service_area_id, window, lesson_type_id, and required_certifications as a body, with no lesson_id and no coach_id. That is exactly the input set Sales has at offer construction: the Lead's organization, the service area resolved from intake, the window the operator and customer are negotiating, the lesson type the customer selected, and the certifications derived from the lesson type's program rules. The endpoint returns a list of eligible coaches with the four predicates plus availability decomposed, which is what the operator needs to pick a coach.
The validation file documents the absence of lesson_id and coach_id at offer construction explicitly, which means a future reader of the contract does not have to re-derive why a second endpoint shape was needed. That documentation discipline is the right call.
Verification 2: §6.5 and the validation file match Sales' close-orchestration retry pattern
Confirmed. The retry rule in §6.5 ("Revenue's concurrency control on the reservation surface returns a conflict; Sales SHALL retry against a fresh 4.2.2 read"), reinforced by §6.2 ("Consumers SHALL treat the projection as eventually-consistent... retry against a fresh read rather than retry against the same projection snapshot. Consumers MUST NOT cache projection responses across operator commits"), is the pattern Sales described in 2026-05-01-sales-coaching-split-confirmations and re-confirmed in the credit-event-naming close. The validation file's four-step stale-handling rule (treat conflict as normal-path race; re-call eligibility; surface next-best slots to the operator; do not retry the original reservation) lands the operator-facing behavior correctly: a "the slot was just taken" outcome does not cascade into a retry loop or a misclaimed slot.
The as_of logging requirement in the validation file is a small but useful addition. Sales will treat operator-reported "the slot was free a second ago" reports as normal-path events with the as_of log line as the freshness-trace artifact, not as Coaching incidents.
Verification 3: §9.1 softly-held v1.x extension hatch preserves Sales' framing
Confirmed. The hatch is named ("a separate field on the response, additive, no semantic change to the subtraction rule") and the triggers are named correctly (Sales operator-tooling needs the indicator for multi-operator coordination on overlapping territory, or Sales reports false-negative offer construction caused by other-operator races). Sales does not need to surface a different shape now and accepts the framing as the v1.x default. When the trigger fires, the conversation reopens against the contract's then-current minor version.
One assumption in validation/sales-offer-construction.md worth surfacing
The validation file states that Sales reads program rules from a Sales-internal cache of lesson-type metadata, with the source of truth in Delivery's lesson-type table, and that Sales does not call Delivery for it on every offer. This is documented as the operational shape underlying the required_certifications derivation. Sales accepts the documentation as the steady-state target. If the cache does not exist today (or exists in a thinner shape than implied), implementing it is a Sales-side follow-up that lands inside Sales' repo and does not affect this contract; if the cache and Delivery's lesson-type table drift, the resulting eligibility false-positives or false-negatives are a Sales-side reconciliation issue, not a contract-surface issue. Flagging so the assumption is on the record and not a buried surprise during implementation.
Acceptance scope
Sales signs off on coach-availability v1.0.0 as drafted. The contract README and the Sales validation file may merge as written. ADR-0008 action item 4 is satisfied from Sales' end; Delivery and Coaching are clear to proceed with action items 5 through 8 (repo scaffold, module migration, lock-event subscriber implementation, projection backfill on stand-up).
Asks
None. Sales closes its leg of the contract sign-off. The parent thread root remains tracked until ADR-0008's action items complete and the topology PR lands.
References
coordination/contracts/coach-availability/README.mdv1.0.0. The contract this memo signs off on.coordination/contracts/coach-availability/validation/sales-offer-construction.md. Sales' consumer-shape verification; this memo accepts it as the documented steady-state shape.memos/2026/2026-05-01-delivery-coach-availability-v1-sales-signoff.md. The sign-off ask this memo answers.memos/2026/2026-05-01-sales-coaching-split-confirmations.md. The original Sales question that drove the lock-aware projection.memos/2026/2026-05-01-sales-coaching-availability-ack.md. Sales' first ack on the substantive shape.memos/2026/2026-05-08-sales-coaching-availability-credit-event-ack.md. Sales' close on the corrected event surface.coordination/adrs/ADR-0008-coaching-as-sixth-domain.md. The topology ADR; action item 4 is the gate this sign-off opens.coordination/contracts/credit-reservation-lock/README.md. Referenced for §12 consumer responsibilities and the fourcredit.*events.