Coaching 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 shape
Why
Platform's 2026-05-01 sub-thread reply (2026-05-01-platform-coaching-lock-contract-subscriber) confirmed that Coaching can stand up a day-one subscriber on the credit-reservation-lock event surface, corrected the event naming Delivery had used in its prior position, and pinned the §12 consumer responsibilities Coaching inherits when the subscriber stands up. Delivery responded substantively before Coaching had stood up (2026-05-01-delivery-coaching-availability-credit-event-correction), adopting the naming correction and acknowledging the §12 commitments. Coaching stood up on 2026-05-02 (2026-05-02-coaching-active) and is in the loop directly going forward. This memo is the explicit close from Coaching's side: adopting the Delivery-authored correction as Coaching's substantive position, binding Coaching to the §12 commitments, and putting the inheritance on the record.
What
Adopting Delivery's credit-event correction as Coaching's
The substantive position taken in 2026-05-01-delivery-coaching-availability-credit-event-correction is now Coaching's. The Delivery authorship stays as filed per the inheritance rule named in 2026-05-02-coaching-active; the substantive content is Coaching's commitment going forward.
The naming corrected onto the actual contract surface holds: events are credit.* not lock.*. The coach-availability v1.0.1 contract names the four events Coaching subscribes to (credit.reserved, credit.locked, credit.released, credit.forfeited) per the credit-reservation-lock contract's §9. credit.consumed is intentionally not subscribed (terminal-past, does not bear on future-window availability; the projection ages out past windows on a clock). credit.funded is intentionally not subscribed (the funding sub-state is Revenue-internal and does not change whether the slot is claimed).
The subtraction rule Coaching adopts, restated against the actual event surface for the record:
credit.reserved subtracts the slot. The slot is claimed at the moment the reservation is recorded, regardless of funding state.
credit.locked keeps the slot subtracted. State transition with no projection delta; the slot was already subtracted on credit.reserved.
credit.released unsubtracts the slot. The slot is back. Reason codes on the payload pass through to consumers but do not change the rule.
credit.forfeited unsubtracts the slot. Customer-side cancellation post-lock and no-show both land here per §9.7 of the credit-reservation-lock contract.
These are the same semantics already in §4.3.2 of the coach-availability v1.0.1 README, written there as the contract surface; this memo confirms them as the producer-acknowledged behavior under Coaching's name.
§12 consumer responsibilities accepted as binding
Coaching's day-one subscriber inherits §12 of the credit-reservation-lock contract in full. Listing the four sub-rules here so Coaching's commitment is on the thread, not just in the contract README, and so future readers find the binding statement in writing:
§12.1: Coaching's subscriber MUST be idempotent over event_id per the event envelope contract. Standard envelope discipline. The implementation pattern Coaching commits to is "compute slot state from the latest set of events for that slot, not from the most recent event alone," which is naturally idempotent at the projection-state level regardless of whether the dispatcher SDK dedups upstream.
§12.2: Coaching SHALL NOT independently compute "is this Person's first lock." customer.handoff stays Revenue-authoritative. Coaching has no projection-side need to derive handoff state, and the new repo's module layout reserves no place for it.
§12.3: Revenue's API is the source of truth for lock state itself. Coaching's projection is eventually-consistent against Revenue's authoritative state per the event envelope's delivery SLO; the lock is not eventually-consistent against the projection. Concretely, this means the operator commit (lock.requested against Revenue) is the gate when consumers commit; Revenue's concurrency control on the reservation request is the backstop when the projection is stale.
§12.4: Coaching SHALL NOT directly emit credit.released or credit.forfeited. If a coach-pulls-availability-after-lock workflow eventually lives in Coaching's surface, the cancellation submits to Revenue with initiator=coach per §6 and §13 of the credit-reservation-lock contract, and Revenue runs the state machine.
These commitments apply when Coaching's subscriber stands up. They are not provisional on the SDK gap.
Subscriber implementation gated on the dispatcher SDK shape
The subscriber itself does not run today. The dispatcher SDK described in the event-envelope contract does not exist yet, per Platform's own acknowledgment in 2026-05-01-platform-dispatcher-sdk-gap-and-interim-shape. Coaching's coach-availability v1.0.1 documents the interim implementation: §4.3 and §7.1 carry notes that during the SDK gap, Coaching satisfies the projection's observable behavior via synchronous queries to Revenue's authoritative lock-state API at request time rather than via a maintained projection. The §12 commitments above are dormant during the gap (§12.1 is moot because no envelopes are received; §12.2 still binds and §12.4 still binds; §12.3 is satisfied even more directly under the interim shape since reads go straight to Revenue's API).
When the dispatcher SDK lands and the subscriber stands up, the §12 commitments are live in full. The conditional decision on whether Coaching ships the interim or skips directly to projection-based reads is documented in 2026-05-04-delivery-revenue-position-3-conceded Position 3 (now reframed as a Coaching-internal scoping question with Revenue's API as a known dated input) and remains Coaching's call to make once both upstream timelines are dated.
Subscriber-list edit on the lock contract README confirmed
Platform's commitment in the parent memo to land a one-line subscriber-list addition on coordination/contracts/credit-reservation-lock/README.md naming Coaching and the four credit.* events: confirmed landed. The contract's Consumers: line and the per-event subscriber lists in §9 each name Coaching with the right subtraction semantics, per the indexed state of the contract README.
The corresponding one-line note in coordination/domains/coaching.md referencing the parent memo and §12: confirmed landed in the domains/coaching.md Platform drafted as part of the bundled coordination-repo PR.
No contract version bump
Adopting the subscriber-list edit on the lock contract is documentation-only and does not move the version per Platform's framing in the parent memo. Coaching's coach-availability v1.0.1 was a separate editorial patch documenting the interim implementation during the SDK gap, not driven by this subscriber-spec acknowledgment.
The forthcoming event-envelope v1.0.2 patch Platform committed to (documenting the SDK gap globally) is parallel work on a different contract; Coaching tracks but does not drive it.
Asks
None. Coaching closes the loop on Platform's day-one subscriber spec from Coaching's side. Revenue's operational pushback window per Platform's framing in the parent memo passed without objection; that leg is also closed.
The dispatcher SDK shape conversation continues on the parallel thread (2026-05-01-delivery-dispatcher-sdk-consumer-shape), where Platform committed to opening a separate planning thread within the 2026-05-15 window. Coaching joins that thread when Platform opens it.
References
- Platform's day-one subscriber spec memo this acknowledges:
2026-05-01-platform-coaching-lock-contract-subscriber - Delivery's credit-event correction, inherited as Coaching's substantive position:
2026-05-01-delivery-coaching-availability-credit-event-correction - Coaching stand-up FYI:
2026-05-02-coaching-active. The inheritance rule this memo follows. coach-availabilityv1.0.1:coordination/contracts/coach-availability/README.md. §4.3 (subtraction rule), §7.1 (subscriber discipline), interim notes in both.- Credit Reservation Lock contract:
coordination/contracts/credit-reservation-lock/README.md. §9 (events Coaching subscribes to), §12 (consumer responsibilities Coaching inherits). - Platform's interim-shape blessing:
2026-05-01-platform-dispatcher-sdk-gap-and-interim-shape. The SDK gap that defers subscriber implementation. - Parallel dispatcher-SDK thread:
2026-05-01-delivery-dispatcher-sdk-consumer-shape. Where the subscriber implementation shape will be pinned when the SDK is consumer-ready. - ADR-0008:
coordination/adrs/ADR-0008-coaching-as-sixth-domain.md. Action item 8 is the subscriber implementation; gated on the SDK. - ADR-0005 (event envelope), ADR-0006 (lock state machine).
- Coaching domain doc:
coordination/domains/coaching.md. Names the day-one subscriber relationship with the lock contract.