Fixed: PlcFamily ParseEnum wording (Transport was already correct); probe tests positively assert libplctag's timeout text (later made load-tolerant in 277cd6ee). (merge 7105ef3e on master,…
Fixed: paging continues from max(instance seen)+1 with a no-progress guard; a browse's template reads share one lease (CreateBatch); listing pages paced by browsePageDelayMs (default 5 ms).…
Fixed: test defect — FakeAbLegacyTagFactory.Tags was a plain Dictionary written concurrently by the probe loop; now ConcurrentDictionary. 1/120 before, 0/150 after. (merge 007174d2 on master,…
Fixed: tokenising stripper (regular/verbatim/interpolated/raw strings, char literals, // and /* */ comments) and a csproj PackageReference guard limiting libplctag to the AbCip/AbLegacy projects.…
Fixed: STRING capacity 82; existence-read type refusal no longer churns runtime/connection; malformed tag names → per-tag BadConfigurationError without device backoff or health change; 0xD1/0xD2/0…
Fixed: ToAbStatus round-trip-tested over every Status; dead AbLegacy MapException removed (AbCip's has callers); WrapSync/Wrap OperationCanceledException pass-through and native-Tag decode-routing…
Fixed: private lock object; struct handle compared across Read Tag Fragmented fragments (mismatch fails BadReply). Residual: wide-struct fragmented WRITE unproven on a real controller (presses are…
Fixed: tests for scheduler-dispose-throws, dispose-during-connect, abandoned-open observer; lease-release-behind-open resolved by #579 (ReleaseInBackground) with a test; CIP-level close (0x01/0x010…
Fixed: writes awaited under the exchange timeout and fault (tear down) the client on expiry — never cancelled mid-frame; non-finite/non-positive timeouts rejected at every entry point; gate wait…
Fixed all items: PatchU16 bounds guard, content-equal CipReply, FromCip(0xFF, empty) test, CipPath port/length/ASCII/odd-size validation, malformed tag names → ArgumentException, MessageRouter/Con…