Description

Stand up OAuth credentials and a thin YouTube Data API client, exposed as zdots publish jobs (following the queue pattern). This is the foundation for captions, metadata sync, video upload, and playlist/shorts publishing. No live writes beyond an authenticated read/quota check in this task.

Acceptance Criteria

Implementation Plan

Foundation: OAuth + thin YouTube Data API client as zdots publish jobs

This task is the shared substrate for TASK-248/249/252/258. No live writes here beyond an authenticated read.

OAuth scopes (unified set for the whole publishing track)

Credential storage (never committed)

Client dependency decision

Thin client

zdots publish jobs (reuse batch_ztranscribe pattern)

Two-phase dry-run / approval gate (defined here, referenced by 248/249/252/258)

Quota (YouTube Data API v3, default 10,000 units/day)

Per-call: videos.list 1 · videos.update 50 · videos.insert 1600 · captions.list 50 · captions.insert 400 · captions.update 450 · captions.delete 50 · playlists.insert 50 · playlistItems.insert 50 · search.list 100 (avoid — use stored asset_ids). Aggregate budgeting lives in the consuming tasks.

Verification (AC#4 — no live writes)

Files touched

Definition of Done