The Booyzen Archive
How to read this archive

Method

Every claim here carries a label saying how well it is known. The labels are the point: an archive that presents testimony and documents in the same voice is not a history, it is a story with footnotes.

The five words

All seven of these family archives grade a claim with the same five words, so a level means the same thing wherever you meet it. The word is always printed next to the colour, because a reader should never have to know the palette to know the confidence.

Documented
A record was read, and it says this. The source is named.
Probable
The evidence points one way and nothing found so far points the other. Not proven.
Inferred
Reasoned from what is known — a gap of the right size, a name in the right place — rather than witnessed in a record.
Family
Told, remembered, or written on a family chart. Kept, because discarding it would lose the lead; labelled, because it is not evidence.
Disputed
Two sources disagree and neither has been ruled out. Both are shown.
Not claimed

Some pages carry this instead. It states the thing a reader is likely to assume — the connection that would be tidy, the identification that almost works — and says plainly that this archive does not assert it. An archive is judged as much by what it refuses to say as by what it says.

The five labels

LabelWhat it means
Documented A named source with a reference, and where possible the scan. Most of this archive's documented claims trace to Dutch Reformed Church registers and to Cape and Transvaal probate records, cited by FamilySearch ark.
Inferred A reasoned conclusion drawn from documented facts, with the reasoning written out so it can be overturned. The cousin marriage, the reading of the surname distribution, and the identification of the 1820 Settler are all inferences.
Family lore Told, remembered, not corroborated. Kept because it is precious; labelled because pretending otherwise is how family myths become family history.
Superseded Asserted in the family record, and now displaced by a document that says otherwise.
Disputed Asserted somewhere in the record and contradicted somewhere else in it. Every one is listed. Disputed →

Living people

A living person (80 or younger, with no death recorded) is named with their relationships and their town and country, and nothing more. No date, no record, no source, no note and no photograph; their page is not indexed, carries no structured data and is left out of the sitemap and the search index. The test is the estate's one shared rule: age by year (this year minus the birth year), a death or burial recorded means dead, and a citation from a public record source means the person is not treated as living. A person with no birth year cannot be shown to be 80 or younger; the archive's own statement that someone is living is accepted. Anyone who may be a child (under 18, or undated with a living parent) is not published at all: no page, and no name as anyone's relative.

Because this line reaches the present within three generations of Catherine Mary Sophia Booyzen, a living person is part of the descent: Cheryl Anne Lerena, David Defranceski's mother, and David himself, who is named on the home page with his own places by his own choice. Their siblings and other relatives are not named, and so have no page.

A removal request is honoured within days, without argument and without requiring a reason.

Where this one starts

Unusually well. The Lerena archive began with almost nothing documented. This one begins with a MyHeritage tree of 15,643 people in which the Booyzen line is already carried back seven generations, and in which a large proportion of births, marriages and deaths already carry a FamilySearch citation to an original register.

That changes the job. The work here is not to find the family. It is to test what has been assembled — because a tree that good will be believed, and parts of it are wrong.

So this archive did three things the tree does not do:

  • Listed every contradiction rather than choosing between them silently.
  • Tested the family testimony against outside evidence — surname distribution, Cape Rebel district figures, the 1820 Settler record — instead of repeating it.
  • Named what has not been searched, so the gaps are visible.

A nil return is worth nothing until you show the search works

This is the thing this archive actually does, and until today it was not written down anywhere. It arrived by being wrong six times in a week.

An index that returns nothing is making one of two statements and it does not tell you which. Either the record does not exist, or your search could not have found it. Those are opposite conclusions and they look identical on the screen. So a negative is not publishable until something has been run through the same search that is known to be there — a control — and come back.

