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
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
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
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
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
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
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
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
Joseph Doherty
232c557985
feat(modbus): resolve equipment-tag refs (read + write) via EquipmentTagRefResolver
2026-06-13 11:18:00 -04:00
Joseph Doherty
eaa335d779
feat(drivers): shared EquipmentTagRefResolver (by-name + parse-on-miss + cache)
2026-06-13 11:07:23 -04:00
Joseph Doherty
9357c001b7
fix(opcuaclient): register the OpcUaClient driver factory (was always stubbed)
2026-06-13 08:20:02 -04:00
Joseph Doherty
c4435e4fd6
feat(runtime): route driver values to folder-scoped equipment NodeIds (live-value delivery)
v2-ci / build (push) Failing after 44s
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 06:32:38 -04:00
Joseph Doherty
5432d8a021
refactor(opcua): repoint Phase7Applier + VirtualTagHostActor to shared EquipmentNodeIds
2026-06-13 06:31:44 -04:00
Joseph Doherty
da1accceff
feat(runtime): carry DriverInstanceId on AttributeValuePublished (live-value routing key)
2026-06-13 06:27:52 -04:00
Joseph Doherty
26816fd17e
feat(commons): EquipmentNodeIds — single source of truth for folder-scoped equipment NodeIds
2026-06-13 06:26:59 -04:00
Joseph Doherty
b8277922b6
fix(config): also clean NodeAcl + release ExternalIdReservation in SystemPlatform cleanup migration
2026-06-12 22:34:13 -04:00
Joseph Doherty
7d25480fee
docs(galaxy): neutralize remaining stale SystemPlatform/alias terminology in comments + a test name
...
Replace "SystemPlatform mirror tag", "Galaxy alias", and "SystemPlatform-kind" in doc-comments and
test names with neutral accurate wording ("FolderPath-scoped tag", "EquipmentId == null", etc.).
No code, logic, or test bodies changed — comments and one test method name only.
2026-06-12 22:30:50 -04:00
Joseph Doherty
ba42bed538
feat(config): forward-only migration deleting orphaned SystemPlatform namespace data (clean break)
2026-06-12 22:25:00 -04:00
Joseph Doherty
dcbaf63ab1
feat(config): remove the SystemPlatform NamespaceKind (capstone) — Galaxy is Equipment-kind
2026-06-12 22:18:56 -04:00
Joseph Doherty
0945f19a50
feat(adminui): wire Galaxy live-browse picker into the standard TagModal
2026-06-12 22:09:22 -04:00
Joseph Doherty
5edea52bd7
docs(galaxy): fix stale SystemPlatform/alias/Galaxy doc comments (review follow-up)
...
Resolves the code-review notes on 95be607a + the AdminUI bundle: the
EnsureVariable docs (IOpcUaAddressSpaceSink, OtOpcUaNodeManager) and the Tag
entity doc no longer say 'Galaxy / SystemPlatform / alias'; the DriverHostActor
ForwardToMux comment now states the real equipment-tag value-routing gap (the
FullName→NodeId 'live values' milestone) instead of claiming Galaxy values map
straight through.
2026-06-12 22:00:52 -04:00
Joseph Doherty
b4b7cd7d0f
feat(authz): remove SystemPlatform scope + permission-trie walk (Galaxy resolves via Equipment)
2026-06-12 21:54:28 -04:00
Joseph Doherty
95be607a07
feat(opcua): remove SystemPlatform-mirror GalaxyTags contract end-to-end (composer+applier+artifact, byte-parity)
2026-06-12 21:45:19 -04:00
Joseph Doherty
5dfb797817
refactor(adminui): strip alias/relay machinery from UnsTreeService + EquipmentPage; Galaxy tags use standard TagModal
2026-06-12 21:28:13 -04:00
Joseph Doherty
ca2698949b
refactor(adminui): delete alias-tag/relay-converter files (build red until spine stripped)
2026-06-12 21:20:41 -04:00
Joseph Doherty
e2c6c15ae0
feat(opcua): remove SystemPlatform mirror producer + Galaxy exception from Phase7Composer
2026-06-12 21:17:39 -04:00
Joseph Doherty
499c9b9165
feat(validation): allow GalaxyMxGateway under Equipment; rename Galaxy-tag FullName check
2026-06-12 21:11:06 -04:00