- 新增 11 个技能文档,指导 AI 完成特定开发任务 - 新增参考代码文件,用于代码分析和重构 - 优化 DataiIntegrationBatchServiceImpl.java,提取常量到 SalesforceConstants.java - 移动 SessionManager.java 到 auth 模块 - 更新 docs/index.md,添加技能文档索引 主要变更: - 新增技能文档:Bootstrap、SSOT Hub、信息架构、需求定义、架构决策、提示词资产化、上下文锚定、执行记录、变更归档、闭环复盘、测试提交 - 提取常量:批次处理、状态值、字段名、日志消息等 - 优化代码:改进代码结构和可读性 Related: - Prompts: docs/prompts/03-创建工作流提示词.md - Prompts: docs/prompts/07生成技能书提示词.md
373 lines
9.3 KiB
Markdown
373 lines
9.3 KiB
Markdown
---
|
||
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-模板-会话上下文)
|