Skip to main content
Mercury Local
Dispatches

The site checks itself every night

We Built Our Own, No. 10. Dozens of watchdogs. The first run found six problems nobody knew about.

PC
Peter Cellino· Publisher, The Charlotte Mercury
||3 min read
Series card No. 10: The site checks itself every night. Over a screenshot of the platform (cltmercury com about).

Every night at 7:15, before anyone reads the morning brief, the platform runs every check it knows and writes down what it found. The first time it ran, on July 31, it found six problems nobody knew about. Today it runs 61 checks. This is the piece about a system that watches itself.

What we had before

We had the checks. Twenty of them, each a small question the database could answer: is there a published story with no source links, a person profile with no publication, a beat file (the standing research file each coverage area keeps) whose header is older than its content, a category that belongs to the wrong publication. Good questions. Nobody was asking them on a schedule. Eighteen scheduled jobs ran feeds and publishing and ingestion; not one ran a check. They only ran when someone remembered the Sunday review, and the notes record the Sunday it was skipped. Everything we had found wrong that year, we had found by happening to look.

What we built

A runner that discovers every check on its own. It looks for any function in the database whose name starts with "check," that takes no arguments and returns rows, and it runs all of them, every night, and records the count, how long it took, and a three-row sample of what it flagged so a number is actionable without re-running anything. Write a new check and it is scheduled from the next night. There is no list to maintain, on purpose, because a hand-maintained list is the thing that always drifts on this platform.

The results accumulate, so for the first time we can ask when something broke, not just whether it is broken now. And the board reports on movement, not level. A check that flags the same 133 old images every night becomes furniture; nobody reads furniture. So each check can carry an accepted baseline, set only by a named person with a written reason of twenty characters or more, and the board alerts when a count goes above it. Accepting a backlog is a decision with a name on it, not a way to silence noise.

The first night

Six live problems: 133 feature images off the house ratio, 21 beat files with frozen headers, 6 gaps in the fact ledger (the record of sourced claims behind each article) against a documented baseline of 2, 5 sponsorship placements with no commercial record behind them, 2 roster conflicts between the newsroom desk and the beat files, 1 unprocessed source. None of them was known. All of them had been findable for weeks.

That is the argument for the whole thing in one paragraph. The manual process had not found them. The automated one found them on its first run.

What it feeds

The morning brief reads the board and reports one line per check that is over its baseline, in plain English, with an example. It says nothing when everything is clean, because a green line every morning teaches a reader to skip the section. A check that errors is reported first and loudest, because a broken guard is worse than a flagged one: it looks like silence.

Since July the board has grown from 20 checks to 61. Each new one was written the day a failure earned it: the day a sports record was hand-tallied wrong, the day a planning row said "overdue" a week after the piece had published, the day a source document sat unprocessed with nobody noticing. The rule is that a failure is not closed until the check that would catch it next time is on the board.

Why a newsroom should want this

Because a newsroom's failures are quiet. A wrong date, a stale roster, a page nobody linked. Nothing crashes. The reader just gets something slightly wrong and trusts you slightly less. A system that asks the sixty-one questions every night, and tells you only when the answer has changed, is the closest thing I have found to institutional memory that does not depend on a person remembering to look.

This is No. 10 in We Built Our Own. Previous: Half a second, found in the layout. Next: Backups we can prove.

Topics: AI & Agentic · Platform Thesis

PC
Peter Cellino

Publisher, The Charlotte Mercury

Peter Cellino is the publisher of The Charlotte Mercury and founder of Mercury Local, the platform that runs it. He writes on agentic AI, platform economics, and the future of independent local journalism.

More on Mercury Local

More in Dispatches