{
  "pack": "brighton-social-launch-approval",
  "generated": "2026-06-18",
  "market": "good-morning-brighton",
  "approvalRequiredFrom": "the editor",
  "status": "internal_prep_only",
  "launchBoundary": "No Facebook page post, boosted post, paid ad, subscriber email, sponsor contact, Meta lead form, public leaderboard or launch announcement goes live from this pack. The editor must approve the exact channel, copy, creative, audience and budget before any external action.",
  "proofSnapshot": {
    "channels": 3,
    "copyDrafts": 3,
    "approvalFields": 10,
    "stopRules": 5
  },
  "channels": [
    {
      "name": "Facebook page organic post",
      "role": "First public launch post after Buttondown subscribe route and archive URL are verified.",
      "creative": "/assets/social/facebook-daily-post.png",
      "proofRequired": [
        "Buttondown subscribe URL works",
        "Public website routes are checked",
        "Final post copy is approved",
        "No draft issue or admin URL is referenced"
      ]
    },
    {
      "name": "Local Facebook group manual share",
      "role": "Community-aware share only where group rules allow local newsletter links.",
      "creative": "/assets/social/facebook-subscribe-cta.png",
      "proofRequired": [
        "Group rules permit newsletter links",
        "Post identifies the briefing clearly",
        "No sponsor or prize claim is included",
        "One post per approved group"
      ]
    },
    {
      "name": "Meta traffic test",
      "role": "Small paid test to /subscribe/ only after explicit spend approval.",
      "creative": "/assets/social/facebook-subscribe-cta.png",
      "proofRequired": [
        "Fresh budget approval",
        "Landing page URL checked",
        "Pixel or lead handling decision recorded",
        "Kill rule and reporting fields recorded"
      ]
    }
  ],
  "copyDrafts": [
    {
      "name": "Founding reader post",
      "copy": "Brighton has enough noise. Good Morning Brighton is a free morning briefing for council decisions, planning records, travel, weather, events and useful local links. Subscribe free and help shape the founding reader list.",
      "cta": "Subscribe free at www.gmbrighton.co.uk/subscribe/"
    },
    {
      "name": "Neighbour referral post",
      "copy": "Know someone in Brighton, Hove, Portslade, Rottingdean or Patcham who still pieces local news together from Facebook comments? Send them Good Morning Brighton.",
      "cta": "Subscribe free at www.gmbrighton.co.uk/subscribe/"
    },
    {
      "name": "Sponsor-safe post",
      "copy": "Local advertisers: founding sponsor slots are being prepared for relevant local offers only. No live payment links or ad bookings are active until launch approval.",
      "cta": "Subscribe free at www.gmbrighton.co.uk/subscribe/"
    }
  ],
  "approvalFields": [
    "channel",
    "copy_version",
    "creative_asset",
    "destination_url",
    "audience_geo",
    "budget_cap",
    "start_time",
    "kill_rule",
    "approval_record",
    "rollback_note"
  ],
  "stopRules": [
    "Do not post from a Facebook page or group without approval for the exact copy and destination URL.",
    "Do not spend on Meta ads without fresh budget approval, a budget cap and a kill rule.",
    "Do not use Meta Lead Ads until privacy copy, consent handling and subscriber sync are approved.",
    "Do not mention live sponsor slots, prizes, leaderboard positions or reader counts until the relevant proof exists.",
    "Do not reuse creative if the subscribe URL, domain, issue date or launch claim is stale."
  ],
  "proofRoutes": {
    "socialPack": "/social/",
    "approvalPackJson": "/social/approval-pack.json",
    "subscribe": "/subscribe/",
    "share": "/share/",
    "buttondownPreflight": "/buttondown-preflight/",
    "launchConversion": "/launch-conversion/"
  },
  "externalActionStatus": {
    "postedPublicly": false,
    "boughtAds": false,
    "sentSubscriberEmail": false,
    "contactedSponsors": false,
    "createdLeadForm": false,
    "publishedLeaderboard": false
  },
  "linearProof": {
    "primary": "MY-2577",
    "related": [
      "MY-2571"
    ],
    "proofNeeded": [
      "Static social approval pack generated from structured JSON.",
      "Website check verifies social approval route, JSON pack, creative assets and no-post/no-spend boundary.",
      "Commit hash and validation output posted back to Linear."
    ]
  }
}
