Joseph Doherty
08c7a2bd42
chore(plan): mark OpcUaClient ReadEventsAsync tasks complete + live /run results
v2-ci / build (push) Failing after 43s
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-18 06:19:47 -04:00
Joseph Doherty
7a3d2712c0
test(opcuaclient): event-history smoke + docs(historian): driver event passthrough
v2-ci / build (push) Failing after 43s
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-18 06:12:51 -04:00
Joseph Doherty
68637396b5
docs(abstractions): correct ReadEventsAsync remark — OpcUaClient now overrides
...
Code-review minor: the DIM remark said the OPC UA Client driver stays with the
default; it now overrides (forwards HistoryReadEvents upstream). Comment-only —
no contract/signature change. The session-capture-before-gate race the review
also noted is a pre-existing ExecuteHistoryReadAsync pattern (shared by
raw/processed/attime); ReadEventsAsync intentionally mirrors it — tracked as a
follow-up to fix all four history paths together.
2026-06-18 06:11:31 -04:00
Joseph Doherty
045f9ca2e8
feat(opcuaclient): implement IHistoryProvider.ReadEventsAsync passthrough
2026-06-18 06:07:32 -04:00
Joseph Doherty
d48674ba31
fix(opcuaclient): review — UTC-kind the missing-time sentinel + test hardening
...
Code-review I2: CoerceDateTime's missing-field sentinel was DateTime.MinValue
(Kind=Unspecified) — a downstream .ToUniversalTime() could shift it; now UTC-kinded.
M4: assert BrowsePath namespace==0 + the sentinel's UTC Kind.
2026-06-18 06:05:58 -04:00
Joseph Doherty
e859963853
feat(opcuaclient): add BuildBaseEventFilter + MapHistoryEvents pure cores
2026-06-18 06:02:11 -04:00
Joseph Doherty
767bc56d97
docs(plan): OpcUaClient ReadEventsAsync implementation plan + tasks
...
3 serial tasks (T1 pure cores → T2 wire-in → T3 smoke+docs+finish), all
driver-internal. No interface/Commons/proto/EF change; no bUnit.
2026-06-18 06:00:01 -04:00
Joseph Doherty
400bef4769
docs(plan): OpcUaClient ReadEventsAsync event-history passthrough design
...
Driver-internal IHistoryProvider.ReadEventsAsync passthrough to the upstream
OPC UA server's HistoryReadEvents service. No interface change: the driver
builds a fixed canonical 6-clause EventFilter and maps the upstream HistoryEvent
onto the existing HistoricalEvent record (the server re-projects only those 6
BaseEventType fields, so richer clauses are discarded anyway).
2026-06-18 05:55:58 -04:00
Joseph Doherty
bd791e797a
chore(plan): mark cert-actions tasks complete + live /run results
v2-ci / build (push) Failing after 39s
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-18 05:24:18 -04:00
Joseph Doherty
72869c4f23
docs(security): cert page now has FleetAdmin trust/untrust/delete actions
2026-06-18 05:18:35 -04:00
Joseph Doherty
2e231911fd
fix(adminui): cert page review — server-side FleetAdmin re-check, explicit delete switch, alert CSS
2026-06-18 05:17:02 -04:00
Joseph Doherty
8c429c3131
feat(adminui): trust/untrust/delete actions on /certificates (FleetAdmin)
2026-06-18 05:11:12 -04:00
Joseph Doherty
e8769fd8a8
refactor(adminui): cert manager review polish — char.IsAsciiHexDigit, filtered catch, TOCTOU note
2026-06-18 05:08:39 -04:00
Joseph Doherty
b47fc10ec0
feat(adminui): CertificateStoreManager — by-thumbprint trust/untrust/delete
2026-06-18 05:04:36 -04:00
Joseph Doherty
77cc39e6a7
docs(adminui): cert-store actions implementation plan + tasks
2026-06-18 05:01:29 -04:00
Joseph Doherty
f150460b5e
docs(adminui): cert-store actions design (trust/untrust/delete)
2026-06-18 04:59:52 -04:00
Joseph Doherty
8480e301ab
chore(plan): mark Galaxy handle-sharing tasks complete + live gate results
v2-ci / build (push) Failing after 43s
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-18 04:35:14 -04:00
Joseph Doherty
15922d8483
test(galaxy): live-gw smoke — writer borrows subscription handle, skips AddItem
...
Subscribe a real tag, register its gateway item handle, write via the
registry-wired writer: asserts the borrowed-handle write commits Good with
AddItemCallCount==0 (control with no source: ==1). Proves the subscription
handle is usable for a committing no-login supervisory write. Skip-gated on
MXGW_ENDPOINT + GALAXY_MXGW_API_KEY; verified live vs 10.100.0.48:5120 (3/3).
2026-06-18 04:34:11 -04:00
Joseph Doherty
e9da9c29d2
fix(galaxy): authoritative handle resolution + review cleanups
...
Make SubscriptionRegistry.TryResolveItemHandle confirm a live subscription
genuinely binds fullRef->handle (via the reverse index) rather than trusting
the forward-map hint + a bare liveness check. Fixes the cross-ref-same-handle
hazard (wrong-tag borrow) while preserving the legitimate
multiple-subscriptions-per-tag borrow. Adds cross-ref + same-ref-multi-sub
tests; drops a duplicate SubscriptionEntry <summary>; documents the writer's
supervisory-advise reconnect lifecycle.
2026-06-18 04:29:45 -04:00
Joseph Doherty
3ffe45db53
feat(galaxy): wire SubscriptionRegistry handle resolver into the production writer
2026-06-18 04:20:34 -04:00
Joseph Doherty
2e3f528afc
feat(galaxy): writer borrows live subscription item handles (skip redundant AddItem)
...
GatewayGalaxyDataWriter now accepts an optional subscribedHandleSource
delegate; TryResolveCachedOrBorrowed checks _itemHandles first then the
source, so the first write to an already-subscribed tag skips the
AddItem round-trip. Borrowed handles are not cached (subscription
registry owns lifecycle). AddItemCallCount seam confirms gateway calls.
2026-06-18 04:18:35 -04:00
Joseph Doherty
1411950077
feat(galaxy): SubscriptionRegistry.TryResolveItemHandle forward lookup
...
Add _itemHandleByFullRef (OrdinalIgnoreCase ConcurrentDictionary) maintained
in lock-step with _subscribersByItemHandle across Register/Remove/Rebind.
TryResolveItemHandle cross-checks the authoritative reverse map so a stale
forward entry can never hand out a dead handle. Also wires the scaffolded
_addItemCallCount increment in EnsureItemHandleAsync (field was declared but
never assigned, causing a TreatWarningsAsErrors build failure on the branch).
8 new xUnit + Shouldly facts covering register/case-insensitive/remove/rebind/
failed-handle/liveness-guard paths.
2026-06-18 04:18:01 -04:00
Joseph Doherty
490c6b7498
docs(plan): Galaxy writer handle-sharing implementation plan + tasks
2026-06-18 04:13:51 -04:00
Joseph Doherty
c85c4e5cd0
docs(plan): Galaxy writer/subscription-registry item-handle sharing design
2026-06-18 04:11:24 -04:00
Joseph Doherty
70e1bde90f
chore(plan): mark script-editor ctx-completion tasks complete + live results
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-18 02:54:20 -04:00
Joseph Doherty
6f9e9c5c1b
docs(scripteditor): ctx-receiver scoping + SetVirtualTag single-tag-drop note
2026-06-18 02:42:29 -04:00
Joseph Doherty
ac3450d5f4
fix(adminui): ctx-receiver guard + truthful SetVirtualTag hover in script-editor completions
2026-06-18 02:39:12 -04:00
Joseph Doherty
74aad3bc87
docs(plan): script-editor ctx tag-completion implementation plan + tasks
2026-06-18 02:34:45 -04:00
Joseph Doherty
e84f7a6e68
docs(plan): script-editor ctx tag-completion correctness + truthfulness design
2026-06-18 02:30:58 -04:00
Joseph Doherty
651018f9fd
chore(plan): mark historian-paging + UDT-member-paths tasks complete + live results + follow-ups
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-17 20:51:55 -04:00
Joseph Doherty
09fecf4c24
docs(twincat): correct stale Structure-symbol comment (members now expand via discovery)
v2-ci / build (push) Failing after 39s
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-17 20:47:32 -04:00
Joseph Doherty
163f57b6bc
docs: within-timestamp tie-cluster paging + AbCip/TwinCAT UDT member discovery
2026-06-17 20:35:34 -04:00
Joseph Doherty
4a7b0fde7b
fix(abcip): thread CIP template-instance-id so discovered-UDT expansion works in production (review)
2026-06-17 20:30:12 -04:00
Joseph Doherty
fdd6b332fe
fix(twincat): update BrowseSymbolsAsync doc + cache adapter fields + Flat-mode note (review)
...
- ITwinCATClient.BrowseSymbolsAsync XML doc updated: states the implementation now
expands struct/UDT/FB symbols into atomic member leaves via TwinCATSymbolExpander;
callers receive only atomic/array leaves with full InstancePaths, never struct containers.
- AdsSymbolNode: cache IsStruct, Mapped, Children, ReadOnly as readonly fields computed
once in the ctor so repeated property access during recursive expansion doesn't
re-materialize or re-invoke MapSymbolType/IsSymbolWritable.
- BrowseSymbolsAsync: add operator-gated live risk note next to SymbolsLoadMode.Flat
warning that a real TC3 target may not populate SubSymbols in Flat mode, with
guidance to switch to VirtualTree if members don't surface — do not change mode now.
- TwinCATSymbolExpanderTests: simplify confusing `new string('.', 0)` no-op to `""`.
2026-06-17 20:22:45 -04:00
Joseph Doherty
0f929ae668
fix(historian): defensive over-fetch cap + Validate gating comment (review)
2026-06-17 20:22:07 -04:00
Joseph Doherty
4e1414026e
feat(abcip): expand controller-discovered UDTs into addressable member variables
2026-06-17 20:11:41 -04:00
Joseph Doherty
2e6c6d3ab6
feat(historian): page within oversized tie clusters ( #400 ) instead of loud-failing
2026-06-17 20:11:09 -04:00
Joseph Doherty
3699fc16a8
feat(twincat): expand discovered struct/UDT symbols into addressable member leaves
2026-06-17 20:05:01 -04:00
Joseph Doherty
d0a0661f6a
docs(plan): historian within-timestamp paging ( #400 ) + AbCip/TwinCAT UDT member-paths implementation plan + tasks
2026-06-17 20:00:05 -04:00
Joseph Doherty
ad66ecc97e
docs(plan): historian within-timestamp paging ( #400 ) + AbCip/TwinCAT UDT member-paths design
2026-06-17 19:52:52 -04:00
Joseph Doherty
c402872c0c
chore(bit-rmw): mark all 5 tasks complete + live results + follow-ups
v2-ci / build (push) Failing after 38s
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-17 12:14:56 -04:00
Joseph Doherty
098adf43d0
fix(ablegacy): dispose per-parent RMW locks on teardown (review symmetry)
...
DisposeRuntimes() now disposes and clears _rmwLocks, _creationLocks, and
_runtimeLocks so ReinitializeAsync/ShutdownAsync cycles don't orphan their
SemaphoreSlim instances. Mirrors the TwinCAT _bitRmwLocks fix already shipped.
2026-06-17 12:10:42 -04:00
Joseph Doherty
56ccaa797c
docs(drivers): B/I/O + BOOL-within-word bit writes (RMW)
2026-06-17 12:03:54 -04:00
Joseph Doherty
c48f299994
test(ablegacy): bit write surfaces device rejection status (review)
...
Adds `Bit_write_surfaces_device_rejection_status` to AbLegacyBitRmwTests,
verifying that a non-zero libplctag status returned by the parent-word write
in WriteBitInWordAsync propagates as a non-Good OPC UA StatusCode rather than
being silently swallowed. Added a minimal `WriteStatusOverride` hook to
FakeAbLegacyTag (test-project-only) so the read half of the RMW still
returns 0/Good while the write half returns the seeded error code.
2026-06-17 12:02:10 -04:00
Joseph Doherty
340c145e87
fix(twincat): dispose bit-RMW locks on shutdown + guard null parent read (review)
2026-06-17 12:01:55 -04:00
Joseph Doherty
a73e20fb28
feat(twincat): BOOL-within-word writes via driver-level parent-word RMW
2026-06-17 11:55:44 -04:00
Joseph Doherty
5c6b7cd6f9
feat(ablegacy): B/I/O-file bit-within-word writes via existing RMW path
2026-06-17 11:54:03 -04:00
Joseph Doherty
02d6bbe381
docs(plan): bit-index RMW writes implementation plan + tasks
2026-06-17 11:51:29 -04:00
Joseph Doherty
cf231a7868
docs(design): bit-index RMW writes (AbLegacy B/I/O + TwinCAT BOOL-within-word)
2026-06-17 11:44:14 -04:00
Joseph Doherty
67da6d4fc4
chore(phase4d): mark all 8 tasks complete + live results + follow-ups
v2-ci / build (push) Failing after 43s
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-17 06:37:37 -04:00