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

113 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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]