| name | prd-evolution |
| description | PRD 文档树状版本管理,处理需求变更、功能扩展和覆盖逻辑。触发词:更新 PRD、修改 PRD、PRD 版本管理、PRD 树、扩展功能、覆盖需求。 |
| triggers | ["更新 PRD","修改 PRD","PRD 版本管理","PRD 树","扩展功能","覆盖需求","管理 PRD 版本","PRD 变更"] |
PRD Evolution - PRD 树状版本管理器
角色:PRD 版本管理专家
核心价值:管理 PRD 的完整生命周期,处理需求变更时的覆盖/扩展逻辑,维护清晰的版本树
🎯 核心概念:PRD 树
prd-root (初始 PRD)
├── prd-v1.0 (已实现)
│ ├── feature-A (已实现)
│ └── feature-B (已实现)
├── prd-v1.1 (扩展)
│ └── feature-C (新功能,待实现)
└── prd-v2.0 (覆盖)
├── feature-A-v2 (覆盖 feature-A)
└── feature-D (新功能)
节点状态
| 状态 | 图标 | 含义 |
|---|
| 草稿 | 🟡 | 刚创建,待确认 |
| 已确认 | 🟢 | 需求已确认,待实现 |
| 已实现 | 🔵 | 代码已完成 |
| 测试中 | 🟣 | 实现完成,测试中 |
| 已废弃 | ⚪ | 被新版本覆盖 |
| 已合并 | ✅ | 已合并到主线 |
🌳 树状结构规则
规则 1:功能描述不清楚 → 扩展
场景:功能 A 已实现,但发现描述不够详细,需要补充细节
操作:
feature-A (已实现)
└── feature-A-detailed (扩展,待实现)
└── 继承 feature-A 的实现,添加新细节
实现策略:
- 保留原有功能
- 在新分支上添加细节
- 完成后合并或并存
规则 2:功能未实现 → 直接覆盖
场景:功能 B 还未实现(🟡/🟢),用户修改了需求
操作:
feature-B-v1 (🟡 草稿) ──→ feature-B-v2 (🟡 草稿)
↓ ↓
[废弃] [新需求]
实现策略:
- 废弃旧版本
- 新版本继承 ID 和位置
- 直接按新版本实现
规则 3:功能已实现但需求变更 → 扩展新版本
场景:功能 C 已实现(🔵),但用户要求修改
操作:
feature-C-v1 (🔵 已实现)
└── feature-C-v2 (🟡 草稿,待实现)
└── 基于 v1 修改
实现策略:
- 保留 v1 实现(可能回滚)
- v2 基于 v1 代码修改
- 完成后 v1 标记为废弃
📋 工作流程
场景 1:更新已有 PRD
用户:更新 PRD prd-20260323-143022-a3f7,添加搜索功能
AI:
1. 读取原 PRD
2. 判断原 PRD 状态
3. 根据状态决定策略
4. 创建新版本或扩展节点
5. 更新树状结构
6. 返回新版本 PRD ID
场景 2:修改功能需求
用户:修改功能"任务创建",添加优先级字段
AI:
1. 找到功能节点
2. 检查功能状态
3. 状态=🔵已实现 → 创建扩展节点
4. 状态=🟡草稿 → 直接覆盖
5. 更新 PRD 文档
6. 更新树结构图
场景 3:废弃功能
用户:废弃功能"邮件通知"
AI:
1. 找到功能节点
2. 标记为 ⚪ 已废弃
3. 添加废弃原因
4. 更新树结构
5. 如果有代码,标记为待删除
🗂️ 存储结构
PRD 树文件
位置: ~/src/docs/prd/tree.md
# PRD 版本树
## 项目:任务管理系统
### 根节点
- **ID**: prd-20260323-143022-a3f7
- **名称**: 任务管理系统 v1.0
- **状态**: 🟢 已确认
- **文件**: [prd-20260323-143022-a3f7.md](./prd-20260323-143022-a3f7.md)
### 版本树
prd-20260323-143022-a3f7
├── feature-task-create (🔵 已实现)
│ └── prd-20260323-143022-a3f7-task-create-priority (🟡 草稿)
│ └── [添加优先级功能]
├── feature-task-list (🔵 已实现)
├── feature-search (🟡 草稿)
└── feature-email-notify (⚪ 已废弃)
└── 废弃原因:改为站内通知
### 变更历史
| 时间 | 操作 | 节点 | 说明 |
|------|------|------|------|
| 2026-03-23 14:30 | 创建 | prd-20260323-143022-a3f7 | 初始版本 |
| 2026-03-23 15:45 | 扩展 | feature-task-create-priority | 添加优先级字段 |
| 2026-03-23 16:20 | 废弃 | feature-email-notify | 改为站内通知 |
PRD 元数据
位置: ~/src/docs/prd/meta.json
{
"trees": {
"prd-20260323-143022-a3f7": {
"name": "任务管理系统",
"root_id": "prd-20260323-143022-a3f7",
"current_version": "1.1",
"nodes": {
"prd-20260323-143022-a3f7": {
"parent": null,
"children": [
"feature-task-create",
"feature-task-list"
],
"status": "confirmed",
"file": "prd-20260323-143022-a3f7.md",
"created_at": "2026-03-23T14:30:00Z",
"updated_at": "2026-03-23T14:30:00Z"
},
"feature-task-create": {
"parent": "prd-20260323-143022-a3f7",
"children": ["feature-task-create-priority"],
"status": "implemented",
"file": null,
"created_at": "2026-03-23T14:30:00Z",
"updated_at": "2026-03-23T14:30:00Z"
}
}
}
}
}
🔧 核心操作
操作 1:创建新版本
输入: 原 PRD ID + 变更内容
输出: 新 PRD ID
def create_version(parent_id, changes, strategy="extend"):
"""
strategy: "extend" | "override" | "fork"
- extend: 扩展(保留父版本,创建子版本)
- override: 覆盖(废弃父版本,创建新版本)
- fork: 分支(并行版本,后续可能合并)
"""
pass
操作 2:更新节点状态
输入: 节点 ID + 新状态
输出: 更新确认
def update_status(node_id, new_status):
"""
状态流转:
draft -> confirmed -> implemented -> tested -> merged
↓ ↓ ↓ ↓
abandoned abandoned abandoned abandoned
"""
pass
操作 3:查询版本树
输入: PRD ID
输出: 完整树状结构
def get_tree(root_id):
"""返回树状结构,包含所有节点和状态"""
pass
操作 4:合并节点
输入: 源节点 ID + 目标节点 ID
输出: 合并后的节点
def merge_nodes(source_id, target_id):
"""将源节点合并到目标节点"""
pass
🎬 使用示例
示例 1:扩展已实现功能
用户输入:
扩展任务创建功能,添加:
1. 优先级选择(高/中/低)
2. 截止日期时间选择(原本只有日期)
3. 任务标签
AI 执行:
- 找到
feature-task-create 节点
- 状态 = 🔵 已实现
- 策略 = 扩展(创建子节点)
- 创建
feature-task-create-v2
- 复制原 PRD 内容
- 添加新功能描述
- 更新 tree.md
- 更新 meta.json
- 返回新 PRD ID
输出:
✅ 已创建扩展版本
- **父节点**: feature-task-create (🔵 已实现)
- **新节点**: feature-task-create-v2 (🟡 草稿)
- **变更**: 添加优先级、时间选择、标签
- **策略**: 扩展(保留 v1,v2 待实现)
- **文件**: prd-20260323-143022-a3f7-task-create-v2.md
示例 2:覆盖未实现功能
用户输入:
修改搜索功能,原本要求支持全文搜索,现在改为只支持标题搜索
AI 执行:
- 找到
feature-search 节点
- 状态 = 🟡 草稿(未实现)
- 策略 = 覆盖(直接修改)
- 更新 PRD 内容
- 记录变更历史
- 返回确认
输出:
✅ 已覆盖需求
- **节点**: feature-search (🟡 草稿)
- **变更**: 全文搜索 → 标题搜索
- **策略**: 直接覆盖(未实现,无需保留旧版本)
- **说明**: 由于功能未实现,直接修改原 PRD
示例 3:废弃功能
用户输入:
废弃邮件通知功能,改为站内通知
AI 执行:
- 找到
feature-email-notify 节点
- 状态 = 🔵 已实现
- 标记为 ⚪ 已废弃
- 添加废弃原因
- 创建新节点
feature-inapp-notify
- 更新树结构
- 返回确认
输出:
✅ 已废弃并替换
- **废弃节点**: feature-email-notify (⚪ 已废弃)
- **原因**: 改为站内通知
- **新节点**: feature-inapp-notify (🟡 草稿)
- **说明**: 如已有代码,建议保留但标记为 deprecated
🔗 与其他技能协作
decision-record (需求决策)
↓
requirement-to-prd (生成初始 PRD)
↓
prd-evolution (管理版本树)
├─ 处理需求变更
├─ 管理覆盖/扩展逻辑
└─ 维护版本树
↓
prd-to-code (根据 PRD 实现代码)
↓
prd-evolution (更新实现状态)
📊 决策矩阵
| 当前状态 | 用户操作 | 策略 | 结果 |
|---|
| 🟡 草稿 | 修改需求 | 直接覆盖 | 更新原 PRD |
| 🟢 已确认 | 修改需求 | 直接覆盖 | 更新原 PRD |
| 🔵 已实现 | 添加细节 | 扩展 | 创建子节点 |
| 🔵 已实现 | 修改需求 | 扩展 | 创建子节点(v2) |
| 🟣 测试中 | 修改需求 | 扩展 | 创建子节点 |
| ⚪ 已废弃 | 恢复 | 重新激活 | 更新状态 |
⚠️ 注意事项
- 自动策略选择: 根据状态自动选择最佳策略,但用户可以强制指定
- 变更记录: 所有变更必须记录到 tree.md 的变更历史中
- 代码同步: 如果功能已实现,修改 PRD 时需要评估代码影响
- 版本号: 遵循语义化版本(major.minor.patch)
- 备份: 废弃的 PRD 移动到 archive/ 目录,不直接删除
最后更新:2026-03-23 | 版本:v1.0