Queue self-healing for long-running packages (#314) — AutoDelete flag applied only to per-pod Activity queues to prevent stale queues after pod restarts; stuck-run detection now uses configurable PausedRunTtlHours; stage-timeout pause protection uses run.LastUpdated as a floor to avoid false timeouts on resume. (MR !4369)
CacheController for HybridCache diagnostics (#314) — new GraphQL endpoint exposing cache state for operational visibility into the HybridCache layer. (MR !4369)
Stuck run auto-nudge (#317) — ActiveRunsScheduledTask now detects runs stuck with missing messages and auto-nudges them back into progress. (MR !4360)
GetUserGroupById GraphQL query — new nullable ById query added alongside the HC0018 nullability work. (MR !4373)
Consecutive-mismatch counter and race-condition guard in stuck-run detection (#317) — reduces false positives by requiring two consecutive failures before marking a run stuck. (MR !4366)
MongoDB LINQ hardening in QueueCleanupScheduledTask (#314) — replaced Contains() with explicit != checks and inlined IsFinalState, so the server-side translation is deterministic. (MR !4369)
PackageManager regression test coverage (#279) — four new regression tests guarding the concurrent-dictionary paths. (MR !4359)
Evo PDF update to .Net 10
GraphQL nullability — HC0018 resolution (MR !4373, !4384) — eight *ById queries now return nullable types instead of throwing HC0018; ViewerCards.customerId, sequences, and overview made nullable so viewer/history cards load cleanly when optional data is absent.
PackageManager concurrent-collection corruption (#279, #284, #291) — ConcurrentDictionary race conditions fixed in _persistToDisk and _unpackIfIsToUnpackRoot; TryAdd now logs duplicates instead of silently colliding. (MR !4359)
Build-stage completion when no uncompiled recipients remain (#317) — build stage is now marked complete correctly, preventing runs from hanging indefinitely after all recipients are processed. (MR !4364)
run.LastUpdated now touched on resume (#314) — uses explicit Set(LastUpdated) (not a no-op update), so resumed runs no longer trip false stage-timeout alerts. (MR !4369)
Processor nullable error — nullable-field handling fixed in the processor pipeline so null values no longer crash execution. (MR !4373)