Files
lmxopcua/docs/plans/2026-10-08-driver-gaps-branch-ledger.md
T

22 KiB
Raw Blame History

auto/driver-gaps branch ledger (Gitea #607)

Classification of the 92 driver-gap issues (#225–#316) closed against PRs merged into auto/driver-gaps, which never reached master. Verdicts from symbol/file/doc greps against master 3baa332d (2026-10-08). Counts: PRESENT 18, SUPERSEDED 9, STRANDED 61 (~190 agent-days to port), UNCLEAR 4. Per-driver porting backlogs are filed as separate issues; the branch is archived as tag archive/auto-driver-gaps.

Issue to commit mapping is by driver + sequence (one non-merge commit per issue; verified against titles). Verdict basis: symbol/file grep on master src plus reading master docs; no hardware.

issue title driver branch commit(s) verdict evidence port effort
#225 AbCip - LINT/ULINT 64-bit fidelity abcip 2e6228a2 (5 src lines/2 files) PRESENT AbCipDataTypeExtensions.cs maps LInt->Int64, ULInt->UInt64; Ab.Transport LogixTypeCode 64-bit -
#226 AbCip - Native STRING / STRINGnn variant decoding abcip d78a471e (27 src lines/4 files) UNCLEAR Master native runtime handles built-in STRING (82-char capacity, template-derived capacity; 4e6eed74/#570) but no STRINGnn custom-string-type decode found; human to check against fixtures -
#227 AbCip - Array-slice read addressing Tag[0..N] abcip 767ac4ae (266 src lines/5 files) SUPERSEDED Array tags authored via TagConfig isArray/arrayLength -> ElementCount (AbCipDriverOptions.cs, AbCipDriver.cs:901); Tag[0..N] slice syntax/planner absent but v3 tag authoring replaces it -
#228 AbCip - CIP multi-tag write packing abcip 36b29297 (266 src lines/2 files) PRESENT Native transport batches via Ab.Transport/Cip/MultipleServicePacket.cs + RequestScheduler.cs (#582 era); libplctagbranch planner not needed -
#229 AbCip - L5K parser + ingest abcip 86407e6c (612 src lines/5 files) STRANDED No L5K parser on master (grep L5K empty) Port risk: High: branch import ran at driver Initialize via IL5kSource; v3 wants it as a /raw import source (Commons/Csv-style staged review), not driver code L
#230 AbCip - L5X (XML) parser + ingest abcip cfcaf5c1 (299 src lines/3 files) STRANDED No L5X parser on master Port risk: High: same re-homing to /raw import; reuses L5K model from #229 M
#231 AbCip - Tag descriptions surfaced as OPC UA Description abcip e5299cda (69 src lines/7 files) STRANDED No Description plumbing on master (DriverAttributeInfo has none); only meaningful with L5K/L5X Port risk: Medium: touches Core.Abstractions + node manager S
#232 AbCip - CSV tag import / export abcip 08d8a104 (514 src lines/5 files) SUPERSEDED v3 /raw CSV import/export (Commons/Csv, RawTree) is the mechanism; branch CsvTagImporter/Exporter + CLI TagExport absent -
#233 AbCip - Online tag-DB refresh trigger abcip 6e244e0c (174 src lines/3 files) SUPERSEDED v3: re-browse is operator-driven via /raw browse-commit; DeployWatcher/IRediscoverable advisory only (CLAUDE.md). IDriverControl.RebrowseAsync absent -
#234 AbCip - AOI input/output handling abcip e3c0750f (162 src lines/5 files) STRANDED No AOI qualifier handling in ingest (AbCipDriver only has AOI alarm hidden-host handling) Port risk: Low; dependent on #229/#230 S
#235 AbCip - Configurable CIP Connection Size per device abcip f6c26db6 (157 src lines/6 files) PRESENT AbCipDriver.cs:1877-1899 Options.ConnectionSize ?? Profile.DefaultConnectionSize; IAbCipTagRuntime ConnectionSize -
#236 AbCip - Symbolic vs logical (instance-ID) addressing toggle abcip 0c6a0d6e (391 src lines/7 files) STRANDED No AddressingMode/logical instance-ID mode on master Port risk: Medium: native transport (Ab.Transport) is the default now; must be implemented there, libplctag path legacy M
#237 AbCip - Logical-blocking / non-blocking strategy selector abcip 01f4ee6b (470 src lines/5 files) SUPERSEDED Native transport MultipleServicePacket + AbCipUdtReadPlanner.cs cover read strategy; no ReadStrategy selector but intent met -
#238 AbCip - Per-tag scan rate / scan group bucketing abcip b4571362 (136 src lines/3 files) STRANDED No per-tag ScanRate/scan-group in AbCip Port risk: Medium: v3 poll/subscription engine is driver-shared (PollGroupEngine); a per-tag bucket must fit it M
#239 AbCip - Write deadband / write-on-change abcip da9936f7 (307 src lines/4 files) STRANDED No AbCipWriteCoalescer / write deadband on master Port risk: Medium: write-suppression semantics interact with v3 write-outcome self-correction; questionable value M
#240 AbCip - Diagnostic / system tags as browseable variables abcip 901a5b9b (351 src lines/2 files) STRANDED AbCipSystemTagFilter.cs on master FILTERS system tags out; no AbCipSystemTagSource Port risk: Medium: v3 raw tree requires explicit authoring; synthesize via DiscoverAsync only M
#241 AbCip - _RefreshTagDb writeable system tag abcip e0e5e04e (254 src lines/2 files) STRANDED No _RefreshTagDb handling Port risk: Low; depends on #240 and loses meaning (discovery injection deleted in v3) S
#242 AbCip - HSBY paired-IP probing abcip 561b0f9e (611 src lines/6 files) STRANDED No HSBY role prober Port risk: Medium: hardware-only (redundant ControlLogix pair); driver->host routing L
#243 AbCip - IPerCallHostResolver failover routing abcip 9e157fc8 (224 src lines/1 files) STRANDED AbCipDriver implements IPerCallHostResolver (:661) but no HSBY active-address routing (triage-E 'present' is for the interface only) Port risk: Depends on #242 M
#244 AbLegacy - PLC-5 octal I/O addressing ablegacy 8f726518 (72 src lines/4 files) STRANDED No octal I/O handling in AbLegacy/Ab.Transport (grep octal empty; Pccc parses I:/O: only) Port risk: Low (verify on ab_server) S
#245 AbLegacy - MicroLogix function-file letters ablegacy f2bc3634 (92 src lines/3 files) STRANDED No MicroLogix function-file letters (RTC/HSC/etc.) in PcccFileType/AbLegacyDataType Port risk: Low S
#246 AbLegacy - Sub-element bit semantics for Timer/Counter/Control ablegacy c89f5bb3 (130 src lines/3 files) PRESENT AbLegacyAddress.cs sub-element parsing (T4:0.DN etc.); NativeAbLegacy refuses status-bit writes (docs/drivers/AbLegacy.md:177) -
#247 AbLegacy - Indirect / indexed addressing parser ablegacy 4ff4cc58 (131 src lines/2 files) STRANDED No indirect/indexed address parser on master Port risk: Low; niche S
#248 AbLegacy - PD/MG/PLS/BT structure files ablegacy 286ab3ba (199 src lines/4 files) STRANDED No PD/MG/PLS/BT file types in PcccFileType Port risk: Low-medium; unverified on wire (see CLAUDE.md AbLegacy native evidence) M
#249 AbLegacy - ST string read/write production verification ablegacy 00446039 (24 src lines/2 files) PRESENT NativeAbLegacyTagRuntime.cs StringDataBytes=82 + AbLegacyAddress ST docs; #582 -
#250 AbLegacy - Array contiguous block addressing ablegacy c689ac58 (227 src lines/6 files) PRESENT AbLegacyDriver.cs:345 IsArrayTag/DecodeArray/EffectiveArrayLength; AbLegacyTagDefinition.ArrayLength -
#251 AbLegacy - Per-tag deadband / change filter ablegacy eb528614 (156 src lines/4 files) STRANDED No AbLegacy deadband/change filter Port risk: Low; shared subscription engine may already dedup S
#252 AbLegacy - Per-device timeout / retry overrides ablegacy c292dcc1 (140 src lines/3 files) UNCLEAR Master has per-driver and per-device Timeout (AbLegacyDriverOptions.cs:49,104) but no Retries option found; human to confirm if retries still wanted -
#253 AbLegacy - Diagnostic counters as tags ablegacy 42472b55 (413 src lines/2 files) STRANDED No AbLegacyDiagnosticTags Port risk: Medium: synthetic tags not authorable in v3 raw tree without discovery M
#254 AbLegacy - RSLogix 500/PLC-5 symbol import ablegacy 4e8df38b (618 src lines/7 files) STRANDED No RSLogix CSV importer (only generic /raw CSV) Port risk: Medium: re-home as /raw import source, not CLI command M
#255 AbLegacy - Auto-demote on comm failure ablegacy 1e3053c0 (401 src lines/8 files) STRANDED No auto-demote options (AbLegacyDemoteOptions); master has probe + IHostConnectivityProbe only Port risk: Medium; interacts with comms-loss watchdog (#527) M
#256 AbLegacy - DH+ via 1756-DHRIO bridging ablegacy 39925737 (116 src lines/3 files) STRANDED No DH+/DHRIO validation (IsDhPlusBridge) Port risk: Low; recommend DROP (niche) S
#257 FOCAS - ODBST status flags as fixed-tree nodes focas 551494d2 (146 src lines/3 files) STRANDED Master has Identity/Axes/Spindle/Program/OperationMode/Timers fixed tree only (docs/drivers/FOCAS.md:213); no ODBST status flags Port risk: High: master FOCAS is a managed wire client rewrite (Wire/*); branch used FWLIB P/Invoke so must be re-done as wire commands; hardware-only to verify M
#258 FOCAS - Parts count + cycle time focas 3d9697b9 (162 src lines/4 files) STRANDED Timers/CycleSeconds present; parts count absent (partial) Port risk: High: wire-client rewrite; needs cnc_rdparam/rdtimer decode on hardware S
#259 FOCAS - Modal G/M/T codes + override values focas 3c2c4f29 (332 src lines/5 files) STRANDED No modal/override reads Port risk: High: wire-client rewrite M
#260 FOCAS - Tool number / tool life + work coordinate offsets focas 9ec92a90 (383 src lines/5 files) STRANDED No tooling/work-offset reads Port risk: High: wire-client rewrite L
#261 FOCAS - Operator messages + currently-executing block text focas cc757855 (276 src lines/4 files) STRANDED No operator message / block text Port risk: High: wire-client rewrite M
#262 FOCAS - cnc_getfigure scaling + connection statistics focas 1abf743a (282 src lines/5 files) SUPERSEDED Master DELETED cnc_getfigure (not a real wire cmd; 69e0a622); scaling now from each cnc_rddynamic2 block -
#263 FOCAS - DIAG: address scheme focas 451b37a6 (138 src lines/7 files) STRANDED No DIAG: address area (FocasAddress has PARAM/MACRO/PMC/FIXED only) Port risk: High: wire rewrite S
#264 FOCAS - Multi-path / multi-channel CNC focas 2f3eeecd (192 src lines/5 files) STRANDED No path-number / multi-path support found in FocasWireClient/options Port risk: High: wire rewrite; hardware M
#265 FOCAS - PMC F/G letters for 16i focas 63099115 (4 src lines/1 files) STRANDED FocasCapabilityMatrix.cs:87 Sixteen_i PMC letters still {X,Y,R,D}; branch adds F,G (4-line change) Port risk: Trivial, verify against 16i wire S
#266 FOCAS - Bulk PMC range read coalescing focas 4d3ee472 (401 src lines/4 files) STRANDED No PMC range coalescing (FocasPmcCoalescer); wire client has pmc_rdpmcrng primitive Port risk: Medium: fits wire client M
#267 FOCAS - cnc_rdalmhistry alarm-history extension focas 7f9d6a77 (615 src lines/5 files) STRANDED No cnc_rdalmhistry; FocasAlarmProjection is polled cnc_rdalmmsg2 only Port risk: High: wire rewrite + history decode L
#268 FOCAS - Write infrastructure + per-tag opt-in focas 1bfe8fba (77 src lines/5 files) STRANDED Master FOCAS is intentionally READ-ONLY: WireFocasClient.WriteAsync returns BadNotWritable (Wire/WireFocasClient.cs:13-15,73) Port risk: High: safety-critical on real CNCs; policy decision needed before any port M
#269 FOCAS - cnc_wrmacro + cnc_wrparam focas f48f31cf (186 src lines/6 files) STRANDED wrmacro/wrparam deliberately not exposed in wire client Port risk: High: as #268 M
#270 FOCAS - pmc_wrpmcrng focas 54c09d4d (171 src lines/5 files) STRANDED pmc_wrpmcrng not exposed; PMC bit-RMW absent despite stale comment in FocasDriverOptions Port risk: High: as #268 M
#271 FOCAS - Password / unlock parameter focas 86f3fc27 (284 src lines/7 files) STRANDED No password/unlock Port risk: High: as #268 M
#272 FOCAS - Cycle time per part / last cycle delta focas e3d7c65f (199 src lines/1 files) STRANDED No per-part cycle delta Port risk: Depends on #258 S
#273 OpcUaClient - Per-subscription tuning opcuaclient 7209364c (66 src lines/2 files) STRANDED Subscription params hardcoded (OpcUaClientDriver.cs:1245-1250) Port risk: Low S
#274 OpcUaClient - Per-tag advanced subscription tuning incl. deadband opcuaclient fae00749 (225 src lines/3 files) STRANDED No per-tag DataChangeFilter/deadband/sampling tuning (QueueSize=1 hardcoded) Port risk: Medium: ISubscribable/DriverCapability signature change on Core M
#275 OpcUaClient - Honor server OperationLimits opcuaclient 494fdf23 (164 src lines/1 files) STRANDED No OperationLimits handling Port risk: Low-medium; pure managed, fixture testable (opc-plc) M
#276 OpcUaClient - Diagnostics counters opcuaclient bb1ab47b (255 src lines/3 files) STRANDED No OpcUaClientDiagnostics counters Port risk: Low; DriverHealth.Diagnostics change M
#277 OpcUaClient - CRL / revocation handling opcuaclient 4a3860ae (176 src lines/2 files) STRANDED No CRL/revocation options (only RejectedCertificateStore) Port risk: Low-medium M
#278 OpcUaClient - Discovery URL FindServers opcuaclient 0f509fbd (160 src lines/2 files) STRANDED No FindServers / DiscoveryUrl Port risk: Low M
#279 OpcUaClient - Selective import / namespace remap opcuaclient 02d1c851 (163 src lines/2 files) SUPERSEDED v3 authors raw tags explicitly (browse-commit); NamespaceMap exists; selective curation superseded -
#280 OpcUaClient - Type definition mirroring opcuaclient cc21281c (330 src lines/3 files) SUPERSEDED Node mirroring of type definitions is discovery injection, deleted in v3 (#507 closed superseded) -
#281 OpcUaClient - Method node mirroring + Call passthrough opcuaclient 07abee5f (407 src lines/3 files) SUPERSEDED Method node mirroring is discovery injection, deleted in v3 -
#282 OpcUaClient - Auto re-import on ModelChangeEvent opcuaclient ab3ed6b6 (260 src lines/3 files) SUPERSEDED Auto re-import on ModelChange contradicts v3 advisory-only IRediscoverable; injection path deleted -
#283 OpcUaClient - Reverse Connect opcuaclient 5c72deb8 (396 src lines/3 files) STRANDED No reverse connect Port risk: Medium: SDK ReverseConnectManager; needs listener port + fixture M
#284 OpcUaClient - IHistoryProvider.ReadEventsAsync interface fix + impl opcuaclient c36903d6 (310 src lines/2 files) PRESENT OpcUaClientDriver.ReadEventsAsync (:1887) with HistoricalEventsResult; different shape than branch EventHistoryRequest but functional -
#285 OpcUaClient - Full Aggregate function set opcuaclient 0adc5adb (149 src lines/2 files) STRANDED HistoryAggregateType has only 5 values; MapAggregateToNodeId (:1779) throws otherwise Port risk: Low: Core enum append + mapping S
#286 OpcUaClient - ServerUriArray redundant failover opcuaclient 705c98ad (491 src lines/3 files) STRANDED No ServerUriArray failover; master has static EndpointUrls ordered list with PerEndpointConnectTimeout (partial) Port risk: Medium: interacts with comms-loss watchdog reconnect L
#287 S7 - 64-bit scalar types (LInt/ULInt/LReal/LWord) s7 d1699af6 (123 src lines/2 files) PRESENT S7DataType has Int64/UInt64/Float64 (S7DriverOptions.cs:195-198) -
#288 S7 - STRING / WSTRING / CHAR / WCHAR s7 316f820e (246 src lines/3 files) STRANDED No WString/WChar/Char in S7DataType (String only); docs/drivers/S7.md lists deferred Port risk: Low-medium; pure codec, ab-style fixture (snap7) M
#289 S7 - DTL / DT / S5TIME / TIME / TOD / DATE s7 2b66cec5 (448 src lines/3 files) STRANDED No DTL/S5TIME/TIME/TOD/DATE codecs (S7DataType.DateTime only; S5TIME only as Timer area word) Port risk: Low; pure codec M
#290 S7 - Array tags (ValueRank=1) s7 ce98c2ad (253 src lines/2 files) PRESENT S7 tags carry ArrayCount (S7DriverOptions.cs:169) -> ValueRank=1 -
#291 S7 - LOGO! 8 + S7-200 V-memory s7 e5122c54 (79 src lines/2 files) STRANDED No LOGO!/S7-200 V-memory parser Port risk: Low; niche, verify hardware S
#292 S7 - Multi-variable PDU packing s7 d7633fe3 (312 src lines/2 files) PRESENT IS7Plc.ReadMultipleVarsAsync (S7.Net packs) used by S7Driver -
#293 S7 - Block-read coalescing for contiguous DBs s7 17faf76e (442 src lines/4 files) PRESENT S7ReadSpanPlanner.cs coalesces contiguous byte ranges (re-implemented) -
#294 S7 - PDU size negotiation surfaced s7 6540bbe1 (28 src lines/1 files) STRANDED No negotiated-PDU surfaced via DriverHealth.Diagnostics (only AssertPduSizeForRead) Port risk: Low S
#295 S7 - TSAP / Connection Type selector s7 3b98e4d3 (197 src lines/4 files) STRANDED Only slot-derived TSAP; no LocalTsap/RemoteTsap/ConnectionType override Port risk: Low M
#296 S7 - Per-tag scan group / publish rate s7 162c82b8 (225 src lines/3 files) STRANDED No S7 scan-group intervals Port risk: Medium: shared poll engine M
#297 S7 - Deadband / on-change with thresholds s7 06b39a28 (164 src lines/3 files) STRANDED No S7 deadband Port risk: Low-medium M
#298 S7 - Pre-flight PUT/GET enablement test s7 64a11ef2 (195 src lines/4 files) UNCLEAR S7Driver.cs:744,1156,1161 maps PUT/GET-disabled errors with an actionable message at runtime, but no explicit preflight probe at init; human decide if sufficient -
#299 S7 - Symbol-table / TIA Portal export browse s7 a908dff7 (1293 src lines/8 files) STRANDED No TIA CSV / AWL symbol importers Port risk: Medium: re-home as /raw import source rather than CLI ImportSymbolsCommand L
#300 S7 - UDT / STRUCT / nested-DB handling s7 5f8d84db (511 src lines/5 files) STRANDED No UDT/STRUCT fan-out Port risk: Medium: v3 raw tree needs explicit tags per member; fan-out at author time L
#301 S7 - Instance-DB / FB parameter access s7 baf1d658 (302 src lines/3 files) STRANDED No instance-DB/FB resolver Port risk: Depends on #299 M
#302 S7 - CPU diagnostic buffer / SZL reads s7 108f69d1 (967 src lines/8 files) STRANDED No SZL reads / system tags Port risk: High: S7.Net SZL via reflection; synthetic tags not authorable in v3 raw tree; hardware L
#303 S7 - PLC password / protection-level handling s7 30c3b10c (366 src lines/5 files) STRANDED No PLC password/protection-level handling Port risk: Medium; hardware M
#304 S7 - Optimized DB / S7Plus (decision PR) s7 b217ca61 (0 src lines/0 files) STRANDED Docs-only decision (docs/v2/s7.md, featuregaps.md, S7-Test-Fixture.md) not on master Port risk: Low: cherry-pick docs or drop S
#305 TwinCAT - Int64 fidelity for LINT/ULINT twincat 615ab256 (2 src lines/1 files) PRESENT TwinCATDataTypeExtensions.cs LInt->Int64, ULInt->UInt64 -
#306 TwinCAT - TIME/DATE/DT/TOD as native UA types twincat 80b2d7f8 (86 src lines/4 files) STRANDED TIME/DATE/DT/TOD map to UInt32 (TwinCATDataTypeExtensions.cs:26); branch adds native DriverDataType/UA types Port risk: Medium: touches Core DriverDataType + node manager S
#307 TwinCAT - Bit-indexed BOOL writes (RMW) twincat fcf89618 (71 src lines/1 files) PRESENT TwinCATBitAccess.cs bit-indexed BOOL parent-word RMW -
#308 TwinCAT - Multi-dim and whole-array reads twincat b6990523 (80 src lines/4 files) PRESENT ITwinCATClient arrayCount whole-array reads + TwinCATArrayCodec -
#309 TwinCAT - ENUM and ALIAS at discovery twincat 0df14ab9 (39 src lines/1 files) PRESENT AdsTwinCATClient.cs resolves ALIAS to base type (:180) -
#310 TwinCAT - ADS Sum-read / Sum-write twincat 931049b5 (334 src lines/3 files) STRANDED No ADS sum-read/sum-write Port risk: Medium: hardware/ADS router to verify M
#311 TwinCAT - Handle-based access with caching twincat b67eb6c8 (205 src lines/3 files) UNCLEAR AdsTwinCATClient has variable-handle addressing (0xF005) for handle-addressed symbols but no confirmed handle cache; human check -
#312 TwinCAT - Symbol-version invalidation listener twincat 4098d72b (104 src lines/1 files) PRESENT AdsTwinCATClient/ITwinCATClient OnSymbolVersionChanged + TwinCATStatusMapper.AdsSymbolVersionChanged -
#313 TwinCAT - Per-tag MaxDelay tuning twincat fb57717f (47 src lines/5 files) PRESENT TwinCATDriverOptions.NotificationMaxDelayMs wired at TwinCATDriver.cs:601,980 -
#314 TwinCAT - Cycle-time / jitter / PLC-state diagnostics twincat 24a3cda5 (248 src lines/2 files) STRANDED No TwinCATDeviceDiagnostics (cycle/jitter/PLC state); only probe ReadState Port risk: Medium; synthetic tags M
#315 TwinCAT - Nested UDT browse via online type walker twincat 0444cb69 (364 src lines/5 files) PRESENT TwinCATSymbolExpander.cs walks struct/UDT members at discovery (re-implemented) -
#316 TwinCAT - IAlarmSource via TC3 EventLogger twincat c88e0b6b (406 src lines/4 files) STRANDED No TC3 EventLogger IAlarmSource (branch was gated scaffold) Port risk: Medium; recommend DROP L

Counts

PRESENT: 18, UNCLEAR: 4, SUPERSEDED: 9, STRANDED: 61

Stranded by driver

  • abcip: 11 issues (S=3, M=6, L=2) ~37 effort-days; src lines 3416; issues [229, 230, 231, 234, 236, 238, 239, 240, 241, 242, 243]
  • ablegacy: 9 issues (S=5, M=4, L=0) ~17 effort-days; src lines 2198; issues [244, 245, 247, 248, 251, 253, 254, 255, 256]
  • focas: 15 issues (S=4, M=9, L=2) ~47 effort-days; src lines 3566; issues [257, 258, 259, 260, 261, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272]
  • opcuaclient: 9 issues (S=2, M=6, L=1) ~28 effort-days; src lines 2082; issues [273, 274, 275, 276, 277, 278, 283, 285, 286]
  • s7: 13 issues (S=3, M=7, L=3) ~48 effort-days; src lines 4826; issues [288, 289, 291, 294, 295, 296, 297, 299, 300, 301, 302, 303, 304]
  • twincat: 4 issues (S=1, M=2, L=1) ~15 effort-days; src lines 1074; issues [306, 310, 314, 316]