Skip to content

v0.1.13

Choose a tag to compare

@zy84338719 zy84338719 released this 23 Oct 14:46
· 23 commits to main since this release
3cdca43

这次加的是什么

「发布序列倒挂」门禁——同一版本线内,后发布的 tag 版本号反而更低。

全矩阵 24 个模块仓实测,4 个仓有 5 个已发布版本命中:

仓 旁支版本 发布时刻 此前已发布的更高版本 其发布时刻 间隔
kitex v0.3.9 10-15 19:32 v0.4.1 10-15 16:48 +2h43m
kitex v0.3.10 10-16 08:39 v0.4.1 10-15 16:48 +15h50m
redisx v0.3.1 10-16 10:20 v0.4.0 10-16 10:17 +3m
middleware v0.5.1 10-17 16:52 v0.6.0 10-17 16:08 +44m
network v0.1.1 10-17 16:53 v0.5.1 10-17 16:51 +2m

这些版本都已发布——tag 在远端、GitHub Release 在、Go module proxy 上可解析 ⇒ 删不得也挪不得(重推 = 已缓存消费方集体中毒,.github#5)。而矩阵(versions.json / llms.txt)只登记 latest 与 breakingIndex,不登记它们 ⇒ 对外口径与远端事实不一致。

为什么一直没被抓到

共享 CI 的 changelog_check.py 规则 1 查的是「CHANGELOG 小节按 semver 严格递减」——那是文档序;倒挂是发布序(事实序)。

network 的小节顺序是 v0.5.5 … v0.5.0 → v0.1.1,逐节递减 ⇒ 门禁绿;而事实序是 v0.5.1 先发布、v0.1.1 后发布。实测 4/4 仓的 changelog_check 全绿——两种序之间没有人守。

怎么加的

  • scripts/verify_version_line.py——独立 oracle:自己解析 semver、自己读 git 原始输出(git for-each-ref --sort=creatordate),刻意不复用任何现有解析逻辑(共享逻辑就有共同盲区,#31 复审原则)。
    版本线 = (路径前缀, module 路径)——module 路径变更是「新模块」,新旧两条线各自单调(redisx 活例:旧路径 github.com/oekit/redis 与新路径 …/redisx;不按路径分层,新线起点会被误判成回退)。
    某仓一个 tag 都没有 ⇒ 判不了,不当通过。
  • scripts/version_line_known.json——已登记的 5 处旁支版本,逐条写明事实与处置。未登记的新倒挂仍然判红——例外表是显式人工放行口,不是漏报口子。
  • scripts/verify_version_line_selftest.py——变异自测 7 例:回退必须抓到(且参照是此前已发布的最高版本)/ 正常递增不误报 / 嵌套版本线独立 / module 路径变更后新线起点不误判 / 同一路径内的回退仍抓到 / 例外表只放行登记的那一处 / 无 tag 判不了。
  • 接入 audit.py(聚合层 ⇒ 随之进 CI 的 PR 门禁与周巡检);audit.yml 的 selftest job 加入新自测。

明确不做

  • 不删、不重推任何已发布 tag(= 已缓存消费方集体中毒)
  • 不改已发布版本的内容语义——各仓只补事实声明:network#24 / kitex#33 / middleware#46 / redisx#31

关:#88