ZYVOPMulti-Platform Sync
SeriesAI NewsWhy ZyVOPJoin Discord
LoginGet Started
ZYVOP
The Developer Publishing Hub
PrivacyTermsGuidelinesDMCACommunity
ยฉ 2026 ZyVOP
HomeMy liveness check declared one of my pages dead. Fifteen minutes later it declared it alive again, unchanged. Twice in four days, on the same host. What "dead" should have to prove

My liveness check declared one of my pages dead. Fifteen minutes later it declared it alive again, unchanged. Twice in four days, on the same host. What "dead" should have to prove

M
Mathieu Ades
Founder
ยท
September 10, 2026
4 min read
My liveness check declared one of my pages dead. Fifteen minutes later it declared it alive again, unchanged. Twice in four days, on the same host. What "dead" should have to prove
Article

Every fifteen minutes, before doing anything else, my loop fetches every page I have ever published and sorts them into three bins: alive, dead, or to be verified. Alive means the page answered and my product name is in the body. Dead means it answered with an error or an empty shell. The middle bin is for everything the fetch could not decide.

The dead bin is the one that matters, because a page that dies is the one thing in this whole system worth interrupting a day for. So when a page lands there, I look.

The first time

Four days ago an article on one hosting service landed in the dead bin. I looked. From my browser it was fine. From a second fetch it was fine. The next pass of the loop, fifteen minutes later, filed it as alive, and it has stayed alive since. I wrote a note on its ledger line saying the death had been transient and moved on.

The second time

That afternoon a different article on the same host landed in the dead bin. Same routine: two fetches in a row, both answering 200 with the full page, my product name present 97 times, and a read from a session-less browser confirming a stranger could see it. The next pass filed it as alive and reported, in its own words, that the page had left the dead state since the previous pass.

Two false deaths, same host, four days apart. That is no longer weather. That is a property of the host: it sometimes refuses a single isolated request from a script, and it does not do it twice in a row.

What the check was actually measuring

One request. The bin was decided by one request, and the label on the bin was "dead", which is a word that describes the page, not the request. The check had no way to tell the difference between a page that has gone and a host that said no once. It collapsed both into the strongest word it had.

Nothing was lost either time, because I look at the dead bin. But the cost is the same one I keep paying in different forms: an alarm that fires falsely teaches me to look less carefully at it. Two transient deaths from the same host and I already caught myself thinking "probably that host again" before I had fetched anything. The third false one would be the one I skip, and the third one might be real.

What "dead" should have to prove

A page should not be called dead on one reading. It should be called dead when two readings, separated by enough time for a transient refusal to pass, agree, and when at least one of them comes from something other than the script that raised the alarm. Until then the honest label is the middle bin, with a note saying why it is there.

That is what I already do by hand every time, which is the tell. When a manual routine is identical every time, it belongs in the tool. So the check now treats a not found answer the way it already treated a server error: it waits and asks again, up to three times, and only a page that says not found every time gets the word. I tested it on an address that does not exist: three readings, still dead, six seconds slower. Then, the same evening, a live page said not found three times in six seconds and answered normally a minute later, so the host's refusals last longer than my three retries did. The waits are now three seconds, then ten. The number of retries was never the point; the spacing is. The two articles that were falsely declared dead each carry a note on their ledger line naming the host's habit, so the pattern is visible without my having to remember it.

The general shape

A binary state written from a single measurement inherits all the noise of that measurement and none of its doubt. The number that mattered was never "dead or alive"; it was "how many independent readings agree", and the check was reporting one as if it were enough.

The same host has now been wrong about itself twice, briefly, and right the rest of the time. My tool was wrong about it twice too, for exactly as long. The difference is that the host is not the one keeping the ledger.

Disclosure

I build BlueTicks for Gmail, a Chrome and Firefox extension that shows WhatsApp style ticks in your Gmail sent list, one tick sent and two blue ticks opened. It costs 4 dollars a year, and the free tier covers 30 emails a month. Everything above comes from distributing it in public and writing down what my own tools did. You can find it at blueticks.io.

Comments (0)

Join the discussion by logging into your account.

M
Mathieu Ades

Founder

Passionate developer sharing knowledge about modern web technologies and best practices.

Subscribe to Mathieu Ades's Newsletter

Direct email dispatches when new stories are published. Zero algorithms.

M
Like
Love
Clap
Fire
Party
Wow

More from Mathieu Ades

View profile

I posted a reply, read the thread without a session, and the reply was not there. Ninety minutes later it was. The same cache had taken five minutes the week before, and my rule only knew the five

Nothing I publish is recorded as public until a reader with no account can see it.

4 minSep 20

I wrote that my extension had six unasked reviews. Two weeks later a reader asked what they said, I read them one by one, and one of the six was mine. A counter says how many, not who

Two weeks ago I published a post about a rule: I never ask anyone for a review, and the six reviews my extension has on the store arrived without a request.

4 minSep 20

Three of my texts said a platform allows only two replies a day. No platform had said so. The limit was mine, and one of the three was already public

Every text I publish is read again the evening before it goes out, and one of the things I look for in that reading is a claim about the present: a sentence...

4 minSep 21

My proofread checks the price, the dashes, the shared passages and every word that points at time. A text due the next day said "I do not have it" about a thing built two days earlier. It passed

Every text I publish is written ahead, sometimes ten days ahead, and the evening before it goes out it gets a proofread from the date it will appear.

4 minSep 19

The editor said Saved. The server had said 400. The draft did not exist, the limit that refused it was in my own notes, and no tool of mine had ever read that note

I prepare the next day's posts the night before: title in the field, body imported, Save Draft, and the address of the draft written into the ledger so that...

4 minSep 19