namespace AutomationBLL.Run; // Abstraction over the SignalR hub push (AutomationRunHub lives in AutomationSL — BLL must stay // free of ASP.NET types). Concrete implementation: AutomationSL/Hubs/AutomationRunNotifier.cs, // wrapping IHubContext. Registered explicitly as a // singleton in AutomationModule.Register() — mirrors GB5Framework's IGopHubNotifier/GopHubNotifier // split exactly (FrameworkBLL/GOP/IGopHubNotifier.cs). // // Every method must never throw — push failures are non-fatal to the underlying run operation; // implementations log and swallow. public interface IAutomationRunNotifier { Task PushLogAppended(long runId, string logLevel, string message, CancellationToken ct = default); Task PushRunStarted(int tenantId, long runId, string triggeredBy, CancellationToken ct = default); Task PushRunCompleted(int tenantId, long runId, string status, string? summary, CancellationToken ct = default); Task PushRunFailed(int tenantId, long runId, string? errorMessage, CancellationToken ct = default); }