From cc7cd2db11b1b2226e89282ba619a7c98328ce9b Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 8 Oct 2026 15:48:45 -0400 Subject: [PATCH] docs(claude): MTConnect CONDITION alarms (#626) Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe --- CLAUDE.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 3244f490..d846470a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1130,6 +1130,16 @@ host logger factory (wired in `DriverFactoryBootstrap`; the FOCAS and TwinCAT fa - **MTConnect (#627/#628):** TIME_SERIES reads as a variable-length `double[]` (Float64 only); a count disagreeing with `sampleCount` is `BadDecodingError`. One MTConnect driver = one agent client = at most one `/raw` Device (`MTConnectMultipleDevices` deploy error; `RawTreeService.CreateDeviceAsync` refuses a second). +- **MTConnect CONDITION alarms (#626):** a CONDITION raw tag is a native Part 9 condition only when its `TagConfig` + carries the standard `alarm` object (opt-in — alarm tags leave the value subscription, so auto-promotion would break + existing String tags). Normal→inactive, Warning→500, Fault→800; one condition per DataItem showing the most severe + active nativeCode (ties: ordinal nativeCode, then type); ack is server-side only. ⚠️ UNAVAILABLE never clears: an + active condition stays active+acked with a quality-only `BadNoCommunication` (same as #481 transport loss). The + driver dedups against what the server was last TOLD (level+nativeCode+nativeSeverity+qualifier — not text), records + only while a handler is attached, and clears that record when the subscribed alarm SET changes (a rebuild recreates + the nodes inactive) but not on a reconnect of the same set — a replayed `/current` must never re-raise (un-ack). + `AlarmEventArgs` gained optional `OpcUaSeverity` (exact Part 9 severity) and `QualityStatusCode`; a quality-only + event goes out as `AlarmQualityUpdate` per node and never through the snapshot projection. - **Driver removal (#609):** removing a driver releases its capability-invoker pipelines and resilience tracker, *then* evicts its telemetry snapshots. ⚠️ Both are **tombstoned**, not just cleared: the removed child stops asynchronously and its in-flight subscribe/connect still completes through the invoker (and