Description

The audit skill already generates youtube title/description/tags/chapters into _data/interviews.yml and _data/video_assets.yml. This task pushes that existing metadata to the live YouTube videos via the Data API — generation is out of scope here, this is sync only. Outward-facing: nothing goes live without an approved diff.

Acceptance Criteria

Implementation Plan

Sync already-generated YouTube metadata to the channel (no generation)

Source-of-truth discrepancy (READ THIS)

The task text says metadata lives in _data/interviews.yml + _data/video_assets.yml. Investigation shows it actually lives in _data/transcripts/*.yml under the youtube: block (title, description, tags, chapters). chapters exist ONLY there. Read from the transcripts, not from interviews/video_assets. (video_assets.yml per-platform description is stale platform copy, not the generated metadata.)

Data flow / join

  1. For each _data/transcripts/<stem>.yml with a youtube: block → transcript_id = <stem>.
  2. Resolve _data/video_assets.yml item where transcript_id == <stem>platforms[] where platform == youtube → asset_id (the live YouTube video id). Skip assets with no youtube platform.
  3. Desired video snippet: title → snippet.title; description + chapters → snippet.description; tags → snippet.tags.

Endpoints + quota

Dry-run + approval gate (per TASK-245 two-phase pattern)

Idempotency (AC#4)

Verification

Files

Reads: _data/transcripts/*.yml, _data/video_assets.yml. Uses bin/lib/youtube_client.rb (245). No repo writes.

Definition of Done