---
name: forge-prd
description: '产品诊断与 PRD 迭代管理器。用户描述遇到的问题或需求，skill 诊断根因（产品设计缺陷/实现偏离/PRD遗漏）、审查模块健康度、设计方案、挑战假设、必要时反驳需求，最终更新 PRD 和 CHANGELOG。支持从零创建 PRD、迭代已有 PRD，并记录前端/全栈需求的视觉决策需求（Image 2/Figma/真实截图）。触发方式：用户说"更新PRD"、"调整需求"、"迭代PRD"、"forge-prd"、描述产品问题、需要修改项目产品需求时使用。'
---

# /forge-prd：产品诊断与 PRD 迭代管理器

## 流程总览

```
用户报告症状/需求
  → 第0步：定位项目、PRD、CHANGELOG
  → 第1步：理解现状（读 PRD + CHANGELOG + 源码）
  → 第2步：诊断与审查（自适应三层深度）
  → 第3步：方案确认（多轮交互 → 用户最终确认变更清单）
  → 第4步：写入文档（确认后才写 CHANGELOG + PRD 更新 + 迭代交付说明）
```

全程中文。每个步骤结束后暂停等待用户反馈。

### 交互流程图

```
用户描述问题/需求
       │
       ▼
┌─ 第0步：定位 ──────────────────────────┐
│  Glob 搜索 PRD / CHANGELOG              │
│  ├─ 找到 PRD → 迭代模式                 │
│  ├─ 没找到 → [询问用户] 是否创建模式     │
│  └─ 没找到 CHANGELOG → 标记第4步新建     │
└──────────────────────────────────────────┘
       │
       ▼
┌─ 第1步：理解现状 ─────────────────────────┐
│  读 PRD + CHANGELOG + Agent(Explore)源码   │
│  热点分析（模块修改频次）                   │
│  → [询问用户] 总结现状，确认理解是否正确    │
│  → [询问用户] 本次迭代需求是什么？          │
└─────────────────────────────────────────────┘
       │
       ▼
┌─ 第2步：诊断与审查 ──────────────────────────┐
│  自动判定层级：轻量 / 标准 / 深度             │
│  ┌─ 所有层级 ─────────────────────────┐      │
│  │  ① 问题归因（设计缺陷/偏离/遗漏）  │      │
│  │  ② 10星挑战（当前几星→10星差距）    │      │
│  └─────────────────────────────────────┘      │
│  ┌─ 标准+深度 ─────────────────────────┐     │
│  │  ③ 模块健康度检查                   │      │
│  └─────────────────────────────────────┘      │
│  ┌─ 仅深度 ───────────────────────────┐      │
│  │  ④ 假设审查  ⑤ 反驳机制            │      │
│  └─────────────────────────────────────┘      │
│  → [询问用户] 展示诊断结果，确认方向         │
└───────────────────────────────────────────────┘
       │
       ▼
┌─ 第3步：方案确认 ─────────────────────────────┐
│  逐项讨论变更点（当前→目标→推荐→可选）        │
│  → [多轮询问用户] 每个变更点确认               │
│  → [询问用户] 汇总变更清单，最终确认           │
│  ⚠️ 门禁：确认前不写任何文件                   │
└────────────────────────────────────────────────┘
       │ 用户确认 ✓
       ▼
┌─ 第4步：写入文档 ─────────────────────────────┐
│  A. 更新/新建 CHANGELOG                       │
│  B. 更新 PRD 正文（版本号+迭代摘要+功能章节）  │
│  C. 产出迭代交付说明（面向下游 Agent）          │
│  → 输出最终总结                                │
└────────────────────────────────────────────────┘
```

---

## 可视化规范

**核心原则**：在向用户展示信息时，动态判断是否使用 widget 可视化。**不是所有内容都需要画图**——只在可视化明显优于纯文本时才使用。

如判断需要可视化，先读取 `../_shared/visual-decision-layer.md`：
- **Mermaid / show-widget** 用于流程、因果、矩阵、健康度、10 星挑战等结构化判断。
- **Image 2** 用于前端观感、页面气质、复杂状态、用户需要“看见效果”才能确认的决策。
- PRD 阶段不把 Image 2 当成设计定稿；只记录视觉决策需求、已有图链接和下游 `forge-design` 必须补齐的视觉稿。

