perf: preheat API connection at launch to warm DNS/TLS
Fires a fire-and-forget GET to /_health from a detached task in
GrainApp.init(), so DNS + TCP + TLS handshake runs in parallel with
the ~580ms UIKit launch window. By the time the real XRPC calls
fire, the connection pool to grain.social is already warm.
Measured impact on cold-network cold launch: ~150-200ms off TFP.
The ConnectionPreheat signpost interval shows how cold the handshake
was (500-650ms observed on cold runs, ~100ms when already warm).
authored by