feat: 完成aide flow设计

This commit is contained in:
2025-12-14 21:55:56 +08:00
parent a48fbb5fae
commit a0c9173bc4
9 changed files with 821 additions and 15 deletions

View File

@@ -0,0 +1,90 @@
# Git 集成设计GitIntegration
## 一、目标与原则
### 1.1 目标
- 让调用方无需手动执行 `git add/commit` 也能得到规范提交
- 将“进度节点”与“提交记录”关联:在状态历史中记录 `git_commit`(可为空)
### 1.2 原则
- **静默即成功**Git 正常执行时尽量不输出额外信息
- **.aide 默认不进提交**Git 记录的是代码/文档等实际产出,状态文件仅做本地追踪
- **无变更可提交 ≠ 失败**:当工作区没有可提交变更时,本次记录仍然成功,`git_commit = null`
## 二、提交信息生成规则(必须一致)
提交信息格式以 `aide-program/docs/formats/data.md` 的“Git 提交信息格式”为准。
核心模板:
- 普通:`[aide] <phase>: <summary>`
- issue`[aide] <phase> issue: <description>`
- error`[aide] <phase> error: <description>`
- back-step`[aide] <phase> back-step: <reason>`
- back-part`[aide] <phase> back-part: <reason>`
> 说明:`phase` 使用“动作完成后的 current_phase”以保证 status 与 commit message 一致。
## 三、暂存add策略
默认策略(与现有文档保持一致):
- 执行 `git add .`(由 `.gitignore` 控制忽略项)
可选增强(建议实现时评估,避免误提交):
- 仅暂存已跟踪文件:等价于“只更新 tracked 的变更”
- 在提交前检查 `git status`,对明显异常(如大量生成文件)给出 `⚠` 提示
## 四、事务边界(状态与 Git 的一致性)
### 4.1 推荐边界
一次 `aide flow` 调用视为一个“原子动作”:
- 校验失败/关键 Hook 失败:不应推进状态,也不应提交
- Git 必须但执行失败:不应推进状态(避免“状态已前进但提交缺失”)
- 无变更可提交:允许推进状态,`git_commit = null`
### 4.2 “无变更可提交”的判定
当出现“nothing to commit / working tree clean”等语义时
- 视为成功,不返回错误
- 仍写入状态历史,但 `git_commit` 为空
## 五、失败与降级策略
### 5.1 非 git 仓库
若当前目录不在 git 仓库内:
- **默认建议:失败**(提示用户初始化 git 或切换到正确目录)
- 可配置降级:仅记录状态,不做 git见 5.3
### 5.2 git 命令不可用/异常
若 git 不存在或执行报错:
- 默认失败,并输出具体错误与建议
### 5.3 可配置项(建议加入 flow 配置)
为满足不同团队习惯,建议在 `flow` 下增加可选配置(若不实现则使用默认行为):
| 配置键(建议) | 类型 | 默认值(建议) | 说明 |
|---|---:|---:|---|
| `flow.git.enabled` | bool | true | 是否启用 Git 集成 |
| `flow.git.required` | bool | true | 启用后是否“必须成功”,否则降级为仅记录 |
| `flow.git.allow_empty_commit` | bool | false | 是否允许创建空提交(用于记录纯流程节点) |
| `flow.git.add_strategy` | string | `"dot"` | 暂存策略:`dot`git add ./ 其它策略(可扩展) |
> 若 `allow_empty_commit = true`,则“无变更”场景也会产生 commit需要评估对仓库历史的影响。
## 六、与 Hooks 的顺序关系
会产生/修改文件的钩子(如 PlantUML 生成 PNG必须在 Git add/commit 之前执行,否则生成物不会进入本次提交。
详细触发点见:`aide-program/docs/commands/flow/hooks.md`