snapshotWithEmptyState_isStillASnapshot
An empty application state is a real snapshot, not an absent one.
Every snapshot above carries one to three bytes, so the suite never distinguished "no snapshot" from "a snapshot of nothing" — and the encoding that conflates them is the ordinary one: a BLOB column whose empty value is written as NULL, a key-value store that treats a zero-length value as a delete, a JSON field omitted when empty. loadSnapshot() then returns null, which the engine reads as no snapshot at all: it restores snapshotIndex = 0 and looks for a log starting at index 1 that compaction already discarded, so start-up fails the contiguity check (CorruptDurableStateException) if it is lucky and silently mis-resolves membership if it is not.
byteArrayOf() is reachable: the application's snapshotProvider returns whatever bytes the state serialises to, and a state machine whose state is empty at the cut serialises to none. The config is non-null here for the same reason — it is the field most likely to be lost along with the state under a "the row is empty, drop it" encoding.
The rig is a single byte, and the setting that switches this property off is one keystroke away. Give the state one byte and this becomes a slightly wordier snapshotAtZeroBaseline_roundTrips that goes green against the very adapter it exists to catch — the drift shape that has recurred repeatedly in this tree. So the emptiness is asserted rather than merely written: the arm below is near-tautological against the literal on the line above it, and that is exactly its job.