datai/docs/archive/skill/0008-execution-logging.md

373 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: 0008-execution-logging
description: 执行与记录,编写代码并实时记录在 docs/sessions/
---
# 技能:执行与记录 (Execution & Logging)
## 元数据 (Metadata)
- **name**: execution-logging
- **description**: 执行与记录,编写代码并实时记录在 docs/sessions/
- **version**: 1.0.0
- **author**: SSOT Architect
- **lastUpdated**: 2026-01-15
## 触发与定位 (Triggers & Scope)
### 触发条件 (Triggers)
当以下情况发生时AI 应当"觉醒"本技能:
1. **上下文锚定完成**: 完成上下文分析后,开始编写代码
2. **代码生成**: 需要生成特定功能的代码
3. **代码修改**: 需要修改现有代码
4. **代码重构**: 需要重构现有代码
5. **工作流阶段 5**: 用户进入工作流的"执行与记录"阶段
### 定位范围 (Scope)
- **适用模块**: 所有 Datai 项目模块
- **影响文件**: 源代码文件、`docs/sessions/YYYYMMDD-TaskName.md`
- **相关技能**: skill-context-anchoring, skill-changelog-archiving
## 核心指令集 (Instructions)
### 架构约束 (Architecture Constraints)
1. **Session Log 必须包含**:
- Trigger: 触发本次会话的需求或 Bug ID
- Used Prompts: 链接到使用了 `docs/prompts/` 下的哪个文件
- Outcome: 最终产生了哪些代码变更Commit Hash
- 记录不仅仅是"聊天记录",而是"状态恢复点"
2. **首句申明规则**:
- 明确当前"现状"与"目标"
- 说明要实现的功能
- 说明参考的代码模式
3. **代码生成规则**:
- 基于阶段 4 的锚定生成代码
- 确保风格一致
- 遵循现有代码规范
4. **实时记录规则**:
- 记录 AI 的质疑
- 记录替代方案
- 记录最终决策
- 记录复现步骤
### 业务逻辑 SOP (Business Logic SOP)
#### 步骤 1: 首句申明
```markdown
## 首句申明
### 现状 (Current State)
[当前系统状态]
### 目标 (Target State)
[期望达到的目标]
### 参考的代码模式
我将参考 [类名](../../path/to/Class.java) 的模式进行开发。
```
#### 步骤 2: 编写代码
```markdown
## 代码编写
### 步骤 1: [步骤名称]
[编写代码的步骤描述]
### 步骤 2: [步骤名称]
[编写代码的步骤描述]
### 步骤 3: [步骤名称]
[编写代码的步骤描述]
```
#### 步骤 3: 记录 AI 质疑与替代方案
```markdown
## AI 质疑与替代方案
### 质疑 1: [质疑内容]
**质疑**: [AI 提出的质疑]
**分析**: [质疑的分析]
**决策**: [最终的决策]
### 替代方案 1: [方案名称]
**方案描述**: [替代方案的描述]
**优点**: [方案的优点]
**缺点**: [方案的缺点]
**选择结果**: [是否选择该方案]
```
#### 步骤 4: 记录最终决策
```markdown
## 最终决策
### 决策 1: [决策内容]
**决策**: [最终的决策]
**理由**: [决策的理由]
**影响**: [决策的影响]
### 决策 2: [决策内容]
**决策**: [最终的决策]
**理由**: [决策的理由]
**影响**: [决策的影响]
```
#### 步骤 5: 记录复现步骤
```markdown
## 复现步骤
### 步骤 1: [步骤名称]
1. [操作步骤]
2. [操作步骤]
3. [操作步骤]
### 步骤 2: [步骤名称]
1. [操作步骤]
2. [操作步骤]
3. [操作步骤]
### 验证方法
[如何验证代码是否正确]
```
#### 步骤 6: 创建 Session Log
```markdown
---
name: SESSION-YYYYMMDD-TaskName
description: AI 会话快照
---
# 会话记录: [任务名称]
## 元数据 (Metadata)
- **Date**: YYYY-MM-DD
- **Session ID**: [会话ID]
- **Trigger**: [触发本次会话的需求或 Bug ID]
- **Used Prompts**: [链接到使用的 Prompt 文件]
- **Outcome**: [最终产生的代码变更 Commit Hash]
## 触发原因 (Trigger)
[触发本次会话的需求或 Bug 描述]
## 使用的提示词 (Used Prompts)
- [PROMPT-001](../prompts/PROMPT-001.md) - [提示词描述]
- [PROMPT-002](../prompts/PROMPT-002.md) - [提示词描述]
## 上下文锚定 (Context Anchoring)
### 现状 (Current State)
[当前系统状态]
### 目标 (Target State)
[期望达到的目标]
### 引用的上下文文件
- [文件1](../../path/to/file1.java) - [说明]
- [文件2](../../path/to/file2.java) - [说明]
## 执行过程 (Execution Process)
### 步骤 1: [步骤名称]
[执行步骤描述]
### 步骤 2: [步骤名称]
[执行步骤描述]
### AI 质疑与替代方案
[记录 AI 的质疑、替代方案]
### 最终决策
[最终采用的方案和理由]
## 代码变更 (Code Changes)
### 变更文件列表
| 文件 | 变更类型 | 变更说明 |
|------|----------|----------|
| [文件1](../../path/to/file1.java) | [新增/修改/删除] | [变更说明] |
| [文件2](../../path/to/file2.java) | [新增/修改/删除] | [变更说明] |
### Commit Hash
[Commit Hash: abc123def456]
### Commit Message
```
[Commit Message]
```
## 结果 (Outcome)
### 成功指标
| 指标 | 目标值 | 实际值 | 状态 |
|------|--------|--------|------|
| [指标1] | [目标值] | [实际值] | [状态] |
| [指标2] | [目标值] | [实际值] | [状态] |
### 未达成指标
[未达成的指标和原因]
### 经验教训
[本次会话的经验教训]
## 相关文档 (Related Documents)
- [需求文档](../../requirements/REQ-XXX.md)
- [ADR 文档](../../decisions/adr/ADR-XXX.md)
- [复盘文档](../retros/YYYYMMDD-Review.md)
```
#### 步骤 7: 更新 docs/index.md
```markdown
### 🗣️ 会话记录 (Sessions)
| 文档 | 触发 | 结果 | 日期 |
|------|------|------|------|
| [20260115-TaskName](sessions/20260115-TaskName.md) | REQ-001 | Commit: abc123 | 2026-01-15 |
```
### 工具调用 (Tool Usage)
1. **代码编写工具**:
- 使用 `Write` 工具创建新文件
- 使用 `SearchReplace` 工具修改现有文件
- 使用 `DeleteFile` 工具删除文件
2. **代码验证工具**:
- 使用 `GetDiagnostics` 工具检查代码错误
- 使用 `RunCommand` 工具运行测试
3. **文档记录工具**:
- 使用 `Write` 工具创建 Session Log
- 使用 `Read` 工具读取现有 Session Log
- 使用 `SearchReplace` 工具更新 Session Log
4. **索引更新工具**:
- 使用 `Read` 工具读取 `docs/index.md`
- 使用 `SearchReplace` 工具更新索引
## 错误陷阱与验证 (Anti-Patterns & Checklist)
### 常见错误 (Anti-Patterns)
1. **错误**: 不记录 AI 质疑和替代方案
- **后果**: 无法追溯决策过程,难以复现
- **修正**: 必须详细记录 AI 的质疑、替代方案和最终决策
2. **错误**: Session Log 只是聊天记录
- **后果**: 无法作为"状态恢复点"
- **修正**: Session Log 必须包含现状、目标、上下文、决策、结果等完整信息
3. **错误**: 不记录复现步骤
- **后果**: 无法复现代码生成过程
- **修正**: 必须详细记录复现步骤和验证方法
4. **错误**: 代码风格不一致
- **后果**: 代码质量低,难以维护
- **修正**: 必须基于上下文锚定的参考模式生成代码
5. **错误**: 忘记更新 docs/index.md
- **后果**: 产生孤儿文件,违反 SSOT 原则
- **修正**: 创建 Session Log 后必须更新索引
### 验收清单 (Acceptance Checklist)
- [ ] 首句申明已完成
- [ ] 代码已编写
- [ ] AI 质疑已记录
- [ ] 替代方案已记录
- [ ] 最终决策已记录
- [ ] 复现步骤已记录
- [ ] Session Log 已创建
- [ ] Commit Hash 已记录
- [ ] 成功指标已记录
- [ ] docs/index.md 已更新
- [ ] 相关文档已链接
### Correct vs Incorrect 对比
#### Correct 示例
```markdown
## 首句申明
### 现状 (Current State)
当前系统没有用户批量导入功能。
### 目标 (Target State)
实现用户批量导入功能,支持 CSV 格式,单次最多导入 1000 条记录。
### 参考的代码模式
我将参考 [ProductImportServiceImpl](../../path/to/ProductImportServiceImpl.java) 的模式进行开发。
## AI 质疑与替代方案
### 质疑 1: 是否需要支持 Excel 格式?
**质疑**: 用户可能需要导入 Excel 格式的文件。
**分析**: Excel 格式更复杂,需要额外的依赖库。
**决策**: 暂不支持 Excel 格式,先实现 CSV 格式,后续根据需求扩展。
### 替代方案 1: 使用 Apache POI 处理 Excel
**方案描述**: 使用 Apache POI 库处理 Excel 文件。
**优点**: 功能强大,支持多种 Excel 格式。
**缺点**: 依赖库较大,增加项目复杂度。
**选择结果**: 不选择该方案。
## 复现步骤
### 步骤 1: 创建导入服务类
1. 创建 UserImportServiceImpl.java
2. 实现 importUsers 方法
3. 添加 @Transactional 注解
### 步骤 2: 创建导入控制器
1. 创建 UserImportController.java
2. 添加 importUsers 接口
3. 添加文件上传处理
### 验证方法
1. 编写单元测试
2. 使用 Postman 测试接口
3. 导入测试 CSV 文件
```
#### Incorrect 示例
```markdown
## 执行过程
开始编写代码...
创建了 UserImportServiceImpl.java。
创建了 UserImportController.java。
完成了。
```
**问题**: 没有首句申明,没有记录 AI 质疑和替代方案,没有记录复现步骤。
## 相关文档 (Related Documents)
- [工作流提示词](../prompts/03-创建工作流提示词.md#阶段-5-执行与记录-execution-logging)
- [上下文锚定技能](./0007-context-anchoring.md)
- [变更记录与归档技能](./0009-changelog-archiving.md)
- [Session 模板](../prompts/03-创建工作流提示词.md#43-session-logs-模板-会话上下文)