What we shipped on 2026-06-23
We spent a good chunk of today fighting "hallucinated" authority in our content. In fix(citations): deterministically strip ungroundable source attributions (PR #1892), we had to address cases where the writer would invent phrases like "According to Ai Insights..." or "experts like X confirm that..." without actually having a corresponding URL in the research corpus. Rather than trying to negatively prompt the LLM--which is a coin flip at best--we implemented _citation_match.strip_unmatched_attributions. It's a high-precision scan that runs as scan-4 in the atom, stripping the attribution frame while keeping the underlying claim if it can't be grounded.
While we were cleaning up the prose, we caught two operator gaps on the canonical blog path (PR #1894). First, raw YouTube URLs were shipping as bare links; we now hit YouTube's oEmbed endpoint to pull the author_name and convert those into proper [Channel](url) attributions. Second, we realized we were threading the research corpus to QA rails at runtime but never persisting it. We updated build_task_metadata to carry that context onto pipeline_versions.stage_data so an operator can actually see what backed a specific claim during review.






