{
  "generated_at": "2026-09-23T06:17:01.404767+00:00",
  "newsletters": {
    "overfitted": {
      "label": "Overfitted",
      "issues_processed": 2,
      "issues": [
        {
          "date": "2026-08-30",
          "stages_run": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "stage_detail": {
            "source-ingestion": {
              "stage": "source-ingestion",
              "ran": true
            },
            "thesis": {
              "stage": "thesis",
              "ran": true
            },
            "evidence-brief": {
              "stage": "evidence-brief",
              "ran": true
            },
            "draft": {
              "stage": "draft",
              "ran": true
            },
            "hallucination-scan": {
              "stage": "hallucination-scan",
              "initial_claims_checked": 42,
              "initial_flagged": 7,
              "rescans_performed": 3,
              "final_flagged": 4,
              "clean": false
            },
            "fact-validation": {
              "stage": "fact-validation",
              "initial_checked": 8,
              "initial_rejected": 0,
              "rescans_performed": 0,
              "final_verdict": "pass",
              "clean": true
            },
            "consensus-check": {
              "stage": "consensus-check",
              "verdict": "pass",
              "rounds": null,
              "required_extra_round": false,
              "clean": false
            }
          },
          "reached_publish": false,
          "example_catches": [
            "Stage 5 (hallucination scan) flagged 7 claim(s) where the draft's wording asserted more specificity, scope, or timing than its cited source actually supported. Resolved over 3 rescan(s), 4 item(s) still flagged as advisory at sign-off."
          ],
          "stages_total": 7,
          "stages_clean_pass": 1,
          "stages_required_revision": 2
        },
        {
          "date": "2026-09-14",
          "stages_run": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
          ],
          "stage_detail": {
            "publish": {
              "stage": "publish",
              "ran": true
            },
            "consensus-check": {
              "stage": "consensus-check",
              "verdict": "pass",
              "rounds": 1,
              "required_extra_round": false,
              "clean": true
            },
            "fact-validation": {
              "stage": "fact-validation",
              "ran": true
            },
            "hallucination-scan": {
              "stage": "hallucination-scan",
              "initial_claims_checked": 27,
              "initial_flagged": 4,
              "rescans_performed": 0,
              "final_flagged": 4,
              "clean": false
            },
            "draft": {
              "stage": "draft",
              "ran": true
            },
            "evidence-brief": {
              "stage": "evidence-brief",
              "ran": true
            },
            "thesis": {
              "stage": "thesis",
              "ran": true
            },
            "source-ingestion": {
              "stage": "source-ingestion",
              "ran": true
            }
          },
          "reached_publish": true,
          "example_catches": [
            "Stage 5 (hallucination scan) flagged 4 claim(s) where the draft's wording asserted more specificity, scope, or timing than its cited source actually supported. Resolved over 0 rescan(s), 4 item(s) still flagged as advisory at sign-off."
          ],
          "stages_total": 8,
          "stages_clean_pass": 1,
          "stages_required_revision": 1,
          "cost": {
            "cost_per_issue_usd": 5.7974,
            "per_stage_usd": {
              "publish": {
                "cost_usd": 0.0,
                "model": "openrouter/free"
              },
              "consensus-check": {
                "cost_usd": 0.2477,
                "model": "google/gemini-3.1-pro-preview"
              },
              "fact-validation": {
                "cost_usd": 0.4452,
                "model": "claude-sonnet-5"
              },
              "hallucination-scan": {
                "cost_usd": 0.4057,
                "model": "claude-sonnet-5"
              },
              "draft": {
                "cost_usd": 0.552,
                "model": "claude-sonnet-5"
              },
              "evidence-brief": {
                "cost_usd": 2.1039,
                "model": "claude-sonnet-5"
              },
              "thesis": {
                "cost_usd": 0.5379,
                "model": "claude-sonnet-5"
              },
              "source-ingestion": {
                "cost_usd": 1.505,
                "model": "claude-sonnet-5"
              }
            },
            "stages_missing_cost_data": [],
            "note": "Real cost from Hermes' own session ledger (real token counts x known per-model pricing), summed across this issue's actual stage sessions \u2014 not an estimate typed in by hand."
          }
        }
      ],
      "kanban_board": {
        "cards_total": 10,
        "cards_blocked_ever": 1,
        "note": "Card counts below are the full kanban board history for this newsletter. Per-stage detail in `issues` above is pulled from each stage's own attachment on its kanban card for real runs, and from manual dry-run logs for pre-kanban test runs."
      },
      "cost": {
        "cost_per_issue_usd": 5.7974,
        "research_sourcing_step_cost_usd_avg": 0.1061,
        "research_sourcing_step_sample_size": 22,
        "note": "cost_per_issue_usd is now real, computed from each issue's actual stage sessions in Hermes' own cost ledger (see each issue's own `cost` block in `issues` for the per-stage breakdown) \u2014 no longer a placeholder. research_sourcing_step_cost_usd_avg below remains a separate, narrower, longer-running signal (the daily research brief cron, not the newsletter pipeline itself).",
        "cost_per_issue_usd_sample_size": 1
      }
    },
    "long_game": {
      "label": "The Long Game",
      "issues_processed": 1,
      "issues": [
        {
          "date": "2026-09-06",
          "stages_run": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
          ],
          "stage_detail": {
            "source-ingestion": {
              "stage": "source-ingestion",
              "ran": true
            },
            "thesis": {
              "stage": "thesis",
              "ran": true
            },
            "evidence-brief": {
              "stage": "evidence-brief",
              "ran": true
            },
            "draft": {
              "stage": "draft",
              "ran": true
            },
            "hallucination-scan": {
              "stage": "hallucination-scan",
              "initial_claims_checked": 17,
              "initial_flagged": 1,
              "rescans_performed": 1,
              "final_flagged": 0,
              "clean": true
            },
            "fact-validation": {
              "stage": "fact-validation",
              "initial_checked": 1,
              "initial_rejected": 1,
              "rescans_performed": 1,
              "final_verdict": "pass",
              "clean": false
            },
            "consensus-check": {
              "stage": "consensus-check",
              "verdict": "pass",
              "rounds": 1,
              "required_extra_round": false,
              "clean": true
            },
            "publish": {
              "stage": "publish",
              "ran": true
            }
          },
          "reached_publish": true,
          "example_catches": [
            "Stage 5 (hallucination scan) flagged 1 claim(s) where the draft's wording asserted more specificity, scope, or timing than its cited source actually supported. Resolved over 1 rescan(s), clean on the final rescan.",
            "Stage 6 (fact-validation) rejected 1 claim(s) outright \u2014 no independent, credible source could be found to confirm them, so they were cut before the draft could pass."
          ],
          "stages_total": 8,
          "stages_clean_pass": 2,
          "stages_required_revision": 1
        }
      ],
      "kanban_board": {
        "cards_total": 0,
        "cards_blocked_ever": 0,
        "note": "Card counts below are the full kanban board history for this newsletter. Per-stage detail in `issues` above is pulled from each stage's own attachment on its kanban card for real runs, and from manual dry-run logs for pre-kanban test runs."
      },
      "cost": {
        "cost_per_issue_usd": null,
        "note": "Full pipeline cost is not instrumented end-to-end yet \u2014 excluded rather than estimated."
      }
    }
  },
  "video": {
    "label": "Video pipeline",
    "shape": "Experimental \u2014 not yet wired into the publish pipeline (no cron, no automatic trigger from a published issue). Built and manually run end-to-end once, against one real published issue, producing one short-form and one long-form cut. Each render is reviewed frame-by-frame plus audio by claude-video-vision for two things: relevance (does each visual match its narration beat) and a blink test (would the cut into this beat visually jar a viewer). Catches are pipeline/render bugs, not fact-checking failures.",
    "videos_rendered_count": 2,
    "videos_rendered": [
      {
        "format": "short",
        "duration_seconds": 31.2,
        "size_mb": 13.1
      },
      {
        "format": "long",
        "duration_seconds": 271.7,
        "size_mb": 109.3
      }
    ],
    "review_step_catches": [
      {
        "date": "2026-09-03",
        "format": "long-form",
        "category": "audio",
        "finding": "Rendered output had a fully silent audio track (correct duration and codec, but -91dB \u2014 digital silence) instead of real narration.",
        "root_cause": "A path-resolution bug in the render framework's audio-fetch step failed silently; a duration-matched silent-audio fallback masked the failure instead of erroring out.",
        "status": "fixed",
        "detected_by": "claude-video-vision audio inspection"
      },
      {
        "date": "2026-09-04",
        "format": "long-form",
        "category": "captions",
        "finding": "Caption track was desynchronized from the audio by 24\u201340 seconds partway through the video.",
        "status": "fixed",
        "detected_by": "claude-video-vision frame + audio review"
      },
      {
        "date": "2026-09-04",
        "format": "long-form",
        "category": "captions",
        "finding": "Two visually distinct caption rendering styles appeared mid-video instead of one consistent style.",
        "status": "fixed",
        "detected_by": "claude-video-vision frame review"
      },
      {
        "date": "2026-09-03",
        "format": "short-form",
        "category": "captions",
        "finding": "Caption font styling was inconsistent between the opening hook and the rest of the video.",
        "status": "fixed",
        "detected_by": "claude-video-vision frame review"
      }
    ],
    "render_time": {
      "short_form_seconds": 69,
      "long_form_full_pipeline_seconds": 1112,
      "note": "From the pipeline's documented real end-to-end run (README) \u2014 generation + render, not render-only. Not yet logged with per-run timestamps, so this script reports the last documented measurement rather than a fabricated fresh one."
    },
    "cost_per_video_usd": null,
    "cost_note": "Not instrumented \u2014 the pipeline doesn't currently log real per-run API cost. Excluded rather than estimated."
  }
}