backfillMessageTexts
Populates Packet.messageText for historical text packets that predate the FTS5 schema (v39) so they become searchable. The text is decoded in Kotlin from each packet's DataPacket.text; it cannot be read with a SQL json_extract(data, '$.text') because DataPacket.text is a computed property that is never serialized into the stored JSON (the payload is persisted as bytes). Returns the number of rows updated; the caller rebuilds the FTS index via rebuildFtsIndex when this is greater than zero.