Repository navigation
v0.1.13
这次加的是什么
「发布序列倒挂」门禁——同一版本线内,后发布的 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