anEmptyValueIsAValueAndNotAnAbsence

An empty value is a value. Writing one and reading it back must give an empty array, not null — the other half of readOfANeverWrittenKeyIsNull.

This is the one place the two states are told apart, and the backends most likely to conflate them are the file-backed ones, where "the key is present" is spelled as a file existing and a zero-length file is easy to read as nothing at all. A caller that stores an empty buffer and gets null back re-runs whatever expensive recovery the absent case triggers, every start-up, forever.