docs(plans): auto/driver-gaps branch ledger — 92 issues classified (#607)

Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
Joseph Doherty
2026-10-08 06:52:41 -04:00
parent 33d72edcd0
commit 0544287f26
@@ -0,0 +1,112 @@
# 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]