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
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
Der X-Ausgang bekommt die Notenschwelle, die er nie hatte
The X output gets the grading threshold it never had
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.
- 2026-09-06Found the auth gap: the job’s success check ignored 401 responses and reported them as an empty result.
- 2026-09-07Added a grading threshold for X — there had been none at any stage of the pipeline.
- 2026-09-07Confirmed the automatic path still couldn’t fire: an unchecked review step blocked every attempt.
- 2026-09-07Replaced the unchecked review step with the 24-hour veto window and shipped the working path.
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 supports | What it does not |
|---|---|
| A 401 was misread as an empty result | How long the misread persisted before I noticed |
| 16 of 16 review steps were never checked off | Whether any human ever intended to check them |
| A grading threshold now exists for X | Whether the first live post has gone out cleanly |
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
