Commit Graph

1679 Commits

Author SHA1 Message Date
Joseph Doherty 84cb8c2abb test(comm): de-race StreamRelay null-map + SiteConnectionUp gauge under load (#288) 2026-06-19 05:00:13 -04:00
Joseph Doherty ab40534986 build(deps): targeted NuGetAuditSuppress for SQLitePCLRaw advisory GHSA-2m69-gcr7-jv3q (#292)
The high-sev advisory is on transitive native SQLitePCLRaw.lib.e_sqlite3 2.1.11
(via Microsoft.Data.Sqlite/EFCore.Sqlite). Microsoft.Data.Sqlite.Core 10.0.9 (latest
10.0.x) still references SQLitePCLRaw.core 2.1.11, so a supported-line bump doesn't clear
it; the only patched lib is the SQLitePCLRaw 3.x line, which is an unsupported/risky forced
override under a Data.Sqlite built for 2.1.x. Suppress ONLY this advisory (auditing stays on
for everything else) so the full solution AND the docker in-container restore build cleanly
without the blanket /p:NuGetAudit=false. No version/code change; runtime byte-identical.
Revisit when MS ships a 10.0.x referencing a patched bundle.
2026-06-19 04:52:42 -04:00
Joseph Doherty f08a4d609f test(playwright): M9 surface coverage — template search, schema-library, move-connection (#263) 2026-06-19 04:31:38 -04:00
Joseph Doherty c68b9cccd2 test(playwright): harden #230 line-diff test — force-open nested details, robust +/- hunk assert
Live-run fixes: nested <details> made the summary selector ambiguous (strict-mode);
force every disclosure open via JS. Drop the brittle specific-line-text ('99') assert
(depends on CLI-seeded bodies) for a ≥1 add-hunk + ≥1 remove-hunk count check. (#230)
2026-06-19 04:27:20 -04:00
Joseph Doherty 529921f2de test(playwright): M8 import Map step + per-line diff coverage (#230) 2026-06-19 04:23:12 -04:00
Joseph Doherty 7bd081ba50 fix(ui): move Razor comment outside <select> start tag in Health.razor (circuit crash, #291)
Pre-existing render-crash (introduced by eb4bce3e): a @* *@ comment between
attributes inside the site-health-trends <select> start tag rendered as an
invalid attribute name in a real browser (InvalidCharacterError on setAttribute),
tearing down the SignalR circuit whenever Site Health Trends renders. bUnit's
virtual DOM masked it; the live Playwright smoke (KpiTiles) caught it. Comment
moved outside the start tag.
2026-06-19 04:16:01 -04:00
Joseph Doherty 4b8986036e test(dcl): deterministic stale-generation reseed-drop after second failover (DCL-027 #233) 2026-06-19 03:39:19 -04:00
Joseph Doherty e814bf5efb fix(ui): per-field sub-schema for escape-hatch Monaco editors + dispose guard (#261) 2026-06-19 03:28:58 -04:00
Joseph Doherty 282bc8b53c fix(ui): templates root-menu Escape + double-menu guard + reorder disabled tests (#258)
- Root context menu now has tabindex/focus + Escape-key close (OnRootMenuKeyDown) mirroring the node menu
- Opening root menu calls _tree.DismissNodeContextMenu(); opening node menu fires OnNodeContextMenuOpened → DismissRootContextMenu so only one menu is ever visible
- Add FolderContextMenu_MoveUp_IsDisabled_OnFirstSibling and FolderContextMenu_MoveDown_IsDisabled_OnLastSibling bUnit tests
2026-06-19 03:28:18 -04:00
Joseph Doherty 8f85cce298 fix(ui): schema-library delete-audit name + busy guard + edit-row guard + sanitized create-race test (#260) 2026-06-19 03:28:11 -04:00
Joseph Doherty e3b83f8561 fix(cli): guard min-time overflow + normalize 0 exec-timeout to null + stale comment (#54 review) 2026-06-19 03:24:11 -04:00
Joseph Doherty 597d664a53 fix(cli): warn on --trigger-kind without --trigger-config (#257)
InjectAnalysisKind returns null on a null/empty trigger-config, so passing
--trigger-kind strict WITHOUT --trigger-config silently dropped the kind on
template script add/update and template alarm update. The CLI now detects that
combination (TriggerKindWillBeIgnored) and prints a clear warning to stderr,
then continues (warn-and-continue: the kind is advisory metadata, not a required
field, so the entity is still created — just without the requested analysis kind).
The --trigger-kind help text on all three commands now documents that it requires
--trigger-config, as does the CLI README.

This commit also carries the shared CLI command-builder file (Commands/TemplateCommands.cs)
and README, which the same builders edit for both #257 and the #54 flag additions —
the #54 message contracts/handler/UI/tests landed in the preceding commit.

- TriggerKindWillBeIgnored predicate + WarnIfTriggerKindIgnored stderr warning,
  wired into script add/update and alarm update SetActions.
- Shared option descriptions document the --trigger-config requirement.
- Adds the #54 CLI flags (--min-time-between-runs, --execution-timeout-seconds) and
  TryParseMinTimeBetweenRuns to the same builder file.
- Tests: TemplateTriggerKindIgnoredTests pins the warn predicate.
2026-06-19 03:14:24 -04:00
Joseph Doherty ae25b5a8d6 feat(cli): add --execution-timeout-seconds + --min-time-between-runs to template script (#54)
Expose TemplateScript.ExecutionTimeoutSeconds and MinTimeBetweenRuns (previously
settable only via Transport bundle import) on the CLI and Central UI authoring surfaces.

- Commons: add additive trailing optionals MinTimeBetweenRuns (TimeSpan?) and
  ExecutionTimeoutSeconds (int?) to Add/UpdateTemplateScriptCommand.
- ManagementActor: thread both new fields into the built TemplateScript on add/update.
- CLI template script add/update: new --min-time-between-runs (duration: ms/s/min,
  bare number = seconds, 0 = unset, mirroring DurationInput) and
  --execution-timeout-seconds (int) flags, with client-side duration validation.
- Central UI TemplateEdit: add an Execution timeout input (seconds) on the script
  trigger tab, mirroring the existing Min-time-between-runs control; null/0 = site default.
- Tests: TemplateScriptTimingTests pins the option surface + duration parsing; updated
  the stale 'no UI control' comment on the TemplateService round-trip test.
2026-06-19 03:14:10 -04:00
Joseph Doherty 5185486a3c fix(deploy): include ElementDataType in RevisionHashService.HashableAttribute (#290)
Fold a List attribute's ElementDataType into the hashable projection so a
change to the element type (e.g. Int32 -> Double) with identical JSON-encoded
values is detected as a staleness/revision change. Inserted in alphabetical
position; null ElementDataType (scalars) is omitted by the canonical
serializer (WhenWritingNull), so scalar-only configs hash identically to
before. DiffService.AttributesEqual gains the same comparison to keep the
structured diff in parity with the staleness hash. Adds tests for differing
vs. equal ElementDataType (hash + diff) and the scalar no-op guard.
2026-06-19 03:07:06 -04:00
Joseph Doherty 79fe098886 test(transport): regression — empty-ConnectionName binding skipped on import (#229) 2026-06-19 03:06:10 -04:00
Joseph Doherty 69e0d546b5 fix(audit): route SecuredWrite audit via ICentralAuditWriter for SourceNode stamping (#206) 2026-06-19 02:37:48 -04:00
Joseph Doherty fb18253f32 fix(deploy): normalize snapshot List values (Decode→Encode) before staleness/diff (#102); CLI --value native-List help 2026-06-19 02:24:26 -04:00
Joseph Doherty 454e47ea38 fix(mgmt): pass sharedScripts to design-time template $ref validation (#259) 2026-06-19 02:21:15 -04:00
Joseph Doherty d844405cec fix(templates): hoist (DataType,ElementDataType,Value) attribute validation into TemplateService (#92) 2026-06-19 02:19:35 -04:00
Joseph Doherty e51104af5f refactor(kpi): shared public KpiMetrics catalog — source consts + UI pages key off one symbol (#178) 2026-06-19 02:04:10 -04:00
Joseph Doherty 47f5ca687c refactor(commons): consolidate List element-type/coercion into AttributeValueCodec; InstanceActor + CLI reuse it (#93) 2026-06-19 02:03:09 -04:00
Joseph Doherty 2935c41bf7 fix(inbound-api): recursively coerce nested Object/List values to typed CLR (#55) 2026-06-19 02:02:10 -04:00
Joseph Doherty 2843781db4 docs(#70): correct SqliteInsertSql comment — test drives EF SQL generator, not the constant 2026-06-19 01:57:02 -04:00
Joseph Doherty 3d4521f250 fix(configdb): make ResyncLdapGroupMappingSeed migration idempotent (guarded insert) (#70) 2026-06-19 01:51:20 -04:00
Joseph Doherty f4e03ce8f7 fix(site-runtime): normalize routed GetAttributes List values for cross-process transport (#162) 2026-06-19 01:49:38 -04:00
Joseph Doherty a1eed1c2ab fix(templates): gate resolver HiLo-merge on both-HiLo to match flattener (#262)
Change `mergeEffective` delegate in `ResolveWinners<T>` from `Func<string?, T, string?>`
to `Func<Winner<T>, T, string?>` so the alarm hook can inspect the existing winner's row.
Gate the per-setpoint merge in `ResolveAlarmWinners` on both sides being HiLo
(`existingWinner.Row.TriggerType == HiLo && derived.TriggerType == HiLo`), matching
`FlatteningService.ResolveInheritedAlarms` exactly. Base non-HiLo + derived HiLo now
falls through to whole-replace (derived config verbatim) — the same path the flattener
takes. Preview-only fix; the deploy path is unchanged.

Add test: `Resolve_BaseNonHiLo_DerivedHiLo_DerivedConfigWinsVerbatim` — asserts
resolver and flattener agree when base is ValueMatch and derived overrides to HiLo.
2026-06-19 01:49:25 -04:00
Joseph Doherty 5585d7ba51 test(#53): follow inline→Commons dedup — relocate OpcUa/MxGateway literal coverage to AlarmCapableProtocolsTests; pin TemplateEdit delegation 2026-06-19 01:42:37 -04:00
Joseph Doherty 7c1d61647e feat(dcl): bound per-tag seed ReadAsync with SeedReadTimeout (#232, DCL-027) 2026-06-19 01:35:40 -04:00
Joseph Doherty b432c788c3 refactor(ui): dedup alarm-capable protocol predicate to AlarmCapableProtocols (#53) 2026-06-19 01:32:55 -04:00
Joseph Doherty 72e084f588 fix(configdb): GetInstanceBy{Id,UniqueName}Async include NativeAlarmSourceOverrides (#226) 2026-06-19 01:32:10 -04:00
Joseph Doherty 78360eb6a7 test(dcl): strengthen DCL002 derace — 30s AwaitCondition + non-parallel collection for full-suite load (#234) 2026-06-19 01:04:36 -04:00
Joseph Doherty 6a4c9a85b8 fix(notification-outbox+test): provider-aware InsertIfNotExists for SQLite + supply ApiKeyPepper in IntegrationTests host config (#286) 2026-06-19 01:03:48 -04:00
Joseph Doherty 649e45b5c0 test(transport-integration): register ISharedSchemaRepository for FlatteningPipeline in BundleImporterApply fixture (#287, M9-T32 injection regression) 2026-06-19 01:02:58 -04:00
Joseph Doherty 48dfb875bd test(centralui): fix stale List-override round-trip assertion to mirror the page's real string-row encode cycle (CASE A) (#163) 2026-06-19 00:38:06 -04:00
Joseph Doherty 2b2c1b264a test(centralui): mirror production canonical AttributePath==AttributeName in DebugViewStreamRaceTests (#177) 2026-06-19 00:36:59 -04:00
Joseph Doherty 7674b37a24 test(dcl): stabilize flaky DCL002 crash/restart subscription-preservation with condition-based wait (#234) 2026-06-19 00:33:48 -04:00
Joseph Doherty ddafc5c811 test(commons): realign enum-count guards (AuditKind/AuditChannel/DataType) + derace StaleTagMonitor timer tests (#228, pre-existing) 2026-06-19 00:33:39 -04:00
Joseph Doherty 7aeb7a43b0 test(centralui): register IKpiHistoryQueryService substitute in QueryStringDrillInTests (#207, pre-existing M6/K14 DI gap) 2026-06-19 00:31:51 -04:00
Joseph Doherty 4369da61c1 fix(centralui): move TreeView toggle comment outside start tag — mid-attribute Razor comment crashed render (InvalidCharacterError → circuit teardown on branch-node trees) (INT) 2026-06-18 20:44:04 -04:00
Joseph Doherty 8270a603d3 test(playwright): update pager/markup selectors to M10 component hooks (INT) 2026-06-18 20:41:43 -04:00
Joseph Doherty 023c4f7cde docs(m10): mark M10 UI/UX platform delivered + sync README/CLAUDE + log follow-ups 2026-06-18 20:20:39 -04:00
Joseph Doherty 042776abb6 fix(host): load theme.js before ThemeScripts so window.sbTheme is defined first (T34b review) 2026-06-18 20:15:35 -04:00
Joseph Doherty 828acd3266 test(centralui): TreeView keyboard-activation test + document preventDefault scope (T36a review) 2026-06-18 20:14:18 -04:00
Joseph Doherty fef4d4cf83 feat(centralui): dark-mode toggle + localStorage persistence + SSR pre-hydration (T34b) 2026-06-18 20:09:00 -04:00
Joseph Doherty 0449c473c1 feat(centralui): TreeView chevron accessible name + keyboard activation + a11y regression test (T36a) 2026-06-18 20:08:47 -04:00
Joseph Doherty 4d3cef18cb fix(centralui): MoveDataConnectionDialog surfaces MoveAsync exceptions inline instead of failing silently (T33b review) 2026-06-18 20:06:06 -04:00
Joseph Doherty 07b651d933 refactor(centralui): tokenize remaining standalone modal backdrops via .sb-modal-backdrop + bounded bg-* dark audit (T34c) 2026-06-18 20:04:17 -04:00
Joseph Doherty 1d82e6bc8c refactor(centralui): AuditResultsGrid adopts KeysetPager + AuditFilterBar adopts DateTimeRangeFilter (T35g) 2026-06-18 20:03:40 -04:00
Joseph Doherty a3ac77dd41 refactor(centralui): EventLogs adopts DateTimeRangeFilter (T35h) 2026-06-18 20:02:57 -04:00
Joseph Doherty e773915e26 refactor(centralui): SiteCallsReport adopts KeysetPager + DateTimeRangeFilter + tokenized backdrop (T35f) 2026-06-18 19:58:55 -04:00