A watcher reported zero, and zero was the wrong answer

5–8 minutes
measured on my own machine
Sixteen drafts, zero sends, one step nobody could check

I built an automatic path for posting to X without a manual click. The first dry run after deploying it reported a calm, reassuring number.

The run said: ‘X — open cards: 1, with finished draft: 0.’ The number was correct, and nobody had asked the right question. Every call to the cockpit needs a token, even from the same machine, and without one it answers with 401. My check only looked at whether the call threw — not at whether the response itself said ok. A rejected call and ‘no draft exists’ both collapsed into the same null.

I believed a catch block was enough to catch failure. If the request didn’t throw, I treated the response as meaningful — I never checked whether the server had actually accepted it. I assumed the absence of an exception meant the presence of a real answer.

The cockpit rejects every unauthenticated call with 401, and my code read that rejection the same way it read a legitimate empty result. Nothing crashed, nothing logged an error, no test went red. A guard that only watches for exceptions doesn’t watch for a valid response that says no. That’s the quiet failure mode: no error in the log, no red test, a watcher that clears itself.

I fixed the token handling first, then found a second, deeper problem the same day: even once the calls were authenticated, the automatic path still couldn’t fire. A review step sat in front of the send step, and nothing had ever checked it off — 16 out of 16 times, across every X card that ever existed. I replaced that unchecked step with the existing 24-hour veto window as the real review gate, and added a grading threshold that had never existed for X at all. By the end of the day the path could fire for the first time. Whether it actually posts cleanly is something I still have to watch for on the next run.

Three commits, one afternoon

637527b3 · 2026-09-06

Der X-Ausgang war nach einer Stunde noch stumm — 401, gemeldet als Null

The X output was still silent after an hour — a 401, reported as null

bff6b04e · 2026-09-07

Der X-Ausgang bekommt die Notenschwelle, die er nie hatte

The X output gets the grading threshold it never had

47ac8d2f · 2026-09-07

Der X-Ausgang wird scharf: der Gegenlesen-Schritt sperrt ihn nicht mehr

The X output goes live: the review step no longer blocks it

The three commits landed within about a day of each other, on 2026-09-06 and 2026-09-07.

The commit subjects, in the original.
The commit subjects, in the original.
  1. 2026-09-06Found the auth gap: the job’s success check ignored 401 responses and reported them as an empty result.
  2. 2026-09-07Added a grading threshold for X — there had been none at any stage of the pipeline.
  3. 2026-09-07Confirmed the automatic path still couldn’t fire: an unchecked review step blocked every attempt.
  4. 2026-09-07Replaced the unchecked review step with the 24-hour veto window and shipped the working path.
4 of 7 recorded steps, in the order they happened.
4 of 7 recorded steps, in the order they happened.

The dead end mattered as much as the fix. I had assumed the grading threshold was the missing piece — and it was necessary, but not sufficient. A card could pass every check I’d just added and still never be announced, because a step nobody could complete stood in front of the send step. That’s the kind of gap you only find by tracing the actual condition a card has to clear, not by adding one more rule and calling it done.

What the record supportsWhat it does not
A 401 was misread as an empty resultHow long the misread persisted before I noticed
16 of 16 review steps were never checked offWhether any human ever intended to check them
A grading threshold now exists for XWhether the first live post has gone out cleanly
What the record supports — and what it does not.
What the record supports — and what it does not.

The record doesn’t say how long the 401 misread had been running before this run caught it, or how many nights passed with the same calm, wrong zero.

Based on commits from 2026-09-06 to 2026-09-07 in the Marketing-agency project.

637527b3 · bff6b04e · 36107568 · 47ac8d2f

Georg Singer

Georg Singer

I automate my own projects in public and write down what each one cost. Physics degree, doctorate in computer science, nine systems in production on hardware I own, all of it built in my own time.

More from the log