Commit Graph

879 Commits

Author SHA1 Message Date
Joseph Doherty efe3ada03d feat(m9/T25): connection live-status indicators on the design page 2026-06-18 11:03:22 -04:00
Joseph Doherty e3bc19c673 feat(m9/T23a): folder sibling reorder (ReorderFolderAsync + command + handler) 2026-06-18 11:00:57 -04:00
Joseph Doherty 0bd5e0986f fix(m9/T28b): forward --trigger-kind on alarm-update/script-add/script-update; fix default-selector test
Three dead-code bugs: --trigger-kind was registered but never read or forwarded on the
alarm-update, script-add, and script-update paths. Introduced TriggerConfigJson.InjectAnalysisKind
helper that rewrites any raw --trigger-config JSON blob, writing "analysisKind":"Strict" when
the flag is strict (case-insensitive) and stripping the key for any other value. Wired the
helper into all three handlers alongside the existing alarm-add path (which already used
AlarmTriggerConfigJson.Build). Added 6 unit tests for the new helper in TemplateTriggerKindTests.

Also fixed a false-positive bUnit test (AlarmTriggerEditor_Expression_NoAnalysisKindInConfig_
SelectorDefaultsAdvisory) that passed because "Advisory" appeared anywhere in the HTML; now
asserts select.GetAttribute("value") == "Advisory". Added the missing equivalent test for
ScriptTriggerEditor (ScriptTriggerEditor_Expression_NoAnalysisKindInConfig_SelectorDefaultsAdvisory).
2026-06-18 10:54:42 -04:00
Joseph Doherty dcc6f623e2 feat(m9/T28b): trigger analysis-kind selector (UI) + --trigger-kind (CLI)
Surfaces the T28a backend "analysisKind" discriminator in both authoring
surfaces: an Advisory|Strict <select> (id="alarm-trigger-kind" /
"script-trigger-kind") added to the Expression fragment of
AlarmTriggerEditor and ScriptTriggerEditor, and a --trigger-kind option
on template alarm/script add+update in the CLI.

Key/value contract: "analysisKind":"Strict" when strict; key omitted for
Advisory — exactly as ValidationService.IsStrictAnalysis reads it.
Selector only shown for Expression triggers; non-Expression triggers do
not emit the key even if IsStrictAnalysisKind is set on the model.

