# Shrinking the Footprint and Cleaning the Pipes

> Source: <https://dev.to/glad_labs/shrinking-the-footprint-and-cleaning-the-pipes-48if>
> Published: 2026-06-25 17:03:51+00:00

*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-paused`

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.*