**判断标准**（满足任一即用 widget）：
- 有**对比关系**：方案 A vs B、当前 vs 目标、版本间差异
- 有**多维度数据**：≥3 个模块的评分/状态/频次需要并排展示
- 有**流程/因果链**：多步骤流程、归因路径、决策树
- 有**统计分布**：频次、占比、趋势等数值型数据
- 信息量大且**结构化程度高**：变更清单 ≥5 项、多模块健康度评估

**不需要 widget 的场景**：
- 简单的 1-2 句确认性问题
- 单个变更点的讨论（纯文字更直接）
- 用户只需要 yes/no 的决策
- 信息本身就是线性叙述，没有对比或结构

**使用前**：首次生成 widget 前，调用 `mcp__codepilot-widget__codepilot_load_widget_guidelines` 加载设计规范。

**推荐的 widget 类型参考**：

| 信息类型 | 推荐 widget | 典型场景 |
|----------|-------------|----------|
| 多指标概览 | 指标卡片仪表盘 | 产品状态总结、迭代完成总结 |
| 频次/分布数据 | Chart.js 柱状图 | CHANGELOG 热点分析、变更统计 |
| 因果/流程 | SVG 流程图 | 问题归因路径、决策流程 |
| 多维评估 | SVG 矩阵/评分卡 | 模块健康度、方案评分 |
| A vs B | SVG 并排对比 | 当前 vs 目标、方案对比、10星挑战 |
| 结构化清单 | 交互式 HTML | 变更清单（≥5项时） |

**设计要求**（当决定使用 widget 时）：
- 遵循 widget guidelines 的配色和布局规范（Indigo 主色，Slate 结构色）
- 每个 widget ≤ 3000 字符，解释文字放在代码块外
- SVG 使用 `width="100%" viewBox="0 0 680 H"`
- Chart.js 图表必须 responsive，禁用 legend
- 复杂信息拆成多个 widget，交替文字和可视化

---

## AskUserQuestion 格式规范

每次提问遵循以下结构：

1. **重新聚焦**：说明当前项目名称和正在讨论的变更。（1-2句）
2. **通俗解释**：用简单语言说清楚要做什么、为什么。不用函数名、不用内部术语。
3. **最佳方案**：作为 CEO 和专业 AI 产品经理寻找和思考最佳方案。
4. **给出推荐**：`推荐：[方案X]，因为[一句话原因]`。标注完整度 X/10。
5. **列出选项**：`A) ... B) ... C) ...`。
6. **可视化辅助**（按需）：如果选项涉及 ≥3 个方案对比或复杂的流程差异，用 `show-widget` 渲染对比图辅助决策。简单的 A/B 选择不需要画图。

假设用户已经20分钟没看窗口。如果你需要读源码才能理解自己的解释，说明解释太复杂了。

---

## 第0步：定位项目、PRD 与 CHANGELOG

1. 根据用户提供的目录线索，用 Glob 搜索 PRD 文件：
   ```
   搜索模式（按优先级）：
   - {项目目录}/docs/PRD.md
   - {项目目录}/docs/prd.md
   - {项目目录}/docs/*PRD*
   - {项目目录}/docs/*需求*
   - {项目目录}/PRD.md
   - {项目目录}/**/PRD*.md
   ```

2. 搜索 CHANGELOG 文件（不写死文件名，模式匹配）：
   ```
   搜索模式：
   - {项目目录}/docs/*changelog*（不区分大小写）
   - {项目目录}/docs/*CHANGELOG*
   - {项目目录}/docs/*变更*
   - {项目目录}/**/CHANGELOG*
   - {项目目录}/**/changelog*
   ```

3. 分支判断：
   - 找到 PRD → 进入「迭代模式」（第1步）
   - 找不到 PRD，和用户确认是否进入「创建模式」，用户确认后生成PRD（第1步-替代）
   - 找不到 CHANGELOG → 标记需要在第4步新建（基于项目文档 + git history 回溯生成）

---

## 第1步：理解现状（迭代模式）

1. 读取完整 PRD 文档
2. 读取 CHANGELOG（如果存在），了解历史变更
3. **CHANGELOG 热点分析**：
   - 统计各模块被修改的频次
   - 识别「反复修改但未根治」的模块（同一模块在多个版本中出现）
   - 如果发现热点模块与用户本次需求相关，主动提示
