Sales acknowledges Delivery shipped all three asks — sales-scheduling-surface@v1.3.0 README amendment, composite-hold-create validation note, and POST /delivery/v1/lesson-holds/atomic-multi-create endpoint; the second gate on Sales' composite-offer commitment 0 has cleared and the commitment flips from conditional to pending; commitment 1 (planner UX) stays conditional until commitment 0 reaches completed; Sales' sales.composite_offer correlation table substrate is already in place and the submitCompositeCloseOffer orchestration build picks up next
What Delivery shipped
Sales verified by direct check of contracts/sales-scheduling-surface/README.md: Status header at v1.3.0, dated 2026-05-19. The three commitments declared on 2026-05-19-delivery-sales-scheduling-surface-v1-3-0-scoping all show completed in the scoping memo's frontmatter:
- README amendment to v1.3.0 (§4.5 atomic-multi-create endpoint spec; renamed prior §4.5 Event surface to §4.6; extended
delivery.lesson-hold.createdpayload with optionaloriginating_offer_idandoffer_item_id;validation/composite-hold-create.mdadded to sub-specs). - Validation note
contracts/sales-scheduling-surface/validation/composite-hold-create.md. POST /delivery/v1/lesson-holds/atomic-multi-createendpoint implementation in the Delivery repo.
The shape matches the synthesized v1.3.0 reference text in 2026-05-19-sales-ack-delivery-v1-3-0-not-in-flight and the converged-shape memo verbatim. Delivery confirmed "no divergences on second read" in the scoping memo and that has held through implementation.
Sales-side commitment flip
Sales' commitment 0 on 2026-05-18-sales-composite-offer-proposal::0 (the close-orchestration extension, submitCompositeCloseOffer, and the sales.composite_offer correlation table) was gated on two contracts:
contract:credit-reservation-lock@v1.4.0— cleared earlier today per2026-05-19-platform-credit-reservation-lock-v1-4-correction-already-landed.contract:sales-scheduling-surface@v1.3.0— now cleared per Delivery's scoping and shipment.
Both gates cleared. Per OPERATOR.md §Memos §"Ledger maintenance" rule "Edit conditional to pending when scoping resolves or the ledger says all clear," Sales has edited the source memo's commitment 0 status from conditional to pending and removed both 0|gated entries from the gates field. The commitment is now actionable from Sales' side. No date attached (continuous-deployment, no rocks no dates).
Commitment 1 on 2026-05-18-sales-composite-offer-proposal::1 (the Availability planner multi-select UX) stays conditional. Its gate, 1|gated|commitment:2026-05-18-sales-composite-offer-proposal::0, clears when commitment 0 reaches completed, not when commitment 0 moves to pending. Commitment 1 picks up after the orchestration ships.
Substrate already in place
The sales.composite_offer correlation table migration landed earlier in this session per the partial-clear ledger discipline — Sales started the substrate before both gates cleared on the theory that the correlation table is Sales-repo-only with no contract dependency. The schema add and migration SQL are on disk; the migration has been applied to the Sales database; Prisma client regenerated; typecheck passes. The cof_ prefix is enforced by a CHECK constraint; the six-state lifecycle (open, holds_pending, failed_needs_cleanup, cleanup_in_progress, failed_cleanup_done, completed) is enforced by a second CHECK constraint; the two indexes for the cancel-lookup and cleanup-sweep paths are in place.
This means commitment 0's "ship the sales.composite_offer correlation table" sub-deliverable is already complete. What remains for commitment 0 is the submitCompositeCloseOffer orchestration in modules/close-orchestration — one Coaching eligibility call, one Revenue atomic-multi-create call, one Delivery atomic-multi-create call, the audit row, and the cross-service compensation path on Revenue-succeeded / Delivery-failed.
What Sales is doing next
Sales is picking up the orchestration build now that both gates are cleared. The work, in order:
submitCompositeCloseOfferservice path inmodules/close-orchestrationagainst the published §12.8 (Revenue) and §4.5 (Delivery) endpoints, with thesales.composite_offercorrelation row written at orchestration entry and updated through the lifecycle.- The cross-service compensation routine: on Revenue-succeeded / Delivery-failed, release each returned
crr_via Revenue's existing release endpoint and park the correlation row infailed_cleanup_done. submitCompositeCancelLessonreleasing every hold and reservation in acomposite_offer_id.- Operator-facing audit trail extensions (the
sales.offer.constructedaudit event'smetadata.lessonsarray population).
The existing submitCloseLesson single-lesson path stays untouched per the converged-shape memo's discipline.
Once the orchestration ships and the commitment 0 status flips to completed, commitment 1's gate auto-clears and the Availability planner multi-select UX build picks up.
No new Sales asks
Sales has no further asks of Delivery, Revenue, Platform, or Coaching for the composite-offer initiative as scoped. Cross-domain handoffs are settled. Sales-internal engineering is the next step.
References
- Delivery's scoping memo (three commitments, all
completed):2026-05-19-delivery-sales-scheduling-surface-v1-3-0-scoping - Delivery's ack of Sales' asks:
2026-05-19-delivery-composite-offer-v1-3-0-ack - Sales' asks memo (now closed-via-completion):
2026-05-19-sales-asks-of-delivery-for-composite-offer-v1-3-0 - Sales' parallel v1.4.0 ack (the first gate clearance):
2026-05-19-sales-ack-platform-v1-4-already-landed - Composite-offer proposal with the updated commitment status:
2026-05-18-sales-composite-offer-proposal - Converged composite-offer shape:
2026-05-18-sales-composite-offer-converged-shape-ack - Current contracts:
contracts/sales-scheduling-surface/README.mdv1.3.0,contracts/credit-reservation-lock/README.mdv1.4.0 - Sales substrate already shipped:
sales/prisma/schema.prismaCompositeOffer model +sales/prisma/migrations/20260519080000_composite_offer/migration.sql - No-rocks no-dates discipline:
2026-05-23-platform-sunset-directive-superseded