diff --git a/tests/ZB.MOM.WW.ScadaBridge.DeploymentManager.Tests/DeploymentServiceFailurePathTests.cs b/tests/ZB.MOM.WW.ScadaBridge.DeploymentManager.Tests/DeploymentServiceFailurePathTests.cs
new file mode 100644
index 00000000..bd8f06aa
--- /dev/null
+++ b/tests/ZB.MOM.WW.ScadaBridge.DeploymentManager.Tests/DeploymentServiceFailurePathTests.cs
@@ -0,0 +1,291 @@
+using Akka.Actor;
+using Akka.TestKit.Xunit2;
+using Microsoft.Extensions.Logging.Abstractions;
+using Microsoft.Extensions.Options;
+using NSubstitute;
+using ZB.MOM.WW.ScadaBridge.Commons.Entities.Deployment;
+using ZB.MOM.WW.ScadaBridge.Commons.Entities.Instances;
+using ZB.MOM.WW.ScadaBridge.Commons.Entities.Sites;
+using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Repositories;
+using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Services;
+using ZB.MOM.WW.ScadaBridge.Commons.Messages.Deployment;
+using ZB.MOM.WW.ScadaBridge.Commons.Messages.Lifecycle;
+using ZB.MOM.WW.ScadaBridge.Commons.Types;
+using ZB.MOM.WW.ScadaBridge.Commons.Types.Enums;
+using ZB.MOM.WW.ScadaBridge.Commons.Types.Flattening;
+using ZB.MOM.WW.ScadaBridge.Communication;
+using ZB.MOM.WW.ScadaBridge.TemplateEngine.Flattening;
+
+namespace ZB.MOM.WW.ScadaBridge.DeploymentManager.Tests;
+
+///
+/// Gitea #73: branches the existing suites leave untested —
+/// a site that answers but REFUSES (as opposed to timing out or throwing), the query-before-
+/// redeploy trigger for a non-timeout failure, and the detach-and-retry-once recovery of the
+/// Failed-status write. Each one decides an instance's or a deployment record's state.
+///
+public class DeploymentServiceFailurePathTests : TestKit
+{
+ private readonly IDeploymentManagerRepository _repo = Substitute.For();
+ private readonly IFlatteningPipeline _pipeline = Substitute.For();
+ private readonly IAuditService _audit = Substitute.For();
+
+ ///
+ /// Stand-in central communication actor: answers each site-bound message with whatever
+ /// reply returns for it (null drops it), and counts every message it saw.
+ ///
+ private sealed class ScriptedSiteActor : ReceiveActor
+ {
+ /// Initializes the actor.
+ /// Maps a site-bound message to the site's answer.
+ /// Sink for every message received.
+ public ScriptedSiteActor(Func