The nil returnWhat it actually meant
“148 of 184 — thirty-six not reached” All ten pages had been walked. This archive's own harvesting code required a description longer than three characters and silently dropped every row the index leaves short. A caveat that blamed the source for a hole this archive dug.
A register with no Barrys in it The Name column was blank for a whole class of entry. A filter that drops what it cannot see is indistinguishable from an archive that holds nothing.
BARRY and BURGERSDORP: 6,245 documents More than BARRY alone. NAAIRS treats two keywords as OR unless the operator is sent. A search that returns more than its own first term is not a search.
“LUUS with BOOYZEN returns nothing” It returns nothing from the estate index, which was the only index asked. A marriage transcription holds the marriage. The sentence did not say what had been asked.
No Kolbes, Mountjoys or Sliers in the Cape inventories That index runs from the 1780s to the 1830s and all three families reached the Cape in the nineteenth century. A zero from an index that ends before your people arrive is not a finding.
Nothing older than the 1840s, for weeks Every register in the filmed church collection begins in 1843. The registers themselves go back two centuries. It was the edge of a filming project, and it announced itself nowhere.

So the rule is: run a control, and publish it with the negative. When this archive reported that James Mountjoy is not among the discharge papers at Kew, it published alongside that ninety-five records for his regiment in the same series in a single page of results — because the number that makes the absence meaningful is not his, it is theirs.

The same search also turned up the reason the control mattered. The catalogue indexes the regiment as “21st Dragoons (Light)”, not as the newspaper wrote it and not as this archive had been writing it. One word order between a real record and a nil return.

A search that has not been controlled has not been done. It has only been attempted, and the difference between “searched and not found” and “could not search” is the most important distinction on this site.

Which is why What has been read marks a row void when the search itself was faulty, and blocked when it could not run — and why a build here now refuses if a blocked row does not say what would unblock it. A negative with no control behind it is an opinion with a citation.

Each was a correct answer to a question nobody asked

This one was named on 21 September 2026 by the session keeping the D’Arcy archive, after the two of us had between us produced six of them in a day. It is the rule the controlled negative does not reach, because half of these never returned a nil at all. A test passed. A count came back. A confidence field said exact.

An instrument can be working perfectly and be pointed at something else. What it reports is then true, and about the wrong thing, and it arrives wearing exactly the face of an answer. A nil at least announces itself as bad news worth checking. A confident yes does not.

What it reportedWhat it was actually describing
“345 reordered, zero content changed” A comparison that iterated the dossier dict’s keys — n, slug, mentions, pages, hits — which are identical for every person alive or dead. The reassuring answer was the only answer it could return. 345 dossiers had in fact changed content.
Two byte-identical runs of the generator Both runs read the same built site, and the generator’s input was 81% its own previous output. It proved the disk had not changed between two reads of it. Generate, rebuild, generate moved all 347.
“0 results for Westfalen” Seven of the eleven records on the page were Westphalian. FindMyPast’s place filter is not applied to that collection at all, so the zero described the filter and never touched the data.
Three empty full-text searches HTTP 000 — no connection. The endpoint no longer exists. Three nil returns that described a hostname.
36 map pins stamped exact The confidence field recorded that the lookup succeeded, not that it answered the question. Twenty-one places sat on the geocode for the word “England” — right country, wrong precision, and a wrong-country gate passes it cleanly.
“The stale index passes — we do not have that fault” Written the same day as this section, and caught by it. The row was planted in public/searchindex.json and the check reads dist/searchindex.json, which had not been rebuilt. It was asked about the built copy and told about a change to the source. Planted in the file the check actually reads, it fails at once and names the row.
A gate reporting a clean build It had been run before the row that broke it existed, and on checks that do not touch that schema. A build that did not cover the change is not a build.
A trap built to say how the build died It read $?, which in an exit handler is the status of the last child. Right when the machine reaps the build process; wrong when the signal hits the script itself, where it is whatever finished last. So the instrument built to tell a killed build from a refusing one went silent on the one case it existed for — and it had been watched working, on the other path. The signals are trapped now, not inferred.

The test that catches every one of them is the same, and it is one question: if the thing I am looking for were definitely there, could this instrument have told me? Ask a filter for something already seen with your own eyes on the page in front of you. Ask a comparison to fail on a difference you planted. Ask a generator to survive a rebuild, not a re-read.

