412 lines
14 KiB
Markdown
412 lines
14 KiB
Markdown
|
|
# 阶段 10:代码提交技能书
|
|||
|
|
|
|||
|
|
## A. 元数据 (Metadata)
|
|||
|
|
|
|||
|
|
**name**: `phase10-code-commit`
|
|||
|
|
|
|||
|
|
**description**: 在 Datai 项目中,基于已完成的复盘和 API 文档,提交代码到本地仓库,询问用户是否提交到远程仓库,并更新索引和会话记录。此技能确保代码的可管理性和版本控制。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## B. 触发与定位 (Triggers & Scope)
|
|||
|
|
|
|||
|
|
### 触发关键词
|
|||
|
|
当用户输入包含以下关键词时,必须觉醒此技能:
|
|||
|
|
- "代码提交"、"提交代码"、"git commit"
|
|||
|
|
- "进入阶段 10"、"下一阶段"
|
|||
|
|
- "git"、"commit"、"push"
|
|||
|
|
|
|||
|
|
### 触发场景
|
|||
|
|
- 用户确认阶段 9 完成,要求进入阶段 10
|
|||
|
|
- 用户要求提交代码
|
|||
|
|
- 用户询问如何提交代码
|
|||
|
|
- 用户提到"按照项目规则"或"SSOT 流程"进行代码提交
|
|||
|
|
|
|||
|
|
### 操作路径
|
|||
|
|
此技能涉及以下文件和目录的操作:
|
|||
|
|
- **检查**: 所有生成的代码文件
|
|||
|
|
- **检查**: 所有生成的文档文件
|
|||
|
|
- **执行**: git 命令(add, commit, push)
|
|||
|
|
- **更新**: `docs/index.md`(记录代码提交信息)
|
|||
|
|
- **更新**: `docs/sessions/YYYY-MM-DD-00X-session.md`
|
|||
|
|
- **读取**: `.trae/rules/project_rules.md` (项目规则)
|
|||
|
|
- **读取**: `docs/Prompt/0004-单一真源文档驱动架构师.md` (SSOT 架构师提示词)
|
|||
|
|
|
|||
|
|
### SSOT 依赖
|
|||
|
|
必须参考以下"唯一真源":
|
|||
|
|
- [会话记录](file:///d:\idea_demo\datai\docs\sessions\YYYY-MM-DD-00X-session.md) - 阶段 9 更新的会话记录
|
|||
|
|
- [项目规则](file:///d:\idea_demo\datai\.trae\rules\project_rules.md) - 项目规则和阶段定义
|
|||
|
|
- [0004-单一真源文档驱动架构师.md](file:///d:\idea_demo\datai\docs\Prompt\0004-单一真源文档驱动架构师.md) - SSOT 架构师提示词
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## C. 核心指令集 (Instructions)
|
|||
|
|
|
|||
|
|
### 架构约束
|
|||
|
|
|
|||
|
|
#### 1. 代码检查约束(强制)
|
|||
|
|
- 必须检查所有生成的代码文件
|
|||
|
|
- 必须检查所有生成的文档文件
|
|||
|
|
- 确保代码文件符合项目规范
|
|||
|
|
- 确保文档文件符合项目规范
|
|||
|
|
|
|||
|
|
#### 2. 提交信息约束(强制)
|
|||
|
|
- 提交信息格式:`feat: [需求编号] 需求描述`
|
|||
|
|
- 示例:`feat: [001] 实现用户登录功能`
|
|||
|
|
- 提交信息必须清晰、准确,描述本次提交的主要内容
|
|||
|
|
|
|||
|
|
#### 3. 本地提交约束(强制)
|
|||
|
|
- 必须使用 `git add` 添加所有变更
|
|||
|
|
- 必须使用 `git commit` 提交到本地仓库
|
|||
|
|
- 确保所有文件都已添加到提交中
|
|||
|
|
|
|||
|
|
#### 4. 远程提交约束(强制)
|
|||
|
|
- 必须询问用户是否提交到远程仓库
|
|||
|
|
- 如果用户确认,使用 `git push` 推送到远程
|
|||
|
|
- 如果用户不确认,跳过推送
|
|||
|
|
|
|||
|
|
#### 5. 索引更新约束(强制)
|
|||
|
|
- 必须在提交代码后更新 `docs/index.md`
|
|||
|
|
- 必须记录代码提交信息
|
|||
|
|
- 采用增量更新策略,**严禁**删除现有内容
|
|||
|
|
|
|||
|
|
#### 6. 会话记录约束(强制)
|
|||
|
|
- 必须更新 `docs/sessions/YYYY-MM-DD-00X-session.md`
|
|||
|
|
- 必须更新当前阶段为"阶段 10:代码提交"
|
|||
|
|
- 必须记录代码提交信息
|
|||
|
|
- 必须标记需求为已完成
|
|||
|
|
|
|||
|
|
### 业务逻辑 SOP(标准操作流程)
|
|||
|
|
|
|||
|
|
#### 步骤 1:代码和文档检查(Let's think step by step)
|
|||
|
|
在提交代码前,必须执行以下检查:
|
|||
|
|
|
|||
|
|
1. **检查所有生成的代码文件**
|
|||
|
|
- 确认代码文件的路径和命名是否符合项目规范
|
|||
|
|
- 确认代码文件的内容是否符合项目规范
|
|||
|
|
- 确认代码文件是否包含单元测试
|
|||
|
|
- 确认代码文件是否通过编译和测试
|
|||
|
|
|
|||
|
|
2. **检查所有生成的文档文件**
|
|||
|
|
- 确认文档文件的路径和命名是否符合项目规范
|
|||
|
|
- 确认文档文件的内容是否符合项目规范
|
|||
|
|
- 确认文档文件之间的引用是否正确
|
|||
|
|
- 确认文档文件是否完整、准确
|
|||
|
|
|
|||
|
|
3. **确认提交信息**
|
|||
|
|
- 确定提交信息的格式:`feat: [需求编号] 需求描述`
|
|||
|
|
- 确保提交信息清晰、准确
|
|||
|
|
- 确保提交信息描述了本次提交的主要内容
|
|||
|
|
|
|||
|
|
#### 步骤 2:提交代码到本地
|
|||
|
|
1. **添加所有变更**
|
|||
|
|
- 使用 `git add .` 添加所有变更到暂存区
|
|||
|
|
- 或使用 `git add <file>` 添加特定文件到暂存区
|
|||
|
|
- 确保所有生成的代码文件和文档文件都已添加
|
|||
|
|
|
|||
|
|
2. **提交到本地仓库**
|
|||
|
|
- 使用 `git commit -m "feat: [需求编号] 需求描述"` 提交到本地仓库
|
|||
|
|
- 确保提交信息符合项目规范
|
|||
|
|
- 确保提交成功
|
|||
|
|
|
|||
|
|
#### 步骤 3:询问用户是否提交到远程
|
|||
|
|
1. **向用户询问**
|
|||
|
|
- 显示本地提交的信息
|
|||
|
|
- 询问:"是否需要提交到远程仓库?"
|
|||
|
|
|
|||
|
|
2. **根据用户反馈执行**
|
|||
|
|
- 如果用户确认,使用 `git push` 推送到远程仓库
|
|||
|
|
- 如果用户不确认,跳过推送
|
|||
|
|
- 确保推送成功(如果执行)
|
|||
|
|
|
|||
|
|
#### 步骤 4:更新索引
|
|||
|
|
1. **读取现有索引**
|
|||
|
|
- 使用 Read 工具读取 `docs/index.md`
|
|||
|
|
- 找到"代码提交记录"部分
|
|||
|
|
- 如果不存在,则创建该部分
|
|||
|
|
|
|||
|
|
2. **添加代码提交信息**
|
|||
|
|
- 在"代码提交记录"部分追加新的提交信息
|
|||
|
|
- 格式:`- YYYY-MM-DD: [提交信息] - [本地/远程]`
|
|||
|
|
- 示例:`- 2026-01-21: feat: [001] 实现用户登录功能 - 本地+远程`
|
|||
|
|
|
|||
|
|
3. **保存索引**
|
|||
|
|
- 使用 Write 工具更新 `docs/index.md`
|
|||
|
|
- **严禁**删除现有内容,只追加新内容
|
|||
|
|
|
|||
|
|
#### 步骤 5:更新会话记录
|
|||
|
|
1. **读取现有会话记录**
|
|||
|
|
- 使用 Read 工具读取 `docs/sessions/YYYY-MM-DD-00X-session.md`
|
|||
|
|
|
|||
|
|
2. **更新阶段 10 信息**
|
|||
|
|
- 更新"当前阶段"为"阶段 10:代码提交"
|
|||
|
|
- 更新"阶段 10:代码提交"的状态为"已完成"
|
|||
|
|
- 添加代码提交信息
|
|||
|
|
- 标记需求为已完成
|
|||
|
|
|
|||
|
|
3. **保存会话记录**
|
|||
|
|
- 使用 Write 工具更新会话记录
|
|||
|
|
|
|||
|
|
#### 步骤 6:确认与总结
|
|||
|
|
1. **向用户确认**
|
|||
|
|
- 显示代码提交的结果
|
|||
|
|
- 显示更新后的索引链接
|
|||
|
|
- 显示更新后的会话记录链接
|
|||
|
|
- 询问:"代码是否已提交到本地?"
|
|||
|
|
- 询问:"是否需要提交到远程仓库?"(如果尚未询问)
|
|||
|
|
|
|||
|
|
2. **总结本次执行**
|
|||
|
|
- 总结本次执行的主要内容
|
|||
|
|
- 总结生成的文档和代码
|
|||
|
|
- 总结遇到的问题和解决方案
|
|||
|
|
- 总结学到的经验和教训
|
|||
|
|
|
|||
|
|
### 工具调用
|
|||
|
|
|
|||
|
|
#### 必须使用的工具
|
|||
|
|
1. **RunCommand 工具**:执行 git 命令
|
|||
|
|
- 使用场景:添加变更、提交到本地、推送到远程
|
|||
|
|
- 命令:`RunCommand(command="git add .", blocking=true, requires_approval=false, target_terminal="new")`
|
|||
|
|
- 命令:`RunCommand(command="git commit -m \"feat: [001] 实现用户登录功能\"")`, blocking=true, requires_approval=false, target_terminal="new")`
|
|||
|
|
- 命令:`RunCommand(command="git push", blocking=true, requires_approval=false, target_terminal="new")`
|
|||
|
|
|
|||
|
|
2. **Read 工具**:读取现有文件
|
|||
|
|
- 使用场景:读取索引、会话记录
|
|||
|
|
- 命令:`Read(file_path="d:\\idea_demo\\datai\\docs\\index.md")`
|
|||
|
|
|
|||
|
|
3. **Write 工具**:创建或更新文件
|
|||
|
|
- 使用场景:更新索引、更新会话记录
|
|||
|
|
- 命令:`Write(file_path="d:\\idea_demo\\datai\\docs\\index.md", content="...")`
|
|||
|
|
|
|||
|
|
#### 可选使用的工具
|
|||
|
|
1. **TodoWrite 工具**:管理任务
|
|||
|
|
- 使用场景:跟踪阶段执行进度
|
|||
|
|
- 命令:`TodoWrite(todos=[...])`
|
|||
|
|
|
|||
|
|
2. **GetDiagnostics 工具**:获取代码诊断
|
|||
|
|
- 使用场景:检查代码的语法错误和类型错误
|
|||
|
|
- 命令:`GetDiagnostics()`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## D. 错误陷阱与验证 (Anti-Patterns & Checklist)
|
|||
|
|
|
|||
|
|
### 常见错误(Anti-Patterns)
|
|||
|
|
|
|||
|
|
#### 错误 1:不检查代码和文档就提交
|
|||
|
|
**错误示例**:
|
|||
|
|
```
|
|||
|
|
AI:直接执行 git add .
|
|||
|
|
AI:直接执行 git commit
|
|||
|
|
AI:完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题**:
|
|||
|
|
- 没有检查代码和文档的正确性
|
|||
|
|
- 可能提交错误的代码或文档
|
|||
|
|
- 违反了项目规则
|
|||
|
|
|
|||
|
|
**正确示例**:
|
|||
|
|
```
|
|||
|
|
AI:检查所有生成的代码文件
|
|||
|
|
AI:检查所有生成的文档文件
|
|||
|
|
AI:确认代码和文档符合项目规范
|
|||
|
|
AI:执行 git add .
|
|||
|
|
AI:执行 git commit
|
|||
|
|
AI:完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 错误 2:提交信息不符合规范
|
|||
|
|
**错误示例**:
|
|||
|
|
```
|
|||
|
|
AI:git commit -m "完成功能"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题**:
|
|||
|
|
- 提交信息过于简单
|
|||
|
|
- 没有遵循项目规范的提交信息格式
|
|||
|
|
- 其他开发人员无法快速了解提交的内容
|
|||
|
|
|
|||
|
|
**正确示例**:
|
|||
|
|
```
|
|||
|
|
AI:git commit -m "feat: [001] 实现用户登录功能"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 错误 3:不询问用户就推送到远程
|
|||
|
|
**错误示例**:
|
|||
|
|
```
|
|||
|
|
AI:执行 git add .
|
|||
|
|
AI:执行 git commit
|
|||
|
|
AI:直接执行 git push
|
|||
|
|
AI:完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题**:
|
|||
|
|
- 违反了项目规则
|
|||
|
|
- 没有尊重用户的决策权
|
|||
|
|
- 可能导致不必要的远程分支污染
|
|||
|
|
|
|||
|
|
**正确示例**:
|
|||
|
|
```
|
|||
|
|
AI:执行 git add .
|
|||
|
|
AI:执行 git commit
|
|||
|
|
AI:询问用户是否提交到远程仓库
|
|||
|
|
AI:如果用户确认,执行 git push
|
|||
|
|
AI:完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 错误 4:不更新索引和会话记录
|
|||
|
|
**错误示例**:
|
|||
|
|
```
|
|||
|
|
AI:执行 git add .
|
|||
|
|
AI:执行 git commit
|
|||
|
|
AI:询问用户是否提交到远程仓库
|
|||
|
|
AI:完成(忘记更新索引和会话记录)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**问题**:
|
|||
|
|
- 违反了项目规则
|
|||
|
|
- 索引中没有记录代码提交信息
|
|||
|
|
- 会话记录中没有记录代码提交信息
|
|||
|
|
- 其他开发人员无法快速了解代码提交情况
|
|||
|
|
|
|||
|
|
**正确示例**:
|
|||
|
|
```
|
|||
|
|
AI:执行 git add .
|
|||
|
|
AI:执行 git commit
|
|||
|
|
AI:询问用户是否提交到远程仓库
|
|||
|
|
AI:更新索引,记录代码提交信息
|
|||
|
|
AI:更新会话记录,记录代码提交信息
|
|||
|
|
AI:完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 验收清单(Checklist)
|
|||
|
|
|
|||
|
|
在完成阶段 10 前,必须检查以下项目:
|
|||
|
|
|
|||
|
|
#### 代码和文档检查
|
|||
|
|
- [ ] 已检查所有生成的代码文件
|
|||
|
|
- [ ] 已检查所有生成的文档文件
|
|||
|
|
- [ ] 代码文件的路径和命名符合项目规范
|
|||
|
|
- [ ] 代码文件的内容符合项目规范
|
|||
|
|
- [ ] 代码文件包含单元测试
|
|||
|
|
- [ ] 代码文件通过编译和测试
|
|||
|
|
- [ ] 文档文件的路径和命名符合项目规范
|
|||
|
|
- [ ] 文档文件的内容符合项目规范
|
|||
|
|
- [ ] 文档文件之间的引用正确
|
|||
|
|
- [ ] 文档文件完整、准确
|
|||
|
|
|
|||
|
|
#### 本地提交检查
|
|||
|
|
- [ ] 已使用 `git add` 添加所有变更
|
|||
|
|
- [ ] 已使用 `git commit` 提交到本地仓库
|
|||
|
|
- [ ] 提交信息格式符合要求:`feat: [需求编号] 需求描述`
|
|||
|
|
- [ ] 提交信息清晰、准确
|
|||
|
|
- [ ] 所有文件都已添加到提交中
|
|||
|
|
|
|||
|
|
#### 远程提交检查
|
|||
|
|
- [ ] 已询问用户是否提交到远程仓库
|
|||
|
|
- [ ] 如果用户确认,已使用 `git push` 推送到远程
|
|||
|
|
- [ ] 如果执行了推送,推送成功
|
|||
|
|
|
|||
|
|
#### 索引更新检查
|
|||
|
|
- [ ] `docs/index.md` 已更新
|
|||
|
|
- [ ] 已记录代码提交信息
|
|||
|
|
- [ ] 索引更新采用增量更新策略,未删除现有内容
|
|||
|
|
|
|||
|
|
#### 会话记录更新检查
|
|||
|
|
- [ ] 会话记录已更新
|
|||
|
|
- [ ] 会话记录的"当前阶段"已更新为"阶段 10:代码提交"
|
|||
|
|
- [ ] 会话记录的"阶段 10:代码提交"状态已更新为"已完成"
|
|||
|
|
- [ ] 会话记录包含代码提交信息
|
|||
|
|
- [ ] 会话记录标记需求为已完成
|
|||
|
|
|
|||
|
|
#### 用户确认检查
|
|||
|
|
- [ ] 已向用户显示代码提交的结果
|
|||
|
|
- [ ] 已向用户显示更新后的索引链接
|
|||
|
|
- [ ] 已向用户显示更新后的会话记录链接
|
|||
|
|
- [ ] 已询问用户"代码是否已提交到本地?"
|
|||
|
|
- [ ] 已询问用户"是否需要提交到远程仓库?"(如果尚未询问)
|
|||
|
|
|
|||
|
|
### Correct vs Incorrect 代码对比
|
|||
|
|
|
|||
|
|
#### Incorrect(错误示例)
|
|||
|
|
```
|
|||
|
|
AI:直接执行 git add .
|
|||
|
|
AI:git commit -m "完成登录功能"
|
|||
|
|
AI:直接执行 git push
|
|||
|
|
AI:完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### Correct(正确示例)
|
|||
|
|
```
|
|||
|
|
AI:检查所有生成的代码文件和文档文件
|
|||
|
|
AI:确认代码和文档符合项目规范
|
|||
|
|
AI:git add .
|
|||
|
|
AI:git commit -m "feat: [001] 实现用户登录功能"
|
|||
|
|
AI:询问用户是否提交到远程仓库
|
|||
|
|
AI:如果用户确认,git push
|
|||
|
|
AI:更新 docs/index.md,记录代码提交信息
|
|||
|
|
AI:更新会话记录,记录代码提交信息并标记需求为已完成
|
|||
|
|
AI:向用户确认代码提交结果
|
|||
|
|
AI:完成
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 附录:快速参考
|
|||
|
|
|
|||
|
|
### 文件路径速查
|
|||
|
|
- 主索引:`docs/index.md`
|
|||
|
|
- 会话记录:`docs/sessions/YYYY-MM-DD-00X-session.md`
|
|||
|
|
- 项目规则:`.trae/rules/project_rules.md`
|
|||
|
|
- SSOT 架构师提示词:`docs/Prompt/0004-单一真源文档驱动架构师.md`
|
|||
|
|
|
|||
|
|
### 工具命令速查
|
|||
|
|
```powershell
|
|||
|
|
# 添加所有变更
|
|||
|
|
RunCommand(command="git add .", blocking=true, requires_approval=false, target_terminal="new")
|
|||
|
|
|
|||
|
|
# 提交到本地仓库
|
|||
|
|
RunCommand(command="git commit -m \"feat: [001] 实现用户登录功能\"")`, blocking=true, requires_approval=false, target_terminal="new")`
|
|||
|
|
|
|||
|
|
# 推送到远程仓库
|
|||
|
|
RunCommand(command="git push", blocking=true, requires_approval=false, target_terminal="new")
|
|||
|
|
|
|||
|
|
# 读取索引
|
|||
|
|
Read(file_path="d:\\idea_demo\\datai\\docs\\index.md")
|
|||
|
|
|
|||
|
|
# 更新索引
|
|||
|
|
Write(file_path="d:\\idea_demo\\datai\\docs\\index.md", content="...")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 阶段 10 输出清单
|
|||
|
|
- [ ] 代码提交到本地仓库
|
|||
|
|
- [ ] 代码推送到远程仓库(如果用户确认)
|
|||
|
|
- [ ] 更新的索引:`docs/index.md`
|
|||
|
|
- [ ] 更新的会话记录:`docs/sessions/YYYY-MM-DD-00X-session.md`
|
|||
|
|
|
|||
|
|
### 项目完成总结
|
|||
|
|
当完成阶段 10 后,整个 SSOT 流程即告完成。此时,你已经:
|
|||
|
|
1. **需求定义与入库**:创建了需求文档,建立了需求追踪
|
|||
|
|
2. **方案设计**:创建设计文档,明确了技术方案
|
|||
|
|
3. **方案决策**:创建决策记录,记录了架构决策
|
|||
|
|
4. **数据库结构生成**:生成 SQL 脚本,记录了数据库变更
|
|||
|
|
5. **提示词生成**:生成针对当前需求的提示词
|
|||
|
|
6. **执行代码生成**:根据需求和设计生成了代码
|
|||
|
|
7. **记录当前会话**:完整记录了当前会话的所有信息
|
|||
|
|
8. **变更记录与归档**:创建了变更日志,记录了所有变更
|
|||
|
|
9. **闭环复盘和接口文档**:创建了复盘文档和 API 文档
|
|||
|
|
10. **代码提交**:提交代码到本地仓库,并询问是否提交到远程
|
|||
|
|
|
|||
|
|
通过严格执行 SSOT 流程,确保了所有开发活动都有文档依据,提高了代码的可追溯性、可维护性和质量。同时,通过复盘和 API 文档,确保了项目的持续改进和 API 的可文档化。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 最终确认
|
|||
|
|
当完成所有 10 个阶段后,你可以向用户提供最终确认,包括:
|
|||
|
|
1. 总结本次执行的主要内容
|
|||
|
|
2. 列出所有生成的文档和代码
|
|||
|
|
3. 询问用户是否对整个执行过程满意
|
|||
|
|
4. 询问用户是否需要进行其他操作
|
|||
|
|
|
|||
|
|
通过这种方式,确保用户对整个执行过程有清晰的了解和控制,提高用户的满意度和参与度。
|