Repository navigation
Releases
v0.11.0
Release of oekit/network v0.11.0(annotated tag,由 release_train 门禁后打点)。
变更记录
- BREAKING:删除 streamx.ErrStreamExhausted 别名(#104)——Source 契约口径唯一:耗尽即 io.EOF。下游迁移:errors.Is(err, ErrStreamExhausted) → errors.Is(err, io.EOF)(同一值,零行为变化)。地板随迁 pkg v0.48.0 / logx v0.11.0 / concurrency v0.36.0。
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.36.0
github.com/oekit/logx v0.11.0
github.com/oekit/pkg v0.48.0
github.com/oekit/tracing v0.4.4v0.10.4
Release of oekit/network v0.10.4(annotated tag,由 release_train 门禁后打点)。
变更记录
关联问题单:network#176、network#180。
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.36.0
github.com/oekit/logx v0.11.0
github.com/oekit/pkg v0.48.0
github.com/oekit/tracing v0.4.4v0.10.3
Release of oekit/network v0.10.3(annotated tag,由 release_train 门禁后打点)。
变更记录
- 1 单修复:7 处手写 err 字面量→logx.ErrKey + 护栏测试(#176);地板对齐 pkg v0.47.0/tracing v0.4.2。
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.34.1
github.com/oekit/logx v0.10.0
github.com/oekit/pkg v0.47.0
github.com/oekit/tracing v0.4.3v0.10.2
Go 1.26 现代化清扫;依赖地板对齐(concurrency v0.34.1、tracing v0.4.1 已随 #175 抬升)。纯等价重构+地板追平,行为零变更。
v0.10.1
Release of oekit/network v0.10.1(annotated tag,由 release_train 门禁后打点)。
变更记录
- fix(sshx): ParseSinglePublicKey 兑现「恰好一把」,拒「一行塞两把」(#151)——doc 承诺拒两种输入,但第二种「一行里塞了两把」的防线(rest 非空)是不可达死代码:x/crypto 的 rest 是「第一行之后的余量」,单行输入恒为空、多行已被前一条判据拒掉 ⇒ 实际「一行塞两把」被放行,第二把被 authorized_keys 的 comment 字段吞下(doc 的推理「rest 非空说明后面还有内容」本身是错的),仓内测试还把该行为钉成应当通过。现判据换成「comment 里还藏着一把能解析的公钥」——第二把落进 comment 是语法必然,逐后缀试解析连「注释文字后跟第二把」也命中,判据用「能解析」而非类型前缀(ssh-/ecdsa-/sk-),注释里「ssh 跳板机」字样不误伤;rest 死代码与错误推理一并修掉,测试翻转为应当拒绝并补「普通注释放行」对照(不标 BREAKING:签名与既有合法输入行为不变,唯一变化是此前违背 doc/函数名承诺被放行的「一行塞两把」开始被拒,即收紧到既有契约;若存在依赖旧宽松行为——第二把被当 comment 吞掉——的调用方,会开始收到 error,此类调用方应按 BREAKING 对待)
关联问题单:#151。
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.33.0
github.com/oekit/logx v0.9.2
github.com/oekit/tracing v0.4.0v0.10.0
Release of oekit/network v0.10.0(annotated tag,由 release_train 门禁后打点)。
变更记录
- fix(streamx): SSESink.Emit 的关闭检查与 stream 写入原子化(#144)——#117 在 wsutil.Outbox 修掉的同构竞态换包复活:closed 检查与写入两步无 happens-before,Close 可插进中间,通过检查的 Emit 把事件写进已关 stream、返回底层 stream 错误而非 ErrSinkClosed(契约「Close 后 Emit 返回 ErrSinkClosed」被击穿,Hub 把正常关闭当 sink 故障留痕)。现照 #117 修法把两步纳入同一临界区(Emit 持 RLock、Close 持 Lock,Close 等在途 Emit 写完才关 stream——慢消费者在途写会推迟 Close 返回,契约明示),Sink 接口契约同步写明原子要求
关联问题单:#144。
- fix(mq): MQClient.Close 改 Close(ctx) error(BREAKING)(#143)——门面此前把无 ctx 的 Close() error 写进契约,与 AGENTS.md「组件 Close 统一 Close(ctx) error」硬规则及同仓 nats.Client 实现三方分裂:实现者只能无界关停(#83/#86 事故形态,ctx 上界入口都没有)或放弃门面。现接口与全部实现统一 Close(ctx) error(Go 不支持同名重载,无参形态移除,调用点改 c.Close(context.Background())),Requester.Request/RequestJSON 的「ctx 截止与 timeout 谁压谁」同步写死:先到先生效(min 语义,context.WithTimeout 同款),timeout ≤ 0 不是「不限时」而是立即到期(同 sshx #106 的两截止源教训)
关联问题单:#143。
- fix(wsutil): Broadcaster.writeMu 锁条目随 Conn 生命周期回收(#142)——条目此前无任何 Delete 路径,每见过一个 Conn 永久多一条 Conn→锁 强引用,断开的 websocket Conn 连同读写缓冲永远无法 GC,轮换型推送服务 RSS 随历史连接总数线性增长、永不回落。现按安全回收协议回收(无在途写协程窗口 且 conn 不属任何房间才删,users 计数盖住「取到条目、尚未加锁」的缝隙,恒等校验防换锁):写协程归还与 Unregister 收尾两处收尾,#87 的同锁串行保证不受影响(在途窗口内条目必留)
关联问题单:#142。
- 现代语言特性(贴合处落地):clear(Broadcaster.Close 丢弃条目表)、for range int(churn 轮换回归)、errors.Join(并发 emit/close 错误聚合)、sync.Once(SSESink.Close 幂等——「仅首次返回结果」口径贴 nats.Close 先例,故用 Do + 局部结果而非 OnceValue 的结果缓存形态)
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.32.0
github.com/oekit/logx v0.9.2
github.com/oekit/tracing v0.3.10v0.9.2
Release of oekit/network v0.9.2(annotated tag,由 release_train 门禁后打点)。
变更记录
- fix(nats): 订阅 handler 的 panic 就地收编——handler 跑在 nats.go 无 recover 的派发 goroutine(waitForMsgs 直接 mcb(m))里,一条语义残缺消息的 panic 会穿透炸掉整个进程、连同其上全部订阅与在途请求一并消灭;现在 Subscribe/QueueSubscribe(覆盖 SubscribeJSON/QueueSubscribeJSON/Reply 全部漏斗)的 handler 调用点统一 panic 收编(Error 日志 + 该条消息丢弃留痕,与 wsutil「只死这条连接」同口径),订阅与进程存活(#145)
关联问题单:#145。
- fix(wsutil): Outbox 写动作 panic 同样闭合记账——write panic 时旧实现整套记账与冲刷(failInFlight/countPending/drain)被跳过,「Send(true) − Written ≡ Dropped」恒等式破口、帧静默消失且 Dropped 恒为 0(#105/#117/#123 的口径只对 error 路径成立);现在 write 调用点 panic 收编为 error 走既有失败分支(run 与 drain 两径同口径),写动作 panic 计入 Dropped(#146)
关联问题单:#146。
- fix(nats): Close(ctx) 重连窗口内返回 nil——上游 Drain() 在连接重连中自己执行 nc.Close()(目标态已达成)却返回 ErrConnectionReconnecting,旧豁免只认 ErrConnectionClosed,把已关误记成 "drain: connection reconnecting" 虚假错误(上层关停误报告警/非零退出码/跳过清理);现在 ErrConnectionReconnecting 与 ErrConnectionDraining 同列「目标态已达成」豁免(#147)
关联问题单:#147。
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.32.0
github.com/oekit/logx v0.9.2
github.com/oekit/tracing v0.3.10v0.9.1
Release of oekit/network v0.9.1(annotated tag,由 release_train 门禁后打点)。
变更记录
-
- build: 依赖地板对齐(floor sync,无代码变更)
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.32.0
github.com/oekit/logx v0.9.2
github.com/oekit/tracing v0.3.10v0.9.0
Release of oekit/network v0.9.0(annotated tag,由 release_train 门禁后打点)。
变更记录
-
- feat(sshx): DialPolicy/DialWithPolicy 预算内按类重拨原语——预算跨尝试共享、拒绝默认不重拨(#125)
关联问题单:network#125。
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.32.0
github.com/oekit/logx v0.9.1
github.com/oekit/tracing v0.3.10v0.8.1
Release of oekit/network v0.8.1(annotated tag,由 release_train 门禁后打点)。
变更记录
-
- build: 依赖地板对齐(floor sync,无代码变更)
矩阵内依赖地板(该 tag 的 go.mod,CI 验证过的组合)
github.com/oekit/concurrency v0.31.2
github.com/oekit/logx v0.9.1
github.com/oekit/tracing v0.3.10