Files
knowledge-governance/CHANGELOG.md
T
t 6de5d52363
build / build (push) Successful in 51s
feat(version): 开发号随提交自动递增 + 首个正式版本 0.1.0
按使用者要求定的版本规则(自动升的是**开发标识**,发布版本与 tag 仍由人批准):

- **开发号自动递增**:display_version(development) = `<正式版本的主.次>.<自 v<正式版本> 以来的提交数>`
  (正式 0.1.0 之后第 1 个提交 0.1.1、第 12 个 0.1.12;恰在发布提交上 = 正式号)。
  它**不写进 CHANGELOG**(发布记录只在发版时动),由 git 算出来 ⇒ 每个提交都有自己的号、数字只增。
- **浅克隆不猜号**:`--depth` 会把条数算少 ⇒ 浅仓库里拒绝算号,退回 `<版本>-dev+g<短SHA>`;
  检出步骤在仓库有 tag 时 `--unshallow` 补全历史。
- 接线三处齐全:`version.py --identity` → 门禁 `-X …CommitsSinceRelease=<n>`;Makefile 的
  `COMMITS_SINCE_RELEASE`;Dockerfile 同名 build-arg;Go 侧新增 `CommitsSinceRelease` 与
  DisplayVersion() 新规则;契约测试**交叉核对**"注入的提交数 == git 算出的"(防注入错号)。
- **首个正式版本 0.1.0**:CHANGELOG 的 `[Unreleased]` 提成 `## [0.1.0] - 2026-10-13`;
  头部补"版本怎么走"两行;RELEASE_RUNBOOK 补递增规则与"下一次发布把次版本加一"。
- 发版预检新增:打印**当前开发号**,并挡住"候选正式版本 <= 当前开发号"(会把开发号当正式号;建议次版本加一)。

验证:version.py --self-test(含 tag 后第 2 个提交 = 0.2.2、恰在 tag 上 = 0.2.0、无 tag 不猜号);
release_preflight --self-test(21 分支,含开发号两条);go test 本地三态 + 临时仓库 tag+2 提交实测
(Python 与 Go 都得出 0.2.2);反向夹具 85/0;make verify 15/15 success。
2026-10-13 16:45:56 +08:00

3.7 KiB
Raw Blame History

Changelog

版本号的唯一来源就是本文件顶部那条已发布版本。 不放 VERSION 文件、不把版本写进源码常量。

正式版本用注释 tag vX.Y.Z(由人批准后创建):CI 只核验「tag 的版本 == 它指到那个提交里的 版本记录」,不自动升版本、不打 tag、不发 Release。日常改动写进 [Unreleased]; 不要求每个提交都改本文件 —— 有使用者可见的变化才记,其余走提交信息与档案。

python3 scripts/version.py --identity      # 构建身份:release_version / build_kind / commit_sha / display_version / built_at
python3 scripts/check_changelog.py --tags  # 结构 + tag 一致性(无正式 tag 不判红)

小节只认四类(分类可省略,但不要空栏目):### Added / ### Changed / ### Fixed / ### Security。 破坏性变化写在 ### Changed 里、以 **破坏性** 开头,并链接发布文档(见 docs/RELEASE_RUNBOOK.md)。

过程记录(审查轮次、命令输出、逐条修正明细)不入本文件:归档在 docs/archive/, 未合并事项在 docs/BACKLOG.md。

版本怎么走(两行就够): · 正式版本 = 下面那条 ## [x.y.z] - 日期,是发版事实,由人批准后打注释 tag vX.Y.Z; · 开发版本自动递增 = <正式版本的主.次>.<自那个 tag 以来的提交数>(正式 0.1.0 之后第 12 个提交 = 0.1.12),由 scripts/version.py 从 git 算出来,不写进本文件 ⇒ 每个提交都有自己的版本号, 但"发布版本"仍然只能由人定(CI 不会自动升版本、不会打 tag)。

[0.1.0] - 2026-10-13

Added

  • 唯一权威门禁 make verify:一条命令跑完必需检查并产出结构化报告,本地与 CI 跑同一条命令。
  • 静态预览发布前先做同一份完整核对:报告有任何缺项就一个 publish 请求都不发。

Changed

  • 依赖升级:vite 7.1.3 → 7.3.7、vitest 3.2.4 → 5.0.3(npm audit 全量 0 命中)。
  • 前端存量格式债记入基线 web/.prettier-baseline.json(79 个文件,只能减,2026-12-31 到期)。

Fixed

  • 新分支推送时提交范围恒为空(基准改为远端默认分支)。
  • 空工作区下 CI 起不来(工作流首步改为最小 bootstrap)。
  • 事件负载缺 total_commits 时提交范围解析抛未收敛异常。

Security

  • 依赖漏洞例外登记 security/dependency-exceptions.json:缺字段 / 过期 / 批准人是占位值 ⇒ 例外无效。

能力基线(未发布):2026-10-10 的上线能力

这一条不是正式发布版本:当时本仓既没有版本号、也没有变更记录,没有 tag、没有 Release。 它只是把已上线能力补记在此,供此后发版对照;版本号体系从下一个正式版本开始(首个正式版本号由人指定)。

  • 来源与目录:列出可选的钉钉知识库 → 勾选 → 变成来源;快照与变更集。
  • 发布管理:计划 → 建批 → 锁定 → 授权发布(落 WeKnora 生产)。
  • 监控 + 需下架车道:测试库知识逐条下架。
  • 钉钉侧:知识库发现 / 注册、取件走 dws;登录与系统设置。
  • 运行形态:knowledge-governance-p1-* —— api / web / worker / release-worker / dingtalk-login / postgres 共 6 个容器;web 发布在 :8088。
  • 验收口径:docs/USER_FLOWS_ACCEPTANCE.md(C1~C9)与 docs/OPERATIONS_RUNBOOK.md。

⚠️ 上面的端口与容器名前缀是本机运行栈的实测值;换环境要按那边的运行栈改,别无脑照抄。