What we shipped on 2026-06-18
The narrative writer was unavailable this run, so here’s the plain changelog. We shipped 30 PRs and 28 notable commits today.
Merged PRs:
- PR #1684: chore(main): release 0.81.0
- PR #1683: docs(CLAUDE.md): sync source-truth stats (2026-06-18)
- PR #1682: docs(reference): regenerate app-settings.md
- PR #1680: fix(writer): stop canonical_blog writer fabricating stats + echoing snippet labels
- PR #1679: fix(voice): patch module-level VALID_VOICES dict for Kokoro TTS voices
- PR #1678: feat(settings): add lifecycle metadata columns to app_settings (poindexter#756)
- PR #1677: fix(voice): separate browser WSS URL from bot internal URL (mixed-content fix)
- PR #1676: fix(writer): enrich bare canonical_blog prompt to clear assembly QA vetoes
- PR #1675: fix(obs): drop GPU SQL alert rules #13/#14, single-source to Prometheus (poindexter#653)
- PR #1674: feat(qa): bounded 1-shot rewrite/rescue cycle before a salvageable QA reject
- PR #1673: fix(content): re-point already-linked fabricated citations to corpus URLs (brand-domain subset)
- PR #1672: fix(research): ground the writer on real page text, not 100-char snippets
- PR #1671: fix(content): repair orphaned anchor text when scrubbing fabricated links
- PR #1670: feat(image): niche-configurable image gen prompts + Pexels fallbacks (closes poindexter#219)
- PR #1669: fix(mcp): recreate agent_permissions/approval_queue tables; gate fails open on missing table
- PR #1656: chore(deps): bump markdown-it from 14.1.1 to 14.2.0 in the npm_and_yarn group across 1 directory
- PR #1667: fix(retention): consolidate dual retention systems into single source of truth (closes #699)
- PR #1668: fix(qa): exclude advisory rails from gated score; soften validator warning penalty
- PR #1666: fix(settings): prune 10 dead model keys and fix qa vision ollama prefix
- PR #1665: fix(deploy): deploy-sync waits for a flow gap instead of skipping forever
- PR #1664: fix(types): resolve remaining 282→0 mypy strict errors (#1550 part 2)
- PR #1663: refactor(mcp): de-SQL mcp-server/server.py – service layer delegation (closes #1662)
- PR #1653: Video cutover PR2 (atomic): drop video_long (ATTENDED) (#1460)
- PR #1660: fix(types): reduce mypy strict backlog 1278→282 errors (closes #1550)
- PR #1661: refactor(cli): de-SQL experiments.py via a new experiment_admin service (#1657)
Other commits:
9e62803fix(writer): stop canonical_blog writer fabricating stats + echoing snippet labels (#1680)7441862fix(voice): patch module-level VALID_VOICES dict for Kokoro TTS voices (#1679)6fb6efafeat(settings): add lifecycle metadata columns to app_settings (poindexter#756) (#1678)ef2b5bafix(voice): separate browser WSS URL from bot internal URL (mixed-content fix) (#1677)f621b3dfix(writer): enrich bare canonical_blog prompt to clear assembly QA vetoes (#1676)ef94513fix(obs): drop GPU SQL alert rules #13/#14, single-source to Prometheus (poindexter#653) (#1675)fdc4f05feat(qa): bounded 1-shot rewrite/rescue cycle before a salvageable QA reject (#1674)93b1e8cfix(content): re-point already-linked fabricated citations to corpus URLs (brand-domain subset) (#1673)ee803befix(research): ground the writer on real page text, not 100-char snippets (#1672)1c2fa48fix(content): repair orphaned anchor text when scrubbing fabricated links (#1671)4c1c1b7feat(image): make image gen prompts + Pexels fallbacks niche-configurable (closes #219) (#1670)df62af1fix(mcp): recreate agent_permissions/approval_queue tables; gate fails open on missing table (#1669)e7133a4fix(retention): consolidate dual retention systems into single source of truth (closes #699) (#1667)50aba11fix(qa): exclude advisory rails from gated score; soften validator warning penalty (#1668)4e5a499fix(settings): prune 10 dead model keys and fix qa vision ollama prefix (#1666)
Auto-compiled by Poindexter from today’s commits and PRs. See the work: github.com/Glad-Labs/poindexter.



