- What it does: sends me an email digest in the morning, with a link (+ summary) to new YouTube videos that meet my criteria
- What I deployed (see screenshot): Workflow with two steps (aka, tasks).
> The first task polls 12 YouTube channels for new videos once each morning (i.e., check-channels.ts is the single run at the bottom of the trigger screenshot with a yellow clock because it triggered at 5:00 AM)
> The second task (the many process-video.ts runs because there's one run for each video) classifies each video: does the video feature an interview with a real fund manager, and is the video non-promotional? If both are true (i.e., isSubstantiveInterview=TRUE), then this task also summarizes the video (with claude-haiku-4-5).
- One thing that broke: the lookback window is 25 hours, so a video from yesterday could possibly show up in today's run after it already showed up in yesterday's run. Apparently, by default trigger.dev only checks duplicates in the current run. Claude realized this "bug" by test triggering check-channel.ts twice in a row; and all the same videos unnecessarily called the Claude API again. So Claude Code switched to idempotencyKeys.create(video-${videoId}, { scope: "global" }) ... so the idempotency key is recognized across days.