{
  "id": "podcast-research-loop",
  "title": "A16Z / All-In / Naval transcript-to-lesson loop",
  "lastReviewed": "2026-06-14",
  "purpose": "Turn public podcast episodes into source-backed human lessons and paired agent-executable lessons without publishing raw transcripts or implying endorsement.",
  "sourceLanes": [
    {
      "id": "a16z",
      "label": "a16z Podcast",
      "feedUrl": "https://feeds.simplecast.com/Hb_IuXOo",
      "publicSourcePolicy": "Use public episode pages, feeds, and permissible transcript sources. Store raw transcript work privately unless rights are reviewed."
    },
    {
      "id": "allin",
      "label": "All-In Podcast",
      "feedUrl": "https://allinchamathjason.libsyn.com/rss",
      "publicSourcePolicy": "Use public episode pages, feeds, and permissible transcript sources. Store raw transcript work privately unless rights are reviewed."
    },
    {
      "id": "naval",
      "label": "Naval",
      "feedUrl": "https://nav.al/feed",
      "publicSourcePolicy": "Use the official nav.al feed and episode pages. Store raw transcript work privately; publish only paraphrased behavior-changing lessons."
    }
  ],
  "loop": [
    "source-discovery",
    "transcript-preserved-private",
    "facts-indexed",
    "lesson-candidates",
    "recurrence-cluster",
    "operator-homework",
    "agent-lesson",
    "publish-and-measure"
  ],
  "promotionGates": [
    "usefulness filter required: one artifact should serve the human and the agent",
    "source URL and reviewed date required",
    "YouTube captions are tried before audio transcription",
    "poll runs are bounded by max-new and max-errors",
    "delta state prevents reprocessing already-seen episodes",
    "large source lanes can run as dedicated backfill controllers so one source cannot starve another",
    "public transcript-provider pages are preferred before generated audio transcription",
    "every promoted record needs a specific_value_detail; without it, max signal score is 69",
    "controller status exposes intent, step, progress, proof, next action, blockers, and decision gates",
    "no full transcript text in public repo by default",
    "no host/show endorsement claim",
    "repeated source support required for doctrine",
    "operator behavior change required",
    "paired agent lesson required for operating lessons",
    "receipt required before done"
  ],
  "publicOutputs": [
    "/podcastu",
    "/podcast-research-loop.json",
    "/podcast-research-latest.json",
    "/podcast-lessons-latest.json",
    "/podcast-allin-backfill-latest.json",
    "/podcast-allin-public-leads-latest.json",
    "/podcast-naval-backfill-latest.json",
    "/podcast-naval-lessons-latest.json",
    "/podcastu-lessons-high-signal.json",
    "/podcastu-study-pack-latest.md",
    "/specs/value-object.schema.json",
    "/specs/podcast-lesson.schema.json",
    "/lessons/*.json"
  ],
  "privateOutputs": [
    "controller state",
    "queue state",
    "raw transcripts",
    "candidate lesson packets",
    "full private lesson records",
    "unreviewed source notes"
  ],
  "runner": {
    "command": "npm run podcast:controller -- --autonomous-publication --max-new 3",
    "pollCommand": "npm run podcast:poll",
    "statusCommand": "npm run podcast:status",
    "smokeCommand": "npm run podcast:smoke",
    "validateCommand": "npm run podcast:validate-lessons",
    "allInBackfillCommand": "npm run podcast:allin:backfill",
    "allInStatusCommand": "npm run podcast:allin:status",
    "allInSmokeCommand": "npm run podcast:allin:smoke",
    "navalBackfillCommand": "npm run podcast:naval:backfill",
    "navalStatusCommand": "npm run podcast:naval:status",
    "navalSmokeCommand": "npm run podcast:naval:smoke",
    "libraryCommand": "npm run podcast:library",
    "captionFirstCommand": "npm run podcast:controller -- --autonomous-publication --max-new 3 --max-errors 2",
    "audioCommand": "npm run podcast:ingest -- --lanes a16z --limit 1 --offset 0 --transcribe-audio --whisper-model tiny --max-audio-mb 80",
    "backfillCommand": "npm run podcast:ingest -- --lanes a16z --limit 1 --offset <n> --transcribe-audio --whisper-model tiny --max-audio-mb 80",
    "fixtureCommand": "npm run podcast:ingest -- --fixture tests/fixtures/podcast-rss --caption-first --caption-fixture tests/fixtures/podcast-captions --no-network --limit 1",
    "controllerState": "private controller state (path withheld)",
    "queuePath": "private queue state (path withheld)",
    "statePath": "private controller state (path withheld)",
    "privateOut": "private transcript lane (path withheld)",
    "publicSummary": "/podcast-research-latest.json",
    "publicLessons": "/podcast-lessons-latest.json",
    "allInPublicSummary": "/podcast-allin-backfill-latest.json",
    "allInCoverageStatus": "/podcast-allin-lessons-latest.json",
    "allInPublicLessons": "/podcast-allin-public-leads-latest.json",
    "navalPublicSummary": "/podcast-naval-backfill-latest.json",
    "navalPublicLessons": "/podcast-naval-lessons-latest.json",
    "highSignalLessons": "/podcastu-lessons-high-signal.json",
    "studyPack": "/podcastu-study-pack-latest.md",
    "lessonSchema": "/specs/podcast-lesson.schema.json"
  }
}
