Files

404 lines
16 KiB
Markdown
Raw Permalink 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.
---
name: pmassist
description: |
产品文档协作与缺陷分析助手。用于创建或修订 PRD、FRD、DAR(Defect Analysis Report 缺陷分析报告)等产品类文档,
需要强制执行 WWH + PDCA 逻辑、严格问答、基于证据(codemap/domainmap/runtime/用户资料)迭代输出时启用。
---
# pmassist
## 核心规则(强制)
- **必须执行 WWH + PDCA**,任何阶段不可跳过。
- **必须问答闭环**:每轮必须提出问题清单;P0 问题未解答不得进入下轮输出。
- **必须证据标注**:文档中每个关键结论、数据、规则必须标注来源。
- **必须留痕**:每轮对话都写入 `summary.md` 与 `rounds/round_N.md`。
- **若 runtime 缺失**:允许继续,但相关内容需标注 `[ASSUMPTION]`。
- **必须包含图表**:最终文档至少包含 1 个 mermaid 图和 1 个表;缺失则在 Check 阶段补齐。
- **若存在 CodeMap/DomainMap**:必须深挖到“页面/字段/调用链/分支证据”层级,而非仅域级概览。
- **必须完成证据→章节映射**:每个章节至少 1 条证据或明确假设标记,否则不能定稿。
- **若提供参考样本/既有文档**:必须做覆盖度对比检查,列出差异点清单。
## 0) 文档类型分流(先做)
根据用户初始描述进行分支;不确定就追问:
- **PRD**:新需求、流程优化、产品规划、业务方案、用户体验。
- **FRD**:具体功能实现、接口/数据/流程细节、技术落地规格。
- **DAR**:线上缺陷、事故复盘、根因分析、纠正预防。
> 选择后加载对应模板:
- PRD → `references/prd.md`
- FRD → `references/frd.md`
- DAR → `references/dar.md`
## 0.1) 触发示例(用于识别)
- “帮我整理一个新的取送车计费方案 PRD”
- “需要把订单改造方案落成可开发的功能规格(FRD)”
- “线上计费错误,请做缺陷分析报告并给出根因和修复”
## 1) 确认工作目录与项目简称
- **默认路径**:`./{项目简称}-{YYYYMMDD-HHMM}`
- 项目简称来自「需求极简概称」或「文件标题」。
- **必须询问用户确认**;未确认不得创建目录。
## 1.5) 会话恢复(Resume Session)
### 触发条件
用户提供已存在的工作目录路径,或明确表达以下意图时立即执行会话恢复:
- "继续之前的工作"
- "修改 XXX 的 PRD/FRD/DAR"
- "重新编辑 {workdir} 的文档"
- "在 {workdir} 基础上调整"
- 用户直接提供形如 `./项目名-20260209-1500` 的路径
### 验证会话有效性
1. 检查目录是否存在
2. 验证必备文件:`session.yaml`、`desc.md`、`summary.md`
3. 若任一缺失 → 提示损坏,建议创建新会话
### 状态回顾(自动生成报告)
读取以下文件:
- `session.yaml` → 获取文档类型、当前 Round、状态
- `summary.md` → 回顾已完成内容
- `questions/round_*.yaml` → 统计遗留问题(P0/P1/P2)
- `outputs/{doc_type}.md` → 检查章节完成度
- `session.yaml` 的 `prototype` 块 → 原型状态(如果启用)
生成**会话状态报告**并展示给用户:
```markdown
📊 会话状态报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 工作目录:{workdir}
📄 文档类型:{PRD/FRD/DAR}
📌 项目简称:{alias}
🔢 当前 Round:{current_round}
📝 已完成内容:
- 章节 1-{N}(共 {total} 章)
- 证据映射:{evidence_count} 条
- Mermaid 图:{mermaid_count} 个
- 表格:{table_count} 个
❓ 遗留问题:
- P0(阻塞):{p0_count} 个
- P1(关键):{p1_count} 个
- P2(细节):{p2_count} 个
🎨 原型状态:{proto_status}
- 技术路径:{tech_stack}
- 产出文件:{proto_outputs}
⏰ 上次更新:{last_update_time}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```
### 询问工作模式
展示报告后,**必须询问**用户选择工作模式:
**A. 继续模式**(Continue)
- 接续当前 Round,补充未完成章节
- 优先解决 P0 遗留问题
- 继续执行 PDCA 循环直到本轮收敛
**B. 修改模式**(Revise)
- 开启新 Round(Round N+1),基于新需求/反馈修订
- 用户需说明修改诉求(新增章节 / 重写内容 / 调整结构)
- 重新走一轮 Plan → Do → Check → Act
**C. 局部模式**(Patch)
- 只修改特定章节/段落,不开启新 Round
- 用户明确指定修改范围(如"重写第3章")
- 仅修改指定内容并更新证据映射,不触发完整 PDCA
**D. 原型模式**(Prototype)
- 更新/重新生成原型(独立于文档迭代)
- 执行 Proto Round 1-3 流程(见 2.6 节)
- 用户需说明原型诉求(新增页面 / 修改样式 / 重构交互)
**E. 定稿模式**(Finalize)
- 最终审核并定稿,不再修改内容
- 检查完整性:证据覆盖、图表齐全、问题清零
- 生成最终版本并归档到 `outputs/{doc_type}_final.md`
### 工作模式执行
#### A. 继续模式流程
1. 读取 `rounds/round_{N}.md` 获取上次工作内容
2. 读取 `questions/round_{N}.yaml` 获取未答问题
3. 若存在 P0 问题 → 先解决 P0 再继续
4. 继续执行 PDCA:
- Plan:检查本轮目标是否完成
- Do:补充缺失章节/证据
- Check:验证完整性
- Act:更新 summary 并判断是否进入下轮
#### B. 修改模式流程
1. 创建 `rounds/round_{N+1}.md`
2. 在 `round_{N+1}.md` 头部记录修改诉求
3. 更新 `session.yaml` 中的 `current_round` 为 N+1
4. 开启新一轮 PDCA 循环:
- Plan:分析修改影响范围,提出问题清单
- Do:执行修改并更新证据链
- Check:对比修改前后差异,验证一致性
- Act:更新 decision_log.md 记录变更原因
#### C. 局部模式流程
1. **不创建新 Round**,在当前 Round 的 `round_{N}.md` 追加修改记录
2. 读取目标章节当前内容
3. 执行修改(覆盖/插入/删除)
4. 更新 `outputs/{doc_type}.md` 中的对应章节
5. 检查证据映射是否需要更新
6. 在 `decision_log.md` 追加局部修改记录
7. **不触发 Check-Act**,完成后直接返回
#### D. 原型模式流程
参见 **2.6 节 原型设计环节**,执行 Proto Round 1-3
#### E. 定稿模式流程
1. **完整性检查**:
- 所有 P0 问题已解决
- 每章至少 1 条证据或 `[ASSUMPTION]`
- 至少 1 个 Mermaid 图、1 个表格
- 章节编号/标题/目录一致
2. **证据覆盖度检查**:
- 生成章节 vs 证据映射表
- 标注未覆盖章节(需补充或标注假设)
3. **定稿操作**:
- 复制 `outputs/{doc_type}.md` → `outputs/{doc_type}_final.md`
- 在末尾追加"定稿信息":时间、版本、审核人
- 更新 `session.yaml` 状态为 `finalized`
- 更新 `summary.md` 标注定稿时间
4. **交付物清单**:
- 最终文档:`outputs/{doc_type}_final.md`
- 原型文件(如有):`prototypes/*`
- 决策日志:`decision_log.md`
- 证据索引:`materials_index.md`
### 特殊处理
#### 会话版本升级
若检测到 `session.yaml` 格式过旧(缺少 `prototype` 块),提示:
```
⚠️ 检测到旧版会话格式(v1.x),是否升级到 v2.0?
- [Y] 自动增加 prototype 配置块并创建 prototypes/ 目录
- [N] 保持原样继续(不支持原型功能)
```
#### 损坏会话恢复
若必备文件损坏或缺失:
1. 尝试从备份恢复(检查 `.backup/` 目录)
2. 若无备份,询问用户:
- [A] 基于现有文件重建 session.yaml
- [B] 放弃恢复,创建新会话
## 2) 初始化工作区(确认后执行)
目录结构:
```
{workdir}/
desc.md
session.yaml
summary.md
decision_log.md
materials/
materials_index.md
rounds/
questions/
outputs/
```
必备文件:
- `desc.md`:原始需求 + WWH(What/Why/How)
- `session.yaml`:文档类型、当前轮次、状态、未决问题
- `summary.md`:每轮摘要(<=20 行)
- `decision_log.md`:关键决策与变更
- `materials_index.md`:资料索引与引用 ID
## 2.5) 资产深挖检查(强制)
- CodeMap: `assets/codemap/`
- DomainMap: `assets/domainmap/`
- RuntimeScan: `assets/runtime-scan/`
处理规则:
- 若存在:**本轮 Do 必须至少读取并引用以下层级中的每一类至少 1 个文件**:
- 前端结构:`codemap/frontend/**/routes.yaml` / `views.yaml` / `dialog_branches.yaml`
- 后端字段:`codemap/serve/dataobjects/java/*.yaml`
- 后端调用链:`codemap/serve/callchains/java/domains/*.yaml`
- 领域证据:`domainmap/*.yaml`(优先 `branch_evidence.yaml`)
- 若缺失:提示影响并询问是否补全;用户拒绝则记录 `[ASSUMPTION]` 并继续。
## 2.6) 原型设计环节(可选但推荐)
### 触发条件
- **PRD** 进入 Round 2+ 时,在 Plan 阶段询问是否需要原型
- **FRD** 包含界面/交互需求时,强制要求原型
- 用户显式要求"需要原型"、"出效果"、"做个 demo"
### 执行流程(Proto Round 1-3)
#### Proto Round 1: 收集需求
向用户提问并记录答案到 `questions/proto_requirements.yaml`:
- **PROTO-1-1 (P0)**: 原型范围?(整体流程 PoC / 核心页面 / 局部组件 / 特定效果)
- **PROTO-1-2 (P0)**: 参考来源?(URL / 截图 / 文字描述 / 从零设计)
- **PROTO-1-3 (P1)**: 保真度?(低保真 / 中保真 / 高保真)
- **PROTO-1-4 (P1)**: 技术实现?(Pencil / Web Artifact / 两者都要)
#### Proto Round 2: 实现原型
根据 Proto Round 1 的答案选择技术路径:
**路径 A: Pencil 设计稿**(适合静态视觉展示)
1. 使用 `mcp__pencil__get_style_guide_tags()` 获取设计风格标签
2. 使用 `mcp__pencil__get_style_guide(tags=[...])` 获取设计指南
3. 使用 `mcp__pencil__open_document("new")` 创建画布
4. 使用 `mcp__pencil__batch_design(operations=...)` 批量设计
5. 使用 `mcp__pencil__get_screenshot(nodeId=...)` 生成截图
6. 保存至 `prototypes/design.pen` 与 `prototypes/screenshots/`
**路径 B: Web Artifact 交互原型**(适合可点击演示)
1. 使用 `Skill(skill="document-skills:frontend-design", args="...")` 生成 React/HTML
2. 保存至 `prototypes/webapp/`
3. 可选:使用 `document-skills:webapp-testing` 验证交互
**路径 C: 基于 URL/截图范本**
1. **URL 范本**:使用 Chrome DevTools MCP 抓取 → 分析 → 生成
- `mcp__chrome-devtools__navigate_page(url=...)`
- `mcp__chrome-devtools__take_screenshot(filePath=...)`
- `mcp__chrome-devtools__take_snapshot(filePath=...)`
- 保存至 `materials/prototypes/reference/`
2. **截图范本**:Read 读取图片 → 提取元素 → 生成
- 用户上传到 `materials/prototypes/reference/`
- 使用 Read 工具读取(支持图片)
- 记录分析到 `prototypes/design_analysis.md`
3. 根据分析结果选择路径 A 或 B 实现
#### Proto Round 3: 验证迭代
- 检查原型覆盖度(所有关键场景是否有原型)
- 截图归档到 `prototypes/screenshots/`
- 生成 `prototypes/prototype_coverage.md` 对照表
- 收集用户反馈到 `questions/proto_feedback_N.yaml`
- 若需调整则返回 Proto Round 2,否则标记 `prototype.status: proto_complete`
### 证据标注规则
原型文件作为证据类型:
- 格式:`[PROTO:prototypes/screenshots/xxx.png]` 或 `[PROTO:prototypes/webapp/index.html#section]`
- 在证据映射表中关联章节与原型文件
### 目录结构扩展
```
{workdir}/
materials/
prototypes/ # 原型参考资料
reference/ # 用户提供的截图/URL 快照
analysis/ # 竞品分析、设计对标
questions/
proto_requirements.yaml # 原型需求问答
proto_feedback_N.yaml # 原型反馈轮次
prototypes/ # 原型产出目录
design.pen # Pencil 设计文件
screenshots/ # 原型截图
webapp/ # Web 原型代码
design_analysis.md # 设计决策记录
prototype_coverage.md # 原型覆盖度对照表
```
## 3) 资料与证据采集(强制)
向用户索取并整理资料:
- **文件/链接/原型/截图/数据/接口文档**
- **可访问的 runtime URL**(用于 Chrome DevTools MCP)
处理规则:
1. **读取并摘要**:对每个资料做 5-10 行摘要。
2. **存档**:保存到 `materials/`,更新 `materials_index.md`。
3. **引用 ID**:为每份资料分配 `SRC-001` 形式的 ID。
4. **使用时引用**:在文档内容中标注 `[SRC-001]`。
5. **公开模板/行业规范**若被引用,也需登记为来源。
本地资产引用规则:
- CodeMap:`[CODEMAP:assets/codemap/...]`
- DomainMap:`[DOMAINMAP:assets/domainmap/...]`
- Runtime:`[RUNTIME:{artifact}]`
- 无证据:`[ASSUMPTION]`
## 3.5) 证据→章节映射(强制)
- 在 PRD/FRD/DAR 中维护“证据映射表”,把**章节 → 关键结论 → 证据**对应起来。
- 若章节无法绑定证据,必须显式标记 `[ASSUMPTION]`,并在 Check 阶段列入“证据缺口清单”。
## 4) PDCA 回合流程(每轮)
每轮输出到 `rounds/round_N.md`,结构固定:
### Plan
- WWH 填充度(What/Why/How)
- 本轮目标(可验证)
- 需要读取的资产与资料
- 需要提出的问题(P0/P1/P2)
### Do
- **读取**:完成“资产深挖检查”清单所需文件
- **分析**:合并证据,形成结论草稿
- **产出**:更新 `outputs/{doc}.md` 的相关章节 + 证据映射表 + 差异点清单
- **提问**:生成 `questions/round_N.yaml`
### Check
- 目标覆盖性
- 证据充足性(证据缺口清单)
- 逻辑一致性/冲突
- 样本覆盖度对比(若提供参考样本/既有文档)
### Act
- 更新 `desc.md`、`summary.md`、`decision_log.md`
- 更新 `session.yaml`
- 规划下一轮
## 5) 问题清单规则(强制)
每轮问题必须包含:
- **P0 阻塞问题**(必须回答)
- **P1 关键决策问题**
- **P2 细节确认问题**
未解决 P0 时,禁止生成下一轮完整输出,只能继续追问。
问题格式模板(questions/round_N.yaml):
```yaml
round: 1
questions:
- id: Q1-1
priority: P0
question: "..."
options: ["...", "...", "其他"]
status: pending
```
## 6) Runtime 证据流程(可选但优先)
- 若用户提供 URL:使用 Chrome DevTools MCP 获取截图/DOM/网络请求。
- 若用户跳过:继续,但相关结论标记 `[ASSUMPTION]`。
## 7) 输出与收敛
- 目标文档在 `outputs/` 中持续更新:`prd.md` / `frd.md` / `dar.md`。
- 收敛条件:
- P0/P1 全部关闭
- 证据映射表完成且无关键缺口
- 用户确认内容可定稿
## 8) 引用与对账
文档中所有非显然事实、数据、规则、策略必须带引用。
在文档末尾追加“来源与索引”,指向 `materials_index.md` 与本地资产。
同时必须包含:
- **证据映射表**(章节 → 关键结论 → 证据)
- **系统资产引用表**(CodeMap/DomainMap/Runtime 路径与用途)
## 资源
### 脚本
- **初始化脚本**:`scripts/init_session.py`
- 作用:创建新会话工作目录与基础文件
- 用法:`python3 skills/pmassist/scripts/init_session.py --path <workdir> --doc prd|frd|dar --alias <简称> --title <标题> --desc <原始需求> [--enable-prototype]`
- 原型支持:添加 `--enable-prototype` 参数自动创建原型目录结构
### 文档模板
- **PRD 模板**:`references/prd.md`
- **FRD 模板**:`references/frd.md`
- **DAR 模板**:`references/dar.md`
### 原型相关模板
- **原型需求模板**:`references/proto_requirements_template.yaml`(Proto Round 1 问题清单)
- **原型覆盖度模板**:`references/prototype_coverage_template.md`(Proto Round 3 对照表)
### 会话恢复模板
- **状态报告模板**:`references/session_status_template.md`(用于生成会话状态报告)