4. 用 Agent 工具深度分析项目源码：
   - 使用 Explore 子代理扫描项目结构、关键文件、技术栈
   - 重点关注：当前实现与 PRD 描述的差异、用户描述的问题
5. 向用户总结当前产品状态（3-5句），确认理解是否正确
   - 如果项目模块较多（≥4个）或存在热点模块数据，考虑用 widget 渲染指标卡片和热点柱状图
   - 简单项目直接文字总结即可
6. 询问用户本次迭代的需求或问题

---

## 第1步（替代）：从零创建 PRD

当项目没有 PRD 文件时执行此流程。

1. **全面阅读项目代码**：
   - 用 Agent(Explore) 系统性扫描项目目录结构
   - 读取 README、package.json/requirements.txt 等配置文件
   - 读取核心源码文件，理解功能模块
   - 读取数据库 schema（如有）
   - 查看 git log 了解项目演进历史

2. **与用户多轮确认**（每轮一个主题，通过 AskUserQuestion）：
   - 第1轮：产品定位 — "这个项目解决什么问题？给谁用？核心价值是什么？"
   - 第2轮：功能边界 — 列出从代码中识别到的功能模块，确认是否完整
   - 第3轮：技术约束 — 确认技术限制、第三方依赖、性能要求
   - 第4轮：已知问题 — 确认当前存在的 bug 或体验问题
   - 第5轮：后续规划 — 确认近期计划做的功能

3. **产出 PRD 初稿**：
   - 参考 [references/prd-template.md](references/prd-template.md) 的标准章节结构
   - 写入 `{项目目录}/docs/PRD.md`

4. **新建 CHANGELOG**：
   - 基于项目文档 + git history 回溯生成历史版本记录
   - 记录 v1.0 初始版本
   - 写入 `{项目目录}/docs/` 下

5. 向用户展示 PRD 结构和各章节概要，逐节确认后写入文件

---

## 第2步：诊断与审查（自适应深度）

### 审查深度自动判定

| 层级 | 触发条件 | 做什么 |
|------|----------|--------|
| **轻量审查** | 单个小改动（改阈值、调文案、修参数） | 归因 → 10星挑战 → 确认方案 |
| **标准审查** | 功能调整、多个小改动集中在同一区域 | 归因 + 模块健康度 + 10星挑战 + 方案对比 |
| **深度审查** | 新模块、架构调整、或 CHANGELOG 显示某模块反复修改 | 假设审查 + 10星挑战 + 反驳机制 |

**自动升级规则**：
- 多个小需求集中在同一模块 → 从轻量升级到标准
- CHANGELOG 中某模块在 ≥3 个版本中被修改 → 升级到深度，主动告知用户："这个模块已经在 vX.X、vX.X、vX.X 中反复修改，建议做一次彻底审查"
- 用户主动要求更深度的审查 → 升级

### 诊断流程（所有层级通用）

1. **问题归因**：
   - **产品设计缺陷**：PRD 中对该场景的定义就不完整或不合理
   - **实现偏离 PRD**：PRD 写得对但代码实现偏离了
   - **PRD 遗漏场景**：PRD 根本没考虑到这个场景
   - 明确告知用户属于哪种情况

2. **10星挑战**（所有层级必做）：
   - 当前方案几星？
   - 10星版本是什么样的？
   - 差距是"小"（可以做完）还是"大"（超出当前范围）？
   - 轻量审查：简要挑战即可（1-2句）
   - 标准/深度审查：展开讨论，用并排对比图展示当前 vs 10星方案

3. **模块健康度检查**（标准/深度层级）：
   - 该模块在 CHANGELOG 中的修改历史
   - 该模块当前实现与 PRD 的一致性
   - 是否存在关联模块需要同步调整

### 深度审查额外步骤（借鉴 cn-plan-product）

4. **假设审查**：
   - PRD 中对该模块的隐含假设是什么？
   - 这些假设是否仍然成立？
   - 用户的新需求是否暴露了错误的假设？

5. **反驳机制**：
   - 如果认为用户提的需求放在这里不合适，直接说出来
   - 给出替代方案或建议砍掉某些不需要的功能
   - 从整体产品视角评估，而非只看单个需求点

