Joseph Doherty
a6fed85ac9
feat(security): carry LDAP roles onto session identity (T17)
...
Stop discarding the authenticator's resolved roles during impersonation.
HandleImpersonation now sets args.Identity to a RoleCarryingUserIdentity
(: UserIdentity) that carries result.Roles, so a downstream method handler
can read them off context.UserIdentity for the inbound AlarmAck gate (T18).
Verified via the decompiled SDK (1.5.378.106) that the instance we assign to
ImpersonateEventArgs.Identity is stored by reference onto Session.Identity /
EffectiveIdentity and surfaced unchanged on OperationContext.UserIdentity --
the custom subclass survives the round-trip. No auth-decision logic changes.
2026-06-11 05:42:27 -04:00
Joseph Doherty
2ad1dbc894
fix(security): AutoLoginAuthenticationHandler no-op sign-in/out (avoid 500 on /auth/logout when flag on)
2026-06-11 04:45:29 -04:00
Joseph Doherty
82fec753c8
feat(security): wire Security:Auth:DisableLogin into AddOtOpcUaAuth
2026-06-11 04:39:23 -04:00
Joseph Doherty
caeaae21f9
feat(security): AutoLoginAuthenticationHandler for dev login bypass
2026-06-11 04:31:07 -04:00
Joseph Doherty
a27e82c8d1
chore(dev): Security:Auth:DisableLogin default off; enable in docker-dev central nodes
2026-06-11 04:29:47 -04:00
Joseph Doherty
a92ba6a10b
feat(security): add AuthDisableLoginOptions + DevAuthRoles for dev login bypass
2026-06-11 04:26:20 -04:00
Joseph Doherty
4c417f7fb8
fix(scripted-alarms): log failed event-report via SDK trace + correct sink doc (T16 review)
2026-06-10 19:54:37 -04:00
Joseph Doherty
295bb55dc6
feat(scripted-alarms): fire Part 9 condition events on transition (T16)
2026-06-10 19:50:09 -04:00
Joseph Doherty
ab5d0752d8
fix(scripted-alarms): atomic alarm-condition lookup under Lock (T15 review)
2026-06-10 19:45:24 -04:00
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
b31d7cb03f
fix(scripted-alarms): lock CreateVariable + RemoveRootNotifier on rebuild (T14 review)
2026-06-10 19:26:01 -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
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
55101baaa4
refactor(scripted-alarms): review-fix polish for T5/T7/T8 (observer isolation, warning hoist, doc)
2026-06-10 14:32:49 -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
bd2dd05a0c
feat(scripting): evaluators log through root script logger → script-log page (F8)
2026-06-10 12:03:51 -04:00
Joseph Doherty
bf86b3def6
fix(scripting): explicit companion logger + disposable ScriptRootLogger (T2 review)
2026-06-10 11:56: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
ac1e1dfd12
fix(adminui): auto-generate ScriptId (SC-…) + drop the Language picker on ScriptEdit
...
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
ScriptId is now system-generated on create (mirrors EquipmentId's EQ-{12 hex}
convention, never operator-supplied) and shown read-only when editing. Language
is always CSharp, so the single-option dropdown is removed entirely and set on
save.
2026-06-10 09:07:38 -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
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
688a003d1d
fix(adminui): tag-path completion replaces the whole dotted path, not just the last segment
...
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
Monaco's word definition splits on '.', so accepting a full tag path while a
partial path was typed (e.g. "X.Protected") duplicated the prefix
(-> "X.X.ProtectedValue"). Tag-path items now replace the whole literal
content from the opening quote to the caret.
2026-06-09 17:06:55 -04:00
Joseph Doherty
da80195599
fix(adminui): render Monaco overflow widgets in a body-level node
...
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
The suggest/hover popups were offset far from the caret because the theme's
.rise entrance animation leaves a CSS transform on an ancestor, which becomes
the containing block for the position:fixed overflow widgets. Render them in a
body-level overflowWidgetsDomNode so they stay viewport-correct at the caret.
2026-06-09 17:01:18 -04:00
Joseph Doherty
4d12088fa2
docs(scripting): Monaco script-editor guide + refresh Scripts page banner
2026-06-09 15:50:49 -04:00
Joseph Doherty
72fcde5b44
fix(adminui): auto-suggest tag paths inside string literals (quickSuggestions.strings)
2026-06-09 15:46:30 -04:00
Joseph Doherty
9444348c0d
fix(adminui): forward insertTextRules + correct Monaco completion-kind icons
2026-06-09 15:31:16 -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
088fc50ef2
feat(adminui): ScriptEdit uses MonacoEditor; drop CDN loader
2026-06-09 15:11:13 -04:00
Joseph Doherty
071bed5f94
feat(adminui): wire Monaco language providers to /api/script-analysis
2026-06-09 15:09:06 -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
b54a6ad29f
feat(adminui): script-analysis contracts, wrapper seam, endpoints + DI
2026-06-09 14:17:31 -04:00
Joseph Doherty
9afb2d230e
feat(adminui): vendor Monaco + reusable MonacoEditor component (no providers yet)
2026-06-09 14:06:29 -04:00
Joseph Doherty
a2dbc5e2da
build(adminui): reference Core.Scripting for the script-analysis backend
2026-06-09 13:59:51 -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