Joseph Doherty
c35c1d3734
refactor(historian): single-parse ExtractTagHistorize + review-nit tests/docs
...
Stop parsing TagConfig twice per tag on the deploy hot path: Phase7Composer's
equipment-tag Select lambda is now block-bodied (captures isHistorized/historianTagname
once), and DeploymentArtifact.BuildEquipmentTagPlans captures locals before result.Add.
Add wrong-type-historianTagname InlineData to ExtractTagHistorizeTests. Extend the
parity round-trip fixture with a 4th tag (isHistorized:false + JSON-null tagname)
exercising the artifact-side private guard path. Align DeploymentArtifact's
ExtractTagHistorize doc-comment with the composer-side phrasing (ExtractTagFullName /
ExtractTagAlarm cross-reference).
2026-06-14 19:02:02 -04:00
Joseph Doherty
440929c82a
feat(historian): carry isHistorized + historianTagname through EquipmentTagPlan (byte-parity)
2026-06-14 18:55:04 -04:00
Joseph Doherty
fb906f26ac
docs(historian): Phase C HistoryRead implementation plan + tasks
2026-06-14 18:48:33 -04:00
Joseph Doherty
5e42c1bc38
docs(historian): Phase C server-side HistoryRead design
2026-06-14 18:46:43 -04:00
Joseph Doherty
c9a0f627ea
docs(drivers): mark reconfigure-while-faulted bookkeeping task complete
v2-ci / build (push) Failing after 33s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-14 18:09:46 -04:00
Joseph Doherty
56f73e49ec
docs(drivers): mark reconfigure-while-faulted Task 1 complete
v2-ci / build (push) Failing after 36s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-14 17:23:10 -04:00
Joseph Doherty
7ffe8939e7
style(drivers): clarify Reconnecting InitializeFailed no-op is generation-agnostic (code-review nit)
2026-06-14 17:19:34 -04:00
Joseph Doherty
751786ec8c
fix(drivers): adopt corrected config via ApplyDelta while (re)connecting ( #7 )
...
A DriverInstanceActor stuck Reconnecting/Connecting now adopts a config delivered via ApplyDelta and
re-initialises with it, instead of dead-lettering and retrying the stale config forever. A monotonic
init generation supersedes the in-flight init so the corrected config always wins.
2026-06-14 17:15:28 -04:00
Joseph Doherty
806a252f25
docs(drivers): implementation plan for reconfigure-while-faulted ( #7 )
2026-06-14 17:11:07 -04:00
Joseph Doherty
076ca025ba
docs(drivers): design for adopting config mid-(re)connect (reconfigure-while-faulted #7 )
2026-06-14 17:08:24 -04:00
Joseph Doherty
f9be38430c
fix(alarms): route native alarms by ConditionId (dotted FullName), not bare SourceNodeId (integration review)
v2-ci / build (push) Failing after 46s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-14 04:09:01 -04:00
Joseph Doherty
7e86fa7099
fix(alarms): normalise native TransitionKind to canonical EmissionKind vocabulary (review)
2026-06-14 03:58:46 -04:00
Joseph Doherty
8736fcc37c
feat(alarms): Primary-gated AlarmTransitionEvent fan-out for native alarms (Phase B WS-5)
2026-06-14 03:48:41 -04:00
Joseph Doherty
b50ef9fc2d
feat(alarms): materialise a Part 9 condition for an alarm equipment tag (Phase B WS-3)
2026-06-14 03:37:51 -04:00
Joseph Doherty
4c56a1719b
feat(alarms): DriverHostActor routes native alarm transitions to Part 9 conditions (Phase B WS-4c)
2026-06-14 03:34:25 -04:00
Joseph Doherty
b0e83902b8
docs(alarms): native driver-alarm TagConfig schema (Phase B)
2026-06-14 03:28:55 -04:00
Joseph Doherty
422e5b7db2
refactor(alarms): harden ExtractTagAlarm severity parse (TryGetInt32) + trim projector prior-state (review nits)
2026-06-14 03:27:03 -04:00
Joseph Doherty
25c3bd16ba
feat(alarms): DriverInstanceActor forwards native OnAlarmEvent to parent (Phase B WS-4b)
2026-06-14 03:24:24 -04:00
Joseph Doherty
c1aeafaaf3
feat(alarms): NativeAlarmProjector maps transitions to condition snapshots (Phase B WS-4a)
2026-06-14 03:16:44 -04:00
Joseph Doherty
e1ccd99ea2
feat(alarms): EquipmentTagPlan.Alarm parsed byte-parity from TagConfig (Phase B WS-2)
2026-06-14 03:12:48 -04:00
Joseph Doherty
f44d8d1e6b
feat(alarms): carry transition Kind on AlarmEventArgs; Galaxy populates it (Phase B WS-1)
2026-06-14 03:04:44 -04:00
Joseph Doherty
a996f03b5b
docs(galaxy): Phase B native-alarms implementation plan + tasks
2026-06-14 02:58:12 -04:00
Joseph Doherty
90096e9c00
docs(galaxy): Phase B native-alarms design (equipment-tag path)
2026-06-14 02:50:34 -04:00
Joseph Doherty
1d797c1c8a
docs(opcua): fix stale NodeWriteRouter reference in EnsureVariable comment
v2-ci / build (push) Failing after 40s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-14 01:45:35 -04:00
Joseph Doherty
c1e921de0b
fix(opcua): RunContinuationsAsynchronously so revert never re-enters the write Lock
2026-06-14 01:39:47 -04:00
Joseph Doherty
590e497872
fix(runtime): narrow ActorNodeWriteGateway catch + drop vacuous no-actor assertion
2026-06-14 01:32:34 -04:00
Joseph Doherty
10efcf4517
feat(opcua): write-outcome self-correction — capture prior + compare-and-revert on failure
2026-06-14 01:30:20 -04:00
Joseph Doherty
526ddb6a57
feat(runtime): ActorNodeWriteGateway — Asks RouteNodeWrite, returns NodeWriteOutcome
2026-06-14 01:23:43 -04:00
Joseph Doherty
0f7c47a559
feat(commons): IOpcUaNodeWriteGateway + NodeWriteOutcome for write-outcome routing
2026-06-14 01:20:14 -04:00
Joseph Doherty
8a79cb0ec7
docs(design): write-outcome self-correction (surface real device-write status, #5 )
v2-ci / build (push) Failing after 42s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-14 01:13:38 -04:00
Joseph Doherty
945c238039
docs(plans): harden-milestone-1b plan + task record
v2-ci / build (push) Failing after 48s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-14 00:51:05 -04:00
Joseph Doherty
190ef34e6f
docs(security): document the GroupToRole data-plane role requirement
2026-06-14 00:45:28 -04:00
Joseph Doherty
97d82dda46
test(runtime): future-enum trap for AccessLevel->Writable parity
2026-06-14 00:45:00 -04:00
Joseph Doherty
7e405e949b
fix(runtime): swallow self SubscriptionFailed too (symmetric to SubscriptionEstablished)
2026-06-14 00:42:31 -04:00
Joseph Doherty
f77488eed9
fix(galaxy): invalidate writer handle caches on session reconnect
...
Add IGalaxyDataWriter.InvalidateHandleCaches() and call it in
GalaxyDriver.ReopenAsync after RecreateAsync succeeds. Prior to this
fix, GatewayGalaxyDataWriter's _itemHandles and _supervisedHandles
dictionaries survived across reconnects, causing the next write to
skip AddItem and AdviseSupervisory against already-dead handles.
2026-06-14 00:39:24 -04:00
Joseph Doherty
42b4a923fd
fix(runtime): fast-fail writes in degraded driver states + swallow self SubscriptionEstablished
2026-06-14 00:34:37 -04:00
Joseph Doherty
99eea0b455
test(runtime): raw-blob routing test uses a no-FullName protocol blob (genuine #4d case)
2026-06-14 00:26:10 -04:00
Joseph Doherty
46f559f5f9
perf(focas): cache equipment-tag parsed addresses (no per-call reparse)
...
Equipment tags resolved at runtime via FocasEquipmentTagParser were not
seeded in _parsedAddressesByTagName so both ReadAsync and WriteAsync
re-parsed the raw TagConfig JSON address string on every hot-path call.
Promoted the field to ConcurrentDictionary (read + write thread safety)
and introduced ResolveParsedAddress(GetOrAdd) so the first call stores
the parse result and all subsequent calls are a cache hit. Authored tags
seeded at InitializeAsync compile and work unchanged.
2026-06-14 00:20:57 -04:00
Joseph Doherty
4cda275b8d
fix(runtime): fast-fail RouteNodeWrite while Stale + micro-opts + raw-blob routing test
2026-06-14 00:16:47 -04:00
Joseph Doherty
02e37a6d68
docs(notes): track pending.md + current.md session state
...
v2-ci / build (push) Failing after 37s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
Snapshot of Milestone 1b completion (equipment-tag live values across
OpcUaClient / protocol drivers / Galaxy, read + write) and the open
follow-ups, for cross-session continuity.
2026-06-13 23:41:06 -04:00
Joseph Doherty
f05b5d79c4
fix(galaxy): AdviseSupervisory before raw Write so writes commit
...
v2-ci / build (push) Failing after 45s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
A plain MXAccess Write runs with no user login (WriteUserId is typically 0),
and MXAccess only COMMITS such a write when the item is advised in supervisory
mode. Without it the gateway's Write call doesn't throw (the reply looks OK) but
the value never reaches the galaxy. GatewayGalaxyDataWriter now issues
AdviseSupervisory (once per item handle) before each raw Write; SecuredWrite/
VerifiedWrite tags keep their own user-identity path. Live-verified end-to-end:
an authorized write to a Galaxy equipment tag commits and PERSISTS across a
fresh re-subscribe; an anonymous write is denied.
(The sister ScadaBridge driver commits writes the other way — a configured
non-zero WriteUserId + regular Advise; we have no galaxy login, so we use the
supervisory context.)
2026-06-13 23:23:46 -04:00
Joseph Doherty
8d8c05f595
docs(drivers): mark protocol-equipment-tag-linkage plan complete (T0–T12, live-verified)
v2-ci / build (push) Failing after 45s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-13 12:44:29 -04:00
Joseph Doherty
bb5832e900
feat(server): inbound operator-write pipeline — OnWriteValue authz gate + node-write router
2026-06-13 12:35:15 -04:00
Joseph Doherty
a23fb2b82e
feat(server): equipment-tag node writability from Tag.AccessLevel (parity-safe, no migration)
2026-06-13 11:46:00 -04:00
Joseph Doherty
f8f1027287
feat(runtime): NodeId->driver reverse routing + primary-gated RouteNodeWrite
2026-06-13 11:44:26 -04:00
Joseph Doherty
b031a6ceef
feat(s7): resolve equipment-tag refs (read + write) via EquipmentTagRefResolver
2026-06-13 11:25:31 -04:00
Joseph Doherty
34a42486dc
feat(focas): resolve equipment-tag refs (read + write) via EquipmentTagRefResolver
2026-06-13 11:24:45 -04:00
Joseph Doherty
5ebf541f54
feat(twincat): resolve equipment-tag refs (read + write) via EquipmentTagRefResolver
2026-06-13 11:24:12 -04:00
Joseph Doherty
e2ea720c08
feat(ablegacy): resolve equipment-tag refs (read + write) via EquipmentTagRefResolver
2026-06-13 11:23:42 -04:00
Joseph Doherty
9d49cb7bbe
feat(abcip): resolve equipment-tag refs (read + write) via EquipmentTagRefResolver
2026-06-13 11:23:21 -04:00