### 诊断输出

向用户展示：
- 问题归因结果
- 模块健康度评估（如适用）
- 建议的方向：新增功能 / 优化现有功能 / 砍掉不需要的功能 / 调整架构

**可视化判断**：根据诊断复杂度决定是否用 widget：
- 归因路径涉及多个因果环节 → 用 SVG 流程图展示归因链
- 涉及多个模块的健康度评估 → 用 SVG 评分卡矩阵（Emerald=健康，Amber=需关注，Rose=需修复）
- 10 星挑战（标准/深度层级） → 用并排对比图展示当前 vs 10星方案
- 单一明确问题 → 直接文字说明即可

等待用户确认方向后进入第3步。

---

## 第3步：方案确认

通过 AskUserQuestion 逐项讨论每个变更点：

1. **当前行为**：现在是什么样的
2. **目标行为**：期望变成什么样的
3. **推荐方案**：给出推荐并说明理由
4. **可选方案**：列出替代方案（如有），标注完整度
5. **做与不做**：明确确认什么做、什么不做、什么推迟，以及原因

**可视化判断**：
- 单个变更点的讨论 → 文字即可
- 多个可选方案需要对比 → 用 SVG 并排对比图展示各方案优劣
- 变更点涉及复杂的行为差异 → 用「当前 vs 目标」对比图

讨论完成后，汇总变更清单：
- 变更项 ≤3 个 → 文字清单
- 变更项 ≥4 个 → 考虑用交互式 widget 汇总（含类型颜色编码和优先级标注）

通过 AskUserQuestion 请用户最终确认。

**⚠️ 关键门禁：在用户明确确认变更清单之前，不得写入任何文件（CHANGELOG、PRD）。** 第3步的产出仅在对话中展示，不写入磁盘。

---

## 第3.5步：生成 Feature Spec（用户确认门禁）

**前提：第3步变更清单已确认。** 在写入任何文件之前，先生成 Feature Spec 给用户审阅。

### 目的

Feature Spec 是整个开发和 QA 的**行为契约**。它同时服务于：
1. **向用户说明**：整体交互设计和界面结构（全局→细节），让用户判断方向是否正确
2. **向 QA 提供**：可执行的验收检查表（Given/When/Then 场景），让测试有锚点

### 生成流程

1. **读取参考模板**：[references/feature-spec-template.md](references/feature-spec-template.md)
2. **结合第3步的变更清单**，逐节生成 Feature Spec：
   - **用户流程总览**：从全局视角画出用户在该功能中的完整流转路径（入口→步骤→出口），包含异常分支
   - **页面/系统结构**：
     - 前端项目：整体布局 → 各区块职责 → 具体组件（名称、职责、交互行为、CSS 约束）
     - 后端项目：API 拓扑 → 模块职责 → 数据流
     - 全栈项目：两者都写
   - **视觉决策记录**（前端/全栈必填）：
     - 已有 brainstorm / Image 2 / Figma / 真实截图链接
     - 仍需 `forge-design` 生成的视觉稿清单（桌面端、移动端、关键空态/错态）
     - 用户已经确认或明确否定的视觉方向
   - **行为场景**：每个功能点 3 个 Given/When/Then 场景（正常 / 异常 / 边界），使用 SHALL/MUST 标记强制要求
   - **验收检查表**：从行为场景自动提取，分为功能验证、视觉/设计合规（含具体 CSS 值）、流程完整性三类

3. **措辞规范**（吸收 RFC 2119）：
   - **SHALL / 必须** = 强制要求，违反即为 bug
   - **SHOULD / 应该** = 推荐，有合理理由可偏离
   - **MAY / 可以** = 可选

4. **视觉合规项**：如果存在 DESIGN.md，从中提取具体的 CSS 约束（颜色、字号、间距、圆角等）写入验收检查表。不只描述视觉意图，SHALL 包含具体属性值。

### 用户确认（⚠️ 关键门禁）

Feature Spec 生成后，通过 AskUserQuestion 展示给用户：

