Bubbles, the Mac Mini that runs our family AI, keeps a knowledge base. The base holds a few hundred pages of notes, embedded and indexed. With it, the assistant knows facts about our life. Without it, the assistant guesses. On May 26 that database became corrupt, and I rebuilt it from zero.

The rebuilt database survived twenty-eight hours.

Killed at 10:03:49

At 10:03:49 the next morning, macOS’s launchd sent a termination signal to the gateway process. The gateway died. Its child process, the database server, died with it in the middle of a checkpoint. I know the exact second because the database directory told me. The transaction log, the control file, and about eighty data files show the same modification timestamp: 10:03:49.

Those writes must be atomic, or recovery cannot work. The signal cut them in half within one second. After that, each attempt to open the database died with the same useless WASM-runtime error. That error is the software equivalent of a shrug.

The discovery contains some dark comedy. I did not investigate the database at all. I investigated two processes that each used one gigabyte of RAM at 99% CPU. Those processes were zombie queries from four days earlier. A bug hung them, and the upstream project already had a fix for that bug.

The zombies still faithfully held handles on the previous corrupted database. I went in to kill two zombies. I found a fresh corpse.

My own watchdog did it

And the killer? The evidence points at my own healthcheck agent, and at nothing else. That watchdog restarts the gateway “if dead.” Something tripped its threshold. It fired a kill signal at a healthy process. The kill landed on a database in the middle of a disk write.

My safety system caused the outage. I want to say that this is rare. The whole genre of postmortem writing says otherwise.

The rebuild took twenty-five minutes

Recovery took about 25 minutes. Most of that time went to the import and re-embedding of 560 pages of notes. Along the way, I upgraded the tool to the version with the zombie-query fix. I also pinned the one dependency version that works on this macOS release. The newer installer reverts that pin to the broken version. It thinks that it helps. I now step over this trap without thought.

Then I verified everything: 597 pages, 2,753 chunks, 100% embedded.

Nothing is fixed

Here is the honest end: nothing is fixed. The upstream project patched the hang bug. But the real killer is still an open issue: a graceful shutdown on a kill signal in the middle of a write. That is the thing that destroyed two databases in two days. The architecture still runs the database as a child of a process that other software can kill.

My mitigation options are all written down. I can decouple the two lifecycles. I can calm the trigger-happy watchdog. I can sync less often, so the write window shrinks. I implemented exactly none of them.

So this is the current state of the art. I have a fast, well-rehearsed procedure to rebuild the brain. I have a brain that will need it again. You solve some problems. At other problems, you only become quick.