Joseph Doherty
d77124b191
chore(uns): mark plan tasks T0–T10 complete (resume snapshot)
2026-06-11 15:24:30 -04:00
Joseph Doherty
80b19d6fc8
chore(uns): create-redirect null guard + alarm isolation test + alarm-authoring doc (final review)
2026-06-11 15:23:06 -04:00
Joseph Doherty
a0f3f4ab89
docs(uns): document the equipment page tabs; repoint alarm-editing surface
...
Update Uns.md to show Equipment as a leaf in the browse tree (Area → Line →
Equipment), add the /uns/equipment/{id} page with its Details/Tags/Virtual
Tags/Alarms tabs, and adjust the actions table and sub-sections accordingly.
ScriptedAlarms.md and AlarmTracking.md required no changes — neither
referenced the standalone /scripted-alarms editing page.
2026-06-11 15:14:09 -04:00
Joseph Doherty
f1c4392b0d
refactor(uns): drop dead LoadEquipmentChildrenAsync + LinesForCluster; fix stale comment
2026-06-11 15:11:28 -04:00
Joseph Doherty
6e7127c396
feat(uns): remove standalone scripted-alarm pages + nav link (alarms now per-equipment)
2026-06-11 15:06:13 -04:00
Joseph Doherty
f1b9e7116b
fix(uns): guard ScriptedAlarmModal form rebuild against stray re-renders (code-review)
2026-06-11 15:03:43 -04:00
Joseph Doherty
826ffdc1a0
feat(uns): equipment is a tree leaf linking to the detail page; drop EquipmentModal
2026-06-11 15:01:10 -04:00
Joseph Doherty
773c073d0e
feat(uns): Alarms tab + ScriptedAlarmModal on the equipment page
2026-06-11 14:53:03 -04:00
Joseph Doherty
1294fb6ee5
fix(uns): surface stale-row edits + dismiss modal on delete + @key rows (code-review)
2026-06-11 14:49:23 -04:00
Joseph Doherty
61ad5ab8cc
feat(uns): wire Tags + Virtual Tags tabs on the equipment page (reuse modals)
2026-06-11 14:44:35 -04:00
Joseph Doherty
7fbfeca451
feat(uns): equipment detail page shell + Details tab + create-redirect
2026-06-11 14:36:48 -04:00
Joseph Doherty
5cae3c5b96
fix(uns): guard scripted-alarm name uniqueness on create/update (code-review)
2026-06-11 14:31:35 -04:00
Joseph Doherty
705ed6234f
feat(uns): scripted-alarm CRUD in IUnsTreeService for the equipment Alarms tab
2026-06-11 14:25:59 -04:00
Joseph Doherty
7c22861598
feat(uns): per-equipment tag/virtual-tag list service methods
2026-06-11 14:19:46 -04:00
Joseph Doherty
7d91737dac
feat(uns): carry created id on UnsMutationResult for equipment create
2026-06-11 14:16:21 -04:00
Joseph Doherty
1f904c4502
docs(uns): implementation plan + tasks for tabbed equipment detail page
2026-06-11 14:13:25 -04:00
Joseph Doherty
df2a488b81
docs(uns): design for tabbed equipment detail page
...
Replace the modal-based equipment editor on /uns with a dedicated
/uns/equipment/{id} page carrying Details/Tags/Virtual Tags/Alarms
tabs; trim the UNS tree so Equipment is a leaf that links to the page;
remove the standalone /scripted-alarms pages in favour of the per-
equipment Alarms tab. Reuses TagModal + VirtualTagModal unchanged; only
the alarm editor is new. No entity/EF-migration change.
2026-06-11 14:03:21 -04:00
Joseph Doherty
6208304a44
docs(historian): HistorizeToAveva opt-out semantics + config knobs + startup validation
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-11 13:24:46 -04:00
Joseph Doherty
7f535c0e9d
test(historian): cover non-positive DeadLetterRetentionDays validation warning
2026-06-11 13:24:46 -04:00
Joseph Doherty
56750e110f
fix(alarms): historize the real operator for shelve/unshelve/enable/disable transitions
2026-06-11 13:14:00 -04:00
Joseph Doherty
5ea6e9d7d9
fix(historian): validate non-positive drain/capacity/retention knobs (review) + log prefix
2026-06-11 13:09:13 -04:00
Joseph Doherty
f215982b93
feat(historian): drain/capacity/retention config knobs + startup config-warning validation
2026-06-11 13:04:16 -04:00
Joseph Doherty
61b230d79a
harden(historian): nullable HistorizeToAveva (missing→historize) for rolling-restart-safe deserialize + middle-link test
2026-06-11 13:00:57 -04:00
Joseph Doherty
c20d228384
fix(historian): volatile _backoffIndex + read _evictedCount under lock (thread-safety)
2026-06-11 12:49:44 -04:00
Joseph Doherty
8012509584
feat(historian): honor per-alarm HistorizeToAveva opt-out at the durable write
2026-06-11 12:48:13 -04:00
Joseph Doherty
fa839d1dbf
docs(plan): alarm historian follow-ups (pending #1-6) implementation plan
2026-06-11 12:42:54 -04:00
Joseph Doherty
f64f7ce669
fix(alarms): historize the operator (not 'system') for CommentAdded transitions (review)
v2-ci / build (push) Failing after 50s
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-11 11:42:56 -04:00
Joseph Doherty
6dbd4fb875
docs(historian): alerts-fed historization (scripted, Primary-gated, exactly-once) + config-gated Sqlite→Wonderware sink
2026-06-11 11:36:37 -04:00
Joseph Doherty
943c621371
feat(historian): config-gated SqliteStoreAndForward→Wonderware sink (AddAlarmHistorian)
2026-06-11 11:30:31 -04:00
Joseph Doherty
e9355e9514
refactor(historian): gate before translate (no discarded alloc on secondary) + strengthen double-write warning (review)
2026-06-11 11:24:48 -04:00
Joseph Doherty
bb42e5834a
feat(historian): subscribe to alerts topic + translate to AlarmHistorianEvent (Primary-gated, exactly-once)
2026-06-11 11:18:26 -04:00
Joseph Doherty
d2cc4a1222
test+docs(galaxy): verify alarm acknowledger recovers after transient fault; document alarm-client reconnect
2026-06-11 11:12:49 -04:00
Joseph Doherty
8ac3ac5be9
feat(alarms): carry AlarmTypeName + operator Comment on AlarmTransitionEvent (historian feed prep)
2026-06-11 11:03:00 -04:00
Joseph Doherty
cd72f79ef4
docs(plan): alarm follow-ups round 2 implementation plan (T0-T5)
2026-06-11 10:56:25 -04:00
Joseph Doherty
3ad7960dc2
docs(design): alarm follow-ups round 2 (historian alerts-feeder + Galaxy reconnect verify)
2026-06-11 10:51:55 -04:00
Joseph Doherty
521ee75355
docs: redundancy primary-only alarm emission/historization, redundancy-state NodeId+heartbeat fixes, Galaxy reconnect, live-pill
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-11 10:18:25 -04:00
Joseph Doherty
7891e28b52
fix(redundancy): periodic heartbeat re-publish so late subscribers learn their role
2026-06-11 10:06:46 -04:00
Joseph Doherty
e241332a24
fix(redundancy): key redundancy-state snapshot by canonical host:port NodeId (was host-only — broke ServiceLevel + scripted-alarm emit gate)
2026-06-11 09:56:17 -04:00
Joseph Doherty
23a4a0093b
fix(adminui): guard Alerts chip auto-clear against stale-timer race (review)
2026-06-11 09:38:58 -04:00
Joseph Doherty
19ec656cdc
feat(adminui): ScriptLog live-pill bound to broadcaster health
...
Subscribe ConnectionStateChanged before reading IsConnected (subscribe-then-read
idiom, matches DriverStatusPanel) so no transition is missed. Add
OnConnectionStateChanged handler that marshals to the circuit sync context via
InvokeAsync. Dispose unsubscribes both events.
Reconnect-overlay: App.razor loads _framework/blazor.web.js and contains no
custom #components-reconnect-modal element; .NET 10 Blazor's default reconnect
overlay is active automatically — no custom markup needed.
No unit tests; live-verify follows.
2026-06-11 09:37:19 -04:00
Joseph Doherty
d29c933499
feat(adminui): Alerts timed-shelve picker + chip auto-clear + live-pill health
2026-06-11 09:34:33 -04:00
Joseph Doherty
f9932f2d8e
refactor(admin): use CorrelationId wrapper for alarm ack/shelve commands
2026-06-11 09:27:24 -04:00
Joseph Doherty
3a0e0907e4
feat(adminui): add connection-health signal to in-process broadcaster + bridges
2026-06-11 09:20:36 -04:00
Joseph Doherty
565b77e6cf
fix(galaxy): unify IsConnected with _connected guard; AttachForTests marks connected (review)
2026-06-11 09:16:51 -04:00
Joseph Doherty
43b96441a5
fix(galaxy): reconnect recreates a faulted session instead of no-op'ing
2026-06-11 09:10:52 -04:00
Joseph Doherty
4f291ed09c
test(redundancy): cover absent-node default-historize for HistorianAdapter (A2)
2026-06-11 09:02:02 -04:00
Joseph Doherty
0742946108
feat(redundancy): gate alarm historization on Primary (A2, defensive — actor currently unfed)
...
HistorianAdapterActor now subscribes to the redundancy-state DPS topic,
caches the local node's RedundancyRole, and SKIPS the durable-sink enqueue
when the local node is Secondary or Detached. Unknown/null role default-writes
so single-node deploys and the boot window never silently drop historization.
GetStatus stays ungated.
PREMISE: verified the actor is registered but FED BY NOTHING in production —
there is no AlarmHistorianEvent producer and nothing resolves its registry key
to Tell it. This is a FORWARD-LOOKING / DEFENSIVE guard, not a fix for a live
double-write: the moment a per-node feeder lands (engine -> historian, expected
as a per-node cluster broadcast like the alerts topic), only the Primary will
write to the durable sink (exactly-once across all alarm sources).
Mirrors the sibling A1 treatment of ScriptedAlarmHostActor (06c4155 ) and
OpcUaPublishActor's redundancy-state handler. localNode threaded through
HistorianAdapterActor.Props from ServiceCollectionExtensions (roleInfo.LocalNode).
2026-06-11 08:57:41 -04:00
Joseph Doherty
9ac9f0b7a9
test(redundancy): cover Detached suppression + absent-node default-emit (A1)
2026-06-11 08:50:59 -04:00
Joseph Doherty
06c415598c
feat(redundancy): gate scripted-alarm alerts publish on Primary (A1)
2026-06-11 08:44:44 -04:00
Joseph Doherty
535787bd85
docs(plan): alarm follow-ups implementation plan (T0-T10)
2026-06-11 08:28:37 -04:00