2026-03-09 - 2026-06-09
Overview
315 Pull requests merged by 1 user
Merged
#418 docs: alarms-over-gateway plan banner — record A.2 dev-rig finding
Merged
#417 scripts+docs: Refresh-Services.ps1 for alarm-rig deploy refresh (PR D.1)
Merged
#416 docs: alarms-over-gateway completion banner + AlarmTracking v2 (PR B.5)
Merged
#415 abstractions+driver+client.shared: extend AlarmEventArgs with rich payload (PR E.7)
Merged
#414 server: DriverNodeManager prefers IAlarmSource ack over IWritable (PR B.3)
Merged
#413 driver-galaxy: GalaxyDriver implements IAlarmSource (PR B.2)
Merged
#412 server: Phase7Composer accepts DI-registered IAlarmHistorianWriter (PR B.4)
Merged
#411 sidecar: wire IAlarmEventWriter into Program.cs (PR C.2)
Merged
#410 sidecar: AahClientManagedAlarmEventWriter implements IAlarmEventWriter (PR C.1)
Merged
#409 driver-galaxy: EventPump dispatches OnAlarmTransition family (PR B.1)
Merged
#408 [s7] S7 — Optimized DB / S7Plus (decision PR)
Merged
#407 [twincat] TwinCAT — IAlarmSource via TC3 EventLogger
Merged
#406 [s7] S7 — PLC password / protection-level handling
Merged
#405 [s7] S7 — CPU diagnostic buffer / SZL reads
Merged
#404 [opcuaclient] OpcUaClient — ServerUriArray redundant failover
Merged
#403 [opcuaclient] OpcUaClient — Full Aggregate function set
Merged
#402 [opcuaclient] OpcUaClient — IHistoryProvider.ReadEventsAsync interface fix + impl
Merged
#401 [focas] FOCAS — Cycle time per part / last cycle delta
Merged
#400 [ablegacy] AbLegacy — DH+ via 1756-DHRIO bridging
Merged
#399 [ablegacy] AbLegacy — Auto-demote on comm failure
Merged
#398 [abcip] AbCip — IPerCallHostResolver failover routing
Merged
#397 [abcip] AbCip — HSBY paired-IP probing
Merged
#396 [twincat] TwinCAT — Nested UDT browse via online type walker
Merged
#395 [s7] S7 — Instance-DB / FB parameter access
Merged
#394 [s7] S7 — UDT / STRUCT / nested-DB handling
Merged
#393 [s7] S7 — Symbol-table / TIA Portal export browse
Merged
#392 [opcuaclient] OpcUaClient — Reverse Connect
Merged
#391 [focas] FOCAS — Password / unlock parameter
Merged
#390 [focas] FOCAS — pmc_wrpmcrng
Merged
#389 [focas] FOCAS — cnc_wrmacro + cnc_wrparam
Merged
#388 [focas] FOCAS — Write infrastructure + per-tag opt-in
Merged
#387 [ablegacy] AbLegacy — RSLogix 500/PLC-5 symbol import
Merged
#386 [ablegacy] AbLegacy — Diagnostic counters as tags
Merged
#385 [ablegacy] AbLegacy — Per-device timeout / retry overrides
Merged
#384 [abcip] AbCip — _RefreshTagDb writeable system tag
Merged
#383 [abcip] AbCip — Diagnostic / system tags as browseable variables
Merged
#382 [abcip] AbCip — Write deadband / write-on-change
Merged
#381 [abcip] AbCip — Per-tag scan rate / scan group bucketing
Merged
#380 [twincat] TwinCAT — Cycle-time / jitter / PLC-state diagnostics
Merged
#379 [twincat] TwinCAT — Per-tag MaxDelay tuning
Merged
#378 [s7] S7 — Pre-flight PUT/GET enablement test
Merged
#377 [s7] S7 — Deadband / on-change with thresholds
Merged
#376 [s7] S7 — Per-tag scan group / publish rate
Merged
#375 [s7] S7 — TSAP / Connection Type selector
Merged
#374 [s7] S7 — PDU size negotiation surfaced
Merged
#373 [opcuaclient] OpcUaClient — Auto re-import on ModelChangeEvent
Merged
#372 [focas] FOCAS — cnc_rdalmhistry alarm-history extension
Merged
#371 [ablegacy] AbLegacy — Per-tag deadband / change filter
Merged
#370 [ablegacy] AbLegacy — Array contiguous block addressing
Merged
#369 [abcip] AbCip — Logical-blocking / non-blocking strategy selector
Merged
#368 [abcip] AbCip — Symbolic vs logical (instance-ID) addressing toggle
Merged
#367 [abcip] AbCip — Configurable CIP Connection Size per device
Merged
#366 [twincat] TwinCAT — Symbol-version invalidation listener
Merged
#365 [twincat] TwinCAT — Handle-based access with caching
Merged
#364 [twincat] TwinCAT — ADS Sum-read / Sum-write
Merged
#363 [s7] S7 — Block-read coalescing for contiguous DBs
Merged
#362 [s7] S7 — Multi-variable PDU packing
Merged
#361 [opcuaclient] OpcUaClient — Method node mirroring + Call passthrough
Merged
#360 [opcuaclient] OpcUaClient — Type definition mirroring
Merged
#359 [opcuaclient] OpcUaClient — Selective import + namespace remap
Merged
#358 [opcuaclient] OpcUaClient — Discovery URL FindServers
Merged
#357 [focas] FOCAS — Bulk PMC range read coalescing
Merged
#356 [focas] FOCAS — PMC F/G letters for 16i
Merged
#355 [focas] FOCAS — Multi-path/multi-channel CNC
Merged
#354 [focas] FOCAS — DIAG: address scheme
Merged
#353 [ablegacy] AbLegacy — ST string verification + length guard
Merged
#352 [ablegacy] AbLegacy — PD/MG/PLS/BT structure files
Merged
#351 [abcip] AbCip — AOI input/output handling
Merged
#350 [abcip] AbCip — Online tag-DB refresh trigger
Merged
#349 [abcip] AbCip — CSV tag import/export
Merged
#348 [abcip] AbCip — Descriptions to OPC UA Description
Merged
#347 [abcip] AbCip — L5X (XML) parser + ingest
Merged
#346 [abcip] AbCip — L5K parser + ingest
Merged
#345 [twincat] TwinCAT — ENUM and ALIAS at discovery
Merged
#344 [twincat] TwinCAT — Whole-array reads
Merged
#343 [twincat] TwinCAT — Bit-indexed BOOL writes (RMW)
Merged
#342 [twincat] TwinCAT — Native UA TIME/DATE/DT/TOD
Merged
#341 [twincat] TwinCAT — Int64 fidelity for LINT/ULINT
Merged
#340 [s7] S7 — LOGO!/S7-200 V-memory parser
Merged
#339 [s7] S7 — Array tags (ValueRank=1)
Merged
#338 [s7] S7 — DTL/DT/S5TIME/TIME/TOD/DATE codecs
Merged
#337 [s7] S7 — STRING/WSTRING/CHAR/WCHAR
Merged
#336 [s7] S7 — 64-bit scalar types (LInt/ULInt/LReal/LWord)
Merged
#335 [opcuaclient] OpcUaClient — CRL/revocation handling
Merged
#334 [opcuaclient] OpcUaClient — Diagnostics counters
Merged
#333 [opcuaclient] OpcUaClient — Honor server OperationLimits
Merged
#332 [opcuaclient] OpcUaClient — Per-tag advanced subscription tuning incl. deadband
Merged
#331 [opcuaclient] OpcUaClient — Per-subscription tuning
Merged
#330 [focas] FOCAS — Figure scaling + diagnostics
Merged
#329 [focas] FOCAS — Operator messages + block text
Merged
#328 [focas] FOCAS — Tool number + work coordinate offsets
Merged
#327 [focas] FOCAS — Modal codes + overrides
Merged
#326 [focas] FOCAS — Parts count + cycle time
Merged
#325 [focas] FOCAS — ODBST status flags as fixed-tree nodes
Merged
#324 [ablegacy] AbLegacy — Indirect/indexed addressing parser
Merged
#323 [ablegacy] AbLegacy — Sub-element bit semantics
Merged
#322 [ablegacy] AbLegacy — MicroLogix function-file letters
Merged
#321 [ablegacy] AbLegacy — PLC-5 octal I/O addressing
Merged
#320 [abcip] AbCip — CIP multi-tag write packing
Merged
#319 [abcip] AbCip — Array-slice read addressing Tag[0..N]
Merged
#318 [abcip] AbCip — STRINGnn variant decoding
Merged
#317 [abcip] AbCip — LINT/ULINT 64-bit fidelity
Merged
#223 Task #222 partial — unblock AB Legacy PCCC via cip-path workaround (5/5 stages)
Merged
#222 Task #220 — AB CIP + S7 live-boot verification (5/5 stages each)
Merged
#221 Task #219 — OpcUaServerOptions.AnonymousRoles (5/5 e2e stages pass)
Merged
#218 Task #209 exit gate — seed-creds fix + live Modbus verification (4/5 stages)
Merged
#217 Tasks #211 #212 #213 — AbCip / S7 / AbLegacy server-side factories + seed SQL
Merged
#216 Task #210 — Modbus server-side factory + seed SQL
Merged
#215 Task #253 follow-up — fix test-all.ps1 StrictMode crash on missing JSON keys
Merged
#214 Task #253 follow-up — driver-side e2e debug: port fixes + HR[200] scratch register
Merged
#208 Task #253 follow-up — bidirectional + subscribe-sees-change e2e stages
Merged
#207 Task #253 — E2E CLI test scripts + FOCAS test-client CLI
Merged
#206 Task #252 — docs/ index + parent doc for the driver CLI suite
Merged
#205 Task #251 — S7 + TwinCAT test-client CLIs (driver CLI suite complete)
Merged
#204 Task #250 — AB CIP + AB Legacy test-client CLIs
Merged
#203 Task #249 — Driver test-client CLIs: shared lib + Modbus CLI first
Merged
#202 Task #224 close — AB Legacy PCCC fixture: AB_LEGACY_TRUST_WIRE opt-in
Merged
#201 Task #242 finish — UnsTab drag-drop interactive E2E tests un-skip + pass
Merged
#200 Task #242 partial — UnsTab interactive E2E test bodies + harness upgrades (Skip-guarded)
Merged
#199 Task #220 — Wire FOCAS into DriverFactoryRegistry bootstrap pipeline
Merged
#198 Task #219 follow-up — close AlarmConditionState child-NodeId + Part 9 event-propagation gaps
Merged
#197 Task #219 — Server-integration test coverage for IAlarmSource dispatch path
Merged
#196 Driver-instance bootstrap pipeline (#248) — DriverInstance rows materialise as live IDriver instances
Merged
#195 Phase 7 follow-up #240 — Live OPC UA E2E smoke runbook + seed + first-run evidence
Merged
#194 Phase 7 follow-up #247 — Galaxy.Host historian writer + SQLite sink activation
Merged
#193 Phase 7 follow-up #246 — Phase7Composer + Program.cs wire-in
Merged
#192 Phase 7 follow-up #244 — DriverSubscriptionBridge
Merged
#191 Phase 7 follow-up #245 — ScriptedAlarmReadable adapter over engine state
Merged
#190 Phase 7 follow-up #243 — CachedTagUpstreamSource + Phase7EngineComposer
Merged
#189 Phase 7 follow-ups #239 (plumbing) + #241 (diff-proc extension)
Merged
#188 Admin.E2ETests scaffolding — Playwright + Kestrel + InMemory DB + test auth
Merged
#187 Phase 7 Stream H — exit gate compliance script + closeout doc
Merged
#186 Phase 7 Stream G follow-up — DriverNodeManager dispatch routing by NodeSourceKind
Merged
#185 Phase 7 Stream F — Admin UI for scripts + test harness + historian diagnostics
Merged
#184 Phase 7 Stream G — Address-space integration (NodeSourceKind + walker emits VirtualTag/ScriptedAlarm)
Merged
#183 Phase 7 Stream E — Config DB schema for scripts, virtual tags, scripted alarms, and alarm state
Merged
#182 Phase 7 Stream D — Historian alarm sink (SQLite store-and-forward + Galaxy.Host IPC contracts)
Merged
#181 Phase 7 Stream C — Core.ScriptedAlarms (Part 9 state machine + predicate engine + IAlarmSource)
Merged
#180 Phase 7 Stream B — Core.VirtualTags engine + dep graph + timer + source
Merged
#179 Phase 7 Stream A.3 — ScriptLoggerFactory + ScriptLogCompanionSink (closes Stream A)
Merged
#178 Phase 7 Stream A.2 — compile cache + per-evaluation timeout wrapper
Merged
#177 Phase 7 Stream A.1 — Core.Scripting project scaffold + ScriptContext + sandbox + AST dependency extractor
Merged
#176 ADR-002 — driver-vs-virtual dispatch for Phase 7 scripting
Merged
#175 Phase 7 plan doc — scripting runtime + virtual tags + scripted alarms + historian alarm sink
Merged
#174 Modbus exception-injection profile — wire-level coverage for codes 0x01/0x03/0x04/0x05/0x06/0x0A/0x0B
Merged
#173 FOCAS Tier-C PR E — ops glue: ProcessHostLauncher + post-mortem MMF + NSSM scripts
Merged
#172 FOCAS Tier-C PR D — supervisor + backoff + crash-loop breaker
Merged
#171 FOCAS Tier-C PR C — IPC path end-to-end
Merged
#170 FOCAS Tier-C PR B � Driver.FOCAS.Host net48 x86 skeleton
Merged
#169 FOCAS Tier-C PR A � Driver.FOCAS.Shared MessagePack contracts
Merged
#168 FOCAS version-matrix stabilization (PR 1 of #220 split)
Merged
#167 AB Legacy ab_server PCCC Docker fixture scaffold (#224)
Merged
#166 TwinCAT XAR integration fixture scaffold (#221)
Merged
#165 AB CIP Logix Emulate golden-box tier � scaffolding
Merged
#164 Doc + code-comment sweep � finish the native-fallback removal
Merged
#163 Remove native-launcher fallbacks; Docker is the only path for Modbus / S7 / AB CIP / OpcUaClient
Merged
#162 Dockerize Modbus + AB CIP + S7 test fixtures for reproducibility
Merged
#161 OpcUaClient integration fixture � opc-plc in Docker (#215)
Merged
#160 S7 integration fixture via python-snap7 (#216) + per-driver test-fixture coverage docs
Merged
#159 AbCip IAlarmSource via ALMD projection (#177, feature-flagged)
Merged
#158 AbCip whole-UDT read optimization (#194)
Merged
#157 ADR-001 last-mile � Program.cs composes walker into production boot (#214)
Merged
#156 EquipmentNamespaceContentLoader � Config-DB loader for walker wire-in
Merged
#155 ADR-001 wire-in � EquipmentNodeWalker in OpcUaApplicationHost (#212 + #213)
Merged
#154 ADR-001 Task B � NodeScopeResolver + ScopePathIndexBuilder + #195 close-out
Merged
#153 EquipmentNodeWalker � ADR-001 Task A (#210)
Merged
#152 ADR-001 � Equipment node walker (draft, seeking decision)
Merged
#151 Phase 2 official close-out (#209)
Merged
#150 Close client rename residuals (#207 + #208)
Merged
#149 Doc refresh � multi-driver OtOpcUa (#202�#206)
Merged
#148 Roslyn analyzer OTOPCUA0001 � unwrapped capability call (#200)
Merged
#147 OTel Prometheus exporter � /metrics scrape endpoint (#201)
Merged
#146 DiffViewer ACL section � extend sp_ComputeGenerationDiff with NodeAcl (#196 slice 3)
Merged
#145 ACL + role-grant SignalR invalidation (#196 slice 2)
Merged
#144 AclsTab Probe-this-permission (#196 slice 1)
Merged
#143 Pin ab_server to libplctag v2.6.16 + real SHA256 hashes
Merged
#142 ab_server fixture � per-family profiles + CI-fetch contract (#180)
Merged
#141 Redundancy OTel Meter + RoleChanged SignalR push (#198)
Merged
#140 AlarmSurfaceInvoker � wrap IAlarmSource through CapabilityInvoker (#161 runtime slice)
Merged
#139 ExternalIdReservation merge in FinaliseBatch (#197)
Merged
#138 UnsTab native HTML5 drag/drop + 409 conflict modal (#153 UI slice)
Merged
#137 DiffViewer refactor � 6 section cards + 1000-row cap (#156)
Merged
#136 Admin RedundancyTab � per-cluster read-only topology (#149 UI slice)
Merged
#135 Equipment CSV import UI (#163 UI slice)
Merged
#134 Admin RoleGrants page � LDAP?role CRUD (#144 RoleGrantsTab slice)
Merged
#133 Admin Equipment editor � IdentificationFields component + edit mode (#159 editor slice)
Merged
#132 Admin /hosts red-badge + resilience columns + Polly telemetry observer (#164)
Merged
#131 AB CIP UDT Template Object shape reader
Merged
#130 AB CIP @tags walker � CIP Symbol Object decoder + LibplctagTagEnumerator
Merged
#129 Bit-in-word RMW pass 2 � AbCip + AbLegacy
Merged
#128 Bit-in-word RMW pass 1 � Modbus + FOCAS
Merged
#127 TwinCAT symbol browser via SymbolLoaderFactory
Merged
#126 FOCAS PR 3 � Discovery + Subscribe + Probe + HostResolver
Merged
#125 FOCAS PR 2 � IReadable + IWritable + real FwlibFocasClient P/Invoke
Merged
#124 FOCAS PR 1 � Scaffolding + Core
Merged
#123 TwinCAT � Native ADS notifications for ISubscribable
Merged
#122 TwinCAT PR 3 � Discovery + Subscribe + Probe + HostResolver
Merged
#121 TwinCAT PR 2 � IReadable + IWritable
Merged
#120 TwinCAT PR 1 � Scaffolding + Core
Merged
#119 AB Legacy PR 3 � ITagDiscovery + ISubscribable + IHostConnectivityProbe + IPerCallHostResolver
Merged
#118 AB Legacy PR 2 � IReadable + IWritable
Merged
#117 AB Legacy PR 1 � Scaffolding + Core (PCCC address parser)
Merged
#116 AB CIP PR 9-12 � Per-family profile tests + GuardLogix safety-tag support
Merged
#115 AB CIP PR 8 � IHostConnectivityProbe + IPerCallHostResolver
Merged
#114 AB CIP PR 7 � ISubscribable via shared PollGroupEngine
Merged
#113 AB CIP PR 6 � UDT member-declaration support
Merged
#112 AB CIP PR 5 — ITagDiscovery (pre-declared + controller-enumeration scaffolding)
Merged
#111 AB CIP PR 4 — IWritable
Merged
#110 AB CIP PR 3 — IReadable against libplctag (swappable factory + fake + skip-gated smoke)
Merged
#109 AB CIP PR 2 — Scaffolding: AbCipDriver skeleton + libplctag binding + parsers
Merged
#108 AB CIP PR 1 — Extract shared PollGroupEngine into Core.Abstractions
Merged
#107 Phase 6.1 Stream E.3 partial - in-flight counter feeds CurrentBulkheadDepth
Merged
#106 Phase 6.4 Stream B.2-B.4 server-side - EquipmentImportBatch staging + FinaliseBatch
Merged
#105 Phase 6.1 Stream E.2 partial - ResilienceStatusPublisherHostedService
Merged
#104 Phase 6.1 Stream A remaining - IPerCallHostResolver + per-call host dispatch (decision #144)
Merged
#103 Phase 6.1 Stream A follow-up - DriverInstance.ResilienceConfig JSON column + parser + wire-in
Merged
#102 Phase 6.4 Stream D server-side - IdentificationFolderBuilder (OPC 40010 sub-folder materializer)
Merged
#101 Phase 6.1 Stream B.4 follow-up - ScheduledRecycleHostedService
Merged
#100 v2 release-readiness - blocker #3 closed; all three code-path blockers shut
Merged
#99 Phase 6.3 Stream C core - RedundancyStatePublisher + PeerReachability
Merged
#98 Phase 6.3 Stream A - RedundancyTopology + ClusterTopologyLoader + RedundancyCoordinator
Merged
#97 v2 release-readiness dashboard - blocker #2 closed
Merged
#96 Phase 6.1 Stream D follow-up - SealedBootstrap consumes ResilientConfigReader + StaleConfigFlag; /healthz surfaces flag
Merged
#95 v2 release-readiness dashboard update - blocker #1 closed
Merged
#94 Phase 6.2 Stream C follow-up - wire AuthorizationGate into DriverNodeManager Read/Write/HistoryRead
Merged
#93 v2 release-readiness capstone - aggregate compliance runner + readiness dashboard
Merged
#92 Phase 6.4 exit gate - compliance real-checks + phase doc = SHIPPED (data layer)
Merged
#91 Phase 6.4 Stream A + B data layer - UnsImpactAnalyzer + EquipmentCsvImporter
Merged
#90 Phase 6.3 exit gate - compliance real-checks + phase doc = SHIPPED (core)
Merged
#89 Phase 6.3 Stream B + D core - ServiceLevelCalculator + RecoveryStateManager + ApplyLeaseRegistry
Merged
#88 Phase 6.2 exit gate - compliance script real-checks + phase doc = SHIPPED (core)
Merged
#87 Phase 6.2 Stream D data layer - ValidatedNodeAclAuthoringService
Merged
#86 Phase 6.2 Stream C foundation - AuthorizationGate + ILdapGroupsBearer
Merged
#85 Phase 6.2 Stream B - Permission-trie evaluator (Core.Authorization)
Merged
#84 Phase 6.2 Stream A - LdapGroupRoleMapping entity + migration + CRUD service
Merged
#83 Phase 6.1 exit gate - compliance script real-checks + phase doc status = SHIPPED
Merged
#82 Phase 6.1 Stream E data layer - DriverInstanceResilienceStatus + DriverResilienceStatusTracker + EF migration
Merged
#81 Phase 6.1 Stream D - LiteDB generation-sealed cache + ResilientConfigReader + UsingStaleConfig flag
Merged
#80 Phase 6.1 Stream C - Health endpoints on :4841 + structured logging + Serilog JSON sink
Merged
#79 Phase 6.1 Stream B (partial) - Tier registry invariant + MemoryTracking with hybrid formula
Merged
#78 Phase 6.1 Stream A (partial) - Polly resilience foundation: pipeline builder + CapabilityInvoker + per-tier defaults
Merged
#77 Phase 6 reconcile - merge adjustments into plan bodies, add decisions #143-162, scaffold compliance stubs
Merged
#76 Phase 6 — Four implementation plans for unplanned v2 features, each with codex adversarial review
Merged
#75 Phase 3 PR 76 -- OPC UA Client IHistoryProvider
Merged
#74 Phase 3 PR 75 -- OPC UA Client IAlarmSource
Merged
#73 Phase 3 PR 74 -- OPC UA Client transparent reconnect via SessionReconnectHandler
Merged
#72 Phase 3 PR 73 -- OPC UA Client browse enrichment
Merged
#71 Phase 3 PR 72 -- Multi-endpoint failover for OPC UA Client
Merged
#70 Phase 3 PR 71 -- OpcUaAuthType.Certificate user authentication
Merged
#69 Phase 3 PR 70 -- Apply SecurityPolicy + expand to standard OPC UA policies
Merged
#68 Phase 3 PR 69 -- OPC UA Client ISubscribable + IHostConnectivityProbe
Merged
#67 Phase 3 PR 68 -- OPC UA Client ITagDiscovery (Full browse)
Merged
#66 Phase 3 PR 67 -- OPC UA Client IReadable + IWritable
Merged
#65 Phase 3 PR 66 -- OPC UA Client (gateway) driver scaffold
Merged
#64 Phase 3 PR 65 -- S7 ITagDiscovery + ISubscribable + IHostConnectivityProbe
Merged
#63 Phase 3 PR 64 -- S7 IReadable + IWritable via S7.Net
Merged
#62 Phase 3 PR 63 -- S7AddressParser (DB/M/I/Q/T/C grammar)
Merged
#61 Phase 3 PR 62 -- Siemens S7 native driver project scaffold
Merged
#60 Phase 2 PR 61 -- Close V1_ARCHIVE_STATUS.md: Streams D + E done
Merged
#59 Phase 3 PR 60 -- Mitsubishi MELSEC quirk integration tests
Merged
#58 Phase 3 PR 59 -- MelsecAddress helper with family selector (hex vs octal X/Y)
Merged
#57 Phase 3 PR 58 -- Mitsubishi MELSEC pymodbus profile + smoke
Merged
#56 Phase 3 PR 57 -- S7 byte-order + fingerprint integration tests
Merged
#55 Phase 3 PR 56 -- Siemens S7-1500 pymodbus profile + smoke
Merged
#54 Phase 3 PR 55 -- Mitsubishi MELSEC Modbus TCP quirks research doc
Merged
#53 Phase 3 PR 54 -- Siemens S7 Modbus TCP quirks research doc
Merged
#52 Phase 3 PR 53 -- Transport reconnect-on-drop + SO_KEEPALIVE (DL260 no-keepalive quirk)
Merged
#51 Phase 3 PR 52 -- Modbus exception-code -> OPC UA StatusCode translation
Merged
#50 Phase 3 PR 51 -- DL260 X-input FC02 discrete-input mapping end-to-end test
Merged
#49 Phase 3 PR 50 -- DL260 bit-memory helpers (Y/C/X/SP) + coil integration tests
Merged
#48 Phase 3 PR 49 -- Per-device FC03/FC16 register caps with auto-chunking
Merged
#47 Phase 3 PR 48 -- DL205 CDAB float word order end-to-end test
Merged
#46 Phase 3 PR 47 -- DL205 V-memory octal-address helper
Merged
#45 Phase 3 PR 46 -- DL205 BCD decoder
Merged
#44 Phase 3 PR 45 -- DL205 string byte-order quirk
Merged
#43 Phase 3 PR 44 -- pymodbus validation + IPv4-explicit transport bugfix
Merged
#42 Phase 3 PR 43 — Swap ModbusPal to pymodbus for the integration-test simulator
Merged
#41 Phase 3 PR 42 — ModbusPal simulator profiles for Standard + DL205/DL260
Merged
#40 Phase 3 PR 41 — Document AutomationDirect DL205 / DL260 Modbus quirks
Merged
#39 Phase 3 PR 40 — LiveStack write + subscribe tests against TestMachine_001
Merged
#38 Phase 3 PR 39 — LiveStackFixture skip-with-reason for elevated shells
Merged
#37 Phase 3 PR 38 — DriverNodeManager HistoryRead override (LMX #1 finish)
Merged
#36 Phase 3 PR 37 — End-to-end live-stack Galaxy smoke test
Merged
#35 Phase 3 PR 36 — AVEVA prerequisites test-support library
Merged
#34 Phase 3 PR 35 — IHistoryProvider gains ReadAtTime + ReadEvents; Proxy implements both
Merged
#33 Phase 3 PR 34 — Host-status publisher (Server) + /hosts drill-down page (Admin)
Merged
#32 Phase 3 PR 33 — DriverHostStatus entity + migration (LMX #7 data layer)
Merged
#31 Phase 3 PR 32 — Multi-driver integration test
Merged
#30 Phase 3 PR 31 — Live-LDAP integration test + Active Directory compatibility
Merged
#29 Phase 3 PR 30 — Modbus integration-test project scaffold + DL205 smoke test
Merged
#28 Phase 3 PR 29 — Account/session page with roles + capabilities
Merged
#27 Phase 3 PR 28 — Admin UI cert-trust management page
Merged
#26 Phase 3 PR 27 — Fleet status dashboard page
Merged
#25 Phase 3 PR 26 — server-layer write authorization by role
Merged
#24 Phase 3 PR 25 — Modbus test plan + DL205 quirk catalog
Merged
#23 Phase 3 PR 24 — Modbus PLC data type extensions
Merged
#22 Phase 3 PR 23 — Modbus IHostConnectivityProbe
Merged
#21 Phase 3 PR 22 — Modbus ISubscribable via polling overlay
Merged
#20 Phase 3 PR 21 — Modbus TCP driver (first native-protocol greenfield)
Merged
#19 Phase 3 PR 20 — lmx-followups.md
Merged
#18 Phase 3 PR 19 — LDAP user identity + Basic256Sha256 security profile
Merged
#17 Phase 3 PR 18 — delete v1 archived projects
Merged
#16 Phase 3 PR 17 — complete OPC UA server startup + live integration test
Merged
#15 Phase 3 PR 16 — concrete OPC UA server scaffolding + AlarmConditionState materialization
Merged
#14 Phase 3 PR 15 — alarm-condition contract in abstract layer
Merged
#13 Phase 2 PR 14 — alarm subsystem (subscribe to alarm attribute quartet + raise GalaxyAlarmEvent)
Merged
#12 Phase 2 PR 13 — port GalaxyRuntimeProbeManager + per-platform ScanState probing
Merged
#11 Phase 2 PR 12 � richer historian quality mapping
Merged
#10 Phase 2 PR 11 � HistoryReadEvents IPC (alarm history)
Merged
#9 Phase 2 PR 10 � HistoryReadAtTime IPC surface
Merged
#8 Phase 2 PR 9 — thread IsAlarm discovery flag end-to-end
Merged
#7 Phase 2 PR 8 — gateway-level host-status push from MxAccessGalaxyBackend
Merged
#6 Phase 2 PR 7 — wire IHistoryProvider.ReadProcessedAsync end-to-end
Merged
#5 Phase 2 PR 6 — close PR 4 monitor-loop low findings (probe leak + replay signal)
Merged
#3 Phase 2 PR 4 — close 4 open MXAccess findings (push frames + reconnect + write-await + read-cancel)
1 Pull request proposed by 1 user
Proposed
#419 docs: reconcile alarms-over-gateway banner with audited source
99 Issues closed from 1 user
Closed
#304 [s7] S7 — Optimized DB / S7Plus (decision PR)
Closed
#316 [twincat] TwinCAT — IAlarmSource via TC3 EventLogger
Closed
#303 [s7] S7 — PLC password / protection-level handling
Closed
#302 [s7] S7 — CPU diagnostic buffer / SZL reads
Closed
#286 [opcuaclient] OpcUaClient — ServerUriArray redundant failover
Closed
#285 [opcuaclient] OpcUaClient — Full Aggregate function set
Closed
#284 [opcuaclient] OpcUaClient — IHistoryProvider.ReadEventsAsync interface fix + impl
Closed
#272 [focas] FOCAS — Cycle time per part / last cycle delta
Closed
#256 [ablegacy] AbLegacy — DH+ via 1756-DHRIO bridging
Closed
#255 [ablegacy] AbLegacy — Auto-demote on comm failure
Closed
#243 [abcip] AbCip — IPerCallHostResolver failover routing
Closed
#242 [abcip] AbCip — HSBY paired-IP probing
Closed
#315 [twincat] TwinCAT — Nested UDT browse via online type walker
Closed
#301 [s7] S7 — Instance-DB / FB parameter access
Closed
#300 [s7] S7 — UDT / STRUCT / nested-DB handling
Closed
#299 [s7] S7 — Symbol-table / TIA Portal export browse
Closed
#283 [opcuaclient] OpcUaClient — Reverse Connect
Closed
#271 [focas] FOCAS — Password / unlock parameter
Closed
#270 [focas] FOCAS — pmc_wrpmcrng
Closed
#269 [focas] FOCAS — cnc_wrmacro + cnc_wrparam
Closed
#268 [focas] FOCAS — Write infrastructure + per-tag opt-in
Closed
#254 [ablegacy] AbLegacy — RSLogix 500/PLC-5 symbol import
Closed
#253 [ablegacy] AbLegacy — Diagnostic counters as tags
Closed
#252 [ablegacy] AbLegacy — Per-device timeout / retry overrides
Closed
#241 [abcip] AbCip — _RefreshTagDb writeable system tag
Closed
#240 [abcip] AbCip — Diagnostic / system tags as browseable variables
Closed
#239 [abcip] AbCip — Write deadband / write-on-change
Closed
#238 [abcip] AbCip — Per-tag scan rate / scan group bucketing
Closed
#314 [twincat] TwinCAT — Cycle-time / jitter / PLC-state diagnostics
Closed
#313 [twincat] TwinCAT — Per-tag MaxDelay tuning
Closed
#298 [s7] S7 — Pre-flight PUT/GET enablement test
Closed
#297 [s7] S7 — Deadband / on-change with thresholds
Closed
#296 [s7] S7 — Per-tag scan group / publish rate
Closed
#295 [s7] S7 — TSAP / Connection Type selector
Closed
#294 [s7] S7 — PDU size negotiation surfaced
Closed
#282 [opcuaclient] OpcUaClient — Auto re-import on ModelChangeEvent
Closed
#267 [focas] FOCAS — cnc_rdalmhistry alarm-history extension
Closed
#251 [ablegacy] AbLegacy — Per-tag deadband / change filter
Closed
#250 [ablegacy] AbLegacy — Array contiguous block addressing
Closed
#237 [abcip] AbCip — Logical-blocking / non-blocking strategy selector
Closed
#236 [abcip] AbCip — Symbolic vs logical (instance-ID) addressing toggle
Closed
#235 [abcip] AbCip — Configurable CIP Connection Size per device
Closed
#312 [twincat] TwinCAT — Symbol-version invalidation listener
Closed
#311 [twincat] TwinCAT — Handle-based access with caching
Closed
#310 [twincat] TwinCAT — ADS Sum-read / Sum-write
Closed
#293 [s7] S7 — Block-read coalescing for contiguous DBs
Closed
#292 [s7] S7 — Multi-variable PDU packing
Closed
#281 [opcuaclient] OpcUaClient — Method node mirroring + Call passthrough
Closed
#280 [opcuaclient] OpcUaClient — Type definition mirroring
Closed
#279 [opcuaclient] OpcUaClient — Selective import / namespace remap
Closed
#278 [opcuaclient] OpcUaClient — Discovery URL FindServers
Closed
#266 [focas] FOCAS — Bulk PMC range read coalescing
Closed
#265 [focas] FOCAS — PMC F/G letters for 16i
Closed
#264 [focas] FOCAS — Multi-path / multi-channel CNC
Closed
#263 [focas] FOCAS — DIAG: address scheme
Closed
#249 [ablegacy] AbLegacy — ST string read/write production verification
Closed
#248 [ablegacy] AbLegacy — PD/MG/PLS/BT structure files
Closed
#234 [abcip] AbCip — AOI input/output handling
Closed
#233 [abcip] AbCip — Online tag-DB refresh trigger
Closed
#232 [abcip] AbCip — CSV tag import / export
Closed
#231 [abcip] AbCip — Tag descriptions surfaced as OPC UA Description
Closed
#230 [abcip] AbCip — L5X (XML) parser + ingest
Closed
#229 [abcip] AbCip — L5K parser + ingest
Closed
#309 [twincat] TwinCAT — ENUM and ALIAS at discovery
Closed
#308 [twincat] TwinCAT — Multi-dim and whole-array reads
Closed
#307 [twincat] TwinCAT — Bit-indexed BOOL writes (RMW)
Closed
#306 [twincat] TwinCAT — TIME/DATE/DT/TOD as native UA types
Closed
#305 [twincat] TwinCAT — Int64 fidelity for LINT/ULINT
Closed
#291 [s7] S7 — LOGO! 8 + S7-200 V-memory
Closed
#290 [s7] S7 — Array tags (ValueRank=1)
Closed
#289 [s7] S7 — DTL / DT / S5TIME / TIME / TOD / DATE
Closed
#288 [s7] S7 — STRING / WSTRING / CHAR / WCHAR
Closed
#287 [s7] S7 — 64-bit scalar types (LInt/ULInt/LReal/LWord)
Closed
#277 [opcuaclient] OpcUaClient — CRL / revocation handling
Closed
#276 [opcuaclient] OpcUaClient — Diagnostics counters
Closed
#275 [opcuaclient] OpcUaClient — Honor server OperationLimits
Closed
#274 [opcuaclient] OpcUaClient — Per-tag advanced subscription tuning incl. deadband
Closed
#273 [opcuaclient] OpcUaClient — Per-subscription tuning
Closed
#262 [focas] FOCAS — cnc_getfigure scaling + connection statistics
Closed
#261 [focas] FOCAS — Operator messages + currently-executing block text
Closed
#260 [focas] FOCAS — Tool number / tool life + work coordinate offsets
Closed
#259 [focas] FOCAS — Modal G/M/T codes + override values
Closed
#258 [focas] FOCAS — Parts count + cycle time
Closed
#257 [focas] FOCAS — ODBST status flags as fixed-tree nodes
Closed
#247 [ablegacy] AbLegacy — Indirect / indexed addressing parser
Closed
#246 [ablegacy] AbLegacy — Sub-element bit semantics for Timer/Counter/Control
Closed
#245 [ablegacy] AbLegacy — MicroLogix function-file letters
Closed
#244 [ablegacy] AbLegacy — PLC-5 octal I/O addressing
Closed
#228 [abcip] AbCip — CIP multi-tag write packing
Closed
#227 [abcip] AbCip — Array-slice read addressing Tag[0..N]
Closed
#226 [abcip] AbCip — Native STRING / STRINGnn variant decoding
Closed
#225 [abcip] AbCip — LINT/ULINT 64-bit fidelity
Closed
#220 E2E — live-boot verification for AB CIP + S7 smoke seeds
Closed
#219 E2E — reverse-write stage returns 0x801F0000 for anonymous session on Modbus HR[200]
Closed
#209 E2E scripts — server-side driver factory wiring for Modbus / AB CIP / AB Legacy / S7
Closed
#210 E2E — Modbus server-side factory + seed SQL
Closed
#211 E2E — AB CIP server-side factory + seed SQL
Closed
#212 E2E — S7 server-side factory + seed SQL
Closed
#213 E2E — AB Legacy server-side factory + seed SQL
101 Issues created by 1 user
Opened
#209 E2E scripts — server-side driver factory wiring for Modbus / AB CIP / AB Legacy / S7
Opened
#210 E2E — Modbus server-side factory + seed SQL
Opened
#211 E2E — AB CIP server-side factory + seed SQL
Opened
#212 E2E — S7 server-side factory + seed SQL
Opened
#213 E2E — AB Legacy server-side factory + seed SQL
Opened
#219 E2E — reverse-write stage returns 0x801F0000 for anonymous session on Modbus HR[200]
Opened
#220 E2E — live-boot verification for AB CIP + S7 smoke seeds
Opened
#225 [abcip] AbCip — LINT/ULINT 64-bit fidelity
Opened
#226 [abcip] AbCip — Native STRING / STRINGnn variant decoding
Opened
#227 [abcip] AbCip — Array-slice read addressing Tag[0..N]
Opened
#228 [abcip] AbCip — CIP multi-tag write packing
Opened
#229 [abcip] AbCip — L5K parser + ingest
Opened
#230 [abcip] AbCip — L5X (XML) parser + ingest
Opened
#231 [abcip] AbCip — Tag descriptions surfaced as OPC UA Description
Opened
#232 [abcip] AbCip — CSV tag import / export
Opened
#233 [abcip] AbCip — Online tag-DB refresh trigger
Opened
#234 [abcip] AbCip — AOI input/output handling
Opened
#235 [abcip] AbCip — Configurable CIP Connection Size per device
Opened
#236 [abcip] AbCip — Symbolic vs logical (instance-ID) addressing toggle
Opened
#237 [abcip] AbCip — Logical-blocking / non-blocking strategy selector
Opened
#238 [abcip] AbCip — Per-tag scan rate / scan group bucketing
Opened
#239 [abcip] AbCip — Write deadband / write-on-change
Opened
#240 [abcip] AbCip — Diagnostic / system tags as browseable variables
Opened
#241 [abcip] AbCip — _RefreshTagDb writeable system tag
Opened
#242 [abcip] AbCip — HSBY paired-IP probing
Opened
#243 [abcip] AbCip — IPerCallHostResolver failover routing
Opened
#244 [ablegacy] AbLegacy — PLC-5 octal I/O addressing
Opened
#245 [ablegacy] AbLegacy — MicroLogix function-file letters
Opened
#246 [ablegacy] AbLegacy — Sub-element bit semantics for Timer/Counter/Control
Opened
#247 [ablegacy] AbLegacy — Indirect / indexed addressing parser
Opened
#248 [ablegacy] AbLegacy — PD/MG/PLS/BT structure files
Opened
#249 [ablegacy] AbLegacy — ST string read/write production verification
Opened
#250 [ablegacy] AbLegacy — Array contiguous block addressing
Opened
#251 [ablegacy] AbLegacy — Per-tag deadband / change filter
Opened
#252 [ablegacy] AbLegacy — Per-device timeout / retry overrides
Opened
#253 [ablegacy] AbLegacy — Diagnostic counters as tags
Opened
#254 [ablegacy] AbLegacy — RSLogix 500/PLC-5 symbol import
Opened
#255 [ablegacy] AbLegacy — Auto-demote on comm failure
Opened
#256 [ablegacy] AbLegacy — DH+ via 1756-DHRIO bridging
Opened
#257 [focas] FOCAS — ODBST status flags as fixed-tree nodes
Opened
#258 [focas] FOCAS — Parts count + cycle time
Opened
#259 [focas] FOCAS — Modal G/M/T codes + override values
Opened
#260 [focas] FOCAS — Tool number / tool life + work coordinate offsets
Opened
#261 [focas] FOCAS — Operator messages + currently-executing block text
Opened
#262 [focas] FOCAS — cnc_getfigure scaling + connection statistics
Opened
#263 [focas] FOCAS — DIAG: address scheme
Opened
#264 [focas] FOCAS — Multi-path / multi-channel CNC
Opened
#265 [focas] FOCAS — PMC F/G letters for 16i
Opened
#266 [focas] FOCAS — Bulk PMC range read coalescing
Opened
#267 [focas] FOCAS — cnc_rdalmhistry alarm-history extension
Opened
#268 [focas] FOCAS — Write infrastructure + per-tag opt-in
Opened
#269 [focas] FOCAS — cnc_wrmacro + cnc_wrparam
Opened
#270 [focas] FOCAS — pmc_wrpmcrng
Opened
#271 [focas] FOCAS — Password / unlock parameter
Opened
#272 [focas] FOCAS — Cycle time per part / last cycle delta
Opened
#273 [opcuaclient] OpcUaClient — Per-subscription tuning
Opened
#274 [opcuaclient] OpcUaClient — Per-tag advanced subscription tuning incl. deadband
Opened
#275 [opcuaclient] OpcUaClient — Honor server OperationLimits
Opened
#276 [opcuaclient] OpcUaClient — Diagnostics counters
Opened
#277 [opcuaclient] OpcUaClient — CRL / revocation handling
Opened
#278 [opcuaclient] OpcUaClient — Discovery URL FindServers
Opened
#279 [opcuaclient] OpcUaClient — Selective import / namespace remap
Opened
#280 [opcuaclient] OpcUaClient — Type definition mirroring
Opened
#281 [opcuaclient] OpcUaClient — Method node mirroring + Call passthrough
Opened
#282 [opcuaclient] OpcUaClient — Auto re-import on ModelChangeEvent
Opened
#283 [opcuaclient] OpcUaClient — Reverse Connect
Opened
#284 [opcuaclient] OpcUaClient — IHistoryProvider.ReadEventsAsync interface fix + impl
Opened
#285 [opcuaclient] OpcUaClient — Full Aggregate function set
Opened
#286 [opcuaclient] OpcUaClient — ServerUriArray redundant failover
Opened
#287 [s7] S7 — 64-bit scalar types (LInt/ULInt/LReal/LWord)
Opened
#288 [s7] S7 — STRING / WSTRING / CHAR / WCHAR
Opened
#289 [s7] S7 — DTL / DT / S5TIME / TIME / TOD / DATE
Opened
#290 [s7] S7 — Array tags (ValueRank=1)
Opened
#291 [s7] S7 — LOGO! 8 + S7-200 V-memory
Opened
#292 [s7] S7 — Multi-variable PDU packing
Opened
#293 [s7] S7 — Block-read coalescing for contiguous DBs
Opened
#294 [s7] S7 — PDU size negotiation surfaced
Opened
#295 [s7] S7 — TSAP / Connection Type selector
Opened
#296 [s7] S7 — Per-tag scan group / publish rate
Opened
#297 [s7] S7 — Deadband / on-change with thresholds
Opened
#298 [s7] S7 — Pre-flight PUT/GET enablement test
Opened
#299 [s7] S7 — Symbol-table / TIA Portal export browse
Opened
#300 [s7] S7 — UDT / STRUCT / nested-DB handling
Opened
#301 [s7] S7 — Instance-DB / FB parameter access
Opened
#302 [s7] S7 — CPU diagnostic buffer / SZL reads
Opened
#303 [s7] S7 — PLC password / protection-level handling
Opened
#304 [s7] S7 — Optimized DB / S7Plus (decision PR)
Opened
#305 [twincat] TwinCAT — Int64 fidelity for LINT/ULINT
Opened
#306 [twincat] TwinCAT — TIME/DATE/DT/TOD as native UA types
Opened
#307 [twincat] TwinCAT — Bit-indexed BOOL writes (RMW)
Opened
#308 [twincat] TwinCAT — Multi-dim and whole-array reads
Opened
#309 [twincat] TwinCAT — ENUM and ALIAS at discovery
Opened
#310 [twincat] TwinCAT — ADS Sum-read / Sum-write
Opened
#311 [twincat] TwinCAT — Handle-based access with caching
Opened
#312 [twincat] TwinCAT — Symbol-version invalidation listener
Opened
#313 [twincat] TwinCAT — Per-tag MaxDelay tuning
Opened
#314 [twincat] TwinCAT — Cycle-time / jitter / PLC-state diagnostics
Opened
#315 [twincat] TwinCAT — Nested UDT browse via online type walker
Opened
#316 [twincat] TwinCAT — IAlarmSource via TC3 EventLogger
Opened
#420 alarms-over-gateway: wire worker AlarmClient + pin SDK call site (4 inert scaffolds + D.1 smoke)
Opened
#422 DraftValidator/DraftSnapshot is dead code (no src/ caller) — possible publish-time enforcement gap