Description

Derive concrete content candidates from the enriched, cross-linked insights: article ideas, playlist groupings, Shorts candidates (with quote timestamps), historical-context pieces, and further-research/followup threads. Emit as a review surface (and optionally draft backlog tasks) that feeds existing content work (TASK-236/237/238). A human curates before anything is committed or published.

Acceptance Criteria

Implementation Plan

Pattern to mirror

rake semantic:snapshotbin/generate_semantic_snapshot_page.rb (generated data file + rendered page). Inputs: 251 quote/timestamp, 254 cross_links, 255 context/lessons_for_now/followup_questions.

Generator

bin/generate_content_opportunities.rb + rake generate:content_opportunities (add to generate:all). Reads all transcript YAMLs, emits _data/content_opportunities.yml. Candidate categories aligned to downstream tasks:

Candidate schema: {id (stable hash of kind+sources), title, kind, rationale, sources: [{slug, timestamp?}], feeds_task, status: proposed}. AC#2: every candidate cites ≥1 source slug (+ timestamp for shorts).

Review surface (AC#3)

Rendered page (new pages/content-opportunities.html, or reuse the semantic-snapshot page style) grouping candidates by category, each showing sources/timestamps + a status field the human edits (proposedapproved/rejected). Nothing publishes; explicit human-approval gate per DAG rule.

Idempotency / merge (review-surface trap — critical)

Stable candidate ids + merge-preserve: regeneration KEEPS the human’s status on existing ids and only ADDS new candidates. Never wipe curation on rerun — this is what makes it a review surface, not a throwaway report.

Promotion (AC#4)

bin/promote_content_opportunities.rb (or documented backlog task_create) turns status: approved rows into backlog tasks/docs linked to TASK-236/237/238/258. Runs ONLY on human-approved rows.

Verify

Run generator on corpus; every candidate has ≥1 source slug (+timestamp for shorts); page renders + rake build/htmlproofer clean; set a status to approved, rerun generator → status preserved; promotion creates a task only for approved rows. Output quality is bounded by upstream insight/context quality (out of scope).

Definition of Done