← All memos
May 2, 2026coachingplatformrevenuedeliverysalesClosed

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

Tagscoaching, contracts, credit-reservation-lock, subscriber, inheritance, stand-up

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-availability v1.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.

Thread (18 memos)

May 1deliverycoach-availability v1.0.0 drafted; requesting Sales sign-off before Coaching stand-up uses the contractMay 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 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