diff --git a/CHANGELOG.md b/CHANGELOG.md
index de1f66c..09d0475 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,8 @@
### 修复
+- 升级官方 StreamFrame 2.4.0,采用 Connected 发布点的会话 epoch 收口,
+ 并获得 Passive 接受重试出锁与监听端口立即重绑加固。
- 升级官方 StreamFrame 2.3.1,修复迟到旧会话故障污染活会话状态、旧会话
绑定消息跨 Socket 错发,以及会话拆除时发送失败类型不稳定的问题。
- 串行化适配器的当前会话关闭与 transport 释放,避免已入队的迟到
diff --git a/Directory.Packages.props b/Directory.Packages.props
index e5c7c44..98c8004 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -9,7 +9,7 @@
-
+
diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md
index da1849b..b4632fa 100644
--- a/docs/ARCHITECTURE.md
+++ b/docs/ARCHITECTURE.md
@@ -53,7 +53,8 @@ HSMS 会话切换后,旧会话的控制请求、数据事务和等待中的应
IHsmsTransport 使用单一事件流按 Session ID 报告会话打开、
帧到达和会话关闭。StreamFrameHsmsTransport 已在内部实现:
-- 直接采用 StreamFrame 2.3.1 的单调 TCP Session ID;
+- 直接采用 StreamFrame 2.4.0 的单调 TCP Session ID,并在 Connected
+ 发布点同步分配会话 epoch;
- 通过会话感知接收流保留帧的原始 Session ID,迟到消费不会被标成新会话;
- 会话绑定发送在 StreamFrame 原生 FIFO 中校验 Session ID,旧会话消息
不会重放,整帧写入本机 Socket 后才完成;
@@ -65,8 +66,9 @@ HSMS 会话切换后,旧会话的控制请求、数据事务和等待中的应
这些能力仍隔离在 IHsmsTransport 后,不进入公共 API。此前
跟踪的 StreamFrame #38/#39 已在 2.3.0 完成迁移,2.3.1 进一步封闭迟到
-旧故障污染活会话和排队消息跨 Socket 错发的竞态;SecsFrame 只保留协议
-关闭原因和异常边界转换。详细失效模式与验证证据见
+旧故障污染活会话和排队消息跨 Socket 错发的竞态,2.4.0 又收口发布窗口
+旧 epoch 故障并加固 Passive 监听恢复;SecsFrame 只保留协议关闭原因和
+异常边界转换。详细失效模式与验证证据见
[STREAMFRAME-ADAPTER.md](STREAMFRAME-ADAPTER.md)。
### 单线程会话状态机
diff --git a/docs/COMPATIBILITY.md b/docs/COMPATIBILITY.md
index f643a16..217c364 100644
--- a/docs/COMPATIBILITY.md
+++ b/docs/COMPATIBILITY.md
@@ -20,9 +20,11 @@
## 上游能力集成
StreamFrame #38(未完成帧超时)与 #39(会话感知发送确认及消息上下文)
-已经随官方 StreamFrame 2.3.0 发布。SecsFrame 固定官方 2.3.1 NuGet 包,
-包含迟到旧会话故障隔离、排队发送 Session ID 复核和稳定失效异常修复,并由
-内部 StreamFrameHsmsTransport 使用原生会话 API;此前基于
+已经随官方 StreamFrame 2.3.0 发布,2.3.1 随后补充迟到旧会话故障隔离、
+排队发送 Session ID 复核和稳定失效异常修复。SecsFrame 当前固定官方
+2.4.0 NuGet 包,进一步收口 Connected 发布点的会话 epoch,加固 Passive
+接受重试与监听端口重绑。内部
+StreamFrameHsmsTransport 使用原生会话 API;此前基于
原始字节回调、发送信封和自建 Session ID 的临时实现已经删除。
这不是设备兼容模式:
diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md
index e8666ae..fc3f9ee 100644
--- a/docs/ROADMAP.md
+++ b/docs/ROADMAP.md
@@ -10,8 +10,8 @@
- [x] 完整 SECS-II Item 类型、嵌套 List 和严格二进制编解码。
- [x] 动态 SecsMessage、可选单根 Item 与 HSMS Data Message Payload 编解码。
-- [x] 迁移到 StreamFrame 2.3.1 原生会话绑定、写出确认、会话竞态修复和
- 未完成帧超时。
+- [x] 迁移到 StreamFrame 2.4.0 原生会话绑定、写出确认、会话 epoch/监听
+ 竞态修复和未完成帧超时。
- [x] Active/Passive 共用状态机的 Select/Select Response、Separate、
T6/T7、System Bytes 关联和会话失效处理。
- [x] Linktest、Reject、Deselect 控制消息与对应 T6 分支。
@@ -27,8 +27,9 @@
- [x] Host、Equipment 双角色端点及两种 Active/Passive 拓扑的双向回环。
阶段 1 的工程能力已经形成完整基础链路,StreamFrame #38/#39 的正式包
-迁移、2.3.1 会话隔离修复与等价测试已经完成。后续切片继续扩展 GEM 通用
-行为。任何标准默认值
+迁移与 2.3.1 会话隔离修复已经完成;当前固定 2.4.0,并继续验证发布窗口
+epoch 收口与 Passive 监听加固。后续切片继续扩展 GEM 通用行为。任何
+标准默认值
和完整合规结论都依赖团队合法获得的 E37/E37.1 及相关 GEM 标准副本与
一致性测试。
diff --git a/docs/STREAMFRAME-ADAPTER.md b/docs/STREAMFRAME-ADAPTER.md
index 50f29e2..cd98083 100644
--- a/docs/STREAMFRAME-ADAPTER.md
+++ b/docs/STREAMFRAME-ADAPTER.md
@@ -2,7 +2,7 @@
## 上游基线
-SecsFrame 固定依赖官方 [StreamFrame 2.3.1](https://www.nuget.org/packages/StreamFrame/2.3.1)。
+SecsFrame 固定依赖官方 [StreamFrame 2.4.0](https://www.nuget.org/packages/StreamFrame/2.4.0)。
2.3.0 已经解决此前跟踪的两项能力缺口:
- [#38](https://github.com/CSJ608/StreamFrame/issues/38) / [PR #41](https://github.com/CSJ608/StreamFrame/pull/41):
@@ -16,6 +16,15 @@ ID,残留的旧会话绑定消息以 SessionExpiredException 结
不会写入新 Socket。停机、Socket 释放及会话故障竞态也统一收敛到该异常
边界。详见 [2.3.1 发布说明](https://github.com/CSJ608/StreamFrame/releases/tag/v2.3.1)。
+2.4.0 不移除 SecsFrame 使用的会话感知公共接口。会话 epoch 改为与 Session
+ID 一样在 Connected 发布点分配,闭合状态已经对外可见但会话任务尚未创建
+期间的旧 epoch 故障窗口;Passive 接受重试延迟移到锁外,并为监听 Socket
+设置 SO_REUSEADDR,提高故障重试和立即重绑的跨平台稳定性。
+底层连接还会通过 System.Diagnostics.Metrics 的
+StreamFrame Meter 发出内置指标,但 SecsFrame 不把这些类型
+提升为公共 API。详见
+[2.4.0 发布说明](https://github.com/CSJ608/StreamFrame/releases/tag/v2.4.0)。
+
SecsFrame 不再维护基于原始字节回调的 T8 监视器、发送确认计数器、会话
信封 codec 或自建 TCP Session ID。公共 API 和内部
IHsmsTransport 契约保持不变,上层 HSMS 状态机不直接依赖
@@ -73,7 +82,7 @@ StreamFrame 只在已有未完成帧时运行该超时:空闲连接和完整
分片帧收发、实际 T8 到期,以及会话替换时排队发送的精确失效与新 Socket
内容隔离;完整套件继续覆盖 T3/T6 从发送完成点启动以及旧会话不重放。
-这些测试证明当前工程契约与 StreamFrame 2.3.1 的互操作行为,不构成
+这些测试证明当前工程契约与 StreamFrame 2.4.0 的互操作行为,不构成
SEMI 合规声明。T5/T8 的标准默认值、精确启停边界和异常恢复仍须依据团队
合法获得的 SEMI E37/E37.1 版本及一致性测试核对。仓库不得提交标准正文、
表格或 Schema。