Skip to content
Kempton Watch Tip

Posts

Rufus, the Watchdog Who Reads the News

Showing the Working, part 5: the one who keeps the record current, every two hours, and what he is not allowed to do.

By Piet Speurder · · updated · 11 min read

About how it's builtpipelineRufusseriessources

Every two hours, day and night, something reads every public report about this case and updates the record. Meet Rufus: how he came about, where he goes, the one rule he cannot break, the mistakes he has made, and the leash that keeps him honest.

Ink drawing of a boerboel sitting beside a tied stack of folded newspapers.

Kempton Watch

This is the fifth post about how the site was built. The first four were about what it refuses to publish, how it holds up when a crowd arrives, what it cost, and who is behind it. This one is about the part that never sleeps, and how it came to exist at all.

How Rufus came about

I did not set out to build a watchdog. In September I was following the news from Kempton Park the way most people were, one article at a time, and losing track. Which woman was the eighth? Which paper had the date right? Was the count twelve or thirteen? I had the tools to do something about that, and the time, and I wanted to put them to something worth doing rather than another toy.

So the first thing I built was a reader: something that would fetch every report, keep the sentence behind every fact, and tell me what had changed since yesterday. That reader is Rufus. He was for me at first. Then it became clear that keeping up was not enough. The most useful thing one person far away could do was to keep a careful record in public: the women remembered by name where their names are known, the facts kept straight while the attention lasts, and nothing added that the reporting does not say. The site grew up around the dog.

Readers now ask me how it stays current. The figures say "as of" a date, the changelog says what arrived this week, and the answer to "who does that?" is still the dog.

Ink drawing of Rufus, a boerboel, bounding through a grassy field with a folded newspaper in his mouth.
Kempton Watch

Meet Rufus

Rufus is a watchdog I trained. He is diligent, he is tireless, and he is not clever in the way people are clever. He is clever in the way a good dog is: he does one job, he does it the same way every time, and he does not get bored.

His job is to read. Every two hours, day and night, he goes out, finds everything new that has been published in public about the women found dead in Ekurhuleni, brings it home, and fills in the record. He is not a detective. He is not police. He has never seen a tip. He is a reader with a very good memory and a short list of rules.

He is also software, of course. But the dog is the easier way to explain what he does and, more to the point, what he does not do.

Where he goes on his rounds

Rufus has seventeen places he visits. Seven are the news feeds of outlets that cover Gauteng. Seven are news searches for words like "Kempton Park", "Ekurhuleni" and "Tembisa" next to words like "body" and "woman". One is the government's own page of media statements, which is where the police put theirs. Two are archive listings of a local paper's crime pages, for the days before the record existed.

He does not pick up everything he sees. An article comes home only if it has a place word, a crime word and a woman in it. A story about a woman's body found in another province stays where it is. Of the thousands of items that pass under his nose, he has brought home 207 articles from 38 outlets since the record began, which is about ten a day in a busy week, and some days none.

Everything he brings home is kept exactly as he found it, the page and its text, and he sends a copy to the Wayback Machine so that if the outlet takes the page down, the sentence the record relies on is still there to check.

flowchart LR
    A[Find: 17 feeds, searches and lists] --> B[Read: fill in the form, one article at a time]
    B --> C[Match: the same woman across outlets]
    C --> D[Draw: the register, the map, the conflicts]
    D --> E[Hand over: checked at the door, checked again on arrival]

The form he fills in

Here is the part that makes the record trustworthy, and it is a rule, not a feature.

For each article Rufus has a form: the date a body was found, the place, who said what and in what role, and a dozen more boxes like them. The reading is done by an AI model; the form is mine.

The rule is this: every answer must come with the exact sentence from the article that says so. Not a summary. Not "the article implies". The sentence, copied word for word. If there is no sentence, there is no answer, and the box stays empty.

Here is one answer, as it sits in the record today:

Date found: 17 September 2026. "9. Jabulile Ntimba found in Dawn park on 17 September 2026" — SAPS statement, gov.za

That sentence, numbering and all, is the whole reason the record can say 17 September. And because Rufus kept the page, the record checks it again every two hours: if the sentence is not in the archived text, the answer is thrown out. He cannot remember a thing he cannot show.

One more rule on the form. The model gets only the article. No outside knowledge, no other articles, no memory of yesterday. "On Saturday" is turned into a date using the article's own date and nothing else. If an article calls a woman "the latest" and never says when she was found, the date stays empty. Rufus does not guess.

Ink drawing of Rufus lying on a wooden floor by a sunlit window, beside a tied stack of newspapers and a sheet of paper.
Kempton Watch

Sniffing out the same woman in ten papers

Ten outlets report one body, so Rufus has ten forms that may or may not be about the same woman. He matches them the way you would: the same date, the same place, the same surname. Wire copy that five outlets printed word for word counts once, not five times. Then the record decides how sure it is. A value is confirmed when an official source states it, or when two independent on-the-ground outlets agree. Otherwise it is reported. That is the whole difference between the two words on the site.

And when outlets disagree, Rufus does not pick. He puts every version on the table with its quotes, and the record shows all of them. Here is a real one, from the conflicts list:

