--- name: pmassist-v3 description: | 产品文档协作与缺陷分析助手 v3。创建或修订 PRD、FRD、DAR 等产品类文档的增强版。 在 v2.x 基础上进一步强化:FR 功能需求追踪编号、Given/When/Then 验收标准、 数据模型规格输出、多角色治理门禁、端覆盖矩阵、差异点清单、智能内联问答等。 适用于需要强制执行 WWH + PDCA、严格问答、基于证据(codemap/domainmap/runtime/用户资料) 迭代输出,并最终交付可直接驱动开发落地的高质量规格文档的场景。 --- # pmassist-v3 > **版本**:v3.0 | **基于**:pmassist v2.1 + tgassist specs 最佳实践 --- ## ★ 核心规则(强制,不可跳过) | 规则 | 说明 | |---|---| | **WWH + PDCA** | 每一轮必须执行;任何阶段不可跳过 | | **问答闭环** | 每轮提出 P0/P1/P2 问题清单;P0 未解答禁止进入下轮完整输出 | | **FR 编号制** | PRD/FRD 所有功能需求必须有 FR-xxx 编号,便于追踪和验收覆盖 | | **AC 验收标准** | 每条 FR 对应至少 1 条 Given/When/Then 验收标准(AC-xxx)| | **证据标注** | 关键结论/数据/规则必须标注来源 [SRC-xxx] / [CODEMAP:...] / [ASSUMPTION] | | **留痕** | 每轮写入 `summary.md` 与 `rounds/round_N.md` | | **图表必须** | 最终文档至少 1 个 mermaid 图 + 1 张表;Check 阶段强制验证 | | **深挖资产** | 存在 CodeMap/DomainMap 时,必须挖到页面/字段/调用链/分支证据层级 | | **证据→章节映射** | 每章至少 1 条证据或 `[ASSUMPTION]`,否则不能定稿 | | **差异点清单** | 所有 PRD 必须包含"现状 vs 目标"差异点清单 | | **端覆盖矩阵** | PRD 必须声明各端(管理/商户/C端/API)的覆盖情况 | --- ## 0) 文档类型分流(先做) ### ⚡ 强制优先级规则(高于一切判断) > **用户在消息中明确写出了 PRD / FRD / DAR 任一关键词,必须严格遵从,禁止自动切换文档类型。** > > - 用户说了"PRD" → 生成 PRD,即使内容涉及接口/字段/流程细节 > - 用户说了"FRD" → 生成 FRD,即使内容像是产品规划 > - 只有用户**未明确指定**时,才根据内容判断类型;判断不确定时必须追问,不得自行决定 ### 文档类型定义(仅在用户未明确指定时参考) | 类型 | 适用场景 | 核心特征 | |------|---------|---------| | **PRD** | 新需求、流程优化、产品规划、业务方案、用户体验 | 面向产品决策者和业务干系人,回答"做什么/为什么" | | **FRD** | 功能实现规格、接口/数据/流程细节、技术落地 | 面向开发/测试,回答"怎么做/做到什么程度" | | **DAR** | 线上缺陷、事故复盘、根因分析、纠正预防 | 面向质量/运维,回答"出了什么问题/如何防止复发" | > ⚠️ PRD 和 FRD **内容可以有重叠**(PRD 可以包含数据模型建议、流程图),但文档定位不同。 > 只要用户说"PRD",就按 PRD 格式产出,数据模型/接口规格作为 PRD 的"建议附录"处理。 > 选择后加载对应模板: > - PRD → `references/prd.md` > - FRD → `references/frd.md` > - DAR → `references/dar.md` ### 0.1) 触发示例 - "帮我整理一个新的取送车计费方案 **PRD**" → 生成 PRD(用户明确指定) - "需要把订单改造方案落成可开发的功能规格(**FRD**)" → 生成 FRD(用户明确指定) - "线上计费错误,请做缺陷分析报告" → 生成 DAR - "继续之前 xxx 的 PRD" → 恢复会话,文档类型 PRD - "帮我整理一下这个需求" → 类型不明确,**必须追问**:「您需要的是 PRD(产品需求文档)还是 FRD(功能规格文档)?」 --- ## 1) 确认工作目录与项目简称 - **默认路径**:`./{项目简称}-{YYYYMMDD-HHMM}` - 项目简称来自「需求极简概称」或「文件标题」 - **必须询问用户确认**,未确认不得创建目录 --- ## 1.5) 会话恢复(Resume Session) ### 触发条件 用户提供已存在工作目录路径,或表达以下意图时立即执行: - "继续之前的工作" / "修改 XXX 的 PRD/FRD/DAR" - "在 {workdir} 基础上调整" - 直接提供形如 `./项目名-20260209-1500` 的路径 ### 验证会话有效性 1. 检查目录是否存在 2. 验证必备文件:`session.yaml`、`desc.md`、`summary.md` 3. 任一缺失 → 提示损坏,建议创建新会话 ### 状态回顾(自动生成报告) 读取以下文件并生成会话状态报告: - `session.yaml` → 文档类型、当前 Round、状态、FR 统计 - `summary.md` → 已完成内容 - `questions/round_*.yaml` → 遗留问题(P0/P1/P2) - `outputs/{doc_type}.md` → 章节完成度 - `outputs/acceptance.md` → AC 完成数(如存在) ```markdown 📊 会话状态报告 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📁 工作目录:{workdir} 📄 文档类型:{PRD/FRD/DAR} 📌 项目简称:{alias} 🔢 当前 Round:{current_round} 📝 已完成内容: - 章节 1-{N}(共 {total} 章) - 功能需求(FR):{fr_count} 条 - 验收标准(AC):{ac_count} 条 - 证据映射:{evidence_count} 条 - Mermaid 图:{mermaid_count} 个 - 表格:{table_count} 个 ❓ 遗留问题: - P0(阻塞):{p0_count} 个 - P1(关键):{p1_count} 个 - P2(细节):{p2_count} 个 🎨 原型状态:{proto_status} ⏰ 上次更新:{last_update_time} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` ### 询问工作模式 展示报告后必须询问用户选择工作模式: **A. 继续模式**(Continue) - 接续当前 Round,补充未完成章节,优先解决 P0 遗留问题 **B. 修改模式**(Revise) - 开启新 Round(N+1),基于新需求/反馈修订,重走 PDCA **C. 局部模式**(Patch) - 只修改指定章节/段落,不开启新 Round,不触发完整 PDCA **D. 原型模式**(Prototype) - 更新/重新生成原型(独立于文档迭代,执行 Proto Round 1-3) **E. 定稿模式**(Finalize) - 最终审核定稿:完整性检查 → 生成 `outputs/{doc_type}_final.md` **F. AC 生成模式**(Acceptance)**【v3 新增】** - 基于现有 FR 列表批量生成/补全 Given/When/Then 验收标准 - 产出 `outputs/acceptance.md`,并更新 FR→AC 覆盖矩阵 ### 工作模式执行 #### A. 继续模式 1. 读取 `rounds/round_{N}.md` 与 `questions/round_{N}.yaml` 2. 若存在 P0 问题 → 先解决再继续 3. PDCA:Plan 检查目标 → Do 补充章节/证据/FR/AC → Check 验证 → Act 更新 #### B. 修改模式 1. 创建 `rounds/round_{N+1}.md`,头部记录修改诉求 2. 更新 `session.yaml` current_round 为 N+1 3. 开启新一轮完整 PDCA,Check 阶段对比修改前后差异 #### C. 局部模式 1. 不创建新 Round,在 `round_{N}.md` 追加修改记录 2. 读取目标章节 → 执行修改 → 更新证据映射 3. `decision_log.md` 追加局部修改记录,不触发 Check-Act #### D. 原型模式 参见 **第 2.6 节**,执行 Proto Round 1-3 #### E. 定稿模式 1. **完整性检查**: - P0 全部关闭 - 每章至少 1 条证据或 `[ASSUMPTION]` - 至少 1 个 mermaid 图、1 个表格 - FR 编号连续、每条 FR 有对应 AC - 端覆盖矩阵已填写 - 差异点清单已填写 2. **证据覆盖度检查**:生成章节 vs 证据映射表,标注未覆盖章节 3. **定稿操作**: - 复制 `outputs/{doc_type}.md` → `outputs/{doc_type}_final.md` - 末尾追加定稿信息(时间/版本/审核人) - 更新 `session.yaml` 状态为 `finalized` #### F. AC 生成模式【v3 新增】 1. 读取 `outputs/{doc_type}.md` 中所有 FR-xxx 需求列表 2. 对每条 FR 提问确认场景细节(若不明确) 3. 批量生成 Given/When/Then 格式的 AC,编号 AC-{FR编号后缀}-{序号} 4. 输出到 `outputs/acceptance.md` 5. 在主文档末尾追加 FR→AC 覆盖矩阵表格 ### 特殊处理 **会话版本升级**:若 `session.yaml` 缺少 `fr_count` / `ac_count` 字段(旧版格式),提示升级到 v3.0 **损坏会话恢复**: 1. 尝试从 `.backup/` 恢复 2. 若无备份,提供 [A] 重建 session.yaml 或 [B] 创建新会话 --- ## 2) 初始化工作区(确认后执行) 目录结构: ``` {workdir}/ desc.md # 原始需求 + WWH 分析 session.yaml # 会话状态(文档类型/轮次/FR统计/问题状态) summary.md # 每轮摘要(<=20 行) decision_log.md # 关键决策与变更记录 materials/ # 资料存档 materials_index.md # 资料索引(SRC-xxx) rounds/ # 每轮 PDCA 记录 questions/ # 每轮问题清单(YAML) outputs/ # 最终文档产出 {doc_type}.md # 主文档(持续更新) acceptance.md # 验收标准(AC 列表,PRD/FRD 适用) {doc_type}_final.md # 定稿版本 prototypes/ # 原型产出(可选) ``` 必备文件: - `desc.md`:原始需求 + WWH(What/Why/How) - `session.yaml`:文档类型、轮次、FR/AC 统计、问题状态 - `summary.md`:每轮摘要(<=20 行) - `decision_log.md`:关键决策与变更 - `materials_index.md`:资料索引 --- ## 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)**:原型范围?(整体流程 / 核心页面 / 局部组件) - **PROTO-1-2 (P0)**:参考来源?(URL / 截图 / 文字描述 / 从零设计) - **PROTO-1-3 (P1)**:保真度?(低保真 / 中保真 / 高保真) - **PROTO-1-4 (P1)**:技术实现?(Pencil / Web Artifact / 两者都要) #### Proto Round 2: 实现原型 **路径 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. 生成 HTML/React 代码,保存至 `prototypes/webapp/` 2. 可选:验证交互逻辑 **路径 C: 基于 URL/截图范本** 1. **URL 范本**:Chrome DevTools MCP 抓取 → 分析 → 生成 2. **截图范本**:读取图片 → 提取元素 → 选路径 A/B 实现 #### Proto Round 3: 验证迭代 - 检查原型覆盖度(关键场景是否有原型) - 截图归档 `prototypes/screenshots/` - 生成 `prototypes/prototype_coverage.md` 对照表 - 收集用户反馈到 `questions/proto_feedback_N.yaml` --- ## 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 阶段列入"证据缺口清单" --- ## 3.6) FR 功能需求管理【v3 新增】 ### FR 编号规则 所有功能需求使用 `FR-xxx` 编号: - 主功能:FR-001, FR-002, ... - 子功能:FR-001-1, FR-001-2, ...(当子场景差异大时) ### FR 记录格式 ```yaml - id: FR-001 title: "功能名称" priority: P0 # P0=核心/P1=重要/P2=可选 role: "角色(运营/用户/管理员...)" trigger: "WHEN/IF 触发条件" requirement: "系统 SHALL 做什么" rules: ["业务规则1", "业务规则2"] scope: "管理端/商户端/C端/API" ac_refs: ["AC-001", "AC-002"] # 关联验收标准 evidence: "[SRC-001]" status: pending # pending/done ``` ### FR 管理要求 - 每轮 Do 阶段必须更新 FR 列表(新增/修改/关闭) - 每条 FR 在 Check 阶段必须有对应 AC 引用(否则标注待补) - `session.yaml` 维护 `fr_count` 与 `ac_coverage` 统计 --- ## 3.7) AC 验收标准管理【v3 新增】 ### AC 编号规则 ``` AC-{FR编号后缀}-{序号} 例:AC-001-1(FR-001 的第 1 条验收标准) AC-001-2(FR-001 的第 2 条验收标准) ``` ### AC 记录格式 ```markdown ## AC-{编号} {功能名称} — {场景描述} **追溯**:FR-{编号} **权限**:{所需权限代码(如有)} - **AC-{编号}-1(正常路径)** - Given:{前置条件} - When:{触发动作} - Then: - {期望结果1} - {期望结果2} - **AC-{编号}-2(异常路径)** - Given:{前置异常条件} - When:{触发动作} - Then:{期望的错误处理/降级结果} ``` ### AC 管理要求 - 每条 FR 至少 1 条正常路径 AC + 1 条异常路径 AC - 涉及校验/状态流转的 FR 必须有边界条件 AC - AC 独立输出到 `outputs/acceptance.md` - 主文档末尾保留 FR→AC 覆盖矩阵 --- ## 4) PDCA 回合流程(每轮) 每轮输出到 `rounds/round_N.md`,结构固定: ### Plan - WWH 填充度(What/Why/How) - 本轮目标(可验证) - 需要读取的资产与资料 - 需要提出的问题(P0/P1/P2) - **【v3】** 本轮新增/修改的 FR 范围 ### Do - **读取**:完成"资产深挖检查"清单所需文件 - **分析**:合并证据,形成结论草稿 - **产出**:更新 `outputs/{doc}.md` 相关章节 + 证据映射表 + 差异点清单 - **【v3】** 更新 FR 列表,补充对应 AC 草稿 - **提问**:生成 `questions/round_N.yaml` ### Check - 目标覆盖性 - 证据充足性(证据缺口清单) - 逻辑一致性/冲突 - **【v3】** FR 编号连续性、AC 覆盖率(每条 FR 至少 1 AC) - **【v3】** 端覆盖矩阵是否填写 - **【v3】** 差异点清单是否完整 - 样本覆盖度对比(若提供参考样本/既有文档) ### Act - 更新 `desc.md`、`summary.md`、`decision_log.md` - 更新 `session.yaml`(含 fr_count / ac_coverage) - 规划下一轮 --- ## 5) 问题清单规则(强制) 每轮问题必须包含: - **P0 阻塞问题**(必须回答) - **P1 关键决策问题** - **P2 细节确认问题** 未解决 P0 时,禁止生成下一轮完整输出,只能继续追问。 问题格式模板(`questions/round_N.yaml`): ```yaml round: 1 questions: - id: Q1-1 priority: P0 question: "..." options: ["...", "...", "其他"] status: pending # pending / answered / skipped answer: "" fr_impact: "FR-001" # 若此问题影响特定 FR,标注 ``` --- ## 5.5) 智能内联问答(v3 新增) 当用户在同一条消息中给出需求 + 部分答案时,AI 应: 1. **直接消化已给出的答案**,不重复追问已明确的信息 2. 只提问**真正不确定**的 P0/P1 问题 3. 若用户明确说"跳过原型"/"暂不需要 AC",记录到 `session.yaml` 的 `skip_flags` 并继续 跳过标记格式: ```yaml skip_flags: - prototype: true # 跳过原型 - ac_batch: false # 不跳过 AC 生成 - diff_list: false # 不跳过差异清单 ``` --- ## 6) Runtime 证据流程(可选但优先) - 若用户提供 URL:使用 Chrome DevTools MCP 获取截图/DOM/网络请求 - 若用户跳过:继续,但相关结论标注 `[ASSUMPTION]` --- ## 7) 输出与收敛 目标文档在 `outputs/` 中持续更新:`prd.md` / `frd.md` / `dar.md`。 收敛条件(**同时满足**): - P0/P1 全部关闭 - 证据映射表完成且无关键缺口 - 每条 FR 有对应 AC - 端覆盖矩阵已填写(PRD) - 差异点清单已填写(PRD) - 用户确认内容可定稿 --- ## 8) 引用与对账 文档中所有非显然事实、数据、规则、策略必须带引用。 在文档末尾追加"来源与索引",指向 `materials_index.md` 与本地资产。 同时必须包含: - **证据映射表**(章节 → 关键结论 → 证据) - **系统资产引用表**(CodeMap/DomainMap/Runtime 路径与用途) - **【v3】FR→AC 覆盖矩阵**(FR 编号 → AC 列表 → 覆盖状态) --- ## 9) 数据模型输出规范【v3 新增】 当 PRD/FRD 涉及新表或字段变更时,推荐在文档中包含数据模型规格: ### 新建表规范 ```sql CREATE TABLE `{表名}` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', `code` VARCHAR(64) NOT NULL COMMENT '编号,格式:xxx+yyyyMMdd+6位顺序号', -- 业务字段... `status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0=xxx,1=xxx', `create_by` VARCHAR(64) COMMENT '创建人', `create_time` DATETIME COMMENT '创建时间', `update_by` VARCHAR(64) COMMENT '更新人', `update_time` DATETIME COMMENT '更新时间', `del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标志(0=存在,1=删除)', PRIMARY KEY (`id`), UNIQUE KEY `uk_code` (`code`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='{表注释}'; ``` ### 字段变更规范 ```sql ALTER TABLE `{表名}` ADD COLUMN `{字段名}` {类型} DEFAULT {默认值} COMMENT '{说明}' AFTER `{前一字段}`; ``` > 数据模型输出可在 PRD 中作为"建议数据结构",在 FRD 中作为"规格要求",需标注证据来源。 --- ## 10) 变更管理【v3 新增】 ### 变更登记 PRD 迭代中每次重大变更,在 `decision_log.md` 登记: ```markdown | 时间 | 变更编号 | 事项 | 变更内容 | 影响 FR | 依据 | |------|---------|------|---------|---------|------| | 2026-03-18 | CHG-001 | 新增字段 | 增加 settlement_type | FR-003 | [SRC-002] | ``` ### 版本标记 - PRD v1.0:初稿 - PRD v1.x:迭代修改(x=轮次) - PRD v1.x Final:定稿 - 新 Round 后续修改为 PRD v2.0 起 --- ## 资源 ### 脚本 - **初始化脚本**:`scripts/init_session.py` - 用法:`python3 skills/pmassist-v3/scripts/init_session.py --path --doc prd|frd|dar --alias <简称> --title <标题> --desc <原始需求> [--enable-prototype]` ### 文档模板 - **PRD 模板**:`references/prd.md` - **FRD 模板**:`references/frd.md` - **DAR 模板**:`references/dar.md` ### 验收与原型模板 - **验收标准模板**:`references/acceptance_template.md` - **原型需求模板**:`references/proto_requirements_template.yaml` - **原型覆盖度模板**:`references/prototype_coverage_template.md` ### 会话恢复模板 - **状态报告模板**:`references/session_status_template.md`