Build1 distinct publisher3 min readPublished
Five true statements printed green while the scheduler ran two-week-old code, and the guard added afterwards still reads its service list from the variable that caused the miss, so it fixes this one failure without preventing the same class of bug.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
Follow any of these and your For You feed starts watching them — no settings page required.
build
n8n's queue mode spends a second full process to absorb a peak of 19 jobs1 distinct publisher
build
DOMPurify's svg profile strips the foreignObject carrying Mermaid labels in four of five diagram types1 distinct publisher
build
A cost monitor overcounted 4.9x, then went dark for a week when set -e did its job1 distinct publisher
build
Your .ai viewer is a pdf.js problem, and its worst bugs never throw1 distinct publisher
The whole bug fits in the distance between a repository and a process. The deploy script asked the server for its commit SHA and got a correct answer, and it asked whether all containers were running and they were [8]. Both statements were true, but neither addressed the thing that had just changed [8]. By the author's own reading, the SHA proves the server pulled and says nothing about whether any particular container was recreated from the new image [17].
The service list is where it went wrong. A backend deploy rebuilt `SERVICES="$SERVICES backend celery-worker"`, and celery-beat is not in that string [5]. So the two containers named came up a minute before the checks ran, while the container holding the schedule had been up for two weeks [6]. Of the five green lines, none reads the beat schedule; the only signal that disagreed came from logging into the scheduler and asking it what it had scheduled [5].
The remedy worth reading is the age assertion. The verify step now loops over the services it asked to rebuild, reads `.State.StartedAt` with `docker inspect`, and dies unless the age is under 900 seconds [16], the fifteen minutes described in the post [1]. That is cheap and I would ship it. It also inherits the original blind spot, because the loop iterates `$SERVICES` and the failure was celery-beat's absence from `$SERVICES`, so a service left off that list is a service the loop never checks [2].
It does close the earlier instance. Annual billing shipped dead because the compose file passes environment variables explicitly, one line per variable, and the containers had started before the new variable existed [10]. Backend is in the rebuild list [5], so an age assertion would have failed that deploy on a backend container that was never recreated [3]. The author found it instead by curling the config endpoint and reading the value back, which the script had not done because it had no idea what value to look for [11].
That missing declaration is the class of bug. There is nowhere in the script where the deploy declares what it was supposed to make true, which is how a forum reply framed it: the gap is between a check that verifies state and one that verifies intent [13]. An age check is still state. It is a better proxy than a SHA because it is derived from the list of things this deploy claimed to touch, but a proxy is only ever as complete as that list.
The job being deleted had spent its existence logging "Cleanup completed: removed 0 expired results" and returning a completed status without deleting anything [2], which at one run an hour is twenty-four clean-looking successes a day [4]. Removing it with a pipeline that also reported success while doing nothing at least keeps the failure modes consistent.
The recurrence is the useful evidence. The author diagnosed the pattern, wrote it up, had it named by someone with no stake in it, and shipped the same class of bug again a week later, where a manual check caught it [13][14]. For the fifteen-minute assertion to transfer to another stack, the rebuild list has to be generated from what changed rather than typed once and edited by hand, because the check can only interrogate services someone remembered to name [2].
Ranked by verification strength, evidence, and original report placement.
A developer writing on dev.to deleted a scheduled task, deployed it, watched five checks pass, and then found the task still running on the server.
The deleted task ran every hour on Celery Beat; its body was a TODO placeholder that set cleaned_count = 0, logged "Cleanup completed: removed 0 expired results" and returned status completed. It had never deleted anything.
The deploy script printed five green lines: deployed; server on 0fb1bb4; all containers running; agent-mesh.org/health healthy; app.agent-mesh.org/health healthy.
Logging into the running scheduler returned entries: 'cleanup-expired-results', 'dispatch-due-schedules', 'health-check', 'reap-stuck-executions'.
On a backend deploy the script rebuilt SERVICES="$SERVICES backend celery-worker"; celery-beat is not in that line.
The backend container and the worker were a minute old; the scheduler was two weeks old.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · September 4, 2026
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed but single-witness
The mechanics are shown rather than asserted: the placeholder task body, the five green lines, the SERVICES line, the scheduler's own entry list, and the new age check all appear as quoted code and output. What none of it can be is checked — the repository, the containers and the two-week window are private to one developer telling his own story, and he closes by asking readers to treat the whole thing as biased. The derived reading that the new guard still cannot see a service missing from the variable follows from the two code excerpts on the page, not from anyone's testing.
One production system
The count of places this practice runs is one: the author's hosted agent platform, where celery-beat is now rebuilt and the verify step refuses containers older than fifteen minutes. No other team, tool, or repository appears anywhere in the story, and the guard's record so far is silent — the last documented event is the same class of bug shipping again a week after the diagnosis, before this check existed.
Confessional, with one oversold fix
Almost everything in this post cuts against its author: he names the placeholder job he never implemented, the billing feature that shipped dead, and the relapse a week after going public. The single place the telling runs ahead of the code is the framing of the container-age check as 'the one that generalises' — it loops over the very variable whose contents caused the stale scheduler, so a service nobody remembered to list is still invisible to it. Small overstatement, in a story that otherwise understates.
Disclosed self-interest, low stakes
The author builds and sells the hosted agent platform whose health endpoints appear in the deploy output, and says so outright — 'treat the whole thing as biased.' Developer posts like this double as credibility marketing, and the failing system is described only by the party who owns it. The countervailing pressure is that the content is a catalogue of his own mistakes, including a job that reported success for its entire life, which is a strange way to flatter a product.
Trust the mechanism, not the scale
We would stand behind the failure mode and the fix: a rebuild list that omits a service, checks that verify the repository instead of the process, and an age assertion bounded by the same list. We would not stand behind any number attached to it — how many changes went missing, how often this pattern bites elsewhere — because one developer's retelling of his own two weeks is the whole record, and the guard has no track record yet.