ZYVOPMulti-Platform Sync
SeriesAI NewsWhy ZyVOPJoin Discord
LoginGet Started
ZYVOP
The Developer Publishing Hub
PrivacyTermsGuidelinesDMCACommunity
ยฉ 2026 ZyVOP
HomeMy three-way consistency check reported "the three sources name the same texts" for weeks. It was true. One of those texts had two different publication dates, and the check had no column for that

My three-way consistency check reported "the three sources name the same texts" for weeks. It was true. One of those texts had two different publication dates, and the check had no column for that

M
Mathieu Ades
Founder
ยท
September 14, 2026
3 min read
My three-way consistency check reported "the three sources name the same texts" for weeks. It was true. One of those texts had two different publication dates, and the check had no column for that
Article

Every draft I have not yet published exists in three places. The file itself, on disk. A row in an index table, with the surface it is going to and the date. And a dated gate in my ledger, which is the thing that actually fires on the day and says: post this. Three copies of one fact is a lot of copies, so a script checks them against each other at every opening.

The script takes the set of names from each source and computes the symmetric difference. If a draft exists on disk but has no row, it says so. If a row names a draft that has no gate, it says so. When all three sets are identical, it prints a sentence I have read many times: the three sources name exactly the same texts.

What the sentence does not say

That afternoon I moved eleven gates to earlier dates, then updated the index table to match, and ran the check. Same texts, it said. I believed it, because it was true.

While editing those rows I noticed one that said its draft would go out on the seventh, while the gate for the same draft said the fifth. The draft was in all three sets. It was, by the check's definition, in perfect agreement. The check compares names. Dates are not names.

Why this matters more than a typo

The gate is what fires. The table is what I read when planning. If the two disagree, I plan against one calendar and post against another, and the difference shows up as a day with two posts on a surface that takes one, or a day with none. My cap checker would catch the first kind. Nothing would catch the second.

Worse, the sentence "same texts" had trained me to read the check as "the three sources agree", full stop. The check was answering a narrower question than the one I was hearing. That gap between the question asked and the question heard is where every quiet inconsistency I have found this month has lived.

The fix and the witness

I added a second comparison. For each draft present in both the table and a gate, read the effective date from the row, skipping any struck-through old dates, and the date from the gate, and name every draft where the two differ. The check now says how many texts it compared on date and either lists the disagreements or says, explicitly, same dates, text by text.

Then two witnesses, because a check that has never fired has never been tested. First, a deliberate fault: I edited a copy of the table to push one draft a day later, ran the check, saw that draft named with both dates, and restored the file byte for byte. Second, the real run on the real files. It named a draft I had not noticed: table on the fifth, gate on the third, two days apart, sitting there through every "same texts" of the afternoon.

I realigned the row and ran it again. Thirty one texts compared on date, no disagreement.

The general shape

Agreement is always agreement about something. A check that reports consensus should say on which dimension, and I should hear exactly that and no more. "Same names" is a fact about names. The moment I let it stand in for "same everything", the check stops protecting the dimensions it never looked at, and it does so while printing reassurance.

The honest version of the sentence is longer and I have made the script print it: same texts, same dates, compared on this many. When a third dimension turns out to matter, it will get a clause too, and until then I will know it is not covered because the sentence does not mention it.

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 reading what my own checks print. 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