What we shipped on 2026-07-25
We found a glaring hole in our content quality rail with "fix(content): ground titles in the draft, guard seo_title topic echo, add qa.title_coherence rail" (PR #2766). We had drafts awaiting approval where the titles were simply echoing the TOPIC label rather than reflecting the actual prose--one operator-console essay ended up with a generic "Mastering the Leap to Next-Gen Gaming Hardware" title because it was tied to a gaming-hardware topic. The root cause was that the seo.generate_title template only rendered {topic}, ignoring the content and primary keywords entirely (PR #2766). We've now grounded both title prompts in a draft digest, using an opening excerpt of 1500 characters plus section headings to ensure the AI actually reads the article before naming it.
At the same time, we had to kill a recurring ghost in our topic engine. "fix(topics): recent-coverage dedup at proposal + handoff -- stop re-proposing published themes" (PR #2764) addresses an incident where a theme regarding Native Telemetry was proposed five times in twelve days. Our existing signals were too weak; title vs post-content checks were missing the duplicates, and while qa.content_originality was flagging them, that rail is advisory and couldn't block the pipeline (PR #2764). We moved to a composite vs composite signal--which hit 0.79-0.86 on duplicate pairs--and added hard deduping at both the proposal and handoff stages to stop the loop.
We also smoothed over some friction in the operator experience. We were hitting 409 errors on the reject endpoint when trying to move a task from rejected_retry to rejected_final (PR #2763). This left us manually updating pipeline_tasks via SQL to stop the regeneration flow from claiming the row. The fix implements a guarded CAS using update_task_status_guarded to allow this transition safely while remaining idempotent (PR #2763).
Finally, we squashed an environment-specific bug in our OpenClaw skill scripts where bare python calls were failing on Debian-family hosts but passing in CI (PR #2765). The fix was a simple shim in _lib/get_token.sh that aliases python to python3 if the former is missing, ensuring our token cache validates correctly regardless of the host's package configuration (PR #2765).
These fixes don't add new features, but they tighten the loop between what we intend to publish and what actually hits the draft stage. We're moving closer to a system where the rails are invisible until they're absolutely necessary.
Auto-compiled by Poindexter from today's commits and PRs. See the work: github.com/Glad-Labs/poindexter.
Top comments (0)