hasSeed

suspend fun hasSeed(): Boolean

Whether a valid encrypted seed has been persisted.

Checks size, not just existence: a 0-byte or truncated kuira_seed.bin (seen in the field after interrupted writes / recovery churn) must read as "no seed", otherwise it traps the caller forever — loadSeed would throw CorruptedSeedException and WalletSeedSource.acceptPreDerivedSeed would take its "already populated" branch and never re-derive from the PRF entropy it holds. Treating a malformed file as absent lets the bootstrap self-heal (it re-stores, and the atomic write overwrites the junk file).

Performs file I/O — must be called from a coroutine.