a8278f65d0
Adds SiteAlarmStreamEndToEndTests wiring the whole feature pipe with only the gRPC HTTP/2 transport mocked: real SiteStreamManager.SubscribeSiteAlarms → real SiteStreamGrpcServer.SubscribeSite → real StreamRelayActor → proto → wire round-trip (ToByteArray/ParseFrom) → real SiteStreamGrpcClient.ConvertToAlarmEvent → real SiteAlarmAggregatorActor cache. Closes the cross-cutting gap the per-task T1–T6 unit tests leave (each mocks its neighbour): proves AlarmKey identity (instance, name, sourceRef) + full native enrichment survive every boundary mapping, attributes and placeholder rows are dropped end-to-end, the single site-wide stream carries alarms for multiple instances (no per-instance filter), and a snapshot-seed row and a live delta for the same native alarm — both mapped through the real pipe — collapse onto one cache row. Claude-Session: https://claude.ai/code/session_01MtdgwpEeCUn6cUA5f1LMPj