470 lines
14 KiB
Markdown
470 lines
14 KiB
Markdown
# 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_DEFINITION(MVS 最小可行方案)
|
||
|
||
```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. 输出报告:子系统划分理由、生成内容、缺失信息
|