None of them is a wrong answer. Each is a correct answer to a question nobody asked.

And one heuristic of this archive’s own did not survive the day. “Three identical failures is a fault; one is the weather” is sound for a machine under load and useless for a bug whose trigger is intermittent and whose mechanism is not. A build failure here was written off that way in the afternoon; it was a missing subshell that could have reported a killed build as build complete, and it had been there all along.

A failure that does not reproduce has not been explained. It has only been survived — and passing next time is evidence about the trigger and none at all about the mechanism.

One last thing, about why any of this got found. Eight of these faults were caught in a single afternoon, and not one was caught by an audit. They were caught because two archives kept describing their own work to each other in enough detail that the other could recognise the shape of a fault it had not gone looking for. Neither was checking the other. A wrong attribution, a comparison that could not fail, a trap that went silent, a stopper that stopped nothing — every one of them surfaced because somebody volunteered it first.

This archive already sets its negatives down at the same length as its finds, on the grounds that a family history publishing only its successes is not a history. The day added a second reason, and it is more selfish than the first: a fault written up as briefly as it is embarrassing is a fault nobody else can recognise in their own work. The length is what makes the shape visible from outside. That is a discipline rather than a courtesy.

And it is why the three tool faults needed somebody else at all. A claim about a family is a claim about the world, and the world can contradict it. A claim about an instrument is a claim about oneself — my filter filtered, my trap trapped, my stopper stopped — and nobody is a disinterested judge of their own competence. So the judgement never gets made, and the claim never reaches a boundary where anything would test it. Somebody describing their own instrument out loud is the cheapest boundary there is.

The second half of that sentence is the D’Arcy session’s, and it is the part that makes the rule usable: it says exactly what the re-run did prove, which is the thing a tired reader will otherwise take for a clean bill of health.

Six of these were found by measurement. The last two were found by checking an instrument against itself — asking the stale-index check about the file it actually reads, and asking the trap about the branch nobody had run. That is the half that generalises, because measurement only ever checks the thing you already doubted.

Which is why every gate added here is verified in both directions — silent on the real data, and made to fail on a fault planted on purpose. A check that has only ever passed has not been shown to be a check.

Ask the index for a relationship, not for a person

Nearly every genealogical search is a search for somebody you can already name. You type Hendrik Stefanus Booijzen, born about 1827, and the index tells you whether it holds him. That works, and it is how most of this archive was built. But it has a hard ceiling: it can only ever confirm what you already suspected. If the person you need was never written down by your family, you cannot type their name, and so you cannot find them.

The search forms will also take a relationship. Leave the forename blank, leave the district blank, and ask instead for any child whose mother's surname was Kolbe. The index then answers a question nobody in the family was in a position to ask.

What you ask forWhat it can returnCeiling
A person
givenName + surname + date
The record of someone you named You must already know the name. Everyone your family forgot stays forgotten.
A relationship
motherSurname, fatherGivenName, spouseSurname
Anyone standing in that relation, including people you could not have named Noisy, and every hit needs separating from the namesakes by hand.

Both results on this page's hardest day came out of that difference. Three person-searches for Elizabetha van der Merwe returned nothing, and the third of them — her son's own baptism — was the best test this archive could devise. One relationship-search on the Barrys returned two children on neither parent's death notice. The difference was not effort or luck. It was which question the form was asked.

The same logic runs underneath three other things this archive did. Reading a marriage register's Remarks column for the Master's estate number is a relationship search done on paper — it indexes from a living remarrying widower to a file about a dead first wife. Reading both parents' death notices rather than one gave a ninth child. Reading a whole surname out of a probate collection, instead of searching it for a person, gave twenty-nine.

The cost is honesty about noise. A relationship search returns the right family mixed with strangers, and it returns the same event indexed twice to two different villages. The two Barry names above are recorded as a lead and not as children, because an index line that fits a gap is not the same as a register that fills it.

What "verified" on the tree does and does not mean

Many people in the source tree carry a tick and a star. Those are MyHeritage interface marks — confirmed Smart Matches and direct-ancestor flags. They are not source citations, and this archive does not treat them as evidence. A Smart Match means another user's tree agrees; it does not mean a register does.

Where this archive says Documented, there is a named record behind it, listed on Sources.

On quotation

The family's own testimony is quoted in full, because it is the family's and because paraphrasing it would smooth away exactly the details that make it testable. A long passage on Kitchener's clearance policy also sits in the source tree, copied there from a published history of the war; that passage is summarised and not reproduced, and its presence is reported as evidence of what the family believed rather than as evidence of what happened to them. The rebels →

The page must not be able to say less than the archive knows

On 17 September 2026 this archive was asked to look for a fault a sibling archive had just had: evidence kept in files keyed to a person, and a build script that never read them, so a person documented several times over got a page saying nothing had been read about them. The same fault was live here, by a different route, and had been for at least three days.

Seventeen people had a page that said “This person is recorded in the archive’s index but is not yet discussed on any page.” Among them the 1820 Settler, whose name the built site carries 155 times; John Barry, 158; George Mountjoy, 140; Petrus Jacobus Booysen, 110; Johanna Catharina Mountjoy, 89.

What went wrong

The gatherer that collects every mention of a person dropped any name that was a strict prefix of a longer person’s name. The rule was written for a good reason — to stop John Barry collecting every mention of John Barry Booyzen — and it was implemented as “delete the shorter man” rather than “let the longer name go first”.

So the moment anybody added George Augustus Kolbe of Wakkerstroom, George Augustus Kolbe stopped existing as far as the build was concerned.

Why it is worth a section

The data was never wrong. Every record, every document, every citation was intact and on disk the whole time. What failed was the machinery between the evidence and the page, and it failed silently and in the safe-sounding direction — the page did not print a falsehood about a document, it printed a falsehood about the archive.

That is the worst kind for a site like this one, whose whole claim is that it says what it has read and what it has not.

The rule that comes out of it. A page may say “nothing is known” only when nothing is known — never because a build step lost it. So the check that now runs on every build does not look for the bug that was found; it looks for the shape of it: a person the index calls undiscussed whose name the built pages plainly carry. Any future gatherer that eats a person trips it, however it eats them. It was verified the only way a gate can be — by putting the bug back and confirming the build refused.

Two thousand four hundred and twenty-eight mentions came back. The correction →

An index is only honest if something checks it against what it indexes

Three days after the last fault, the same shape again, one layer further out. /documents/ builds its own table of contents by matching <h2 id>, so a heading written without one is left out of the contents and has no anchor for anything to link to. Thirty-five had accumulated.

Among them: the 1842 will of a Bond Street tailor; the sworn falsehood in Shoreditch in 1819; the oldest document in this archive; the grave at Burgersdorp; the two 1845 documents that corrected the family tree twice over. Full write-ups of documents, every one, and not one of them listed or linkable.

Nothing was broken. The page rendered perfectly, every section was there to a reader scrolling past, and the link checker was satisfied — no link pointed at a missing anchor, because there were no links to point at them at all. That is the whole difficulty. The fault was an absence, and an absence is invisible from inside the thing that has it. It is the same lesson as the seventeen silent people above, and as the three letters that were out in the world with no work-list row watching for a reply.

The rule this archive now works to: wherever the build derives one thing from another — a contents list from headings, a dossier from pages, a work list from the letters on disk — something must count the two against each other and refuse when they disagree. A derived index that nothing checks will drift, and it will look right the entire time it is doing it.

The gate. checkregisters.py check 13 refuses the build when a page that builds a contents list from its headings carries a heading with no id. Verified in both directions: with all thirty-six ids in place it passes with nothing failing; with two taken out again it names both headings and exits 1.

Sibling archives

Same method, same author: The Defranceski (Istria), The Falco (Arienzo, Campania), The Lerena (Rosario, the Cape, Brisbane). The marriage of Catherine Mary Sophia Booyzen to Nuno Fernando Lerena at Mayfair in 1949 is the hinge between this archive and the Lerena one.