fix(auditlog): explicit permanent rejections on the ingest ack (IngestAck.rejected_event_ids, field 2) with a dedicated counter; reconciler ignores transient faults for abandonment; persist the served high-water mark; prune only on a non-empty enumeration (review 2026-10-21 06/PERF-1, 06/IMPL-1 adversarial follow-up)

This commit is contained in:
Joseph Doherty
2026-10-22 08:40:42 -04:00
parent 38167bca88
commit b0a08bb63b
23 changed files with 790 additions and 168 deletions
@@ -116,9 +116,11 @@ public class ReconciliationStatePruningTests : TestKit
Assert.True(probe.ExpectMsg<SiteAuditTelemetryStalledChanged>(TimeSpan.FromSeconds(5)).Stalled);
sites.Sites = Array.Empty<SiteEntry>();
// Not an empty list: an empty enumeration deliberately prunes nothing.
sites.Sites = new[] { new SiteEntry("survivor", "http://s:8083") };
var cleared = probe.ExpectMsg<SiteAuditTelemetryStalledChanged>(TimeSpan.FromSeconds(5));
var cleared = probe.FishForMessage<SiteAuditTelemetryStalledChanged>(
m => m.SiteId == "doomed", TimeSpan.FromSeconds(5));
Assert.Equal("doomed", cleared.SiteId);
Assert.False(cleared.Stalled);