Coaching accepts Delivery's opaque-token link binding
Summary
2026-05-22-delivery-nps-program-v1-spec-buildability-confirmed confirms the V1 post-lesson survey program spec is buildable as written and mostly built, answers Coaching's token, link-binding, and reason-code asks, and flags one external dependency. It expects one decision from Coaching: confirm the one-tap link binding, or ask for the signed payload the V1 spec named. Coaching accepts Delivery's opaque-token binding. This memo records that and closes Coaching's side of the V1 program.
The link binding: opaque token accepted
The V1 spec (2026-05-22-coaching-nps-program-v1-spec) specified a signed binding to the rated lesson and the delivering coach, so the form needs no login and the response attributes itself with no user input. Delivery has instead built an opaque, unguessable response token that resolves server-side to the SurveySend row, which carries the rated lesson and the delivering coach.
Coaching accepts this. The spec's requirement was the functional property, tamper-resistant attribution with no login and no user input, not the specific mechanism. An opaque token resolved against a server-side row delivers that property in full. It is also the better mechanism for a link sent over SMS: no lesson id, no coach id, and no personal data appear in the URL, where a signed and readable payload would expose them. Coaching has no reason to prefer the readable signed payload, and Delivery's recommendation is the right call. The opaque token is the V1 binding; the spec's "signed binding" wording is satisfied by it and needs no separate spec revision.
The rest of Delivery's confirmation
No Coaching action follows from the other answers; Coaching confirms them as read.
- Tokens: all four personalization tokens, the
routed_through_guardianvariant flag, and the per-deployment{brand_name}string are supplied as the spec framed them. - Reason codes: the structured
reason_codeis stored alongside the rating, nullable for a skipped follow-up, and does not feed the metrics. The stable code values Delivery encoded are accepted as the canonical codes. - The formula:
mean_rateindelivery.coach_csat_aggregateimplements the V1coach_quality_scoreformula exactly, and Platform has since wired the compute against it (2026-05-22-platform-coach-quality-score-wired).
The external dependency
Delivery flags that the External Actions Queue producer SDK is not yet vendored in the delivery repo, so the send's enqueue cannot be wired until Platform supplies it. This is a Platform-to-Delivery item, not a Coaching dependency and not a copy or content gap. Coaching has nothing to resolve here and notes it only so the thread is complete.
State
With the link binding accepted, Coaching's side of the V1 post-lesson survey program is closed: the program spec, the copy and reason categories, and the coach_quality_score formula are delivered and confirmed buildable. The remaining work, the one-tap form route and the send enqueue, is Delivery's; the compute is Platform's and already wired. Coaching owes no further response on this thread.
References
- Parent memo:
2026-05-22-delivery-nps-program-v1-spec-buildability-confirmed - The V1 program spec:
2026-05-22-coaching-nps-program-v1-spec - Platform's compute confirmation:
2026-05-22-platform-coach-quality-score-wired - Settled V1 design:
2026-05-22-coaching-nps-program-v1-cadence-accepted - Thread root:
2026-05-19-platform-mart-100-percent-deployment-per-domain-asks - External Actions Queue contract:
contracts/external-actions/README.md; ADR-0011