agentleFS
ThrookieThrookie/claude-code-skills/skills/prd-evolution/SKILL.md

prd-evolution

Skill1 starsChanged 8 months agoMITView on GitHub

PRD 文档树状版本管理,处理需求变更、功能扩展和覆盖逻辑。触发词:更新 PRD、修改 PRD、PRD 版本管理、PRD 树、扩展功能、覆盖需求。

The file

Files
SKILL.md

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 执行:

  1. 找到 feature-task-create 节点
  2. 状态 = 🔵 已实现
  3. 策略 = 扩展(创建子节点)
  4. 创建 feature-task-create-v2
  5. 复制原 PRD 内容
  6. 添加新功能描述
  7. 更新 tree.md
  8. 更新 meta.json
  9. 返回新 PRD ID

输出:

✅ 已创建扩展版本

- **父节点**: feature-task-create (🔵 已实现)
- **新节点**: feature-task-create-v2 (🟡 草稿)
- **变更**: 添加优先级、时间选择、标签
- **策略**: 扩展(保留 v1,v2 待实现)
- **文件**: prd-20260323-143022-a3f7-task-create-v2.md

示例 2:覆盖未实现功能

用户输入:

修改搜索功能,原本要求支持全文搜索,现在改为只支持标题搜索

AI 执行:

  1. 找到 feature-search 节点
  2. 状态 = 🟡 草稿(未实现)
  3. 策略 = 覆盖(直接修改)
  4. 更新 PRD 内容
  5. 记录变更历史
  6. 返回确认

输出:

✅ 已覆盖需求

- **节点**: feature-search (🟡 草稿)
- **变更**: 全文搜索 → 标题搜索
- **策略**: 直接覆盖(未实现,无需保留旧版本)
- **说明**: 由于功能未实现,直接修改原 PRD

示例 3:废弃功能

用户输入:

废弃邮件通知功能,改为站内通知

AI 执行:

  1. 找到 feature-email-notify 节点
  2. 状态 = 🔵 已实现
  3. 标记为 ⚪ 已废弃
  4. 添加废弃原因
  5. 创建新节点 feature-inapp-notify
  6. 更新树结构
  7. 返回确认

输出:

✅ 已废弃并替换

- **废弃节点**: feature-email-notify (⚪ 已废弃)
- **原因**: 改为站内通知
- **新节点**: feature-inapp-notify (🟡 草稿)
- **说明**: 如已有代码,建议保留但标记为 deprecated

🔗 与其他技能协作

decision-record (需求决策)
    ↓
requirement-to-prd (生成初始 PRD)
    ↓
prd-evolution (管理版本树)
    ├─ 处理需求变更
    ├─ 管理覆盖/扩展逻辑
    └─ 维护版本树
    ↓
prd-to-code (根据 PRD 实现代码)
    ↓
prd-evolution (更新实现状态)

📊 决策矩阵

当前状态用户操作策略结果
🟡 草稿修改需求直接覆盖更新原 PRD
🟢 已确认修改需求直接覆盖更新原 PRD
🔵 已实现添加细节扩展创建子节点
🔵 已实现修改需求扩展创建子节点(v2)
🟣 测试中修改需求扩展创建子节点
⚪ 已废弃恢复重新激活更新状态

⚠️ 注意事项

  1. 自动策略选择: 根据状态自动选择最佳策略,但用户可以强制指定
  2. 变更记录: 所有变更必须记录到 tree.md 的变更历史中
  3. 代码同步: 如果功能已实现,修改 PRD 时需要评估代码影响
  4. 版本号: 遵循语义化版本(major.minor.patch)
  5. 备份: 废弃的 PRD 移动到 archive/ 目录,不直接删除

最后更新:2026-03-23 | 版本:v1.0

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.