diff --git a/tests/ZB.MOM.WW.ScadaBridge.SiteCallAudit.Tests/SiteCallAuditReconciliationTests.cs b/tests/ZB.MOM.WW.ScadaBridge.SiteCallAudit.Tests/SiteCallAuditReconciliationTests.cs index b94910fc..cd5acd5b 100644 --- a/tests/ZB.MOM.WW.ScadaBridge.SiteCallAudit.Tests/SiteCallAuditReconciliationTests.cs +++ b/tests/ZB.MOM.WW.ScadaBridge.SiteCallAudit.Tests/SiteCallAuditReconciliationTests.cs @@ -492,8 +492,17 @@ public class SiteCallAuditReconciliationTests : TestKit interval: TimeSpan.FromMilliseconds(50)); // The rows it saw were still upserted (idempotent mirror refresh). - Assert.True(repo.Upserted.ContainsKey(r1.TrackedOperationId)); - Assert.True(repo.Upserted.ContainsKey(r2.TrackedOperationId)); + // Awaited, not asserted flat: the upsert follows the pull asynchronously, + // so gating on CallCount alone races the repo write under parallel load + // (observed once in a full-suite run, 2026-08-17). + AwaitAssert( + () => + { + Assert.True(repo.Upserted.ContainsKey(r1.TrackedOperationId)); + Assert.True(repo.Upserted.ContainsKey(r2.TrackedOperationId)); + }, + duration: TimeSpan.FromSeconds(3), + interval: TimeSpan.FromMilliseconds(50)); // Critical SiteCallAudit-009 invariant: the within-tick drain BROKE on the // no-progress pin rather than looping to the 50-page ceiling. With a 2s