{
  "receipt_type": "presenter_routing",
  "created_by": "Producer Agent A",
  "created_at": "2026-08-26T00:00:00Z",
  "series": "series_rightwing_threat",
  "route_rule": "Segments with section == 'PRESENTER' are routed to presenter_segment.py via smm_stage04b_presenter.py. Narration text is not yet written; route is structural only.",
  "pipeline": {
    "presenter_script": "C:\\DandyDon\\dandydon\\presenter_segment.py",
    "stage_orchestrator": "C:\\DandyDon\\dandydon\\smm_stage04b_presenter.py",
    "presenter_venv": "C:\\DandyDon\\musetalk\\venv",
    "input_contract": "<show_dir>/script_segments.json with section field",
    "output_dir_name": "presenter_clips",
    "clip_resolution": "1080x1080",
    "clip_voice": "sasha"
  },
  "episodes": [
    {
      "episode": 1,
      "slug": "breitbart",
      "outlet": "Breitbart",
      "show_dir": "C:\\DandyDon\\smm\\shows\\series_rightwing_threat\\ep1_breitbart",
      "plan_file": "C:\\DandyDon\\smm\\shows\\series_rightwing_threat\\ep1_breitbart\\episode_plan_ep1_breitbart.json",
      "ref_video": "C:/Users/donbr/OneDrive/Pictures/Camera Roll/WIN_*.mp4",
      "presenter_clips_out_dir": "C:\\DandyDon\\smm\\shows\\series_rightwing_threat\\ep1_breitbart\\presenter_clips",
      "segments": [
        {"id": "ep1_seg_0001", "section": "OPEN", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep1_seg_presenter_0002", "section": "PRESENTER", "voice": "sasha", "use_presenter_segment_py": true},
        {"id": "ep1_seg_0003", "section": "NARRATOR", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep1_seg_0004", "section": "NARRATOR", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep1_seg_presenter_0005", "section": "PRESENTER", "voice": "sasha", "use_presenter_segment_py": true},
        {"id": "ep1_seg_0006", "section": "NARRATOR", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep1_seg_presenter_0007", "section": "PRESENTER", "voice": "sasha", "use_presenter_segment_py": true},
        {"id": "ep1_seg_0008", "section": "CLOSE", "voice": "narrator", "use_presenter_segment_py": false}
      ],
      "presenter_segment_ids": ["ep1_seg_presenter_0002", "ep1_seg_presenter_0005", "ep1_seg_presenter_0007"],
      "presenter_segment_count": 3
    },
    {
      "episode": 2,
      "slug": "liberty_daily",
      "outlet": "Liberty Daily",
      "show_dir": "C:\\DandyDon\\smm\\shows\\series_rightwing_threat\\ep2_liberty_daily",
      "plan_file": "C:\\DandyDon\\smm\\shows\\series_rightwing_threat\\ep2_liberty_daily\\episode_plan_ep2_liberty_daily.json",
      "ref_video": "C:/Users/donbr/OneDrive/Pictures/Camera Roll/WIN_*.mp4",
      "presenter_clips_out_dir": "C:\\DandyDon\\smm\\shows\\series_rightwing_threat\\ep2_liberty_daily\\presenter_clips",
      "segments": [
        {"id": "ep2_seg_0001", "section": "OPEN", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep2_seg_presenter_0002", "section": "PRESENTER", "voice": "sasha", "use_presenter_segment_py": true},
        {"id": "ep2_seg_0003", "section": "NARRATOR", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep2_seg_0004", "section": "NARRATOR", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep2_seg_presenter_0005", "section": "PRESENTER", "voice": "sasha", "use_presenter_segment_py": true},
        {"id": "ep2_seg_0006", "section": "NARRATOR", "voice": "narrator", "use_presenter_segment_py": false},
        {"id": "ep2_seg_presenter_0007", "section": "PRESENTER", "voice": "sasha", "use_presenter_segment_py": true},
        {"id": "ep2_seg_0008", "section": "CLOSE", "voice": "narrator", "use_presenter_segment_py": false}
      ],
      "presenter_segment_ids": ["ep2_seg_presenter_0002", "ep2_seg_presenter_0005", "ep2_seg_presenter_0007"],
      "presenter_segment_count": 3
    }
  ],
  "notes": [
    "Narration fields are empty by design. Producer Agent A was instructed to build structure only; narration is written in a later pass.",
    "Routing is deterministic: smm_stage04b_presenter.py reads <show_dir>/script_segments.json and calls presenter_segment.py for every segment where section == 'PRESENTER' (case-insensitive).",
    "Receipt hooks in the plans come from series_manifest.json (mediamatters.org/breitbart, mediamatters.org/liberty-daily). Narration must carry primary receipts in addition to these hooks."
  ]
}