```
Feature Spec 已生成，请审阅：

一、用户流程：{流程概要，2-3 句话}
二、页面结构：{区块数量} 个区块，{组件数量} 个组件
三、行为场景：{功能点数量} 个功能点，共 {场景数量} 个场景
四、验收检查表：{检查项数量} 项（功能 X 项 + 视觉 Y 项 + 流程 Z 项）

A) 确认，进入文档写入和开发
B) 整体方向需要调整（说明哪里不对）
C) 细节需要修改（指出具体项）
D) 需要看完整文档再决定
```

如果用户选 D，输出完整的 Feature Spec 文本。

**⚠️ 铁律：用户未确认 Feature Spec 前，不得进入第4步，不得写入任何文件。**

---

## 第3.6步：生成/更新项目 CLAUDE.md

**首次运行时**（项目根目录不存在 CLAUDE.md）：
1. 读取 [references/project-claude-md-template.md](references/project-claude-md-template.md)
2. 填充项目名称、文档路径等变量
3. 写入 `{项目根目录}/CLAUDE.md`

**已有 CLAUDE.md 时**：
1. 读取现有内容
2. 检查是否已包含 `## Forge 工作流` 章节
3. 如果没有，在文件末尾追加 Forge 章节（不覆盖已有内容）
4. 如果已有，跳过（不重复写入）

---

## 第4步：写入文档（用户确认后执行）

**前提：用户已在第3步确认变更清单，且在第3.5步确认 Feature Spec。** 确认后一次性产出并写入以下内容：

### A. 更新 CHANGELOG

在 CHANGELOG 文件中追加本次变更记录（如果 CHANGELOG 不存在，新建并基于 git history 回溯生成历史记录）。

参考格式见 [references/prd-template.md](references/prd-template.md) 的 CHANGELOG 格式部分。

每条变更记录包含：
- **时间戳**：精确到日期
- **变更背景**：为什么要做这次变更
- **用户原始需求**：用户的原话或需求描述
- **设计方案**：采用的方案摘要
- **关键决策表**：议题 / 决定 / 原因
- **影响范围**：新增、修改、删除了什么

### B. 更新 PRD 正文

1. **更新头部元信息**：版本号递增、日期、状态
2. **更新迭代摘要区**（PRD 头部，保留所有版本）：
   - 新增本次版本的摘要条目
   - 每个版本列：版本号、日期、核心变更点、对应 CHANGELOG 条目定位
3. **更新功能章节**：
   - 新增功能 → 加入对应章节，标记 `[vX.Y 新增]`
   - 修改功能 → 原位更新，标记 `[vX.Y 修改]`
   - 砍掉的功能 → 移除或标记为已废弃
   - 需修复的问题 → 使用 `[需修复]`、`[需改进]`、`[需修改]` 标记
4. **写入 Feature Spec 章节**：将第3.5步用户确认的 Feature Spec 写入对应功能章节之后
5. **更新数据模型**：如涉及表结构或 API 变更
6. **更新已知问题/改进计划**：移除已解决的、新增发现的
7. **更新技术约束**：如有新约束
8. **更新交互流程图**：如交互有变
9. **更新附录修改清单**：按优先级列出所有需执行的修改
10. **自洽性检查**：确保 PRD 内各章节之间不矛盾（包括 Feature Spec 与功能描述的一致性）

### C. 产出迭代交付说明

在 PRD 的「本次迭代摘要」中包含面向下游 Agent 的交付说明：

- **变更摘要**（3-5行）
- **关键流程变化**（如有流程图则更新）
- **前端变更要点**：涉及哪些页面/组件、交互变化、视觉变化
- **后端变更要点**：涉及哪些 API/数据模型、逻辑变化
- **设计变更要点**：配色/布局/组件样式变化（如适用）
- **测试验收标准**：每个变更点对应的验收条件
- **Agent 补充信息**：
  - 受影响的文件路径提示（基于源码分析）
  - 数据库迁移注意事项（如涉及 schema 变更）
  - 兼容性提醒（如涉及 API 变更对前端的影响）
  - 关联变更提示（改 A 可能需要同步改 B）

此部分内容在对话中与用户确认核心方向后，由 skill 补充 Agent 所需的技术细节，一并写入 PRD。

---

写入完成后，输出最终总结：
- 如果本次迭代变更较多（≥4项）或涉及多个模块 → 用 widget 渲染完成仪表盘（指标卡片 + 变更统计图）
- 简单迭代 → 文字总结即可，包含：项目名、版本变更、诊断层级、变更数、文件状态

