Переглянути джерело

docs(commit): 新增 commit message 规范文档

统一提交说明格式,便于按 feat/fix 过滤历史、后续可支撑
conventional-changelog 自动生成 Change log。

约定要点(Angular 规范本地化):
- type(scope): subject 三段式;subject ≤50 显示列,细节下沉 body
- 所有行 ≤72 显示列(中文双宽)
- body 写动机与新旧行为对比,不只罗列改动
- 不兼容变动 footer 标 BREAKING CHANGE + 迁移方法
- 允许追加 Co-Authored-By trailer(规范外 git 惯例)

纯人工约定,未引入 commitlint/commitizen 工具链。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
lkatzey 1 місяць тому
батько
коміт
e7089ad8e7
2 змінених файлів з 100 додано та 1 видалено
  1. 1 1
      CLAUDE.md
  2. 99 0
      docs/COMMIT_CONVENTION.md

+ 1 - 1
CLAUDE.md

@@ -22,7 +22,7 @@ node apps/cli/dist/index.js render -t github-trending -p bilibili --source githu
 cd apps/web && pnpm dev
 ```
 
-> 部署(Docker Compose / HTTP API / 配置 / OSS·飞书发布)详见 [`docs/DEPLOYMENT.md`](docs/DEPLOYMENT.md),环境变量模板见 [`.env.example`](.env.example)。
+> 部署(Docker Compose / HTTP API / 配置 / OSS·飞书发布)详见 [`docs/DEPLOYMENT.md`](docs/DEPLOYMENT.md),环境变量模板见 [`.env.example`](.env.example)。提交代码遵循 [`docs/COMMIT_CONVENTION.md`](docs/COMMIT_CONVENTION.md)(Angular 规范:type(scope): subject ≤50 字、所有行 ≤72 字符、body 写动机与新旧行为对比、不兼容变动标 BREAKING CHANGE)。
 
 ## 架构
 

+ 99 - 0
docs/COMMIT_CONVENTION.md

@@ -0,0 +1,99 @@
+# Commit Message 规范
+
+参考 [Angular 规范](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit)
+(阮一峰 [《Commit message 和 Change log 编写指南》](https://www.ruanyifeng.com/blog/2016/01/commit_message_change_log.html)),
+结合本仓库实际情况本地化。纯约定,无工具强制——提交前自查。
+
+## 格式
+
+```
+<type>(<scope>): <subject>
+// 空一行
+<body>
+// 空一行
+<footer>
+```
+
+Header 必需;Body / Footer 可省略。**任何一行不超过 72 显示列**
+(中文按双宽计,约 24~36 个汉字;此约束针对 commit message,
+markdown 文档本身不受限),避免自动换行破坏格式。
+
+## Header
+
+### type(必需)
+
+| type | 用途 | 进 Change log |
+| --- | --- | --- |
+| `feat` | 新功能 | 是 |
+| `fix` | 修 bug | 是 |
+| `docs` | 仅文档变动 | 否 |
+| `style` | 格式调整(不影响代码运行:空格、格式、标点) | 否 |
+| `refactor` | 既非新增功能、也非修 bug 的代码变动 | 否 |
+| `test` | 增加或修改测试 | 否 |
+| `chore` | 构建过程或辅助工具的变动 | 否 |
+| `perf` | 性能优化(Angular 后续补充,本仓库已在使用) | 建议 |
+
+- `revert` 特殊格式:以 `revert: ` 开头,后跟被撤销 commit 的 Header;
+  Body 固定写 `This reverts commit <hash>.`
+
+### scope(可选)
+
+影响的范围,用模块/包名,如 `text`、`audio`、`renderer`、`core`、`collect`、
+`tts`、`shared`、`templates`、`deploy`(Docker/配置/部署)、`web`、`cli`。
+跨多个模块时可省略 scope 或用主导模块名,不要罗列一长串。
+
+### subject(必需)
+
+- **不超过 50 字符**(约 17~25 个汉字)。细节一律下沉到 Body,标题保持一行可读。
+- 以动词开头,第一人称现在时("新增"而非"新增了"),结尾不加句号。
+- 现有提交常用「主题——要点」破折号补充形式;若要点放不下标题,移入 Body。
+
+## Body
+
+- 分点列出改动时,**每条先写动机与新旧行为对比**,再写做法——说明"为什么改"
+  比罗列"改了什么"更重要:
+  - 差:「CLI/web 客户端只透传」
+  - 好:「模型解析收敛到 core 一处(原 CLI/web 各自合并兜底,行为不一致且
+    静默回退到硬编码旧模型);现在未配置显式报错,快速失败」
+- 接口/契约变更、删除的兜底逻辑等**行为变更**必须显式写出旧行为。
+
+## Footer
+
+只用于两种情况:
+
+1. **不兼容变动**:以 `BREAKING CHANGE:` 开头,说明变动内容、理由、迁移方法:
+
+   ```
+   BREAKING CHANGE: DocumentRunConfig.llm.model 改为可选。
+
+   迁移:调用方不再需要自行兜底默认模型;runDocument 在三者均未设置时抛错。
+   ```
+
+2. **关闭 Issue**:`Closes #234`,多个用逗号分隔。
+
+此外允许追加 `Co-Authored-By: ...` trailer(git 惯例,注明协作生成方),
+放在上述条目之后。
+
+## 示例
+
+```
+feat(core): LLM 模型三级解析
+
+模型解析收敛到 core runDocument 一处:--llm-model > LLM_MODEL env >
+config.llm.model。原来 CLI 与 web 各自合并兜底(硬编码 gpt-4o/glm-5.1),
+配置缺失时静默降级到过期模型;现在未配置直接报错,容器部署可仅注入
+LLM_MODEL 切换模型,无需改配置文件或重建镜像。
+
+BREAKING CHANGE: DocumentRunConfig.llm.model 由必填改为可选,
+调用方传入的 model 不再参与兜底。
+
+Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
+```
+
+## 发版流程
+
+tag 采用 `vN.N.N` annotated tag,双远端推送(Gitee + Gogs);`release`
+分支仅推 Gogs(触发外部 CI/CD)。详见 `docs/DEPLOYMENT.md`。
+
+若后续引入 conventional-changelog,本规范的 feat/fix/BREAKING CHANGE
+约束可直接支撑自动生成 Change log;当前未启用。