2026-06-30 - 2026-07-30
Overview
32 Pull requests merged by 1 user
Merged
#506 feat(mtconnect): read-only MTConnect Agent driver (P1) — 23 tasks + 5-leg live gate
Merged
#484 chore(auth): bump ZB.MOM.WW.Auth 0.1.1 -> 0.1.5 (family alignment)
Merged
#480 feat(alarms): scripted condition Quality from worst-of-input tag quality (#478)
Merged
#479 feat(alarms): condition Quality tracks source connectivity (#477)
Merged
#476 fix(alarms): populate ConditionClassId/ConditionClassName on condition events (#475)
Merged
#474 fix(alarms): populate EventType/SourceNode/SourceName on native + scripted conditions (#473)
Merged
#472 v3 Batch 4 — dual-namespace address space + raw-only runtime binding (v3.0)
Merged
#471 v3 Batch 3 — UNS reference-only Equipment + {{equip}}/<RefName> resolution
Merged
#470 v3 Batch 2 — /raw project-tree AdminUI + Calculation driver
Merged
#469 v3 Batch 1 — greenfield schema + RawPath identity rewiring
Merged
#467 docs(#420): final reconciliation — alarms-over-gateway feature complete; C.1 superseded
Merged
#466 docs(#456): live grind finding — retry/breaker write-trigger is structurally impossible
Merged
#465 fix(drivers): flip runtime tag parsers to strict enum parsing (#457)
Merged
#464 fix(redundancy): 2-node SBR exit-and-rejoin recovery (#459)
Merged
#462 docs(archreview): live finding — keep-oldest downs the survivor on oldest-crash (#459)
Merged
#461 test+docs(resilience): prove authored ResilienceConfig reaches the runtime pipeline (#456)
Merged
#460 fix(deps): clear CVE-2025-6965 — pin SQLitePCLRaw bundle to 2.1.12, drop audit suppression
Merged
#455 test(ldap): live GLAuth outage/recovery gate (R2-08 03/S2)
Merged
#454 fix(drivers): harden operator TimeoutMs handling + AbLegacy evict parity
Merged
#453 fix(s7): bound async wire ops with a wall-clock deadline (R2-01 read leg)
Merged
#452 fix(harness): deploy E2E tests pass against real SQL (misdiagnosed as emulation timing)
Merged
#451 fix(harness): swap retired bitnami/openldap for GLAuth (Host real-LDAP mode)
Merged
#450 fix(focas-tests): honour fixture endpoint + fix mock timer endianness (9F/1P → 10/10)
Merged
#449 docs(sweep): AbLegacy verified green — fixture-deployment gap, no code (#4)
Merged
#448 docs(modbus-tests): sweep #2 was a fixture-cycling false alarm (all profiles green)
Merged
#447 fix(opcuaserver-tests): fix cert-store gap + SDK read-throws drift (4F → 4/4)
Merged
#446 fix(abcip-tests): fix static-init NRE blocking AbCip.IntegrationTests
Merged
#445 docs(archreview): integration-suite sweep results + follow-ups
Merged
#444 docs(archreview): R2-04 T13/T15 live-passed
Merged
#443 fix(s7-cli): restore OnDataChange CliFx-console rationale comment
Merged
#442 fix(historian): map Boolean historization to Int2, not degenerate Int1 (#441)
Merged
#440 deps: bump HistorianGateway Client+Contracts to 0.3.0
36 Issues closed from 1 user
Closed
#523 Remove the periodic 5-minute device re-browse (tag-set drift detection) from FOCAS/TwinCAT/MTConnect/AbCip
Closed
#507 feat(raw): re-migrate discovered-node injection onto the raw device subtree — IRediscoverable is inert in v3
Closed
#516 Driver config edits are silently discarded on Modbus/FOCAS/OpcUaClient (deployment still seals green)
Closed
#518 IRediscoverable + IHostConnectivityProbe events have no consumer in src/ (9 drivers raise into the void); CLAUDE.md Change Detection is wrong
Closed
#490 feat(scripteditor): tag-path completion for absolute RawPaths
Closed
#505 AdminUI cluster-node editor was dead: HTTP 500 on load (InputNumber<byte>) + Save a silent no-op (NodeId regex forbids ':')
Closed
#488 feat(drivers): periodic reconcile of desired vs actual driver subscriptions
Closed
#499 DraftValidator cannot see ClusterNode.DriverConfigOverridesJson — the third driver-config persistence surface
Closed
#493 Phase 5 telemetry: existing deployments must populate ClusterNode.GrpcPort (seed only backfills fresh installs)
Closed
#501 Two alarm-ack tests assert an absence with AwaitAssert, so they pass instantly and prove nothing
Closed
#503 Flaky under load: Galaxy EventPumpBoundedChannelTests.Drops_newest_when_channel_fills_and_records_metric
Closed
#492 2-node keep-oldest cannot survive an oldest-node crash (survivor downs ITSELF) — evaluate ScadaBridge's auto-down decision
Closed
#504 bug(adminui): /scripts is a hard 500 when any Script.SourceHash is shorter than 12 chars
Closed
#487 bug(alarms): an active scripted alarm under-reports as normal after a full-rebuild deploy
Closed
#496 Sql driver: implement the §8.1 catalog identifier-validation gate (FF-1)
Closed
#497 Wrong OPC UA status-code constants in three existing drivers (FF-2)
Closed
#498 Deploy-time guard: reject a Sql DriverConfig blob carrying a connectionString key (FF-3)
Closed
#500 Intermittent single-test failure in Runtime.Tests under full-sweep load (unidentified)
Closed
#502 50 sub-second presence budgets remain in Runtime.Tests (the class behind three of #500's five defects)
Closed
#494 /health/active returns 200 on every node — the tier cannot identify the active node
Closed
#486 Node records Applied (and advances _currentRevision) for a deployment whose artifact it could not read
Closed
#485 Transient ConfigDb error during artifact load empties the served address space (logs claim "rebuild becomes no-op")
Closed
#483 AdminUI /admin/secrets renders but is non-interactive — Secrets.Ui RCL pages get no render mode
Closed
#482 Clustered secrets: Akka replication blocked by upstream deadlock (scadaproj#1) - keep Secrets:Replication:Enabled=false
Closed
#478 feat(alarms): scripted condition Quality from worst-of-input tag quality (Layer 3 of #477)
Closed
#477 bug(alarms): condition Quality is hardcoded Good regardless of the source tag's quality
Closed
#475 bug(alarms): condition events emit null ConditionClassId/ConditionClassName
Closed
#473 bug(alarms): native alarm conditions emit null SourceNode/SourceName/EventType
Closed
#420 alarms-over-gateway: wire worker AlarmClient + pin SDK call site (4 inert scaffolds + D.1 smoke)
Closed
#456 [archreview #10] Observe resilience retry/breaker firing in live dispatch (+ ResilienceConfig not in deploy artifact)
Closed
#457 [archreview R2-11 Phase C] Flip runtime driver parsers to strict (typo'd enum -> BadNodeIdUnknown)
Closed
#459 [archreview Crit-1/SBR] Non-transparent redundancy: crashing the OLDEST Akka node does not fail over
Closed
#422 DraftValidator/DraftSnapshot is dead code (no src/ caller) — possible publish-time enforcement gap
Closed
#458 Remove NuGetAuditSuppress for CVE-2025-6965 once a patched SQLitePCLRaw bundle ships
Closed
#424 Pre-existing test failure: EquipmentNamespaceMaterializationTests deployment Rejected (not Accepted)
Closed
#441 Boolean historization broken: EnsureTags(Int1) is server-degenerate — remap Boolean off Int1
50 Issues created by 1 user
Opened
#441 Boolean historization broken: EnsureTags(Int1) is server-degenerate — remap Boolean off Int1
Opened
#456 [archreview #10] Observe resilience retry/breaker firing in live dispatch (+ ResilienceConfig not in deploy artifact)
Opened
#457 [archreview R2-11 Phase C] Flip runtime driver parsers to strict (typo'd enum -> BadNodeIdUnknown)
Opened
#458 Remove NuGetAuditSuppress for CVE-2025-6965 once a patched SQLitePCLRaw bundle ships
Opened
#459 [archreview Crit-1/SBR] Non-transparent redundancy: crashing the OLDEST Akka node does not fail over
Opened
#468 Universal discovery browser: full controller-tree render is live-verify-blocked by the ab_server fixture (no @tags walk)
Opened
#473 bug(alarms): native alarm conditions emit null SourceNode/SourceName/EventType
Opened
#475 bug(alarms): condition events emit null ConditionClassId/ConditionClassName
Opened
#477 bug(alarms): condition Quality is hardcoded Good regardless of the source tag's quality
Opened
#478 feat(alarms): scripted condition Quality from worst-of-input tag quality (Layer 3 of #477)
Opened
#481 feat(alarms): bridge driver comms-loss into scripted-alarm input quality (Layer 4 of #477)
Opened
#482 Clustered secrets: Akka replication blocked by upstream deadlock (scadaproj#1) - keep Secrets:Replication:Enabled=false
Opened
#483 AdminUI /admin/secrets renders but is non-interactive — Secrets.Ui RCL pages get no render mode
Opened
#485 Transient ConfigDb error during artifact load empties the served address space (logs claim "rebuild becomes no-op")
Opened
#486 Node records Applied (and advances _currentRevision) for a deployment whose artifact it could not read
Opened
#487 bug(alarms): an active scripted alarm under-reports as normal after a full-rebuild deploy
Opened
#488 feat(drivers): periodic reconcile of desired vs actual driver subscriptions
Opened
#489 feat(raw): hot-rebind a renamed raw tag's live value without a node recreate
Opened
#490 feat(scripteditor): tag-path completion for absolute RawPaths
Opened
#491 test(historian): live end-to-end gate for continuous-historization value capture
Opened
#492 2-node keep-oldest cannot survive an oldest-node crash (survivor downs ITSELF) — evaluate ScadaBridge's auto-down decision
Opened
#493 Phase 5 telemetry: existing deployments must populate ClusterNode.GrpcPort (seed only backfills fresh installs)
Opened
#494 /health/active returns 200 on every node — the tier cannot identify the active node
Opened
#496 Sql driver: implement the §8.1 catalog identifier-validation gate (FF-1)
Opened
#497 Wrong OPC UA status-code constants in three existing drivers (FF-2)
Opened
#498 Deploy-time guard: reject a Sql DriverConfig blob carrying a connectionString key (FF-3)
Opened
#499 DraftValidator cannot see ClusterNode.DriverConfigOverridesJson — the third driver-config persistence surface
Opened
#500 Intermittent single-test failure in Runtime.Tests under full-sweep load (unidentified)
Opened
#501 Two alarm-ack tests assert an absence with AwaitAssert, so they pass instantly and prove nothing
Opened
#502 50 sub-second presence budgets remain in Runtime.Tests (the class behind three of #500's five defects)
Opened
#503 Flaky under load: Galaxy EventPumpBoundedChannelTests.Drops_newest_when_channel_fills_and_records_metric
Opened
#504 bug(adminui): /scripts is a hard 500 when any Script.SourceHash is shorter than 12 chars
Opened
#505 AdminUI cluster-node editor was dead: HTTP 500 on load (InputNumber<byte>) + Save a silent no-op (NodeId regex forbids ':')
Opened
#507 feat(raw): re-migrate discovered-node injection onto the raw device subtree — IRediscoverable is inert in v3
Opened
#508 feat(mqtt): write-through (IWritable) — Sparkplug NCMD/DCMD + plain publish (design P3)
Opened
#509 fix(adminui): a Sparkplug metric whose name contains / cannot be browse-committed
Opened
#510 fix(adminui): _canRebirth is captured at browse-open, so a reaped session still draws Request-rebirth
Opened
#511 feat(mqtt): Sparkplug primary-host STATE publishing (ActAsPrimaryHost)
Opened
#512 refactor(mqtt): .Browser references .Driver — extract the client-options builder so the layering exception can go
Opened
#513 fix(adminui): the MQTT tag editor writes a meaningless payloadFormat into a Sparkplug tag blob
Opened
#514 fix(adminui): Request-rebirth cannot be armed on a Sparkplug plant that has not birthed since the browse window opened
Opened
#515 feat(mqtt): Sparkplug DataSet / Template / PropertySet metric support
Opened
#516 Driver config edits are silently discarded on Modbus/FOCAS/OpcUaClient (deployment still seals green)
Opened
#517 Driver health is published AFTER teardown, so GetHealth() can report Healthy with a disposed client
Opened
#518 IRediscoverable + IHostConnectivityProbe events have no consumer in src/ (9 drivers raise into the void); CLAUDE.md Change Detection is wrong
Opened
#519 No driver's Bad/Uncertain status sub-code reaches an OPC UA client (3-state OpcUaQuality collapse)
Opened
#520 Node ACLs are authored and deployed but never enforced — wire IPermissionEvaluator or retire the surface
Opened
#521 IHostConnectivityProbe / DriverHostStatus: dead surface — build the publisher or delete it
Opened
#522 Driver stability tiers are inert: every driver runs Tier A — pass real tiers or delete the machinery
Opened
#523 Remove the periodic 5-minute device re-browse (tag-set drift detection) from FOCAS/TwinCAT/MTConnect/AbCip