Grpc.Core doesn't reliably fire CancellationToken on client disconnect, so Subscribe RPCs can hang forever and leak session subscriptions. Bridge SessionManager scavenging to SubscriptionManager cleanup, and add a 30-second periodic session validity check in the Subscribe loop so stale streams exit within 30s of session scavenge rather than hanging until process restart. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>