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
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
6b041c6daa
docs(drivers): plan — protocol-driver equipment-tag linkage + write pipeline (13 tasks)
2026-06-13 10:51:18 -04:00
Joseph Doherty
e58f33584f
docs(drivers): design — protocol-driver equipment-tag linkage + inbound write pipeline
2026-06-13 10:45:25 -04:00
Joseph Doherty
22d553afd1
docs(opcuaclient): mark plan tasks complete (T0–T2 done, live-verified)
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-13 09:37:20 -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
bc9cd464b5
docs(opcuaclient): plan — register OpcUaClient driver factory (3 tasks)
2026-06-13 08:14:04 -04:00
Joseph Doherty
5aa1030be9
docs(opcuaclient): design — register the OpcUaClient driver factory (fixes always-stubbed bug)
...
Mirror ModbusDriverFactoryExtensions: NEW OpcUaClientDriverFactoryExtensions
(Register + CreateInstance deserialising OpcUaClientDriverOptions, like the
probe) + one line in DriverFactoryBootstrap.Register. Unblocks the first
end-to-end live equipment-tag value (live-proves the FullName→NodeId router).
2026-06-13 08:11:41 -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
891f875f6a
docs(live-values): Phase plan — equipment-tag live-value delivery (6 tasks)
...
Shared EquipmentNodeIds helper → repoint Phase7Applier+VirtualTagHostActor →
DriverInstanceId on AttributeValuePublished → DriverHostActor (DriverInstanceId,
FullName)->NodeId[] map + ForwardToMux resolution + TestKit → live Modbus /run.
Runtime-only, no migration. Co-located .tasks.json.
2026-06-13 06:24:38 -04:00
Joseph Doherty
7e9eb5d17a
docs(live-values): design — equipment-tag live-value delivery (FullName→NodeId router)
...
Mirror VirtualTagHostActor's _nodeIdByVtag pattern for driver values: a shared
EquipmentNodeIds helper (kills the duplicated formula), DriverInstanceId on
AttributeValuePublished, and a (DriverInstanceId,FullName)->NodeId[] map built +
resolved in DriverHostActor.ForwardToMux. No OpcUaPublishActor change.
Driver-value delivery only; native alarms + historian remain separate.
2026-06-13 06:21:40 -04:00
Joseph Doherty
c3c5617266
docs(test): neutralize last stale 'SystemPlatform tags' comment (final-review nit)
v2-ci / build (push) Failing after 49s
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-12 22:44:10 -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
056bfbda1b
test(opcua): composer↔artifact byte-parity for a Galaxy equipment tag
2026-06-12 22:05:15 -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
47cb5725a9
docs(galaxy): retire alias/SystemPlatform model — Galaxy tags are standard equipment tags
2026-06-12 21:17:30 -04:00