Both projects build 0 warnings; 101 CentralUI Trigger tests + 33 CLI
Template tests pass.
2026-06-18 10:44:57 -04:00
Joseph Doherty f618ac0322 feat(m9/T22): template tree search box (wire TemplateFolderTree.Filter) 2026-06-18 10:35:35 -04:00
Joseph Doherty efcdd18794 feat(m9): CLI cached-call retry/discard command group
Adds `cached-call retry` and `cached-call discard` subcommands that relay
to the existing Deployer-gated RetryParkedMessageCommand /
DiscardParkedMessageCommand via the central SiteCallAuditActor → site relay.
ManagementCommandRegistry already covered both types via reflection auto-discovery.
CommandTreeTests updated to include cached-call (group count 16 → 17).
2026-06-18 10:13:56 -04:00
Joseph Doherty 0f04afbdf1 feat(m9/T28a): strict expression-trigger analysis kind (advisory default, strict escalates) 2026-06-18 10:13:12 -04:00
Joseph Doherty 72aec3b4d4 fix(dcl): robust static-tag seeding — bounded-retry+log initial seed (#1) and re-seed on reconnect (#3)
STATIC tags (no further OnDataChange after advise) depend entirely on the
seed read. Pre-fix HandleSubscribe seeded only on Success && Value != null,
silently dropping a seed that raced the just-created advise (VT_EMPTY) — so a
static tag stayed Uncertain forever while the source read Good. ReSubscribeAll
did no seeding at all, so a static tag could not self-heal across reconnect.

- New SeedTagsAsync helper: per-tag ReadAsync (not a bulk read — some gateways
  time out on large batches) with round-based bounded retry
  (SeedReadMaxAttempts/SeedReadRetryDelay), logging any tag that never yields a
  value (named — previously zero log trace).
- HandleSubscribe seed loop delegates to SeedTagsAsync.
- ReSubscribeAll re-seeds re-advised tags after reconnect via the
  generation-guarded TagValueReceived path (fan-out keys off
  _subscriptionsByInstance, preserved across reconnect).

Diagnosed live on wonder-app-vd03 2026-06-17 (see scadabridge-dcl-static-tag-false-bad).
Mechanism #2 (single transient-bad push) left as a follow-up.
2026-06-18 09:28:36 -04:00
Joseph Doherty f881521cc9 fix(transport-ui): reset connection choices on site change + clear state on back (M8 E2 review)
Fix 1: OnSiteChoiceChangedAsync now resets _connectionChoices for every
RequiredConnectionMapping under the changed source site after loading the new
target's connections. Choices are re-seeded to the same-named connection on
the new target if present, or CreateNewValue otherwise — preventing BuildNameMap
from emitting MapToExisting for a connection absent from the newly-chosen target.

Fix 2: BackToUpload now calls ResetSessionState() before resetting _step so
_session, _preview, _resolutions, _siteChoices, _connectionChoices,
_targetSites, and _targetConnections are all cleared when the operator backs
out to re-upload, making it safe to start a new import flow from a clean slate.

Tests 12 + 13 added to TransportImportPageTests.
2026-06-18 07:39:19 -04:00
Joseph Doherty d45a7a5760 fix(transport): real stale-instance enumeration in ImportResult (M8 D2, #16) + native-alarm rename-redirect test 2026-06-18 07:35:08 -04:00
Joseph Doherty c8211f6363 feat(transport-ui): import Map step + per-line diff view (M8 E2) 2026-06-18 07:21:23 -04:00
Joseph Doherty e67587ec93 fix(transport-ui): use DataConnection ctor in CountSecrets tests (M8 build fix) 2026-06-18 07:11:41 -04:00
Joseph Doherty 565d53d0fe feat(transport): import name-map plumbing via CLI + ManagementActor (M8 D3) 2026-06-18 07:08:33 -04:00
Joseph Doherty d974477e87 fix(transport): connection map Pass-2 (FK) + site-qualified connection resolution (M8 D1-FIX, C1+C2) 2026-06-18 07:08:31 -04:00
Joseph Doherty 6457f03fae feat(transport): apply site/instance import with name-map + FK rewire (M8 D1, T18) 2026-06-18 06:52:40 -04:00
Joseph Doherty 542a3e92eb fix(transport-ui): count site data-connection config in export secret banner (M8, C2-SECRET-1) 2026-06-18 06:37:38 -04:00
Joseph Doherty 50d77b07cf feat(transport): preview diff + required-mapping detection + blockers (M8 C2) 2026-06-18 06:28:47 -04:00
Joseph Doherty d0b38ad726 feat(transport-ui): export wizard site/instance selection (M8 E1) 2026-06-18 06:26:36 -04:00
Joseph Doherty bdbf5cdab0 feat(transport): export site/instance selection end-to-end via CLI + ManagementActor (M8 B4) 2026-06-18 06:14:39 -04:00
Joseph Doherty d7dae24355 feat(transport): per-line Myers code diff + site/connection/instance compare (M8 C1, T20) 2026-06-18 06:07:04 -04:00
Joseph Doherty 7e5b1b0275 feat(transport): resolve site/instance export selection + deps (M8 B1) 2026-06-18 05:55:56 -04:00
Joseph Doherty bb6e883758 feat(transport): serialize site/connection/instance entities<->DTOs (M8 B2) 2026-06-18 05:54:17 -04:00
Joseph Doherty aefdb9f4b6 feat(transport): manifest summary counts + schemaVersion 1.1 (M8 B3) 2026-06-18 05:52:12 -04:00
Joseph Doherty 0e507052a1 feat(transport): site/connection/instance bundle DTOs (M8 A2) 2026-06-18 05:42:24 -04:00
Joseph Doherty c1282e06a2 feat(transport): pure Myers LineDiffer helper (M8 A3, T20) 2026-06-18 05:41:10 -04:00
Joseph Doherty 4f1925870f feat(transport): name-map types + preview/selection/summary extensions (M8 A1) 2026-06-18 05:40:24 -04:00
Joseph Doherty 0c7774acdc fix(mgmt): re-assert MxGateway protocol at secured-write execute (D2 TOCTOU guard, T14b) 2026-06-18 04:24:53 -04:00
Joseph Doherty 39afa2743e fix(comm): route Search/Verify/WriteTag commands through SiteCommunicationActor + DeploymentManager (M7 end-to-end) 2026-06-18 03:59:35 -04:00
Joseph Doherty 384204b71a feat(centralui): cert-management UI + Trust action + site relay (T17) 2026-06-18 03:53:32 -04:00
Joseph Doherty 2d139442ba fix(siteruntime): CertStoreActor — dispose listed certs + reject path-traversal thumbprints (T17) 2026-06-18 03:42:17 -04:00
Joseph Doherty a56805e681 test(centralui): register IEndpointVerificationService in OpcUaEndpointEditor/DataConnectionForm fixtures broken by B8 verify-button (T17) 2026-06-18 03:38:43 -04:00
Joseph Doherty 1a7e735149 feat(centralui): Secured Writes page — operator submit + verifier queue + history (T14b) 2026-06-18 03:34:08 -04:00
Joseph Doherty b08bfae329 feat(audit): SecuredWrite audit kinds + best-effort per-lifecycle central direct-write; guard approve Decode (T14b) 2026-06-18 03:17:56 -04:00
Joseph Doherty c8d9303031 feat(siteruntime): per-node CertStore actor + trust broadcast to both site nodes (T17) 2026-06-18 03:13:48 -04:00
Joseph Doherty 303385fd98 feat(centralui): Verify-endpoint button + result/cert panel (T17) 2026-06-18 03:12:11 -04:00
Joseph Doherty 45a5a92455 fix(centralui): NodeBrowserDialog — reset load/expand spinner on error + clear stale failure on blank search (T15) 2026-06-18 03:05:23 -04:00
Joseph Doherty 733c7bf66c feat(dcl): OPC UA verify-endpoint probe with untrusted-cert capture (T17) 2026-06-18 03:00:55 -04:00
Joseph Doherty 90abb4b8e2 feat(centralui): NodeBrowserDialog search + load-more + type column (T15/T16) 2026-06-18 03:00:16 -04:00
Joseph Doherty 1f7bb7ace3 feat(mgmt): secured-write approve relays to site MxGateway write with CAS race guard (T14b) 2026-06-18 02:59:43 -04:00
Joseph Doherty 74dd26eebd feat: OPC UA address-space search plumbing — actor + comm + BrowseService (T15) 2026-06-18 02:51:57 -04:00
Joseph Doherty c00c8241b3 feat(dcl): bounded recursive OPC UA address-space search adapter (T15) 2026-06-18 02:45:01 -04:00
Joseph Doherty 9ec2450ad5 feat: thread BrowseNext continuation token through actor + BrowseService (T15) 2026-06-18 02:43:25 -04:00
Joseph Doherty d5e7e897c0 feat(centralui): InstanceConfigure CSV bulk override import (T16) 2026-06-18 02:30:33 -04:00
Joseph Doherty 25c9240415 feat(mgmt): secured-write submit/reject/list handlers + Operator/Verifier gating (T14b) 2026-06-18 02:29:29 -04:00
Joseph Doherty 586d54359c feat(cli): instance import-overrides --file (T16) 2026-06-18 02:27:40 -04:00
Joseph Doherty 2cfe0de927 feat(dcl): BrowseNext continuation paging + StubOpcUaClient canned browse (T15) 2026-06-18 02:21:59 -04:00
Joseph Doherty 3c9122bc07 feat(centralui): operator Alarm Summary page + per-instance snapshot fan-out (T13) 2026-06-18 02:21:41 -04:00
Joseph Doherty 6a6f8949b9 fix(commons): OverrideCsvParser — preserve literal mid-field quotes, error on unterminated quoted field (T16 CSV) 2026-06-18 02:13:10 -04:00
Joseph Doherty c799f41d53 feat(db): PendingSecuredWrite entity + migration + repository (T14b) 2026-06-18 02:09:31 -04:00
Joseph Doherty a0ce8b6c44 feat(security): add Operator + Verifier roles + policies + LDAP mapping options (T14a) 2026-06-18 02:07:01 -04:00