docs(opcuaclient): #657 review — correct stale rebuild comment, note cold-host residual

Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
Joseph Doherty
2026-10-09 07:15:26 -04:00
parent 48a80b5962
commit 24eed8addd
2 changed files with 5 additions and 4 deletions
+1 -1
View File
@@ -98,7 +98,7 @@ same condition is wired as an **event notifier of every referencing equipment fo
flagged — so a host already showing that state writes nothing, and a host that retained the condition Active gets a
real "Cleared". Pre-#657 a respawn wrote a duplicate "Activated" + "Cleared" pair per inactive+unacked condition, and
an inactive+acked first sight went out as `Unspecified` (an "Activated" row for an inactive alarm; a retained-Active
condition was never cleared). E2E: `Runtime.Tests/NativeAlarmRestatementEndToEndTests`.
condition was never cleared). Residual (pre-existing, not a regression): a cold host treats an unseen condition as acked, so after a node restart each upstream inactive+unacked condition still writes "Activated" + "Cleared" once. E2E: `Runtime.Tests/NativeAlarmRestatementEndToEndTests`.
### Native condition state survives a full rebuild (Gitea #641)
@@ -1887,9 +1887,10 @@ public sealed class OpcUaClientDriver : IDriver, ITagDiscovery, IReadable, IWrit
/// <summary>
/// #619 re-review: open (or re-open) the host's alarm subscription over <paramref name="sourceNodeIds"/>.
/// A CHANGED set means the host rebuilt its address space (an alarm-bearing delta always does), recreating
/// every condition node inactive+acked — so every last-told state is forgotten and the post-subscribe
/// ConditionRefresh re-reports from that default. The SAME set (a reinit / reconnect re-subscribe) keeps
/// A CHANGED set means the host applied an alarm-bearing delta, so every last-told state is forgotten and the
/// post-subscribe ConditionRefresh re-reports as first sight. Since #641 a rebuild KEEPS native condition state,
/// so the host may hold ANY state here — which is why first sight is flagged (#656/#657) rather than assuming
/// an inactive+acked default. The SAME set (a reinit / reconnect re-subscribe) keeps
/// them, so the refresh copy of an already-reported state emits nothing. Ack targets of refs no longer
/// subscribed are pruned either way.
/// </summary>