What we shipped on 2026-06-24
We finally stopped the flashing terminal windows on our desktop by wrapping DeployCheckoutSync
in a VBS helper (run-hidden.vbs
) to force SW_HIDE
at the process level (PR #1917). It's a classic Windows quirk---WindowStyle Hidden
isn't enough when child processes like git.exe
or python.exe
decide to call SetConsoleTitle
and wake up the console API.
The biggest architectural win today was folding our embedding hygiene jobs into the declarative retention_policies
framework (PR #1909). We were carrying around 2,550 lines of legacy job code that we just deleted. Now, tasks like embeddings_orphan_prune
and embeddings_collapse
are handled by a unified runner. We added a min_interval_hours
column to the policies so these heavy collapse jobs run weekly instead of every 6 hours, which is much more sane for our resource budget. To make this usable without raw SQL, we shipped a new CLI subcommand poindexter retention config
to patch the JSONB configs (PR #1911), paired with five new Grafana panels in integrations-admin
to track orphan pruning and collapse rates.
We also spent some time lowering the barrier for entry with a minimal Docker Compose profile targeting 8-16GB VRAM hardware (PR #1924). By stripping out the heavy operator observability stack--specifically Langfuse, GlitchTip, and the Loki/Tempo/Pyroscope trio--we dropped idle RAM usage from over 20 GB down to about 4-6 GB. We downgraded Langfuse variables to optional and forced LANGFUSE_TRACING_ENABLED: "false"
so the SDK stays quiet when keys are missing.
On the bug front, we found a few leaks in our featured image flow. The replace_image
service was updating pipeline_versions.featured_image_url
but forgetting to sync posts.featured_image_url
, meaning live sites never actually updated (PR #1918). While fixing that, we caught a silly mistake where the Pexels API key was being read via .get()
instead of .get_secret()
, which returned None
because secrets are excluded from the in-memory cache.
A few other tight fixes:
format=json
to ChatOllama
(PR #1914) because phi4:14b
was wrapping JSON responses in markdown code fences, which crashed the Ragas output parser.UndefinedColumnError
in poindexter pipeline list-d
by replacing a direct table query with a correlated subquery into pipeline_versions
to correctly fetch task_metadata
(PR #1916)._citation_match.py
where an inner loop variable src
was clashing with the outer source list (PR #1923).We're also making progress on the video front, shipping both the infra half (PR #1902) and the generative source logic (PR #1895) for the Wan 2.2 TI2V-5B hero renderer.
The system feels leaner today. Between the RAM reductions and the retirement of thousands of lines of job code, Poindexter is becoming less of a monolith and more of a tool.
Auto-compiled by Poindexter from today's commits and PRs. See the work: github.com/Glad-Labs/poindexter.