What we shipped on 2026-08-01
We spent a good chunk of today fighting "between-lanes hero poisoning" in the video renderer (PR #2987). We found that after the first hero shot, image-gen would process-exit while ~24GB of wan remained resident on the card, causing every subsequent image-gen-family shot to fail deterministically and fall back to a Pexels substitute (PR #2990). The fix was implementing two VRAM-coherent phases in _render_pass: a still phase where image-gen remains resident for all init stills, followed by a hero phase for wan animations.
The deeper rot was a CUDA reserved pool leak. Even after a successful render evening, we measured 10,240 MiB held ~6.5h after the last render because wan's idle unloader only freed objects, not the memory pool (PR #2984). We mirrored image-gen's hard-unload contract in scripts/wan-server.py, adding a POST /unload {"hard": true} endpoint that triggers an os._exit(0) if reserved memory is above WAN_HARD_UNLOAD_MIN_RESERVED_MB.
While the renderer was stabilizing, we hit a wall with reasoning models in the architect's compose loop. The glm-4.7 model started leaking <think> blocks into its JSON responses, which broke our outermost-brace scan and led to invalid JSON ... char 1 errors (PR #2985). We added strip_think_blocks to _parse_json_spec and implemented a "largest-wins" balanced brace candidate search so that stray braces in thinking prose don't kill the real spec.
We also caught a nasty hang where tool execution didn't share the turn deadline (PR #2989). A plan compose stuck behind an Ollama cold-load ran 315s into a 300s turn, ending as a disconnect rather than a clean turn_timeout. Now, tool execution is wrapped in wait_for(deadline remaining), ensuring hung tools don't strand the operator.
The high point of the day was shipping P4 architect plan cards (PR #2981). We can now design and run pipelines directly from the Cofounder chat thread. The model calls a new plan_pipeline tool, which triggers pipeline_architect.compose to build a validated graph_def. To prevent an LLM from accidentally nuking our production templates, we forced composed specs under a plan_ slug NAMESPACE guard.
We closed out the day with some operational hygiene: fixing a console asset caching bug that caused "mixed version" rendering and runtime errors after deploys (PR #2983), and adding a terminal reject to the console so we can close drafts instead of being forced to regenerate them (PR #2934).
The P4 cards change the loop entirely. We're moving away from manual configuration toward a world where we describe a content strategy in chat and Poindexter composes the graph to execute it.
Auto-compiled by Poindexter from today's commits and PRs. See the work: github.com/Glad-Labs/poindexter.
Top comments (0)