loadDraft
Reads the stored draft for contactKey once per conversation.
SavedStateHandle wins over the database when it holds something, because it can carry keystrokes newer than the last debounced write — the database copy is what makes the draft visible to the conversation list and survive the screen being popped.