What we shipped on 2026-07-16
We caught a "Sonnet-canary leak" today that serves as a stark reminder of how dangerous misnomers are in an LLM pipeline. We had pinned pipeline_writer_model to a paid model for a blog-writer experiment, but our satellite phases--things like self_consistency_rail and narrate_bundle--were silently billing at cloud rates (PR #2634). The culprit was a function called resolve_local_model which, despite its name, returned the writer pin verbatim. We've since renamed it to resolve_writer_model to stop lying to ourselves (PR #2638) and migrated those satellite phases over to a new, guaranteed-local resolver: resolve_local_writer_model (PR #2636).
The video renderer also needed some discipline. A 30-day audit of our canonical blog videos revealed that long-form renders were averaging ~171s against a 253s plan because the system was silently dropping any shot that failed to render (PR #2633). We implemented a "never-drop-a-shot fallback ladder" via _backfill_pass in shot_list_renderer.py. Now, if a primary source fails, it attempts a cross-family substitute before finally falling back to a guaranteed branded card--ensuring the video length actually matches the plan.
We also killed the "frozen tail" bug affecting our 9:16 short-form videos (PR #2637). The visuals and narration were being sized independently, leading to cases where the script ran long and the compositor simply cloned the final frame to fill the gap. We fixed this by introducing narration_fit in render_shot_list, which uses _fit_scene_durations to proportionally rescale scenes to match the real TTS duration.
On the ops side, we closed out the follow-ups from our B2 storage-cap incident (PR #2635). We learned the hard way that restic forget --prune doesn't actually free billed capacity on B2 without a version-expiry lifecycle rule. We've updated the reclaim runbook and improved our alerting so that offsite_backup_failed now includes the actual restic stderr instead of just a return code.
Finally, we added deep observability to the two-pass writer path (atoms.two_pass_writer) (PR #2639). We're now capturing per-call prompt-size metrics broken down by context section--RAG snippets, research, dev_diary bundles, and internal-grounding anchors--surfacing them as a new "Writer Context Size" row on the Pipeline dashboard.
We're finally seeing the gap close between what the architect plans and what actually renders. From here, we can start tuning the prompt sizes now that we actually have the telemetry to see where the bloat is.
Auto-compiled by Poindexter from today's commits and PRs. See the work: github.com/Glad-Labs/poindexter.