Pre-warm OpenSearch shards + Redis list cache for the active project.
Fire-and-forget: returns {ok:true} immediately while the warmup runs in
the background. Triggered from the frontend right before a session query
is likely (sidebar hover, global search modal mount, RecipientPicker mount,
periodic refresh while on the Sessions page) so the user doesn't pay the
cold-shard penalty on first interaction.