Joseph Doherty
e55bd46ca1
fix(health-monitoring): resolve HealthMonitoring-015 — nullable LastReportReceivedAt
...
A heartbeat-registered site that has never sent a full report now has
LastReportReceivedAt = null instead of the year-0001 sentinel. TimestampDisplay
accepts DateTimeOffset? and renders null as a placeholder ('awaiting first
report') rather than a ~2000-year-stale date. Cross-module: HealthMonitoring +
CentralUI.
2026-05-17 05:43:05 -04:00
Joseph Doherty
7da303d7bb
fix(configuration-database): resolve ConfigurationDatabase-012 — store inbound-API keys as HMAC-SHA256 hashes
...
Inbound-API bearer credentials are no longer persisted in plaintext. ApiKey now
holds a KeyHash (peppered HMAC-SHA256); the key is shown once at creation and
only its hash is stored. Lookup and validation hash the presented candidate.
Cross-module: Commons (ApiKey, ApiKeyHasher), ConfigurationDatabase (mapping +
HashApiKeyValue migration), InboundAPI (ApiKeyValidator), ManagementService
(key creation), CentralUI (ApiKeys.razor). Existing keys must be re-issued.
2026-05-17 05:42:52 -04:00
Joseph Doherty
d6221419c6
fix(template-engine): resolve TemplateEngine-015,016 — cascade-rename nested derived templates, correct composed-script ParentPath
2026-05-17 03:18:41 -04:00
Joseph Doherty
0135a6b2a6
fix(store-and-forward): resolve StoreAndForward-015..017 — document maxRetries=0 contract, replicate operator retry/discard, real category in activity log
2026-05-17 03:18:41 -04:00
Joseph Doherty
be274212f0
fix(site-runtime): resolve SiteRuntime-017..019 — isolated attribute snapshot for child actors, corrected dispatcher doc, remove dead lifecycle handlers
2026-05-17 03:18:41 -04:00
Joseph Doherty
6d63fef934
fix(site-event-logging): resolve SiteEventLogging-012..014 — fault dropped-event tasks, escape LIKE wildcards, re-triage startup-purge finding (Won't Fix)
2026-05-17 03:18:41 -04:00
Joseph Doherty
a58cec5776
fix(security): resolve Security-012..015 — fail login on partial LDAP outage, escape-aware DN parsing, idle check on refresh, username normalization
2026-05-17 03:18:33 -04:00
Joseph Doherty
f5199e9da9
fix(notification-service): resolve NotificationService-014..018 — classify OAuth2 failures, fail on bad auth config, wire NotificationOptions fallback, disposable concurrency limiter
2026-05-17 03:18:33 -04:00
Joseph Doherty
bf6bd8de5a
fix(management-service): resolve ManagementService-014..017 — site-scope enforcement on QueryDeployments, atomic override validation, curated fault messages, test coverage
2026-05-17 03:18:33 -04:00
Joseph Doherty
73a393076a
fix(inbound-api): resolve InboundAPI-014..017 — return-value validation, reflection-gateway hardening, deadline-bound routed calls, RouteHelper test coverage
2026-05-17 03:18:33 -04:00
Joseph Doherty
aca65e85bb
fix(host): resolve Host-012..015 — consume DownIfAlone in HOCON, sub-second timing precision, config-driven Serilog sinks, transient-only startup retry
2026-05-17 03:18:33 -04:00
Joseph Doherty
eae4077414
fix(health-monitoring): resolve HealthMonitoring-013,014,016 — shorter-timeout cadence, options validation, injected TimeProvider; HealthMonitoring-015 left open (cross-module design decision)
2026-05-17 03:18:24 -04:00
Joseph Doherty
da8c9f171b
fix(external-system-gateway): resolve ExternalSystemGateway-015..017 — treat MaxRetries=0 as unset, scope HTTP connection cap to gateway clients, no bare trailing '?'
2026-05-17 03:18:24 -04:00
Joseph Doherty
4fa6f0e774
fix(deployment-manager): resolve DeploymentManager-015..017 — reconciliation applies post-success side effects, updates RevisionHash, corrected XML doc
2026-05-17 03:18:24 -04:00
Joseph Doherty
14ba5495d1
fix(data-connection-layer): resolve DataConnectionLayer-014..017 — real logger for OPC UA client, initial-connect failover, accurate subscribe response, per-tag write-batch results
2026-05-17 03:18:24 -04:00
Joseph Doherty
3d3f43229f
fix(configuration-database): resolve ConfigurationDatabase-013,014 — fail-fast on missing key ring, single converter local; ConfigurationDatabase-012 left open (cross-module design decision)
2026-05-17 03:18:24 -04:00
Joseph Doherty
a768135237
fix(communication): resolve Communication-012..015 — endpoint-aware gRPC client cache, address-change recreation, correlation-id validation, node-flip tests
2026-05-17 03:18:17 -04:00
Joseph Doherty
a78c3bcb6f
fix(commons): resolve Commons-013,014 — integral JSON index handling, distinguish Malformed vs Legacy OPC UA config
2026-05-17 03:18:17 -04:00
Joseph Doherty
21856a4be7
fix(cluster-infrastructure): resolve ClusterInfrastructure-009,010 — DownIfAlone consumption (via Host-012), validator enforces DownIfAlone=true
2026-05-17 03:18:17 -04:00
Joseph Doherty
d7d74ebe5e
fix(central-ui): resolve CentralUI-020..025 — auth-ping idle logout, DebugView race, push-handler disposal guard, JS-interop catch narrowing, claim-constant helper, SessionExpiry tests
2026-05-17 03:18:16 -04:00
Joseph Doherty
f82bcbed7c
fix(cli): resolve CLI-014..016 — re-triage update-command contract, doc-surface drift, table-column union
2026-05-17 03:18:16 -04:00
Joseph Doherty
8dd74121c3
fix(inbound-api): resolve InboundAPI-012 — move ParameterDefinition POCO to ScadaLink.Commons (Types/InboundApi)
2026-05-17 00:04:56 -04:00
Joseph Doherty
34588ae10c
fix(central-ui): resolve CentralUI-006 — push-based deployment status via IDeploymentStatusNotifier, remove 10s polling timer
2026-05-17 00:02:45 -04:00
Joseph Doherty
a55502254e
fix(external-system-gateway): resolve ExternalSystemGateway-011 — name-keyed repository lookups replace fetch-all-then-filter on the call hot path
2026-05-17 00:02:45 -04:00
Joseph Doherty
1e2e7d2e7c
fix(central-ui): resolve CentralUI-005 — sliding cookie session expiry (Security AddCookie + AuthEndpoints + SessionExpiry)
2026-05-16 23:54:31 -04:00
Joseph Doherty
b1f4251d75
fix(commons): resolve Commons-008 — replace ValueTuple in SetConnectionBindingsCommand with named ConnectionBinding record (CLI, ManagementService, TemplateEngine, CentralUI)
2026-05-16 23:54:31 -04:00
Joseph Doherty
adb5e75ec3
fix(template-engine): resolve TemplateEngine-011,013,014 — remove dead converter, duplicate-id-safe cycle detection, unified deletion logic; TemplateEngine-012 deferred
2026-05-16 22:32:30 -04:00
Joseph Doherty
9e2416b34c
fix(store-and-forward): resolve StoreAndForward-006,007,008,009 — transactional parked reads, PipeTo, fault-isolated activity events; 002/011/012 deferred
2026-05-16 22:32:30 -04:00
Joseph Doherty
dd7626da63
fix(site-runtime): resolve SiteRuntime-012,013,015,016 — doc accuracy, shared LoggerFactory, execution-actor coverage; SiteRuntime-014 deferred
2026-05-16 22:32:30 -04:00
Joseph Doherty
b1ea78a9fd
fix(site-event-logging): resolve SiteEventLogging-006,009,011 — severity index, accurate XML doc, dead-placeholder removal
2026-05-16 22:32:30 -04:00
Joseph Doherty
84a696b0e4
fix(security): resolve Security-009,010,011 — LDAP connection timeout, design-doc correction, security-path test coverage; Security-008 deferred
2026-05-16 22:24:03 -04:00
Joseph Doherty
a9bd017c88
fix(notification-service): resolve NotificationService-010,011,012 — disconnect SMTP on failure, relocate exception type, OAuth2/token-cache test coverage
2026-05-16 22:24:03 -04:00
Joseph Doherty
dab0056d1b
fix(management-service): resolve ManagementService-005,008,010,011 — supervision strategy, configured command timeout, remove stale ResolveRoles path; ManagementService-012 deferred
2026-05-16 22:24:03 -04:00
Joseph Doherty
858fe24add
fix(inbound-api): resolve InboundAPI-009,010,011,013 — cache failed compiles, reject unknown body fields, close enumeration oracle, drop misnamed factory; InboundAPI-007,012 flagged
2026-05-16 22:24:03 -04:00
Joseph Doherty
8664cdf940
fix(host): resolve Host-005..011 — async startup, HOCON escaping, port-conflict check, dead-config cleanup, migration retry, log-level wiring; Host-002 flagged
2026-05-16 22:24:03 -04:00
Joseph Doherty
2d7ac5b57f
fix(health-monitoring): resolve HealthMonitoring-004,006,010,011,012 — heartbeat-doc accuracy, testable sequence seeding, logged failures, dead-code removal
2026-05-16 22:14:23 -04:00
Joseph Doherty
e57ccd78b7
fix(external-system-gateway): resolve ExternalSystemGateway-012,013,014 — failure logging, connection-limit wiring, test coverage; ExternalSystemGateway-011 flagged
2026-05-16 22:14:23 -04:00
Joseph Doherty
e9ee4e3ea5
fix(deployment-manager): resolve DeploymentManager-009,010,012,014 — shared deployment ID, lifecycle-timeout enforcement, doc/test cleanup; DeploymentManager-013 flagged
2026-05-16 22:14:23 -04:00
Joseph Doherty
ff4a4bdeb7
fix(data-connection-layer): resolve DataConnectionLayer-008,013 — O(1) unsubscribe via reverse index, atomic disconnect guard
2026-05-16 22:14:23 -04:00
Joseph Doherty
7d1cc5cbb4
fix(configuration-database): resolve ConfigurationDatabase-005,006,008,009,010,011 — bounded gRPC columns, split queries, CSV-parse logging, null guards, coverage
2026-05-16 22:14:23 -04:00
Joseph Doherty
0b4c1563aa
fix(communication): resolve Communication-009,010,011 — atomic site-cache refresh, XML doc correction, test coverage
2026-05-16 22:04:21 -04:00
Joseph Doherty
c07f524ca4
fix(commons): resolve Commons-005..007,009..012 — OPC UA parse status, TryConvert correctness, Result null guard, invariant formatting, doc refresh
2026-05-16 22:04:21 -04:00
Joseph Doherty
d7b275fc9b
fix(central-ui): resolve CentralUI-015..019 — pager windowing, logout CSRF, narrowed catch blocks, coverage; CentralUI-015 re-triaged Won't Fix
2026-05-16 22:04:21 -04:00
Joseph Doherty
404216b4ee
fix(cli): resolve CLI-008..013 — format validation, exit-code semantics, debug-stream cancellation/disposal, test coverage
2026-05-16 22:04:21 -04:00
Joseph Doherty
804697f873
fix(template-engine): resolve TemplateEngine-006..010 — code-region-aware API/brace scanning, composed-alarm override validation, N+1 fix, doc correction
2026-05-16 21:44:11 -04:00
Joseph Doherty
5672502d83
fix(store-and-forward): resolve StoreAndForward-004,005,010,013 — accurate handler-contract doc, conditional sweep writes, reset LastAttemptAt on parked retry, test coverage
2026-05-16 21:44:10 -04:00
Joseph Doherty
a88bec9376
fix(site-runtime): resolve SiteRuntime-004..011 — deploy-after-persist, remove reflection, deterministic IDs, non-blocking startup, dedicated script scheduler, config-change detection, semantic trust-model check
2026-05-16 21:44:10 -04:00
Joseph Doherty
24a4a2d165
fix(site-event-logging): resolve SiteEventLogging-005,007,008,010 — background async writer, drop concrete downcast, surface write failures, test coverage
2026-05-16 21:44:10 -04:00
Joseph Doherty
632d44f38c
fix(host,deployment-manager,communication): repair cross-module DI regressions from batch 1-2
...
- DeploymentManager-008: revert IConfiguration overload (violated OptionsTests
component-convention); Host now binds the ScadaLink:DeploymentManager section
- SiteStreamGrpcServer: make test-only int ctor internal so DI sees one public
ctor (resolves ambiguous-constructor failure in SiteCompositionRootTests)
- Host site composition-root test config: supply Cluster:SeedNodes for the new
ClusterOptionsValidator
2026-05-16 21:28:50 -04:00
Joseph Doherty
30ebbdd183
fix(security): resolve Security-004..007 — configurable user-id attribute, DN escaping, JWT issuer/audience validation, idle-timeout preservation
2026-05-16 21:22:01 -04:00