Files
XCEngine/docs/blueprint-skill.md

470 lines
14 KiB
Markdown
Raw 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.
# XCEngine 蓝图文档编写与校验 Skill
## 用途
根据 XCEngine C++ 引擎源码生成符合规范的蓝图文档(系统架构设计文档),用于在 XCSDD 中
以 3D 可视化图谱方式展示系统的模块结构、子系统依赖关系和接口定义。
在开始编写任何蓝图文档之前,必须先完整阅读并深刻理解目标系统的源码上下文——包括设计目的、
模块划分、依赖关系、数据流、边界条件等。切忌在未读懂系统架构的情况下仅凭目录结构或猜测
来编写蓝图文档。
---
## 文档目录结构
```
docs/
├── blueprint.md # 蓝图总文档
├── plan/ # 规划类文档
└── api/ # API 文档(由 api-skill 管理)
```
**文件命名:** 蓝图文档统一命名为 `blueprint.md`,放在 `docs/` 目录下。
---
## 文档整体结构
蓝图文档由多个 YAML 代码块通过 Markdown 标题分隔组成,所有 YAML 代码块共同构成
系统的完整蓝图定义。文档结构如下:
```markdown
# {系统名称} 蓝图
---
# SYSTEM_META
```yaml
# 系统元信息
```
---
# SYSTEM_STRUCTURE
```yaml
# 系统结构定义(核心必填)
```
---
# EVOLUTION_MODE
```yaml
# 演化模式
```
---
# REQUIREMENTS
```yaml
# 需求列表
```
---
# MVS_DEFINITION
```yaml
# 最小可行方案定义
```
---
# DATA_MODELS
```yaml
# 数据模型定义
```
---
# EVOLUTION_PLAN
```yaml
# 演化计划
```
---
## 页面类型与模板
### 1. SYSTEM_META元信息
SYSTEM_META 是整个蓝图文档的元信息区,必须完整填写。
```yaml
name: {系统名称}
version: {版本号}
type: {系统类型}
description: "{系统一句话描述}"
target_runtime: {目标运行时}
```
### 2. SYSTEM_STRUCTURE系统结构—— 核心必填
SYSTEM_STRUCTURE 定义系统的子系统和模块结构,是 XCSDD 3D 可视化的核心数据来源。
`subsystems``modules` 两个数组都被解析为 3D 图谱节点,依赖关系(`depends_on`)被解析为连线。
```yaml
root: {根模块名}
subsystems:
- name: {子系统名}
responsibilities:
- "{职责描述1}"
- "{职责描述2}"
provides: [{提供的接口1}, {提供的接口2}]
depends_on: [{依赖的子系统名}]
boundary:
inputs: [{输入}]
outputs: [{输出}]
modules:
- name: {模块名}
parent_subsystem: {所属子系统名}
responsibility: "{模块职责描述}"
public_api:
- fn: {函数名}
params:
- name: {参数名}
type: {参数类型}
returns: type: {返回类型}
```
### 3. EVOLUTION_MODE演化模式
```yaml
mode: {build|evolve|maintain}
description: "{模式描述}"
context: |
{多行上下文说明}
```
### 4. REQUIREMENTS需求列表
```yaml
- id: {REQ-ID}
title: {需求标题}
description: "{需求描述}"
source: {user|constraint}
type: {functional|non-functional}
acceptance_criteria:
- "{验收标准1}"
priority: {P0|P1|P2}
```
### 5. MVS_DEFINITIONMVS 最小可行方案)
```yaml
mvs_solutions:
- id: {MVS-ID}
name: {方案名称}
goal: "{目标描述}"
verification_criteria:
- "{验证标准1}"
scope:
- subsystem: {子系统名}
components: [{组件名}]
- external: [{外部依赖}]
code_structure:
- file: {文件名}
purpose: "{文件用途}"
contains:
- "{包含的功能1}"
standalone: {true|false}
integration_plan:
- step: "{集成步骤1}"
status: {pending|in_progress|completed}
```
### 6. DATA_MODELS数据模型
```yaml
- name: {模型名}
description: "{模型描述}"
fields:
- name: {字段名}
type: {类型}
default: {默认值}
constraints: {required|optional}
```
### 7. EVOLUTION_PLAN演化计划
```yaml
fix_plan:
- issue_id: {BUG-ID}
description: "{问题描述}"
root_cause: "{根本原因}"
minimal_change:
- file: {文件路径}
verification: "{验证方法}"
refactor_plan:
- target: "{重构目标}"
constraints: ["{约束条件}"]
steps: ["{步骤1}"]
feature_plan:
- feature_id: {FEAT-ID}
name: "{功能名称}"
addition: "{功能描述}"
integration_point: "{集成点}"
steps: ["{步骤1}"]
```
---
## 元信息字段规范
### SYSTEM_META
| 字段 | 必需 | 说明 |
|------|------|------|
| `name` | 是 | 系统名称,唯一标识 |
| `version` | 是 | 版本号,格式 x.y.z |
| `type` | 是 | 系统类型,如 `game-engine``web-framework``api-service` |
| `description` | 是 | 系统一句话功能描述 |
| `target_runtime` | 否 | 目标运行时,如 `C++17``WebAssembly``Python 3.10` |
### SYSTEM_STRUCTURE
#### subsystems 数组
| 字段 | 必需 | 说明 |
|------|------|------|
| `name` | 是 | 子系统名称,唯一标识 |
| `responsibilities` | 是 | 职责列表,至少 1 项 |
| `provides` | 是 | 提供的接口列表,表示该子系统对外暴露的能力 |
| `depends_on` | 是 | 依赖的子系统列表,引用的子系统必须存在 |
| `boundary` | 否 | 边界定义 |
| `boundary.inputs` | 否 | 该子系统的外部输入项 |
| `boundary.outputs` | 否 | 该子系统的外部输出项 |
#### modules 数组
| 字段 | 必需 | 说明 |
|------|------|------|
| `name` | 是 | 模块名称,唯一标识 |
| `parent_subsystem` | 是 | 所属子系统名称,引用的子系统必须存在 |
| `responsibility` | 是 | 模块职责描述 |
| `public_api` | 是 | 公共 API 列表,至少 1 项 |
| `public_api[].fn` | 是 | 函数名 |
| `public_api[].params` | 是 | 参数列表 |
| `public_api[].params[].name` | 是 | 参数名 |
| `public_api[].params[].type` | 是 | 参数类型 |
| `public_api[].returns` | 否 | 返回值定义 |
| `public_api[].returns.type` | 是(当有 returns 时) | 返回类型 |
### EVOLUTION_MODE
| 字段 | 必需 | 说明 |
|------|------|------|
| `mode` | 是 | `build`(从零构建)、`evolve`(演进迭代)、`maintain`(维护修复) |
| `description` | 是 | 模式一句话描述 |
| `context` | 是 | 多行详细上下文说明,使用 `\|` 语法 |
### REQUIREMENTS
| 字段 | 必需 | 说明 |
|------|------|------|
| `id` | 是 | 需求 ID格式 `REQ-XXX` |
| `title` | 是 | 需求标题,简短明确 |
| `description` | 是 | 需求详细描述 |
| `source` | 是 | `user`(用户需求)、`constraint`(约束条件) |
| `type` | 是 | `functional`(功能性)、`non-functional`(非功能性) |
| `acceptance_criteria` | 是 | 验收标准,至少 1 项 |
| `priority` | 是 | `P0`(关键,阻塞开发)、`P1`(重要)、`P2`(次要) |
### MVS_DEFINITION
| 字段 | 必需 | 说明 |
|------|------|------|
| `id` | 是 | MVS ID格式 `MVS-XXX` |
| `name` | 是 | 最小可行方案名称 |
| `goal` | 是 | 目标描述 |
| `verification_criteria` | 是 | 验证标准,至少 1 项 |
| `scope` | 是 | 涉及范围(子系统 + 外部依赖) |
| `code_structure` | 是 | 代码结构文件列表,至少 1 项 |
| `code_structure[].file` | 是 | 文件名 |
| `code_structure[].purpose` | 是 | 文件用途描述 |
| `code_structure[].contains` | 是 | 包含的功能列表 |
| `code_structure[].standalone` | 是 | 是否独立可运行 |
| `integration_plan` | 是 | 集成计划步骤 |
| `status` | 是 | `pending`(待开始)、`in_progress`(进行中)、`completed`(已完成) |
### DATA_MODELS
| 字段 | 必需 | 说明 |
|------|------|------|
| `name` | 是 | 模型名称 |
| `description` | 是 | 模型描述 |
| `fields` | 是 | 字段列表 |
| `fields[].name` | 是 | 字段名 |
| `fields[].type` | 是 | 字段类型 |
| `fields[].default` | 否 | 默认值 |
| `fields[].constraints` | 否 | `required`(必填)或 `optional`(可选) |
### EVOLUTION_PLAN
| 字段 | 必需 | 说明 |
|------|------|------|
| `issue_id` | 是(在 fix_plan 项中) | 缺陷 ID格式 `BUG-XXX` |
| `description` | 是 | 问题描述 |
| `root_cause` | 是(在 fix_plan 项中) | 根本原因 |
| `minimal_change` | 是(在 fix_plan 项中) | 最小修改文件列表 |
| `verification` | 是(在 fix_plan 项中) | 验证方法 |
| `target` | 是(在 refactor_plan 项中) | 重构目标 |
| `constraints` | 是(在 refactor_plan 项中) | 约束条件列表 |
| `steps` | 是(在 refactor_plan 项中) | 重构步骤列表 |
| `feature_id` | 是(在 feature_plan 项中) | 特性 ID格式 `FEAT-XXX` |
| `name` | 是(在 feature_plan 项中) | 功能名称 |
| `addition` | 是(在 feature_plan 项中) | 功能描述 |
| `integration_point` | 是(在 feature_plan 项中) | 集成点 |
---
## 必需章节规范
### SYSTEM_META
1. `name` — 系统名称
2. `version` — 版本号
3. `type` — 系统类型
4. `description` — 系统描述
5. `target_runtime` — 目标运行时
### SYSTEM_STRUCTURE
1. `root` — 根模块名
2. `subsystems` — 子系统列表,每个子系统至少包含 name、responsibilities、provides、depends_on
3. `modules` — 模块列表,每个模块至少包含 name、parent_subsystem、responsibility、public_api
### EVOLUTION_MODE
1. `mode` — 演化模式
2. `description` — 模式描述
3. `context` — 详细上下文
### REQUIREMENTS
每个需求项至少包含 id、title、description、source、type、acceptance_criteria、priority。
### MVS_DEFINITION
每个 MVS 方案至少包含 id、name、goal、verification_criteria、scope、code_structure、integration_plan、status。
### DATA_MODELS
每个数据模型至少包含 name、description、fields。
### EVOLUTION_PLAN
fix_plan、refactor_plan、feature_plan 至少包含各自必需字段。
---
## 依赖关系规范
### 子系统依赖
- `subsystems[].depends_on` 中引用的子系统名称必须在 `subsystems` 数组中存在
- 不允许循环依赖A → B → A应在校验阶段检测并报告
- 每个子系统的 `provides` 接口应当被其他子系统的 `depends_on` 引用(强推荐)
### 模块归属
- `modules[].parent_subsystem` 引用的子系统必须在 `subsystems` 数组中存在
---
## 命名规范
### 驼峰命名(必需)
所有标识符(子系统名、模块名)必须使用**驼峰命名法**,严禁使用下划线分隔。
| 正确示例 | 错误示例 |
|---------|---------|
| `CoreTypes` | `Core_Types``CoreTypes_` |
| `MathVector` | `Math_Vector``mathvector` |
| `RHICommandList` | `RHI_CommandList``RHICommand_List` |
| `DebugLogger` | `Debug_Logger` |
| `ResourcesManager` | `Resources_Manager` |
**规则:**
- 子系统名:`{子系统}{子模块}` 或直接 `{子系统}`(如 `Core``Math``RHI`
- 模块名:`{子系统}{功能描述}`(如 `CoreTypes``MathVector``RHICommandList`
- 若子系统名本身是多词组合(如 `RHI_D3D12`),模块名前缀应使用完整子系统名(如 `RHID3D12Device`
### ID 格式
| 对象 | ID 格式 | 示例 |
|------|---------|------|
| 需求 | `REQ-XXX` | `REQ-001``REQ-002` |
| MVS 方案 | `MVS-XXX` | `MVS-001``MVS-002` |
| 缺陷 | `BUG-XXX` | `BUG-001``BUG-002` |
| 特性 | `FEAT-XXX` | `FEAT-001``FEAT-002` |
---
## 文档一致性检查
生成或修改蓝图文档时,需检查:
1. **驼峰命名规范** — 所有子系统名和模块名必须使用驼峰命名,严禁下划线
2. **SYSTEM_STRUCTURE 一致性**`modules[].parent_subsystem` 引用的子系统必须存在
3. **依赖关系一致性**`subsystems[].depends_on` 引用的子系统必须存在,无循环依赖
4. **命名唯一性**`subsystems[].name``modules[].name` 在各自数组内唯一
5. **ID 格式一致性** — 所有 ID 字段遵循统一格式REQ-XXX、MVS-XXX 等)
6. **provides/depends_on 配对** — 子系统的对外接口最好被依赖方引用
7. **MVS 与 REQUIREMENTS 关联** — MVS 的 scope 应覆盖对应 REQ 涉及的所有子系统
8. **YAML 语法正确性** — YAML 代码块可正常解析,无缩进错误、无重复键
---
## 生成流程
> **核心原则:在动手写蓝图文档之前,必须先完整阅读并深刻理解系统源码上下文。**
1. **阅读源码**:完整阅读目标系统的核心头文件和关键实现,理解设计目的、模块划分、
数据流、依赖关系、边界条件。不要只看目录结构就写蓝图。
2. **识别子系统**:根据功能边界和依赖关系,划分子系统。每个子系统应有明确的职责边界
和对外接口。子系统划分不宜过粗(导致职责重叠)也不宜过细(导致过度碎片化)。
3. **提取模块和接口**:从代码中提取核心模块及其 public API函数签名、参数、返回值
4. **构建依赖图**:分析子系统间的依赖关系,确保无循环依赖。
5. **生成 SYSTEM_META**:填写系统元信息。
6. **生成 SYSTEM_STRUCTURE**:构建 subsystems 和 modules确保依赖关系准确。
7. **生成 REQUIREMENTS**:从源码 TODO、BUG 注释、需求文档中提取需求。
8. **生成 MVS_DEFINITION**:为关键功能生成最小可行方案,指导分阶段实现。
9. **补充可选章节**:根据需要补充 DATA_MODELS 和 EVOLUTION_PLAN。
10. **校验输出**:运行所有一致性检查,检查依赖关系和命名一致性。
11. **输出报告**:列出生成内容、子系统划分理由、缺失信息和发现的问题。
---
## 使用示例
用户输入:
```
为 XCEngine 生成蓝图文档
```
AI 执行:
1. 扫描 XCEngine 源码目录,分析代码结构和模块划分
2. 识别核心子系统Core、Rendering、Physics、Resource、Scripting 等)
3. 提取各子系统的模块和 public API
4. 分析子系统间的依赖关系,构建依赖图
5. 生成 `blueprint.md` 文件
6. 运行校验检查 YAML 结构和依赖关系
7. 输出报告:子系统划分理由、生成内容、缺失信息