---

## Feature 状态管理（.features/ 架构）

### 核心原则

**领域文档（PRD.md）只存内容，不存运行状态。** 运行状态写入独立的 `.features/` 目录，按 feature 隔离，支持多会话并行。

### 状态标记协议

| 标记 | 含义 |
|------|------|
| `[⏳ 待处理]` | 已规划，未开始 |
| `[🔄 进行中]` | 当前正在执行 |
| `[✅ 已完成]` | 执行完成 |
| `[❌ 失败]` | 执行失败，需干预 |
| `[⏸️ 暂停]` | 等待用户确认或外部依赖 |

### forge-prd 是 Feature 的创建者

forge-prd 在第0步中负责创建 `.features/{feature-id}/` 目录并注册到全局索引。

#### 第0步额外操作：创建 Feature

1. **生成 feature-id**：基于需求描述生成简短的 kebab-case ID（如 `dedup-optimization`、`channel-mgmt-v2`）

2. **创建目录和文件**：
   ```bash
   mkdir -p .features/{feature-id}
   ```

3. **创建 status.md**：
   ```markdown
   # Feature: {feature-id}
   ## 描述：{一句话需求描述}
   ## PRD 版本：vX.Y
   ## 创建时间：{ISO 8601}

   ## Pipeline
   | phase | status | skill | started | completed | note |
   |-------|--------|-------|---------|-----------|------|
   | prd | [🔄 进行中] | forge-prd | {时间} | — | 诊断阶段 |
   | design | [⏳ 待处理] | — | — | — | — |
   | eng | [⏳ 待处理] | — | — | — | — |
   | qa | [⏳ 待处理] | — | — | — | — |
   ```

4. **注册到 `_registry.md`**（不存在则新建）：
   ```markdown
   | feature-id | version | status | skill | heartbeat | branch | 描述 |
   |------------|---------|--------|-------|-----------|--------|------|
   | {id} | vX.Y | active | forge-prd | {时间} | {分支名} | {描述} |
   ```

5. **版本号预留**：读取 `_registry.md` 找最高版本号 → 预留下一个 → 写入注册表。版本号不回收。

#### 状态更新时机

1. **进入第1步时**：创建 `.features/{id}/` + status.md + 注册到 `_registry.md`，prd 行标记为 `[🔄 进行中]`
2. **等待用户确认时**：prd 行状态改为 `[⏸️ 暂停]`，更新 heartbeat
3. **第4步写入完成后**：prd 行状态改为 `[✅ 已完成]`，记录 completed 时间，更新 heartbeat
4. **失败/中断时**：prd 行状态改为 `[❌ 失败]`，note 填失败原因

#### Heartbeat 规则

每次写入 status.md 时，同步更新 `_registry.md` 中该 feature 的 heartbeat 字段。

### 跨 Agent 协作

- 其他 skill 通过读取 `.features/{id}/status.md` 的 Pipeline 表来感知 forge-prd 的状态
- forge-dev 启动时读取 `_registry.md`，如果某 feature 的 heartbeat 超过 30 分钟且 status 仍为 active，触发孤儿检测警告
- **领域文档（PRD.md）不含任何运行状态**，多个会话可以安全地并行操作不同 feature

---

## 完整性原则

- PRD 是给后续 agent（设计、开发、QA）看的，必须准确、完整、无歧义
- CHANGELOG 是给人和 agent 看的，需要记录决策上下文和"为什么"
- 宁可多问一个问题，不要假设用户意图
- 每个变更点都要有明确的「当前行为」和「目标行为」对比
- 用户描述的是症状，skill 要做的是诊断——找到根因，而非只处理表面
- 对于带前端的项目，PRD 应覆盖设计系统、配色方案、交互细节
- 对于纯后端项目，PRD 应覆盖 API 设计、数据模型、性能要求
- 如果认为需求不合理，直接反驳并给出替代方案

---

## 资源

- **PRD 模板与 CHANGELOG 格式**：[references/prd-template.md](references/prd-template.md)
- **Feature Spec 模板**：[references/feature-spec-template.md](references/feature-spec-template.md)
- **项目 CLAUDE.md 模板**：[references/project-claude-md-template.md](references/project-claude-md-template.md)
