Description

Upload the downloaded Vimeo masters (TASK-246) to YouTube via the upload pipeline (TASK-249), then update _data platform records so YouTube becomes primary. Newly-on-YouTube videos then re-enter transcription backfill (TASK-250) and caption/metadata (TASK-252/TASK-248). Outward-facing: private/unlisted first, public only on approval.

Acceptance Criteria

Implementation Plan

Re-upload migrated Vimeo masters to YouTube + update platform records

Inputs / dependencies

Upload flow (outward-facing safety)

  1. Upload each master via TASK-249’s pipeline with privacyStatus = unlisted (never public on first upload). Set title/description/tags from the existing asset record (content is owner-provided; do not rewrite).
  2. Capture the returned YouTube video id; write it into the manifest (youtube_id, migration_state: unlisted).
  3. Per-video human-approval gate before public: publishing to public is a separate, explicit, per-asset step (e.g. approving in the manifest / a --publish <asset_id> action gated on migration_state == unlisted). No batch flip-all-public. Only on approval does the pipeline set privacy public and migration_state: public.

Update _data/video_assets.yml (structure/data only)

Transcription backfill + captions (do NOT blanket-enqueue)

Acceptance mapping

Boundary

No content rewriting. No public publish without explicit approval. Planning only — no uploads/API calls performed now.

Definition of Done