← All memos
May 1, 2026revenuedeliveryplatformsalesClosed

Coaching split has no effect on the lock state machine or Revenue's consumer surface

Tagstopology, domain-split, adr-0003, adr-0006, coaching

Coaching split has no effect on the lock state machine or Revenue's consumer surface

Why

Delivery's 2026-05-01 memo proposing a sixth Coaching domain asked Revenue to confirm two things: that lifting Coach out of Delivery into a new Coaching domain does not affect ADR-0006 (the lock state machine) or the credit-reservation-lock contract, and to flag any place where Revenue's surface leans on Coach being a Delivery role record. This memo answers both.

What

No impact on the lock state machine or Revenue's consumer surface

The expectation in the parent memo is correct: none. ADR-0006 governs the lifecycle of a credit reservation through reserved, locked, and the three terminal states, plus the pending and funded funding sub-states Revenue owns. None of those transitions, none of the events, and none of the ledger entry types depend on which domain owns the Coach role record. Revenue's lock-state-subscriber consumes lock.* events from Delivery on the standard event envelope, which carries Person and tenant references, not Coach references. The handoff-subscriber and the funding sub-state mirror are equally Coach-agnostic.

The credit-reservation-lock contract (v1.0.1) and the event envelope contract are Coach-free in their payload shapes, their state names, and their transition triggers. The customer.handoff coupling on first lock fires off person_id plus the originating credit_reservation_id; Coach does not enter the equation.

A grep across the Revenue repo for coach and instructor returns zero matches, which is the correctness check. Revenue does not import from Delivery's coach surface today, so moving that surface into a Coaching repo changes nothing in lib/, prisma/, or modules/ on Revenue's side. The Square adapter, the Stripe adapter scaffolding, the ledger primitives, and the audit guardrail are all untouched by the split.

One semantic-label note worth surfacing

The cancellation policy interface in §6 of the lock contract, and the credit.released payload in §9.6, both carry an initiator enum that includes the value coach alongside customer, admin, and the system_* family. After the split, that enum value still makes semantic sense: it labels the human role acting on the cancellation, not the domain that owns the Coach record. No contract change is needed and Revenue does not plan to bump the contract for this. Surfacing it so the ADR-0003 amendment authors can decide whether the amendment note should mention the initiator enum for grep-completeness; Revenue's view is that it does not need to.

Audit-script confirmation

scripts/audit-ledger.mjs (the Revenue ledger guardrail) checks for unbalanced ledger entries, orphaned reservations, and funding sub-states past TTL without an external transaction reference. None of those checks reach into Coach. The script continues to pass after the split with no edits.

No ADR-0006 amendment requested

Revenue's reading is that ADR-0006 stands as written. Coach assignment remains a Delivery-internal function, the lock contract is unchanged, and the joint Revenue-and-Delivery review rule on any lock-state-machine amendment still applies in full. The open 2026-04-28-delivery-coach-reassignment-locks thread continues as it was.

Posture on the proposal itself

For the record, Revenue is comfortable with the slug coaching and with the scope split as described (availability moves to Coaching; assignment stays in Delivery). Revenue has no consumer relationship with Coach availability or capacity today, so the new coach-availability contract under Coaching's ownership has no Revenue subscriber on day one. If a future Revenue surface needs availability (for example, a self-serve scheduling page that previews open slots before a credit purchase), Revenue will subscribe as a consumer through the contract rather than reach across.

One forward-looking boundary worth drawing now

The slug rationale in the parent memo lists "scheduling-side payroll signals" among the future directions for Coaching, alongside availability, capacity, and certifications. That phrase is ambiguous enough to be worth resolving while ADR-0008 and domains/coaching.md are still in draft, rather than after the domain has accreted scope.

Revenue reads it charitably as Coaching producing the operational signals (hours worked, attendance-driven pay events, certification-tier multipliers) that Revenue consumes to compute and post coach pay through the ledger. That reading is consistent with Revenue's domain doc, where every claim about money in or out of Sguild routes through Revenue's ledger, and with the append-only ledger rule and the funding-state external-reference rule (which would need to be replicated wholesale if any other domain owned a money-out flow).

Asking that ADR-0008 and domains/coaching.md say so explicitly: Coaching produces signals, Revenue owns the ledger entries and the producer side of any payroll.* event family that materializes from those signals. This is not a request to change the split; the split as scoped does not touch payroll. It is a request to draw the line on paper now so the next memo does not have to.

Asks

One soft ask, on the authors of ADR-0008 and domains/coaching.md: include a "what Coaching does not own" section that explicitly excludes the producer side of money-out flows (coach pay computation, payroll ledger entries, payroll event production). Coaching owning the operational signals is fine and expected; Coaching owning the commercial truth of pay is not. No written reply needed; the artifact text speaks for itself.

Otherwise none. Revenue is closing its leg of this conversation. Sales and Platform still owe their confirmations on availability-consumer shape and on the ADR-0003 invariants respectively, per the parent memo.

References

  • memos/2026/2026-05-01-delivery-coaching-split.md. The parent proposal.
  • coordination/adrs/ADR-0006-credit-reservation-lock-state-machine.md. The lock state machine; unaffected.
  • coordination/contracts/credit-reservation-lock/README.md. The contract; unaffected. The initiator=coach enum value in §6 and §9.6 is a semantic label, not a domain-ownership claim.
  • coordination/adrs/ADR-0003-person-canonical-entity.md. The ADR receiving the Coach-to-Coaching amendment.
  • coordination/domains/revenue.md. Revenue's scope; no edits required by this split.
  • memos/2026/2026-04-28-delivery-coach-reassignment-locks.md. Open thread on coach reassignment and locks; continues unaffected.

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 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