First, a missing file means two things
Observed
On open, snapshot.json is not on disk.
New database. Nothing written yet. Start empty, report success.
The data exists, in the other snapshot format. Starting empty discards all of it.
Cost. The loader picked World A unconditionally. My own deployment guide told
operators to roll back with GRAPHDB_STORAGE_MODE=json, which walks them
straight into World B - an empty database, reported as a clean start.
step 1, mmap close: [snapshot.mmap (904B) wal/wal.log (0B)] step 2, json mode sees 0 nodes <- 3 nodes went in step 3, json close: [snapshot.json (452B) snapshot.mmap (904B) wal/wal.log (0B)] step 4, mmap mode sees 3 nodes <- the node from step 3 is gone
The asymmetry is the tell. mmap mode does check for the other format and falls back, so a legacy database migrates upward fine. The JSON path never looked. One direction distinguishes the two worlds and the other does not.