29cfbd61b1
Foundation for audit #4 (cross-device reactivity). Long-lived SSE subscription exposed as a process-wide SharedFlow<LiveEvent>; gated on having a session cookie (opens on sign-in, closes on sign-out). Mirrors flutter_client/lib/shared/live_events_provider.dart in behavior — no client-side timeout (server heartbeats every 15s), no explicit reconnect-with-backoff in v1 (auth transitions re-open). LiveEvent carries kind / userId / data (JsonObject); consumers deserialize the payload per event kind they handle. Force-injected into MinstrelApplication via the same pattern as MutationReplayer / SyncController / ResumeController / PlayEventsReporter so the singleton constructs at app start. okhttp-sse was already on the classpath; no new deps. No consumers yet — LiveEventsDispatcher + per-screen subscribers land in follow-up commits. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>