(2026-10-02 release-readiness audit, agent-filed)
The heap is append-only; Heap::reclaim only truncates the unreferenced tail at boot (crates/didbot-pds/src/heap.rs:478-502), and checkpoint/trim shrink only the WAL. The config concedes the heap "grows with every record written" with no [capacity] key for it (crates/didbot-config/src/sections.rs:170-177). Create/delete churn accumulates dead bodies across restart cycles until the volume fills; the heap then seals the deployment to serving reads only, and no restart shrinks it.
Either compact the heap (rewrite live bodies) or give it a budget key with the same loud refusal the WAL has.
Disk numbers from a 10x pass on loopback (73ddde8): each record write costs about 885 B of WAL (trimmed at checkpoint), 190–280 B of heap (never reclaimed) and 258 B of
writes.log(kept 30 days). That is about 1.35 KB logical and 3.6 KB of device writes. Under the floor's 16,000 writes a day the heap grows about 5 MB a day, so the 20 GB volume lasts 1–2 years. With the floor lifted and 270 writes/s sustained it would be about 12 GB a day, so about 1.5 days. Not urgent while the floor holds, but compaction is what bounds it.