Releases: fa-yoshinobu/plc-comm-hostlink-rust
Release list
Release v3.2.1
[3.2.1] - 2026-07-29
- Release: Bumped crate and lockfile metadata to
3.2.1. - Release: GitHub Release drafts now prepend this version's changelog section to generated notes and repair a missing section on workflow reruns.
Changed
- Library: Removed an unreachable maintainer-only trace-hook implementation and its test-only model types. The hook was crate-private, had no production caller, and was not part of the public API.
Fixed
- Library: TCP and UDP exchanges now share one checked absolute deadline across write and complete response assembly, so repeated partial data cannot restart the timeout. Timeout values too large to form a runtime deadline are rejected before transport use instead of risking a panic.
- Library: Direct-bit numeric and bit-in-word operations now preserve complete 16-/32-bit values, sequential typed reads pack direct-bit tokens, and RDS requests split at command limits.
- Library: Hexadecimal VB parsing preserves the
Fdigit throughF9FF, and profile/device catalog upper bounds no longer reject transport sends.
Tests
- Tests: Added segmented-response deadline, delayed-write, UDP deadline, and oversized-timeout regression coverage.
What's Changed
- Close completed release acceptance records by @fa-yoshinobu in #31
- Remove unused trace hook by @fa-yoshinobu in #32
- Enforce absolute HostLink request deadlines by @fa-yoshinobu in #33
- Fix Host Link Rust deadlines and address handling by @fa-yoshinobu in #34
- Release 3.2.1 with changelog-backed GitHub notes by @fa-yoshinobu in #35
Full Changelog: v3.2.0...v3.2.1
Release v3.2.0
v3.2.0 changes
-
Release: Bumped crate and lockfile metadata to
3.2.0. -
CI: Excluded maintainer-only files, tests, and release tooling from generated source archives while retaining the complete example set, and added source-archive contract checks to local, CI, and release gates.
-
Library: Added immutable client-lifetime traffic snapshots through
traffic_stats()on direct and queued clients. -
Library: Made TCP receive-byte accounting independent of CR/LF segmentation by counting the response body and first terminator only; UDP datagram accounting is unchanged.
Release v3.1.0
v3.1.0 changes
BREAKING
- Library: Require destination port, transport, and canonical PLC profile when constructing connection options. Constructors remain local-only; commands require an explicit successful
openand returnHostLinkError::NotConnectedinstead of opening or reopening a transport. - Library: Fix the communication timeout default at 3 seconds, normal command termination at CR, and the internal response-body cap at 65,536 bytes. Public LF and buffer-size controls are removed.
- Library: Make
set_timerequire an explicit, calendar-validHostLinkClock; local-time creation remains a separate caller-invoked helper and never falls back to UTC. - Library: Change maintainer
send_rawto return undecoded response-body bytes without converting PLC error responses. It is hidden from ordinary generated user documentation. - Library: Remove comment padding options. Comment decoding removes only trailing ASCII space bytes before UTF-8/Shift_JIS decoding.
- Library: Require expansion-buffer and low-level numeric formats, reject suffix-bearing low-level device inputs, and validate response tokens, numeric ranges, counts, and 32-bit spans without fallback conversion.
- Library: Remove all public chunked helpers. Word and native Dword helpers send at most one request and reject counts over their one-request limit.
- Library: Keep bit-in-word read-modify-write under one client lock so concurrent clones cannot interleave the read and write portions.
- Library: Remove the embedded PLC manual error-message lookup and retain only the returned PLC code and response.
- Library: Require UDP response terminators, reject suffixes on every non-format command, validate hexadecimal reads as exactly one 1..4-digit token, and limit clock years to
00..99. - Library: Validate command-derived response counts, including 16/32-point direct-bit numeric reads; accept only documented
0/1/ON/OFFdirect-bit tokens and close the session after malformed semantic responses. - Library: Replace the lossy
From<HostLinkValue> for u16conversion with fallibleTryFrom, so non-U16variants cannot silently become zero. - Tests: Add explicit 3-second/zero/TCP-timeout recovery coverage and remove library-local cross-implementation vectors; cross-language verification is a separate repository concern.
- Tooling: Allow the local release gate to package the reviewed working-tree diff before it is committed.
- Samples: Require port, transport, and canonical PLC profile in every runnable endpoint definition.
Added
- Library: Added
KvHostLinkPlcProfileDescriptorand crate-rootplc_profile_descriptors()for canonical Host Link profile metadata.
Changed
-
Docs: Rebuilt getting-started, usage, API, profile, README, examples, and maintainer migration material around the explicit quality-overhaul contract.
-
Tests: Added coverage for disconnected commands, raw bytes, response caps and expected counts, native Dword requests, calendar validation, comment padding, and concurrent bit-in-word updates.
-
Release: Bumped crate and lockfile metadata to
3.1.0.
Fixed
- Library: Corrected ten KV device range cells against live PLC hardware and the KEYENCE simulator, and pinned the canonical profile source to
plc-comm-hostlink-profilesv1.2.0.VMwidens toVM0-9999on KV-NANO andVM0-59999on KV-3000/KV-5000;Zwidens toZ1-23on KV-8000.CTHnarrows toCTH0-1on the KV-3000 and KV-5000 XYM profiles, matching their base profiles:CTH2andCTH3were previously accepted there and are now rejected. - Library: Poison and replace TCP/UDP transports after timeout, I/O failure, or a dropped request future so delayed responses cannot satisfy a later request.
- Tests: Cover UDP timeout and cancellation with delayed loopback responses.
- Docs: Remove hand-maintained next-page navigation from Getting Started.
Release integrity
- The registry package, �3.1.0 tag, and attached assets remain immutable.
- Main-branch CHANGELOG classification was corrected by PR #27 without changing runtime code, package metadata, the tag, or published artifacts.
v2.0.0
v2.0.0
BREAKING
crates.io package renamed and Rust import path changed.
| Old crate/use | New crate/use |
|---|---|
plc-comm-hostlink-rust |
plc-comm-kv-hostlink |
use plc_comm_hostlink::... |
use plc_comm_kv_hostlink::... |
Highlights
- Version metadata bumped to 2.0.0.
- Release duplicate checks now target
plc-comm-kv-hostlink. - README, Getting Started, examples, tests, and docs.rs links use the new crate/import names.
Package matrix: https://fa-yoshinobu.github.io/plc-comm-docs-site/package-matrix/
Release v1.3.0
Full Changelog: v1.2.0...v1.3.0
Release v1.2.0
What's Changed
- [codex] fix doc sample snippets by @fa-yoshinobu in #14
- [codex] Improve sample navigation and reconnect examples by @fa-yoshinobu in #15
- [codex] Link Rust API documentation by @fa-yoshinobu in #16
- [codex] Add operational polling recipes by @fa-yoshinobu in #17
- [codex] Document Rust operational recipes by @fa-yoshinobu in #18
Full Changelog: v1.1.1...v1.2.0
v1.1.1
[1.1.1] - 2026-06-29
Changed
- Release: Bumped crate metadata to
1.1.1. - Docs: Documented explicit Host Link value-format requirements in existing user docs.
- Samples: Updated the high-level example to use explicit value-format suffixes.
v1.1.0
Changed
- Release: Bumped crate metadata to
1.1.0. - Library: Made Host Link device parsing require explicit device areas and value-format suffixes; numeric-only devices no longer default to
R, and suffixless named addresses no longer infer a default format. - Library: Removed the unused public
resolve_effective_formathelper so suffixless devices are not exposed through an implicit-format API. - Docs: Refreshed Host Link getting-started, gotchas, supported-register, and usage guidance.
- Samples: Updated Host Link examples to use safer write/restore patterns.
Fixed
- Library: Reject malformed embedded device-range segments while building the KV range catalog instead of silently defaulting invalid lower bounds to
0. - Library:
BIT_IN_WORDnow requires an explicit.0through.Fbit index instead of treating a missing bit index as bit 0.
Tests
- Tests: Added coverage for invalid embedded device-range segment parsing.
- Tests: Added coverage for rejecting bit-in-word logical addresses without an explicit bit index.
- Tests: Updated high-level and shared frame-vector coverage for explicit device/value-format requirements.
Release v1.0.0
What's Changed
- [codex] release 1.0.0 alignment by @fa-yoshinobu in #13
Full Changelog: v0.9.0...v1.0.0
Release v0.9.0
What's Changed
- [codex] Require explicit Host Link PLC profiles by @fa-yoshinobu in #11
- [codex] Bump HostLink release to 0.9.0 by @fa-yoshinobu in #12
Full Changelog: v0.8.0...v0.9.0