Dev.to AI 🤖 Ai 👁 0 📖 3 min read

Green Checks, Frozen Homepage. Your Site Can Be Serving Last Week While Every Monitor Says Fine.

For four days this week, my company's homepage showed the news as it stood on Monday. New entries were being published the whole time. The API returned them. The detail pages worked. The deployment was healthy. The only

For four days this week, my company's homepage showed the news as it stood on Monday. New entries were being published the whole time. The API returned them. The detail pages worked. The deployment was healthy. The only thing wrong was the thing visitors actually see: the public list and the feed were being served from old static files that sat in front of the dynamic routes, quietly shadowing everything new. Every check we ran was green, because every check we ran was pointed at a layer underneath the problem.

Here is the uncomfortable anatomy of it. The publishing pipeline worked end to end: entries were written, reviewed, and marked published. The data layer worked: query the entries API and you got the current set, sixteen rows, correct order. The artifact layer worked: the feed generator produced thirty current items. What did not work was the last meter. Inside the deployment, static files for the list page and the feed still existed from an earlier era, and the platform served those files instead of the dynamic routes behind them. Static wins over dynamic. Nobody had told the static files to retire, so they kept doing their job — serving Monday, perfectly, with a 200 status.

And the fix, when it was finally written, sat waiting for three days. Not because it was wrong, but because it had a hard prerequisite nobody owned: before the static files could be removed, their ten legacy entries had to be migrated into the entry store, or the list would go empty the moment the shadow lifted. A correct fix with an unowned prerequisite is not a fix in progress. It is a frozen homepage with extra steps.

Green is a property of the layer you checked

We love aggregate health signals because they compress a system into one reassuring color. But a deployment being READY proves the platform accepted your files. An API returning 200 proves the data layer answers. Neither says anything about which bytes a first-time visitor receives, or how old those bytes are. Freshness is not implied by health. It is a separate property, of a separate layer, and it fails silently precisely because every layer below it is fine — there is no error anywhere to alert on. The system is not broken. It is faithfully serving the wrong thing.

The second failure was quieter. When the shadow finally lifted, the feed URL returned 404 — a rewrite pointed at an intermediate endpoint, and the platform does not chain rewrites, so the request died between two correct-looking rules. Again: each rule, read alone, was right. The composition was wrong. Layer-by-layer correctness, system-level falsehood.

The probe has to stand where the visitor stands

The rule I took from this week is simple to state and annoying to practice: for anything public, the acceptance check must fetch the public surface, as a visitor, and assert on its content's age — not its status. A list page that returns 200 with a newest item four days old is a failing page wearing a passing costume. So the check is now embarrassingly literal: open the public list, read the date of the top item, compare it against the newest published entry. Open the feed, count the items, compare. If the numbers disagree, the site is down in the only sense a visitor cares about, whatever the monitors say.

Two honest limits. First, this is not an argument against static files or caching — the same week, an immutable-cache rule taught us the mirror lesson, that a changed stylesheet under an unchanged name is invisible to returning visitors for a year. Static layers are fast and good. They are also where freshness goes to die, so they need an owner and a retirement plan, not just a deploy. Second, none of this required more people. A one-person company cannot staff a watch rotation. It can only refuse to let "published" and "deployed" and "green" impersonate the one word that matters: visible.

So here is the test I now apply to every launch and every fix, including my own team's: do not show me the pipeline. Show me the page a stranger gets, and tell me how old it is. If you cannot date the bytes the public is reading, you do not have a healthy website. You have a healthy system, serving last week, at full speed, with every light green.

— Jiahui Miao, founder of vertciti, building a personal AI operating system for one.

📰 Read the original article on Dev.to AI

Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.