{
  "pack": "brighton-sponsor-renewal-approval",
  "generated": "2026-06-17",
  "market": "good-morning-brighton",
  "approvalRequiredFrom": "the editor",
  "status": "internal_prep_only",
  "launchBoundary": "No sponsor is contacted, renewed, invoiced, charged, promised future inventory or sent a performance report from this static plan. The editor must approve each external step after proof is captured.",
  "proofSnapshot": {
    "renewalStages": 4,
    "packageMoves": 3,
    "reportFields": 13,
    "liveActionsEnabled": 0
  },
  "renewalStages": [
    {
      "rank": 1,
      "stage": "Delivery proof captured",
      "owner": "Operator",
      "entryCriteria": "A labelled sponsor placement has been manually approved and published.",
      "exitCriteria": "Placement URL, issue date, approved copy, sponsor CTA, package, audience context and complaint log are recorded.",
      "proofRequired": [
        "Published issue or page URL",
        "Approved sponsor copy version",
        "CTA URL",
        "Reader complaint/correction log"
      ]
    },
    {
      "rank": 2,
      "stage": "Modest report drafted",
      "owner": "Operator",
      "entryCriteria": "Delivery proof exists and analytics have been reviewed without inflated reach claims.",
      "exitCriteria": "A plain report draft records placement proof, clicks where available, replies, corrections, unsubscribes and renewal fit.",
      "proofRequired": [
        "Buttondown issue proof",
        "Click or engagement export where available",
        "Unsubscribe and complaint notes",
        "No invented audience claims"
      ]
    },
    {
      "rank": 3,
      "stage": "Renewal fit screen",
      "owner": "Operator plus editor",
      "entryCriteria": "The first placement was useful, low-complaint and locally relevant.",
      "exitCriteria": "The editor approves either a renewal ask, a paused nurture note or no follow-up.",
      "proofRequired": [
        "Advertiser fit note",
        "Reader usefulness note",
        "Next date or event window",
        "Approval record"
      ]
    },
    {
      "rank": 4,
      "stage": "Repeat package proposal",
      "owner": "Editor",
      "entryCriteria": "Renewal fit passes and the sponsor has a fresh local offer.",
      "exitCriteria": "A specific package, issue window, copy brief and checkout/invoice route are approved for that advertiser only.",
      "proofRequired": [
        "Fresh advertiser landing page",
        "Updated offer terms",
        "Available inventory window",
        "Payment route approval"
      ]
    }
  ],
  "packageMoves": [
    {
      "from": "Founding issue sponsor",
      "to": "Launch week sponsor",
      "when": "The first issue had clear delivery proof, no material complaints and the advertiser has a five-day resident-useful offer.",
      "proofGate": "Do not mention weekly reach, frequency or sellout until Buttondown delivery and issue archive proof exists."
    },
    {
      "from": "Referral reward sponsor",
      "to": "Monthly reward sponsor",
      "when": "Referral attribution, fulfilment terms and winner handling are all approved.",
      "proofGate": "Do not promise prize exposure or publish winner details before referral ledger and sponsor terms are approved."
    },
    {
      "from": "Event-week placement",
      "to": "Seasonal sponsor window",
      "when": "The advertiser has multiple verified event dates or seasonal reader utility across Brighton, Hove or the seafront.",
      "proofGate": "Recheck dates, prices, opening hours and availability before any repeat copy or report."
    }
  ],
  "reportFields": [
    "campaign_id",
    "sponsor_name",
    "package_slug",
    "issue_date",
    "placement_url",
    "approved_copy_version",
    "cta_url",
    "delivery_context",
    "click_notes",
    "reply_notes",
    "complaint_or_correction_notes",
    "renewal_recommendation",
    "editor_approval_status"
  ],
  "stopRules": [
    "Do not send a sponsor report without placement proof and complaint/correction review.",
    "Do not imply guaranteed reach, clicks, sales, exclusivity or official partnership.",
    "Do not ask for renewal if the advertiser claim changed, the offer expired or the landing page proof is stale.",
    "Do not create payment links, invoices or slot holds before the editor approves the specific renewal."
  ],
  "proofRoutes": {
    "renewalPlan": "/advertising/renewal-plan/",
    "approvalPackJson": "/advertising/renewal-plan/approval-pack.json",
    "reportingPlan": "/advertising/reporting-plan/",
    "proofLedger": "/advertising/proof-ledger/",
    "bookingPipeline": "/advertising/booking-pipeline/",
    "checkoutPlan": "/advertising/checkout-plan/"
  },
  "linearProof": {
    "primary": "MY-2577",
    "related": [
      "MY-2571"
    ],
    "proofNeeded": [
      "Static renewal plan page generated from structured JSON.",
      "Approval pack exposes report fields, package moves, stop rules and no-external-action status.",
      "Website check verifies renewal plan route and sitemap inclusion."
    ]
  },
  "externalActionStatus": {
    "contactedSponsors": false,
    "sentReports": false,
    "collectedPayment": false,
    "reservedInventory": false,
    "createdCheckout": false,
    "publishedSponsorClaim": false
  }
}
