The funded-wallet ViewModel tests only waited for the history row to
appear, but the Merkle proof can complete after sync reports idle. On the
slower Windows runner the assertions on Verified and the spend tests (which
need verified UTXOs) raced it and failed. Wait for the row to be verified.
Avalonia's Dispatch(Func<Task>) returns at the first real await, so the
assertions after it never ran and async ViewModel tests passed vacuously.
UiSession.Run now drives the body to completion while pumping the
dispatcher. The test profile has no checkpoints, since the fake chains use
tiny heights that the real mainnet checkpoints would try to anchor.
ViewModels run on Avalonia.Headless: wizard flows, password and file-lock
handling, seed and private-key reveal gating, contacts, settings, sync and
send against the fake server. The CLI entry point is invoked in-process
end to end. Localization checks cover the 7 languages, placeholders and
keys used in sources. Internal seams (UpdateCheck, ProfileOverride) keep
the tests offline.