{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://agent.pricerightdigital.com/newsletter-issue-schema.json",
  "title": "Price Right Digital Newsletter Issue Packet",
  "description": "Preparation-only newsletter issue packet. It does not prove email scheduling, sending, delivery, opens, clicks, segmentation, or downstream completion.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "issue_id",
    "created_at",
    "source_system",
    "source_url",
    "issue",
    "audience",
    "source_assets",
    "sections",
    "cta",
    "reuse_plan",
    "validation",
    "distribution_handoff",
    "downstream_status"
  ],
  "properties": {
    "issue_id": {
      "type": "string",
      "description": "Unique newsletter issue identifier."
    },
    "created_at": {
      "type": "string",
      "description": "ISO 8601 timestamp when the packet was created."
    },
    "source_system": {
      "type": "string",
      "description": "System that prepared the issue packet."
    },
    "source_url": {
      "type": "string",
      "description": "URL where issue preparation originated."
    },
    "issue": {
      "type": "object",
      "description": "Newsletter issue planning summary. This is not send evidence.",
      "additionalProperties": false,
      "required": [
        "issue_name",
        "issue_type",
        "theme",
        "timing_window",
        "seasonal_context",
        "dominant_narrative",
        "issue_status"
      ],
      "properties": {
        "issue_name": {
          "type": "string",
          "description": "Issue name."
        },
        "issue_type": {
          "type": "string",
          "enum": [
            "monthly_seasonal",
            "event_support",
            "clearance_or_promo",
            "owner_proof",
            "service_or_prep",
            "review_roundup",
            "inventory_feature",
            "list_growth",
            "general_reference"
          ],
          "description": "Issue type."
        },
        "theme": {
          "type": "string",
          "description": "Issue theme."
        },
        "timing_window": {
          "type": "string",
          "description": "Planned timing window. This is not scheduling evidence."
        },
        "seasonal_context": {
          "type": "string",
          "description": "Seasonal context if supported by evidence."
        },
        "dominant_narrative": {
          "type": "string",
          "description": "Primary narrative for the issue."
        },
        "issue_status": {
          "type": "string",
          "enum": [
            "draft",
            "planning_only",
            "ready_for_review",
            "ready_for_handoff",
            "handed_off",
            "awaiting_downstream_confirmation",
            "sent_confirmed",
            "archived",
            "failed_validation"
          ],
          "description": "Issue status."
        }
      }
    },
    "audience": {
      "type": "object",
      "description": "Audience planning notes. Do not invent list membership or consent.",
      "additionalProperties": false,
      "required": [
        "primary_audience",
        "segmentation_notes",
        "consent_or_list_status_note",
        "audience_evidence_status"
      ],
      "properties": {
        "primary_audience": {
          "type": "string",
          "description": "Primary audience label. Do not include private subscriber data."
        },
        "segmentation_notes": {
          "type": "string",
          "description": "Segmentation notes. Do not claim segment membership without evidence."
        },
        "consent_or_list_status_note": {
          "type": "string",
          "description": "Consent or list status note. Do not claim consent without evidence."
        },
        "audience_evidence_status": {
          "type": "string",
          "enum": [
            "supplied",
            "not_supplied",
            "unverified",
            "blocked"
          ],
          "description": "Evidence status for audience or segmentation."
        }
      }
    },
    "source_assets": {
      "type": "array",
      "description": "Source assets used to plan the newsletter.",
      "items": {
        "type": "object",
        "description": "Newsletter source asset. Do not use unsupported facts.",
        "additionalProperties": false,
        "required": [
          "asset_id",
          "asset_type",
          "source_url",
          "source_summary",
          "verification_status",
          "allowed_use",
          "blocked_use",
          "notes"
        ],
        "properties": {
          "asset_id": {
            "type": "string",
            "description": "Source asset identifier."
          },
          "asset_type": {
            "type": "string",
            "enum": [
              "campaign_package",
              "inventory_reference",
              "review_proof",
              "dealership_reference",
              "service_reference",
              "event_reference",
              "seasonal_note",
              "internal_note"
            ],
            "description": "Newsletter source asset type."
          },
          "source_url": {
            "type": "string",
            "description": "Source URL or internal reference."
          },
          "source_summary": {
            "type": "string",
            "description": "Source summary without unsupported claims."
          },
          "verification_status": {
            "type": "string",
            "enum": [
              "verified",
              "verified_but_time_sensitive",
              "unverified",
              "not_claimed",
              "blocked",
              "needs_human_review"
            ],
            "description": "Verification status for the source asset."
          },
          "allowed_use": {
            "type": "array",
            "description": "Newsletter uses allowed by evidence and policy.",
            "items": {
              "type": "string",
              "description": "One item."
            }
          },
          "blocked_use": {
            "type": "array",
            "description": "Newsletter uses blocked by missing evidence or policy.",
            "items": {
              "type": "string",
              "description": "One item."
            }
          },
          "notes": {
            "type": "string",
            "description": "Source limitations and notes."
          }
        }
      }
    },
    "sections": {
      "type": "object",
      "description": "Draft newsletter sections. Drafts are not sent content.",
      "additionalProperties": false,
      "required": [
        "top_hook",
        "featured_inventory_or_theme_block",
        "practical_buyer_or_camping_advice_block",
        "event_seasonal_or_review_proof_block",
        "cta_block",
        "optional_secondary_cta_block",
        "footer_notes"
      ],
      "properties": {
        "top_hook": {
          "type": "string",
          "description": "Draft newsletter section for top_hook. Draft text is not sent email content."
        },
        "featured_inventory_or_theme_block": {
          "type": "string",
          "description": "Draft newsletter section for featured_inventory_or_theme_block. Draft text is not sent email content."
        },
        "practical_buyer_or_camping_advice_block": {
          "type": "string",
          "description": "Draft newsletter section for practical_buyer_or_camping_advice_block. Draft text is not sent email content."
        },
        "event_seasonal_or_review_proof_block": {
          "type": "string",
          "description": "Draft newsletter section for event_seasonal_or_review_proof_block. Draft text is not sent email content."
        },
        "cta_block": {
          "type": "string",
          "description": "Draft newsletter section for cta_block. Draft text is not sent email content."
        },
        "optional_secondary_cta_block": {
          "type": "string",
          "description": "Draft newsletter section for optional_secondary_cta_block. Draft text is not sent email content."
        },
        "footer_notes": {
          "type": "string",
          "description": "Draft newsletter section for footer_notes. Draft text is not sent email content."
        }
      }
    },
    "cta": {
      "type": "object",
      "description": "CTA and UTM routing. Shopper CTAs must route to pricerightrv.com.",
      "additionalProperties": false,
      "required": [
        "primary_cta_text",
        "primary_cta_url",
        "secondary_cta_text",
        "secondary_cta_url",
        "utm_source",
        "utm_medium",
        "utm_campaign",
        "utm_content",
        "routing_notes"
      ],
      "properties": {
        "primary_cta_text": {
          "type": "string",
          "description": "Primary CTA text."
        },
        "primary_cta_url": {
          "type": "string",
          "format": "uri",
          "description": "Primary CTA URL. Shopper actions must point to pricerightrv.com."
        },
        "secondary_cta_text": {
          "type": "string",
          "description": "Secondary CTA text if used."
        },
        "secondary_cta_url": {
          "type": "string",
          "description": "Secondary CTA URL if used."
        },
        "utm_source": {
          "type": "string",
          "description": "UTM source. Do not include private data."
        },
        "utm_medium": {
          "type": "string",
          "description": "UTM medium, normally email for newsletter."
        },
        "utm_campaign": {
          "type": "string",
          "description": "UTM campaign, lowercase with underscores."
        },
        "utm_content": {
          "type": "string",
          "description": "UTM content. Do not include private data."
        },
        "routing_notes": {
          "type": "string",
          "description": "Routing notes. UTM values do not prove sends, clicks, or conversions."
        }
      }
    },
    "reuse_plan": {
      "type": "object",
      "description": "Reuse hooks for other channels. Reuse must not multiply unsupported facts.",
      "additionalProperties": false,
      "required": [
        "social_post_angle",
        "sms_tie_in",
        "landing_page_support_angle",
        "follow_up_issue_seed",
        "allowed_reuse",
        "blocked_reuse"
      ],
      "properties": {
        "social_post_angle": {
          "type": "string",
          "description": "Planning angle for later social reuse."
        },
        "sms_tie_in": {
          "type": "string",
          "description": "Planning angle for later SMS reuse."
        },
        "landing_page_support_angle": {
          "type": "string",
          "description": "Planning angle for landing page support."
        },
        "follow_up_issue_seed": {
          "type": "string",
          "description": "Planning seed for a future issue."
        },
        "allowed_reuse": {
          "type": "array",
          "description": "Reuse supported by validated source material.",
          "items": {
            "type": "string",
            "description": "One item."
          }
        },
        "blocked_reuse": {
          "type": "array",
          "description": "Reuse blocked by missing evidence or policy.",
          "items": {
            "type": "string",
            "description": "One item."
          }
        }
      }
    },
    "validation": {
      "type": "object",
      "description": "Validation requirements before review or handoff.",
      "additionalProperties": false,
      "required": [
        "fact_integrity_required",
        "compliance_required",
        "style_required",
        "hard_contract_required",
        "routing_qa_required",
        "review_moderation_required",
        "validation_status",
        "missing_evidence"
      ],
      "properties": {
        "fact_integrity_required": {
          "type": "boolean",
          "description": "Whether fact checks are required."
        },
        "compliance_required": {
          "type": "boolean",
          "description": "Whether compliance checks are required."
        },
        "style_required": {
          "type": "boolean",
          "description": "Whether style checks are required."
        },
        "hard_contract_required": {
          "type": "boolean",
          "description": "Whether strict no-unsupported-claims rules apply."
        },
        "routing_qa_required": {
          "type": "boolean",
          "description": "Whether CTA and UTM QA is required."
        },
        "review_moderation_required": {
          "type": "boolean",
          "description": "Whether review moderation is required for review proof."
        },
        "validation_status": {
          "type": "string",
          "enum": [
            "draft",
            "planning_only",
            "ready_for_review",
            "ready_for_handoff",
            "blocked_missing_required_fields",
            "blocked_missing_source_evidence",
            "blocked_unapproved_review_proof",
            "needs_human_review",
            "failed_validation"
          ],
          "description": "Validation status."
        },
        "missing_evidence": {
          "type": "array",
          "description": "Missing evidence blocking claims or handoff.",
          "items": {
            "type": "string",
            "description": "One item."
          }
        }
      }
    },
    "distribution_handoff": {
      "type": "object",
      "description": "Prepared distribution handoff. This is not a send or scheduling action.",
      "additionalProperties": false,
      "required": [
        "handoff_name",
        "source_run_id",
        "owner_team",
        "target_email_platform",
        "issue_name",
        "subject_line",
        "preview_line",
        "final_sections",
        "cta_url",
        "segmentation_notes",
        "validation_status",
        "send_window_recommendation",
        "reuse_extraction_summary",
        "required_fields",
        "missing_fields",
        "next_human_or_system_action",
        "handoff_status"
      ],
      "properties": {
        "handoff_name": {
          "type": "string",
          "description": "Distribution handoff name."
        },
        "source_run_id": {
          "type": "string",
          "description": "Source run or preparation ID."
        },
        "owner_team": {
          "type": "string",
          "description": "Owner team for review or distribution."
        },
        "target_email_platform": {
          "type": "string",
          "description": "Target email platform if supplied. Do not infer."
        },
        "issue_name": {
          "type": "string",
          "description": "Issue name."
        },
        "subject_line": {
          "type": "string",
          "description": "Subject line draft."
        },
        "preview_line": {
          "type": "string",
          "description": "Preview line draft."
        },
        "final_sections": {
          "type": "array",
          "description": "Final or draft section labels. Final here does not mean sent.",
          "items": {
            "type": "string",
            "description": "One item."
          }
        },
        "cta_url": {
          "type": "string",
          "description": "CTA URL for the issue."
        },
        "segmentation_notes": {
          "type": "string",
          "description": "Segmentation notes without unsupported list claims."
        },
        "validation_status": {
          "type": "string",
          "enum": [
            "draft",
            "planning_only",
            "ready_for_review",
            "ready_for_handoff",
            "blocked_missing_required_fields",
            "blocked_missing_source_evidence",
            "blocked_unapproved_review_proof",
            "needs_human_review",
            "failed_validation"
          ],
          "description": "Validation status for handoff."
        },
        "send_window_recommendation": {
          "type": "string",
          "description": "Recommended send window. This is not scheduling evidence."
        },
        "reuse_extraction_summary": {
          "type": "string",
          "description": "Summary of reuse hooks."
        },
        "required_fields": {
          "type": "array",
          "description": "Required handoff fields.",
          "items": {
            "type": "string",
            "description": "One item."
          }
        },
        "missing_fields": {
          "type": "array",
          "description": "Missing handoff fields.",
          "items": {
            "type": "string",
            "description": "One item."
          }
        },
        "next_human_or_system_action": {
          "type": "string",
          "description": "Next approved action required."
        },
        "handoff_status": {
          "type": "string",
          "enum": [
            "drafted",
            "ready_for_handoff",
            "handed_off",
            "awaiting_downstream_confirmation",
            "downstream_confirmed",
            "failed_downstream",
            "archived"
          ],
          "description": "Handoff status."
        }
      }
    },
    "downstream_status": {
      "type": "string",
      "enum": [
        "not_sent",
        "handed_off",
        "awaiting_confirmation",
        "confirmed",
        "failed"
      ],
      "description": "Downstream status. Do not mark confirmed without direct evidence."
    }
  }
}
