Skip to the document
Madhuopen lab

§3 Experiments · infra

active13 September 202614 September 2026 · 6 parts

HanuDB, tuned while I slept

A document database improved by an autonomous agent: one change at a time, two benchmark runs, hard gates, keep or discard.

HanuDBRustobject storagebenchmarksnegative results
In one breath145 logged runs. The benchmark score went from 9,046.8 to 40,116.4. The loop kept 74 changes, discarded 27, crashed 3 times, and logged 41 unscored soaks and checks. Several of its findings reversed what a person would assume.

Summary

The rule was simple: the human is asleep; never stop and never ask. A fixed benchmark ran the server inside a container shaped like the smallest free virtual machine — one core, 768 MB — and scored the geometric mean of writes and reads per second. Any change that broke recovery from the bucket, blew the memory limit or cost too many bucket operations scored zero.

Each idea got two runs because identical builds differ by eight per cent. A change was kept only if the mean of both beat the baseline by more than three per cent, or made the code simpler at the same speed. The parts below group every run by what it was trying to fix, with the lessons it left behind — including the ones that went the wrong way.

Benchmark score of each kept experiment — higher is betterscore
010,00020,00030,00040,000experiment 0001: 9,046.8experiment 0002: 9,237.9experiment 0004: 8,895.2experiment 0005: 11,322.5experiment 0006: 12,273.3experiment 0008: 13,496.8experiment 0014: 13,623.2experiment 0016: 13,851.9experiment 0018: 16,113.1experiment 0019: 20,354.5experiment 0021: 22,129.8experiment 0022: 22,912.8experiment 0024: 23,365.8experiment 0025: 26,424.9experiment 0027: 27,031.5experiment 0029: 26,895.2experiment 0030: 26,773.4experiment 0031: 26,579.4experiment 0032: 27,050.8experiment 0033: 27,000experiment 0035: 30,456.2experiment 0037: 32,320.6experiment 0038: 35,169.8experiment 0039: 32,480experiment 0041: 32,744.3experiment 0043: 35,315.9experiment 0046: 36,931.3experiment 0047: 35,009.2experiment 0048: 37,280.7experiment 0053: 37,100.2experiment 0057: 29,123.5experiment 0059: 36,847.8experiment 0060: 36,551.6experiment 0061: 33,114experiment 0064: 36,495.1experiment 0065: 32,930.9experiment 0066: 36,367.6experiment 0068: 36,484.5experiment 0069: 36,401.9experiment 0071: 35,789.3experiment 0073: 34,839.4experiment 0074: 33,135.8experiment 0075: 34,159.6experiment 0076: 29,094.9experiment 0077: 33,874.7experiment 0078: 15,499.3experiment 0079: 34,256.1experiment 0080: 34,256.1experiment 0081: 30,712.7experiment 0082: 34,390.1experiment 0083: 30,984.5experiment 0084: 33,414.5experiment 0085: 32,228.7experiment 0087: 35,081.1experiment 0088: 36,585.2experiment 0091: 40,116.4experiment 0092: 39,656experiment 0094: 34,174experiment 0095: 40,093.5experiment 0096: 35,297experiment 0097: 35,269.5experiment 0098: 35,551.4experiment 0100: 35,235.3experiment 0102: 35,833.6experiment 0104: 34,871.4experiment 0106: 35,682.2experiment 0107: 35,469.4experiment 0108: 35,138.8best 40,116.4 · 009100010108

The protocol, in order