1622d07f2e
While a folder subscriber's SDK channel is full, a condition's later events wait in its #838 deferral queue and reach i=2253 items only when the drain gets to them, off Lock. A ConditionRefresh in that window replayed the current state, then the older deferred events followed RefreshEnd (stale state, or a condition the refresh had just dropped re-added until the newest drained). - Condition events are reported as ConditionEventSnapshot (an InstanceStateSnapshot carrying a report sequence, condition NodeId and Retain); events queued behind a deferred report are marked Deferred. - Server-object refresh (ConditionRefresh and ConditionRefresh2, flag on AND off) now runs in RefreshServerObjectItems: watermark, "anything deferred?", the replay and its queueing in ONE Lock hold, so the replay is exactly the state at the cut. Per item it queues the replay and installs a RefreshCut under the item's gate. - OnConditionReportEvent holds that gate across "superseded? -> QueueEvent" for deferred events only. Withheld from that item alone: events at/below the cut whose condition the replay re-sent, or Retain=true events of a condition it omitted; an older Retain=false event of an omitted condition is still delivered. Queues, other Server-object items and folder items are untouched; refresh never waits for a drain. - Lock order Lock -> item gate -> SDK item lock, same as a synchronous report. - Meter otopcua.opcua.condition_events.superseded. - Folder items keep a documented residual (SDK channel backlog + memoised per-item verdict leave no per-event hook). Tests: ConditionRefreshDeferralWireTests (deterministic overload by holding the folder item's SDK lock; 6 variants fail before the fix; probe-driven gate test fails with the gate removed; concurrent reports/refreshes/stall stress test fails before the fix).