---
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-模板-会话上下文)
