4e6eed7454
#570 - STRING: the built-in 88-byte Logix STRING holds 82 characters (LEN + DATA[82] + 2 pad), not 84; the write still sends the whole 88-byte structure and a read never decodes the pad as characters. - Mistype churn: a type refusal (CIP 0xFF/0x2107) on the existence read no longer throws from InitializeAsync, so the runtime is not disposed/re-created (and re-Forward-Opened) every poll; the driver also keeps a runtime that throws TypeMismatch from init and records the device as reachable. - Malformed tag name: a TagPath that does not parse, or a name the CIP symbolic encoder refuses (now also non-ASCII, empty member, >255-char member, unterminated subscript), is AbCipTagConfigurationException -> per-tag BadConfigurationError (named const in AbCipStatusMapper), warned once, never feeding the device backoff or health; siblings keep reading. A malformed probe tag no longer feeds the backoff either. - Micro800 BYTE/WORD/LWORD (0xD1/0xD2/0xD4) are type-checked as integers of their width: REAL/LREAL or a narrower integer over LWORD is TypeMismatch, not decoded garbage. #579 - ConnectionLease.ReleaseInBackground: one non-blocking release shape for both native AB runtimes. The AbCip runtime's Dispose no longer waits up to 2 s under the per-tag lock; the pool still registers the close synchronously so a re-create cannot overlap it. Offline soak tests (25 cycles, AbCip + AbLegacy) prove no leaked connection; FakeEipServer gains OpenConnections. Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe