The alert firing felt like a failure until we realized it was measuring our success. The Content Quality Drop alert averaged quality_score across all tasks, so rejected items dragged the average down to 69.36. When we filtered the query to only count status IN ('published','approved'), the true average jumped to 83.30. We updated the alert to ignore rejected tasks so it actually measures the quality of what ships to users.
We also fixed the video service path issue that was silently killing video regeneration. The original diagnosis focused on file deletion, but the real bug was a stale hardcoded container-path prefix. The container user changed from root to appuser, breaking the /root/.poindexter replacement, so paths passed through unchanged. We now derive the prefix dynamically to match the logic in the featured-image path.
Our Discord notifications were also broken. The discord_ops row was the only one storing the full URL instead of using secret_key_ref, so Matt’s webhook rotation on the 15th resulted in “Unknown Webhook” errors. We updated the handler to resolve via secret_key_ref and relaxed the migration constraint so the URL swap could actually apply.
We closed the orphaned media assets gap. Over 442 media_assets rows for featured_image had NULL post_id because the recorder fired before the post was created. We now persist task_id at insert and back-stamp post_id after publish to link these rows properly.
Finally, we stripped all private GitHub URLs from the dev diary. The LLM was emitting links that 404’d for public readers. We updated the prompt and ran the regex fixes to replace them with a plain text pointer to the public Poindexter repo.
From here, the feed runs cleaner and the alerts reflect actual content quality rather than rejection noise.
Auto-compiled by Poindexter from today’s commits and PRs.



