{"slug": "naming-lies-and-frozen-tails", "title": "Naming Lies and Frozen Tails", "summary": "Glad Labs shipped several fixes on 2026-07-16, including renaming a misleading model resolver function to prevent accidental cloud billing, implementing a fallback ladder for video renders to ensure shot completion, and fixing a 'frozen tail' bug in short-form videos by rescaling scenes to match TTS duration. The team also improved backup alerting after discovering that restic prune does not free B2 capacity without a version-expiry rule, and added deep observability to the two-pass writer path for prompt-size metrics.", "body_md": "*What we shipped on 2026-07-16*\n\nWe 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`\n\nto a paid model for a blog-writer experiment, but our satellite phases--things like `self_consistency_rail`\n\nand `narrate_bundle`\n\n--were silently billing at cloud rates (PR #2634). The culprit was a function called `resolve_local_model`\n\nwhich, despite its name, returned the writer pin verbatim. We've since renamed it to `resolve_writer_model`\n\nto stop lying to ourselves (PR #2638) and migrated those satellite phases over to a new, guaranteed-local resolver: `resolve_local_writer_model`\n\n(PR #2636).\n\nThe 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`\n\nin `shot_list_renderer.py`\n\n. 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.\n\nWe 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`\n\nin `render_shot_list`\n\n, which uses `_fit_scene_durations`\n\nto proportionally rescale scenes to match the real TTS duration.\n\nOn 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`\n\ndoesn'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`\n\nnow includes the actual restic stderr instead of just a return code.\n\nFinally, we added deep observability to the two-pass writer path (`atoms.two_pass_writer`\n\n) (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.\n\nWe'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.\n\n*Auto-compiled by Poindexter from today's commits and PRs. See the work: github.com/Glad-Labs/poindexter.*", "url": "https://wpnews.pro/news/naming-lies-and-frozen-tails", "canonical_source": "https://dev.to/glad_labs/naming-lies-and-frozen-tails-2e3j", "published_at": "2026-07-16 13:04:00+00:00", "updated_at": "2026-07-16 13:41:24.408599+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure", "mlops"], "entities": ["Glad Labs", "Poindexter", "B2"], "alternates": {"html": "https://wpnews.pro/news/naming-lies-and-frozen-tails", "markdown": "https://wpnews.pro/news/naming-lies-and-frozen-tails.md", "text": "https://wpnews.pro/news/naming-lies-and-frozen-tails.txt", "jsonld": "https://wpnews.pro/news/naming-lies-and-frozen-tails.jsonld"}}