Joseph Doherty
4eb1d65e2b
feat(scripted-alarms): richer AlarmConditionState bridge to the OPC UA node (T15)
2026-06-10 19:41:16 -04:00
Joseph Doherty
60d48a2a0a
feat(scripted-alarms): materialise real Part 9 AlarmConditionState nodes (T14)
2026-06-10 19:19:10 -04:00
Joseph Doherty
a8640a9331
test(scripted-alarms): cover bootstrap-restore path forwarding alarms (T10 review)
2026-06-10 15:24:39 -04:00
Joseph Doherty
fc0d43a3dc
refactor(scripted-alarms): retire orphaned ScriptedAlarmActor + F9b evaluator (T11)
2026-06-10 15:22:26 -04:00
Joseph Doherty
5256761368
feat(scripted-alarms): spawn + apply ScriptedAlarmHostActor in DriverHostActor (T10)
2026-06-10 15:17:29 -04:00
Joseph Doherty
dafaf2faec
fix(scripted-alarms): ScriptedAlarmHostActor review fixes — load-gen guard, quiet cancel, parse guard (T9 review)
2026-06-10 15:08:54 -04:00
Joseph Doherty
3b418a54f1
feat(scripted-alarms): ScriptedAlarmHostActor — engine runtime host (T9)
2026-06-10 14:57:42 -04:00
Joseph Doherty
c9590c03d0
fix(scripted-alarms): harden artifact boolean decode + direct helper tests (T6 review)
...
Default HistorizeToAveva/Retain/Enabled to the entity defaults (true) when a
field is absent/null/non-boolean so a partial blob decodes identically to the
composer's view of a default-constructed ScriptedAlarm (byte-parity), and only
call GetBoolean for a genuine true/false token. Add direct ExtractAlarmDependencyRefs
unit tests (overlap dedup + reserved {{equip}} exclusion).
2026-06-10 14:47:24 -04:00
Joseph Doherty
8e8ca9efe8
feat(scripted-alarms): DeploymentArtifact byte-parity for the alarm plan (T6)
2026-06-10 14:41:46 -04:00
Joseph Doherty
b28c6bdb62
feat(scripted-alarms): EquipmentScriptedAlarmPlan + Phase7Composer enrichment (T5)
2026-06-10 14:21:28 -04:00
Joseph Doherty
1c96fe0be0
feat(scripted-alarms): EfAlarmConditionStateStore (T8)
2026-06-10 14:21:19 -04:00
Joseph Doherty
945ccd0b85
feat(scripted-alarms): DependencyMuxTagUpstreamSource (T7)
...
Concrete ITagUpstreamSource the scripted-alarm host actor pushes
DependencyValueChanged values into and ScriptedAlarmEngine reads/subscribes
from. Thread-safe: ConcurrentDictionary value cache + per-path ImmutableList
observer lists with atomic add/remove and capture-then-invoke fan-out.
ReadTag of an unknown path returns a Bad-quality (0x80000000) snapshot stamped
via the injected clock. Adds the Core.ScriptedAlarms project reference Runtime
needs to see the interface.
2026-06-10 14:20:02 -04:00
Joseph Doherty
b5748288df
test(scriptlog): prove bridge→broadcaster delivery off the script-logs DPS topic
...
Composes the one Layer-0 hop existing tests left uncovered together:
ScriptLogSignalRBridge subscribing to the script-logs DPS topic and
fanning a ScriptLogEntry out to the IInProcessBroadcaster<ScriptLogEntry>
singleton resolved from the SAME DI container the /script-log page injects.
Mirrors DriverStatusHubE2eTests. Confirms the server-side topic→page chain
delivers end-to-end (only the live Blazor circuit remains manual).
2026-06-10 13:53:34 -04:00
Joseph Doherty
788bb68d1d
fix(scripting): companion sink falls back to ScriptId for the main-log mirror (T3 review)
2026-06-10 12:08:29 -04:00
Joseph Doherty
bd2dd05a0c
feat(scripting): evaluators log through root script logger → script-log page (F8)
2026-06-10 12:03:51 -04:00
Joseph Doherty
73014258ef
feat(scripting): root script logger + DPS publisher wired in Host
2026-06-10 11:50:50 -04:00
Joseph Doherty
14fe88fc80
feat(scripting): ScriptLogTopicSink — script LogEvent → ScriptLogEntry → publisher
2026-06-10 11:38:54 -04:00
Joseph Doherty
6c23a6763a
test(adminui): DB-backed tests for ScriptTagCatalog.GetEquipmentRelativeLeavesAsync
2026-06-10 08:12:52 -04:00
Joseph Doherty
a7c1d7f7cb
test(adminui): cover divergent-prefix {{equip}} rejection; use EquipToken constant in message
2026-06-10 08:08:13 -04:00
Joseph Doherty
c7041a24e7
feat(adminui): {{equip}}-aware hover + {{equip}}. leaf completion in the script editor
2026-06-10 08:04:51 -04:00
Joseph Doherty
cadd6c60b7
feat(adminui): reject {{equip}} virtual tags whose equipment has no derivable base
2026-06-10 07:58:38 -04:00
Joseph Doherty
66ea9c56f6
feat(runtime): DeploymentArtifact substitutes {{equip}} (parity with composer)
2026-06-10 07:53:20 -04:00
Joseph Doherty
a4b36c54ba
feat(opcuaserver): Phase7Composer substitutes {{equip}} per equipment
2026-06-10 07:49:28 -04:00
Joseph Doherty
f431504825
feat(commons): EquipmentScriptPaths — derive base + {{equip}} substitution + shared dep extraction
2026-06-10 07:42:14 -04:00
Joseph Doherty
26bccd82e0
test(commons): scaffold Commons.Tests project
2026-06-10 07:38:57 -04:00
Joseph Doherty
142635b402
feat(adminui): tag-path hover (tag kind/type/driver inside ctx.GetTag literals)
v2-ci / build (push) Failing after 47s
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-10 05:48:02 -04:00
Joseph Doherty
fc7dc3b57d
feat(adminui): inline script-source editor in the virtual-tag modal
2026-06-09 15:23:35 -04:00
Joseph Doherty
4a2f7e37e5
feat(adminui): script document formatting (NormalizeWhitespace)
2026-06-09 15:06:40 -04:00
Joseph Doherty
9104b6c614
feat(adminui): script hover + signature help
2026-06-09 15:03:40 -04:00
Joseph Doherty
521fb61e44
feat(adminui): tag-path completion inside ctx.GetTag/SetVirtualTag literals
2026-06-09 14:53:15 -04:00
Joseph Doherty
d1434933b4
feat(adminui): IScriptTagCatalog for tag-path completion
2026-06-09 14:49:19 -04:00
Joseph Doherty
93f5a745a3
feat(adminui): scope + dot-member script completions
2026-06-09 14:36:28 -04:00
Joseph Doherty
6a9b052fc7
feat(adminui): script diagnostics (Roslyn + forbidden-type + dynamic-path)
2026-06-09 14:29:08 -04:00
Joseph Doherty
fa96989e2a
feat(uns): validate typed TagConfig before save (F-uns-2 / #156 )
...
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
The per-driver editor models expose Validate() (required-field checks) but the
TagModal never called them, so a blank required field (e.g. S7 address, AbCip
tag path) saved silently and only failed at deploy/connect. Add a
TagConfigValidator registry (DriverType -> model.FromJson(json).Validate(),
parallel to TagConfigEditorMap) and call it in SaveAsync before the service
call — a non-null result sets the modal error and blocks save. Unmapped drivers
(no typed editor) and Modbus (no required field) return null. Editors untouched.
AdminUI.Tests 307/307 (12 new validator tests); build clean.
2026-06-09 11:45:35 -04:00
Joseph Doherty
c0afecda50
fix(uns): omit blank optional keys from TagConfig + add omission tests; drop unused ParseInt (T4-T8 review)
2026-06-09 09:49:33 -04:00
Joseph Doherty
75021fa2c9
feat(uns): S7/AbCip/AbLegacy/TwinCAT/Focas typed tag-config editors (F-uns-1 T4-T8)
2026-06-09 09:42:40 -04:00
Joseph Doherty
5990b673cc
feat(uns): Modbus typed tag-config editor (F-uns-1 T3)
2026-06-09 09:36:19 -04:00
Joseph Doherty
fd9fa75d0e
feat(uns): TagConfig JSON helper + editor map + TagModal dispatch scaffold (F-uns-1 T2)
2026-06-09 09:26:50 -04:00
Joseph Doherty
d9dbd7917a
feat(uns): surface DriverType to the TagModal driver dropdown (F-uns-1 T1)
2026-06-09 09:16:07 -04:00
Joseph Doherty
8ba64b1d99
fix(uns): enforce #122 on line reparent across clusters (final review)
v2-ci / build (push) Failing after 4m38s
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-08 14:12:46 -04:00
Joseph Doherty
7db9a24403
feat(uns): equipment CSV import folded into the tree toolbar
2026-06-08 13:56:01 -04:00
Joseph Doherty
c0346f14ce
feat(uns): tag + virtual-tag modals wired into the tree
2026-06-08 13:47:34 -04:00
Joseph Doherty
d637b834b9
fix(uns): reject equipment bind to non-existent driver + modal-xl (review)
2026-06-08 13:38:33 -04:00
Joseph Doherty
2beaa43d60
feat(uns): equipment modal wired into the tree
2026-06-08 13:31:14 -04:00
Joseph Doherty
a4a9dc912a
feat(uns): area + line modals wired into the tree
2026-06-08 13:20:25 -04:00
Joseph Doherty
307cec5a3d
test(uns): cover no-script + update-duplicate-name virtual-tag guards (review)
2026-06-08 13:15:10 -04:00
Joseph Doherty
d8fba02a5e
feat(uns): equipment-bound virtual-tag CRUD
2026-06-08 13:11:12 -04:00
Joseph Doherty
77024f87da
fix(uns): reject tag create on non-existent equipment + narrow JSON catch (review)
2026-06-08 13:06:45 -04:00
Joseph Doherty
5a392c5db0
feat(uns): equipment-bound tag CRUD with namespace + cluster guards
2026-06-08 13:00:26 -04:00
Joseph Doherty
ab0ff8aedf
fix(uns): reject driver-bind on unresolvable line + enforce MachineCode uniqueness on update (review)
2026-06-08 12:55:36 -04:00