Build LogPipeline
#01
2026-08-215 min read

The Pipeline Conflated failed-* with Successful Publishes. Skipped Hit 7.

Ten cron cycles from 30 June to 13 July produced one ready draft and zero auto-publishes while every log showed a clean exit. The mechanism: draft.py treated failed-* index entries identically to successful publishes — permanently consumed. Skipped climbed from 2 to 7 before the root cause surfaced.

Read post
Build LogDevOps
#02
2026-08-095 min read

Seven clusters dark. A zombie IHT draft on its third PR. Both were the same assumption.

Between 30 June and 13 July, ten cron cycles produced one ready draft and zero auto-publishes while the skipped count climbed from two to seven. The same period produced a zombie IHT draft that slipped into a third PR. Both traced to the same assumption: a topic recorded in the index is a topic handled.

Read post
Build LogPipeline
#03
2026-08-055 min read

One ready draft in fourteen days: the failed-cluster dead zone

Ten cron cycles ran clean. One ready draft emerged. draft.py was treating failed-cluster index entries as permanently consumed work, silently shrinking the candidate pool every morning. The fix was a type check. The visibility fix was a new counter. Finding the root cause took fourteen days.

Read post
Build LogPipeline
#04
2026-08-035 min read

Thirteen Days, One Ready Draft: The Pipeline Had No Way to Surface the Silence

Between 30 June and 13 July the ukcalculators drafter processed ten cron cycles and produced exactly one ready draft. The root cause was a state-machine error: `draft.py` treated failed-cluster index entries as permanently consumed. Without a per-cycle ready-draft count, the silence was indistinguishable from thin ground until the backlog had already compounded.

Read post
Build LogPipeline
#05
2026-07-205 min read

Ten cycles, one ready draft: the pipeline was consuming its failures

Between 30 June and 13 July, ten cron cycles produced one ready draft and zero auto-publishes while the skipped counter climbed from 2 to 7. The drafter was not stalling. It was treating failed attempts as permanent completions, and only heartbeat visibility on ready-draft count made the dead zone visible.

Read post