Found Outlets One of the sentences
12 September 17, including the SAPS statement, News24 and TimesLIVE "The latest body was discovered on Saturday evening, September 12…" (Channel Africa)
13 September 2: SABC, and eNCA, which printed both dates "Police have confirmed that the fourth body found in Kempton Park on Sunday is that of Moselakgomo." (eNCA)

If that is ever settled, a person settles it, in writing, with a reason that is kept. Until then the record shows both and does not quietly round it off. On the victim's page you can see the disagreement marked.

Where Rufus lives now

Until 8 October Rufus lived on a laptop. A laptop sleeps. It gets closed, it travels, it runs out of battery in a bag, and every time it did, the record went quiet until it woke. You could see the gaps in the changelog.

On 8 October he moved to a small rented server in Frankfurt, the same city the site itself runs from, because it is the nearest place on offer to Gauteng. It is awake all the time. If it reboots, he catches up the run he missed. Every night a copy of everything he has gathered is kept apart from the machine, so a bad day on one disk loses nothing.

Moving taught me something I had not seen from the laptop. A few news sites keep their front door shut to anything that is not a person's browser. From home they opened; from a server they do not. For those, Rufus asks the Wayback Machine to fetch the page for him and reads the copy. It is slower, and it depends on the archive being awake, but it means a local paper's reporting still reaches the record.

His snacks

Rufus eats two things: sources and tokens. Sources are the outlets above, and the list is public on the sources page, with the tier each one is given. Tokens are the small fee the model's maker charges for reading, a few cents an article; the bill for keeping him fed sits inside the band I gave in The Bill, Itemised. When the form changes, or the model that reads for him, he re-reads every article once: a month of snacks in an hour, and since 8 October only when a person says so.

Ink drawing of Rufus sitting by a closed wooden door at night, a bowl of biscuits at his feet and a newspaper on the floor behind him.
Kempton Watch

His flaws

Rufus is a dog, not an oracle, and I keep a list. Five: four from the audit of the record in October and one from the day he moved, each caught by a check or by a person, each fixed in the changelog:

  1. He read the day a newspaper published its article as the day a body was found. The form now says, in so many words, that an article's own date is never a discovery date.
  2. He put one woman in Dawn Park because a sentence about another woman, found there on 17 September, sat in the same article. A person corrected it, and the record now guards that row.
  3. He counted one wire story twice because two outlets printed it under their own names. He now reads bylines, and an agency story is one source however many papers carry it.
  4. He kept two rows for one woman because two papers described her discovery differently. He flagged it himself as a possible duplicate; it took a person to merge them, in writing, with the reason kept.
  5. On the day he moved to the server, I changed the model that reads for him. He re-read every article, and the new reading folded two women into one row and added a third row for a woman who does not exist. It was on the site for a few hours before the record's own audit caught it, and it took an evening to put right. The rule that came out of it is below.

None of these was hidden. The site showed a wrong suburb for a time, and said so when it changed. That is the deal the record makes: it will be wrong sometimes, and it will show you when it was.

His leash

What Rufus may not do matters more than what he may.

He never reads tips. The tip inbox is a different room with a different lock, and he has no key. He never reads social media: no WhatsApp, no Facebook, no comments. He never follows a person, never records a home or a workplace or a last-seen address. Places in the record are where a body was found, at suburb level, and the map is drawn from the suburb name alone. He never names a suspect; suspects are described as the outlets describe them, and named only if a court has named them. He never names a woman an official or an on-the-ground outlet has not named, and he never shows a photo a person has not looked at first.

Then there is the door. Before anything he has gathered leaves the house for the site, it is checked against a list of things that must not be in it: suspect names, withheld names, street addresses. If the check fails, nothing goes out, and I get told. The site checks it again on arrival, with the same list, because two locks are cheaper than one mistake.

And since that evening, two things stop him on their own. If he finds more than a couple of dozen articles to read at once, which only happens when his form or his model has changed, he reads none of them and waits for me. If his matching would turn two rows into one, or add a row that might be a woman already on the list, nothing goes out until a person has looked. A late record is a smaller harm than a wrong one.

Every two hours he leaves a note. What arrived, what changed, what he could not reach. The Monday email is built from those notes, and an AI assistant connected to the record can read them one by one (how to connect). The "FAILED fetch" lines are his, and he writes them down every time.

NEW statement 2026-09-21 SAPS: Cause of death and injuries of Jabulile Ntimba
MERGED #14 and #15 into #13 found 2026-09-28 (Tembisa)
FAILED fetch: moneyweb.co.za

That is Rufus. Not clever, not tired, not allowed off the leash. He reads what is public, keeps the sentence behind every answer, and tells you when he got it wrong.

— Piet


Showing the Working — how this site was built: What This Site Refuses to Publish · Built for the Worst Day · The Bill, Itemised · Don't Trust Me. Check the Record. · Rufus, the Watchdog Who Reads the News

Written by the people who keep this record, under its rules: names only as published by officials or on-the-ground or wire outlets, suspects described and never named, locations at suburb precision. Corrections to hello@kempton.watch.