diff --git a/src/modules/Elsa.Studio.Workflows.Tests/WorkflowInstanceDesignerDisconnectRefreshTests.cs b/src/modules/Elsa.Studio.Workflows.Tests/WorkflowInstanceDesignerDisconnectRefreshTests.cs
new file mode 100644
index 000000000..a7569acd6
--- /dev/null
+++ b/src/modules/Elsa.Studio.Workflows.Tests/WorkflowInstanceDesignerDisconnectRefreshTests.cs
@@ -0,0 +1,792 @@
+using System.Diagnostics;
+using System.Reflection;
+using System.Text.Json.Nodes;
+using Bunit;
+using Elsa.Api.Client.Resources.ActivityExecutions.Models;
+using Elsa.Api.Client.Resources.Resilience.Models;
+using Elsa.Api.Client.Resources.WorkflowInstances.Enums;
+using Elsa.Api.Client.Resources.WorkflowInstances.Models;
+using Elsa.Api.Client.Shared.Models;
+using Elsa.Studio.Contracts;
+using Elsa.Studio.DomInterop.Contracts;
+using Elsa.Studio.Localization;
+using Elsa.Studio.Workflows.Components.WorkflowInstanceViewer.Components;
+using Elsa.Studio.Workflows.Contracts;
+using Elsa.Studio.Workflows.Domain.Contracts;
+using Elsa.Studio.Workflows.Models;
+using Elsa.Studio.Workflows.Shared.Components;
+using Elsa.Studio.Workflows.UI.Contracts;
+using Microsoft.AspNetCore.Components.Rendering;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Localization;
+using Microsoft.JSInterop;
+using Xunit;
+
+namespace Elsa.Studio.Workflows.Tests;
+
+///
+/// Pins that 's periodic activity-state refresh timer stops
+/// quietly instead of crashing the process when the Blazor circuit it belongs to disconnects
+/// (see https://github.com/elsa-workflows/elsa-studio/issues/743).
+///
+public sealed class WorkflowInstanceDesignerDisconnectRefreshTests : BunitContext, IAsyncLifetime
+{
+ public WorkflowInstanceDesignerDisconnectRefreshTests()
+ {
+ JSInterop.Mode = JSRuntimeMode.Loose;
+ Services.AddSingleton(new TestLocalizer());
+ Services.AddSingleton(new ActivityRegistryStub());
+ Services.AddSingleton(new RemoteFeatureProviderStub());
+ Services.AddSingleton(DispatchProxy.Create());
+ Services.AddSingleton(DispatchProxy.Create());
+ Services.AddSingleton(DispatchProxy.Create());
+ Services.AddSingleton(DispatchProxy.Create());
+ Services.AddSingleton(DispatchProxy.Create());
+ Services.AddSingleton(DispatchProxy.Create());
+ }
+
+ Task IAsyncLifetime.InitializeAsync() => Task.CompletedTask;
+ async Task IAsyncLifetime.DisposeAsync() => await base.DisposeAsync();
+
+ [Fact]
+ public async Task RefreshTickAfterDisposalDoesNotThrowOrCallActivityExecutionService()
+ {
+ var activityExecutionService = new RecordingActivityExecutionService();
+ var cut = RenderDesigner(activityExecutionService);
+ SetLastActivityExecution(cut.Instance, "node-1");
+
+ await ((IAsyncDisposable)cut.Instance).DisposeAsync();
+
+ var exception = await Record.ExceptionAsync(() => InvokeRefreshTimerTickAsync(cut.Instance, "exec-1"));
+
+ Assert.Null(exception);
+ Assert.Equal(0, activityExecutionService.ListSummariesCallCount);
+ }
+
+ public static IEnumerable