What this is
A decision recorded on 2026-07-10 — flip KV disk-offload from default-on to
opt-in — was never carried out. Surfaced while writing the #656 cold-tier
observability tests: a test that omitted --disk-offload got a server with
the tier on, which is what made its premise fail.
Filing it so it lives in the tracker rather than only in a working note.
I am not proposing to flip anything here; a durability default is a call for
a human to make deliberately.
Verified state (2026-08-22, against HEAD)
src/config.rs:438
#[arg(long = "disk-offload", default_value = "enable")]
pub disk_offload: String,
docs/configuration.md:153
| `--disk-offload` | `enable` | Enable disk offload (RAM → mmap → NVMe) |
Code and docs agree with each other — both still say enable. The only
loom models in the tree are tests/loom_response_slot.rs and
tests/loom_wal_sync_agent.rs; neither covers the offload reconciliation
invariant. There is no proptest dependency.
So all three steps of the original plan are outstanding:
- flip the
--disk-offload default "enable" → "disable"
- add a property/loom-style test proving the hot/cold/WAL reconciliation
invariant (no DEL-resurrection, no expired-cold leak) — not just the
existing example-based crash tests
- update CHANGELOG +
docs/configuration.md
The original reasoning, restated
Disk-offload is a two-source-of-truth durability path. WAL/AOF is the hot
tier's authority; the cold .mpf KvLeafPage DataFiles plus the manifest are
independently self-durable and recovered on their own (see
tests/crash_recovery_disk_offload_no_aof.rs). This is not a double-write
conflict with the WAL — the risk is reconciliation. Recovery order is
Phase 3 (rebuild cold_index from the manifest) then Phase 4 (WAL replay on
top, hot shadowing cold).
Every bug found in that seam so far has been silent data-loss class, and
every one was caught by soak or adversarial review rather than by a proof:
Default-on plus that history is the combination the decision was reacting to.
It also sits oddly against the deliberately conservative vector-COLD posture,
where DiskANN COLD ships as a stub valve by default with the real engine gated.
Note on step 2
Step 2 is the one with standalone value regardless of what happens to the
default. Every bug above was found by example; none of them by a proof that
the reconciliation invariant holds. A property test would be worth having even
if the default never moves.
Related
#656 (cold-tier observability — how this surfaced), #212, #213, #459.
What this is
A decision recorded on 2026-07-10 — flip KV disk-offload from default-on to
opt-in — was never carried out. Surfaced while writing the #656 cold-tier
observability tests: a test that omitted
--disk-offloadgot a server withthe tier on, which is what made its premise fail.
Filing it so it lives in the tracker rather than only in a working note.
I am not proposing to flip anything here; a durability default is a call for
a human to make deliberately.
Verified state (2026-08-22, against HEAD)
Code and docs agree with each other — both still say
enable. The onlyloom models in the tree are
tests/loom_response_slot.rsandtests/loom_wal_sync_agent.rs; neither covers the offload reconciliationinvariant. There is no
proptestdependency.So all three steps of the original plan are outstanding:
--disk-offloaddefault"enable"→"disable"invariant (no DEL-resurrection, no expired-cold leak) — not just the
existing example-based crash tests
docs/configuration.mdThe original reasoning, restated
Disk-offload is a two-source-of-truth durability path. WAL/AOF is the hot
tier's authority; the cold
.mpfKvLeafPageDataFiles plus the manifest areindependently self-durable and recovered on their own (see
tests/crash_recovery_disk_offload_no_aof.rs). This is not a double-writeconflict with the WAL — the risk is reconciliation. Recovery order is
Phase 3 (rebuild
cold_indexfrom the manifest) then Phase 4 (WAL replay ontop, hot shadowing cold).
Every bug found in that seam so far has been silent data-loss class, and
every one was caught by soak or adversarial review rather than by a proof:
Default-on plus that history is the combination the decision was reacting to.
It also sits oddly against the deliberately conservative vector-COLD posture,
where DiskANN COLD ships as a stub valve by default with the real engine gated.
Note on step 2
Step 2 is the one with standalone value regardless of what happens to the
default. Every bug above was found by example; none of them by a proof that
the reconciliation invariant holds. A property test would be worth having even
if the default never moves.
Related
#656 (cold-tier observability — how this surfaced), #212, #213, #459.