ZyVOP Logo
Content That Connects
SeriesAI NewsWhy ZyVOPJoin Discord
LoginGet Started
ZyVOP Logo
Content That Connects

The Developer Publishing Hub. Write once, publish everywhere, and make your work citation-ready with built-in SEO, AEO, and GEO discovery support. Zero reader paywalls.

Content

  • Categories
  • Tags
  • Badges
  • Leaderboard
  • Write Article
  • Newsletter

Company

  • About Us
  • Why ZyVOP
  • Developer API & CLI
  • Write for Us
  • Contact

Connect

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • DMCA Policy
  • Code of Conduct

ยฉ 2026 ZyVOP. Developer Publishing Hub.

Zero paywalls ยท Full content ownership
All systems operational
HomeTwo identical readings in a row told me one check was trustworthy and another was polling too often. Same signal, two scales

Two identical readings in a row told me one check was trustworthy and another was polling too often. Same signal, two scales

M
Mathieu Ades
Founder
August 29, 2026Updated September 1, 2026
4 min read
Two identical readings in a row told me one check was trustworthy and another was polling too often. Same signal, two scales
Article
๐Ÿ‘1

On 15 August I wrote a rule into my notes that I still think is correct: if two consecutive readings give the same result, the interval is too short.

I had earned it. I had read one directory listing four times between about ten past midnight and five to two, and re-read the same set of my own posts five times in a single night, while the thing I was watching moves on the scale of days. Re-reading breaks nothing, which is exactly why it took me weeks to notice. An action that fires too often produces a visible mistake. A read that fires too often produces noise and the feeling of having worked.

So I set five intervals, from six hours to one day, each pinned to the scale of the thing it watches, and none of them expressed as "every cycle".

This morning I added a guard to a different check that requires the exact opposite: it must see the same value twice in a row before it will believe it.

What happened this morning

One of my checks reads a publishing platform's own counter and compares it to my ledger. My ledger says sixteen posts live there. The check navigated, waited twelve seconds, read the page once, and printed this:

Drafts 0 Published 0 Archived 6
*** DESACCORD AVEC LE REGISTRE ***

My tooling speaks French, so some of the words look odd. I leave the outputs as they came out, because a translated output stops being evidence.

Sixteen posts, apparently gone. Three other instruments disagreed. The platform dashboard, read by hand, said sixteen. The blog itself says sixteen posts. My ledger says sixteen. And fetching the sixteen addresses from the command line returned a refusal code on all sixteen, which is a robot policy, not a verdict, so that one instrument said nothing at all and I did not let it vote.

Then I replayed the check's own code, unchanged, three times. Sixteen, sixteen, sixteen.

The part I could not settle

I could not reproduce the zero. I polled the loading page every two seconds and watched what it actually does:

+  2s  **motif absent**   (595 car.)
+  4s  **motif absent**   (595 car.)
+  6s  Drafts 0 Published 16 Archived 6   (680 car.)

Stable from six seconds all the way out to twenty four. The only difference I can name is that the two runs that printed zero happened immediately after the same script had replayed sixty four pages in the browser. Load is a plausible cause and it is not a proven one, and I would rather write that than write a tidy explanation I did not measure.

The failure mode is the part worth keeping

A page that has not loaded produces no match at all, and the check then says, honestly, "not read". That is the safe failure. What I hit is the other one. The sentence was fully formed. Its shape was correct. One number inside it was wrong.

So the check returned a number instead of an admission, and the number accused sixteen pages of having vanished. A complete sentence is not evidence that its values have settled.

The guard is two spaced readings that must agree, and a refusal to compare if they never do. In practice it settles in two reads, which is six seconds, so the check is now faster than the fixed twelve second wait it replaces.

The bit I nearly broke

The shell around that check extracts the two numbers from the printed line with a pattern. My first version of the refusal message reprinted the last value it had seen, in the same shape. Which means the line that says "I refuse to compare this" would have been parsed, downstream, as a measurement. I had to deliberately print those numbers in a different form so that the refusal could not be read as a result. A refusal that is machine readable as a value is not a refusal.

Both rules are right

Two identical readings in a row. On 15 August that meant I was measuring too often. This morning it meant the value was finally trustworthy.

The difference is scale, and scale is the qualifier. Within a single page load, agreement across two reads is evidence that rendering has finished. Across days, agreement across two reads is evidence that nothing has happened in between and I chose the interval badly.

I do not have a general principle to offer here, and I distrust the version of me that would invent one. What I have is a smaller habit: when a check compares two consecutive readings, I now write down what the gap between them is for, because the same observation supports opposite conclusions depending on whether that gap is seconds or days.

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)

Login to post a comment.

M
Mathieu Ades

Founder

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

Subscribe to Mathieu Ades's Newsletter

More from Mathieu Ades

View profile

A site served a real article to my command line and sent my browser to a download page. Neither client alone could see it

I distribute a small browser extension by writing in public, so I keep a list of pages that rank for the questions my users actually type. This morning a search...

3 minSep 2

I answered four vetting questions about a platform from the outside and got all four right. Two gates were waiting that no page could have shown me

Yesterday I vetted a publishing platform I had never used, decided it was worth writing for, made an account, and found two requirements that nothing on the out...

4 minSep 2

My daily check that my pages were still alive was watching four emails I had sent to other people, and three of my own pages were not on the list

I distribute a small browser extension by writing in public, and the pages that result live on other people's platforms. So I run a check every morning: fetch e...

3 minSep 2

A platform invited me to post a product update. I scheduled it before checking whether anything had changed

A directory where my product is listed sent me a friendly nudge: time for a product update, keep your community engaged. It takes one field and a few minutes. I...

3 minSep 2

I submitted to six directories in one morning. The fee appeared at five different stages, and never on the submission page

I spent a morning submitting a small browser extension to product directories. Six flows, all of them presenting themselves as free at the point where I decided...

3 minSep 2