Status: Active contract — 已覆盖版本 source of truth、tag 不可变、CI 多平台版本/ABI/server-health 门禁与失败后的补丁版本策略。
为什么先读:发版有严格顺序(RELEASE_NOTES → package.json version → npm install → 提交推送 → tag → CI 自动构建发布);不能删 tag——一旦 tag 被删再重建,已发布的 Release 会变 Draft(feedback_never_delete_release_tags.md)。CI 会自动建 Release 并上传产物,不要手动建。
已知关键文件:RELEASE_NOTES.md、package.json(version 字段)、package-lock.json、.github/workflows/*(CI 发版流程)。
RELEASE_NOTES.md — 当前版本 Release 正文 source of truth;CI 读它作为 GitHub Release body。
tag — v{版本号};推送后触发 CI 构建发布。
Shipped — tag CI 成功且 GitHub Release 与全部平台资产真实存在;只推送 tag 不算发布完成。
| # |
不变量 |
由谁守 |
| 1 |
不能删 release tag——删了再建会让已发布 Release 变 Draft,丢失下载链接 |
人 + CI |
| 2 |
必须等用户明确指示才 git push + git tag;commit 可以正常进行 |
人(执行 Agent) |
| 3 |
RELEASE_NOTES.md 格式必须严格遵循 CLAUDE.md "Release Notes 格式" 一节 |
人 |
| 4 |
更新内容必须用用户能理解的语言,不要出现 commit hash / 函数名 / 文件路径 |
人 |
| 5 |
下载链接必须是完整 GitHub release download URL,用户点击即可下载 |
人 |
| 6 |
tag CI 任一平台失败时不得删除/重建该 tag;修复后递增 patch 版本重新发布 |
人 + CI |
| 7 |
只有 macOS 双架构、Windows、版本/ABI/packaged-server-health/checksum 门禁均通过且 Release job 成功,才能报告 Shipped |
.github/workflows/build.yml + 执行 Agent |
| 文件 |
守哪条不变量 |
RELEASE_NOTES.md |
Release 正文 source of truth |
package.json |
version 字段 |
package-lock.json |
同步版本号(npm install 后会自动更新) |
.github/workflows/* |
CI 自动构建 + 上传产物 |
scripts/after-pack.js / scripts/after-sign.js |
macOS DMG 签名 + better-sqlite3 ABI |
- 删 tag 重建:已发布的 Release 变 Draft(
feedback_never_delete_release_tags.md)。如果发版后发现 RELEASE_NOTES 错了,新建一个 patch 版本而不是重发同版本。
- Release Notes 写成给开发看的(commit hash / 函数名):用户读不懂;必须用面向用户的语言。
- 自动发版:禁止;commit 可以做,但 push + tag 必须等用户明确指示。
- 把“tag 已推送”报告成“已发布”:Release job 可能因任一平台构建失败被跳过;必须查看最终 Release 与资产。
- 只验 ABI、不启动 server:v0.58.3 的安装包通过版本与 better-sqlite3 ABI 检查,但缺少 Next.js 哈希 external alias,用户界面永久停在
Starting CodePilot...。
| 契约 |
测试文件 |
| 构建产物 server 启动 |
scripts/verify-packaged-server.mjs + .github/workflows/build.yml |
| tag/version、P0 regression、双平台 version/ABI/server-health/checksum |
.github/workflows/build.yml |
| release notes / package version drift |
scripts/lint-docs-drift.mjs + CI verify-source |
- 2026-07-20 — v0.58.2 tag 的 macOS 成功但 Windows
EBUSY,Release job 因 fail-closed 被跳过;保留 tag,修复后改发 v0.58.3。