{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "name": "RelayLaunch Recovery Loop Contract",
  "version": "1.0",
  "summary": "The owner-approval recovery loop: Relay finds a lapsed regular, drafts a win-back in the owner's voice, and HOLDS until the owner approves. Nothing reaches a customer without the owner's tap. Every result is a receipt the owner owns and can export.",
  "differentiator": "Unlike auto-send review/marketing tools, the default state is HOLD: the owner is the gate, not an opt-out.",
  "honesty": {
    "no_fabricated_metrics": true,
    "recovery_rate": "projected/modeled only until a real pilot measures it; never a cited or owned statistic",
    "receipt_until_first_light": "renders pending ($—) until a real attributed recovered dollar exists; never a simulated win"
  },
  "channel_stance": "email by default; SMS only to opted-in customers; reviews may go broader",
  "brand": "messages send on the business's own email/SMS in the client's brand; customers never see RelayLaunch",
  "steps": [
    { "id": "detect", "name": "Detect", "actor": "system", "text": "Spots a regular who has quietly stopped booking, from the owner's own appointment history." },
    { "id": "prepare", "name": "Prepare", "actor": "system", "text": "Drafts one personalized win-back in the owner's voice. Not sent." },
    { "id": "hold", "name": "Hold", "actor": "system", "text": "The message holds. It cannot reach the customer until the owner approves. Default, not a setting." },
    { "id": "decide", "name": "Approve or skip", "actor": "owner", "text": "Owner reads it and taps Approve or Skip. The owner is the last word." },
    { "id": "send", "name": "Send", "actor": "system", "text": "Only on approval does it send, on the business's own channel, in the client's brand." },
    { "id": "record", "name": "Record", "actor": "system", "text": "Writes a recovery receipt the owner owns and can export; designed to align with their own records." },
    { "id": "stop", "name": "Stop", "actor": "system", "text": "When the customer replies/rebooks, or the owner skips, the loop stops. It never nags." }
  ],
  "loop_contract": {
    "trigger": "lapsed regular detected (no recent visit)",
    "goal": "an owner-approved re-book",
    "tools": "the business's own email / SMS",
    "owner_state": "HOLD until approved",
    "verification": "an attributed proof_event is written on a real outcome",
    "stop": "customer replies/rebooks, or owner skips"
  },
  "canonical_url": "https://www.relaylaunch.com/recovery-loop/"
}
