# 插件发版指南 本项目的发布说明优先面向中文网文作者:先说明这版对写书有什么帮助,再补维护者关心的 CLI、schema、测试和 CI 细节。 ## 发版前审计 发布说明必须覆盖“上一个正式版本 tag 到本次发布提交”的全部变化,而不是只写最后一次提交。 发版前先确认版本边界: ```bash git tag --list "v*" --sort=-v:refname git log --oneline v上一版本..HEAD git diff --stat v上一版本..HEAD ``` 把变化分成四类: - 给作者看的变化:写章、审查、规划、查询、恢复、文档等用户能感受到的变化。 - 兼容性:是否需要迁移旧书项目,是否改变现有 `/webnovel-*` 命令习惯。 - 已知影响:跳过项、限制、需要注意的风险。 - 给维护者:新增 CLI、schema、helper、测试、CI、内部重构。 ## 发布说明来源 每个正式版本都必须有两份文档: - `CHANGELOG.md`:长期更新日志。 - `releases/vX.Y.Z.md`:GitHub Release 正文的唯一来源。 README 只保留一句中文用户收益摘要,例如: ```md | **v6.2.0 (当前)** | 写章结果更清楚,失败后更好恢复 | ``` 不要把 README 当完整 changelog。 ## 版本同步 写好 `CHANGELOG.md` 和 `releases/vX.Y.Z.md` 后,再同步版本号和 README 摘要: ```bash python -X utf8 webnovel-writer/scripts/sync_plugin_version.py --version X.Y.Z --release-notes "一句中文用户收益" ``` 该命令会更新: - `webnovel-writer/.claude-plugin/plugin.json` - `.claude-plugin/marketplace.json` - `README.md` 版本徽章 - `README.md` 当前版本行 ## 本地校验 提交前至少运行: ```bash python -X utf8 webnovel-writer/scripts/sync_plugin_version.py --check --expected-version X.Y.Z python -X utf8 webnovel-writer/scripts/validate_release_notes.py --version X.Y.Z python -X utf8 webnovel-writer/scripts/validate_plugin_package.py git diff --check ``` 涉及代码或提示词变化时,还要运行对应 pytest、行为评估或 smoke test,并把结果写进 `releases/vX.Y.Z.md` 的“验证”小节。 ## 自动发版 1. 确认本地校验通过。 2. 提交并推送版本说明和版本元数据到 `master`。 3. `Plugin Release` 工作流会自动: - 校验 `plugin.json`、`marketplace.json`、README 版本一致。 - 校验 `CHANGELOG.md` 和 `releases/vX.Y.Z.md` 存在且覆盖上个 tag。 - 校验插件包结构。 - 创建并推送 `vX.Y.Z` tag。 - 使用 `releases/vX.Y.Z.md` 创建 GitHub Release。 如果对应 tag 已存在,工作流不会重复打 tag;如果 GitHub Release 已存在,也会自动跳过。若之前只创建了 tag 但 Release 缺失,重跑工作流会补建 Release。 也可以在 Actions 页面手动选择 `Plugin Release` 兜底触发。手动运行时可以输入 `version`,也可以留空让工作流从 `plugin.json` 读取当前版本。 ## 自动版本校验 `Plugin Version Check` 工作流会在 Push / PR 时自动检查: - 版本元数据一致。 - README 版本徽章一致。 - 当前版本有 release note。 - `CHANGELOG.md` 包含当前版本。 触发文件: - `.claude-plugin/marketplace.json` - `webnovel-writer/.claude-plugin/plugin.json` - `webnovel-writer/scripts/sync_plugin_version.py` - `webnovel-writer/scripts/validate_release_notes.py` - `README.md` - `CHANGELOG.md` - `releases/**`