feat: 根目录文档、脚本、gitignore

This commit is contained in:
2026-10-08 16:15:33 +08:00
commit e98660ce4e
284 changed files with 26838 additions and 0 deletions
+148
View File
@@ -0,0 +1,148 @@
# pmassist-v3 Changelog
## [v3.0.0] - 2026-03-30
### 基于 pmassist v2.1 全面升级
#### 核心新增特性
---
##### 1. FR 功能需求追踪体系(第 3.6 节)
**背景**:v2.x 的"需求内容"章节缺乏结构化编号,导致追踪困难。
**改进**:
- 所有功能需求使用 `FR-xxx` 编号(主功能 FR-001 / 子场景 FR-001-1)
- FR 记录包含:优先级、角色、触发条件(WHEN/IF)、需求(SHALL)、业务规则、AC 引用
- `session.yaml` 新增 `fr_count` / `ac_count` / `ac_coverage` 统计字段
---
##### 2. AC 验收标准管理(第 3.7 节)
**背景**:v2.x 缺乏结构化验收标准,PRD 无法直接驱动测试。
**改进**:
- AC 编号规则:`AC-{FR编号后缀}-{序号}`(如 AC-001-1)
- 格式固定为 Given / When / Then
- 每条 FR 至少要求:1条正常路径 + 1条异常路径
- 独立输出到 `outputs/acceptance.md`
- 主文档末尾维护 FR→AC 覆盖矩阵
---
##### 3. AC 生成模式(会话恢复 F 模式)
**背景**:批量生成/补全验收标准的需求
**改进**:
- 新增 F. AC 生成模式(Acceptance)
- 基于现有 FR 列表批量生成 Given/When/Then 验收标准
- 支持一键补全 AC 覆盖缺口
---
##### 4. 端/渠道覆盖矩阵强化(PRD 第 6.1 节)
**背景**:多端产品需要明确各端覆盖情况
**改进**:
- 端覆盖矩阵新增"涉及 FR"列,双向追踪
- Check 阶段强制验证矩阵是否填写
---
##### 5. 差异点清单增强(PRD 第 8 章)
**背景**:v2.x 差异清单维度不够
**改进**:
- 新增"数据结构差异"和"权限差异"维度
- 新增"涉及 FR"列,与需求直接关联
---
##### 6. 数据模型输出规范(第 9 节)
**背景**:实际 PRD 产出中 DDL 规范不统一
**改进**:
- 标准化 CREATE TABLE 模板(含 del_flag/create_by/update_by 等标准字段)
- 标准化 ALTER TABLE 字段新增格式
- PRD 中作为"建议数据结构",FRD 中作为"规格要求"
---
##### 7. 变更管理规范(第 10 节)
**背景**:PRD 迭代时变更追踪不够系统
**改进**:
- `decision_log.md` 表格新增"变更编号"(CHG-xxx)和"影响 FR"列
- 明确版本命名规范:v1.0 → v1.x → v1.x Final → v2.0
---
##### 8. 智能内联问答(第 5.5 节)
**背景**:用户同一条消息中给出需求+部分答案时,AI 重复追问体验差
**改进**:
- 直接消化已给出的答案,只追问真正不确定的 P0/P1 问题
- `session.yaml` 新增 `skip_flags` 字段记录用户主动跳过的模块
---
##### 9. PDCA Check 阶段增强(第 4 节)
**背景**:v2.x Check 缺乏对新增结构的验证
**新增检查项**:
- FR 编号连续性
- AC 覆盖率(每条 FR 至少 1 AC)
- 端覆盖矩阵是否填写
- 差异点清单是否完整
---
#### 模板文件更新
| 文件 | 变更说明 |
|---|---|
| `references/prd.md` | 新增 FR 列表、FR→AC 矩阵、端覆盖矩阵、差异点新维度、数据模型章节、变更记录表 |
| `references/frd.md` | 新增 FR 编号格式、DDL 规范、FR→AC 矩阵、差异点清单、变更记录表 |
| `references/dar.md` | 新增 5-Whys 表格、代码根因定位表、可复用检查项清单 |
| `references/acceptance_template.md` | 新增(v3):Given/When/Then 验收标准模板 |
| `references/session_template.yaml` | 新增(v3):fr_count / ac_count / ac_coverage / skip_flags 字段 |
| `scripts/init_session.py` | 新增 `--enable-acceptance` 参数,自动创建 acceptance.md |
---
#### 向后兼容
- ✅ v2.x 会话可继续使用(缺少 FR/AC 统计字段时提示升级)
- ✅ 未使用 `--enable-prototype` 时,行为与 v2.x 完全一致
- ✅ 所有新增功能均为可选增强,不破坏现有工作流
---
#### 升级指南(v2.x → v3.0)
1. 在 `session.yaml` 中添加:
```yaml
fr_count: 0
ac_count: 0
ac_coverage: "0/0"
skip_flags:
prototype: false
ac_batch: false
diff_list: false
```
2. 创建 `outputs/acceptance.md`(如需要)
3. 在主文档中为现有功能需求补充 FR-xxx 编号和 AC 引用
---
## [v2.1.0] - 2026-02-09
> 详见 pmassist 原版 CHANGELOG:新增会话恢复(Session Resumption)、5 种工作模式(A-E)
## [v2.0.0] - 2026-02-09
> 详见 pmassist 原版 CHANGELOG:新增原型设计环节(Proto Round 1-3)
## [v1.0.0] - 2026-02-08
> 详见 pmassist 原版 CHANGELOG:初始版本,WWH + PDCA 工作流程
+575
View File
@@ -0,0 +1,575 @@
---
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 <workdir> --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`
@@ -0,0 +1,84 @@
# 验收标准模板(pmassist-v3)
> **使用说明**:
> - 文件路径:`outputs/acceptance.md`
> - AC 编号格式:`AC-{FR编号后缀}-{序号}`,例如:AC-001-1(FR-001 的第1条AC)
> - 每条 FR 至少包含:1条正常路径 + 1条异常路径
> - 权限代码格式参考系统约定(如:`serviceCardOrder:create`)
---
## AC 覆盖概要
| FR 编号 | FR 标题 | AC 条数 | 覆盖状态 |
|---|---|---|---|
| FR-001 | | 2 | ✅ |
| FR-002 | | 0 | ⚠️ 待补充 |
---
## AC-001 {功能名称} — {场景描述}
**追溯**:FR-001
**权限**:`{权限代码}`(如有)
### AC-001-1(正常路径)
- **Given**:{用户角色/前置条件/数据状态}
- **When**:{触发动作,如:点击「提交」}
- **Then**:
- {期望结果1,描述系统行为}
- {期望结果2,描述数据变化}
- {期望结果3,描述页面反馈}
### AC-001-2(异常路径 - 参数校验)
- **Given**:{异常前置条件,如:必填项未填写}
- **When**:{触发动作}
- **Then**:
- 系统应返回错误提示:"{错误提示文案}"
- 操作不应被执行
- 数据不应产生变更
### AC-001-3(边界条件 - 状态校验)
- **Given**:{边界条件,如:记录已处于终态}
- **When**:{触发动作}
- **Then**:
- {系统拒绝操作,并给出说明}
---
## AC-002 {功能名称} — {场景描述}
**追溯**:FR-002
**权限**:`{权限代码}`(如有)
### AC-002-1(正常路径)
- **Given**:
- **When**:
- **Then**:
-
### AC-002-2(异常路径)
- **Given**:
- **When**:
- **Then**:
-
---
<!-- 继续添加 AC-003, AC-004... -->
---
## 附:验收标准覆盖矩阵
| AC 编号 | 对应 FR | 路径类型 | 优先级 | 状态 |
|---|---|---|---|---|
| AC-001-1 | FR-001 | 正常路径 | P0 | 待验收 |
| AC-001-2 | FR-001 | 异常路径 | P0 | 待验收 |
| AC-001-3 | FR-001 | 边界条件 | P1 | 待验收 |
| AC-002-1 | FR-002 | 正常路径 | P1 | 待验收 |
@@ -0,0 +1,257 @@
# DAR 模板(缺陷分析报告)— pmassist-v3
> **使用说明**:按 8D/根因分析思路组织,所有结论需引用证据。
> 涉及代码问题时优先查阅 CodeMap/DomainMap,支持精准根因定位。
---
## 0. 文档信息
| 字段 | 内容 |
|---|---|
| 缺陷编号 | BUG-xxx |
| 版本 | v1.0 |
| 状态 | 分析中 / 已修复 / 已验证 |
| 作者 | |
| 创建日期 | |
| 最后更新 | |
---
## 1. 缺陷概述
### 1.1 问题描述
> 简要描述缺陷现象,用一句话概括。
### 1.2 影响范围
| 维度 | 说明 |
|---|---|
| 影响用户数 | |
| 影响业务功能 | |
| 影响系统/服务 | |
| 影响时间窗口 | |
### 1.3 严重级别与优先级
| 项目 | 值 |
|---|---|
| 严重级别 | P0(紧急)/ P1(严重)/ P2(一般)/ P3(轻微)|
| 处理优先级 | 立即修复 / 本迭代修复 / 下迭代修复 |
---
## 2. 复现信息
### 2.1 复现步骤
1. 步骤一
2. 步骤二
3. 步骤三
### 2.2 期望结果 vs 实际结果
| | 描述 |
|---|---|
| **期望结果** | |
| **实际结果** | |
### 2.3 环境信息
| 项目 | 值 |
|---|---|
| 系统版本 | |
| 分支/Tag | |
| 设备/网络 | |
| 账号/角色 | |
### 2.4 相关证据
| 类型 | 路径/描述 |
|---|---|
| 日志 | [SRC-001] |
| 截图 | [SRC-002] |
| 接口请求 | [SRC-003] |
| 监控数据 | |
---
## 3. 时间线
| 时间 | 事件 | 操作人 |
|---|---|---|
| | 首次发现 | |
| | 问题升级 | |
| | 临时止损 | |
| | 根因确认 | |
| | 修复上线 | |
| | 验证通过 | |
---
## 4. 临时遏制措施(Containment)
### 4.1 当前止损方案
### 4.2 影响控制范围
---
## 5. 根因分析
### 5.1 直接原因
### 5.2 根本原因(5 Whys)
| 层次 | Why | 分析 | 证据 |
|---|---|---|---|
| 第1层 | 为什么出现缺陷? | | [SRC-001] |
| 第2层 | 为什么第1层原因存在? | | |
| 第3层 | 为什么第2层原因存在? | | |
| 第4层 | 为什么第3层原因存在? | | |
| 第5层 | 根本原因 | | |
### 5.3 根因类型分类
- [ ] 代码逻辑错误
- [ ] 边界条件未处理
- [ ] 需求理解偏差
- [ ] 测试覆盖不足
- [ ] 配置/环境问题
- [ ] 第三方依赖问题
- [ ] 数据质量问题
- [ ] 其他:______
### 5.4 触发条件与边界
```mermaid
graph TD
A[触发条件] --> B{边界判断}
B -->|条件A| C[正常路径]
B -->|条件B| D[Bug触发路径]
D --> E[问题结果]
```
### 5.5 代码根因定位
> 引用 CodeMap/DomainMap 精准定位。
| 文件/类 | 方法 | 行号(约) | 问题说明 | 证据 |
|---|---|---|---|---|
| | | | | [CODEMAP:...] |
---
## 6. 纠正措施(Corrective Action)
### 6.1 修复方案
| 方案 | 描述 | 影响范围 | 风险 | 结论 |
|---|---|---|---|---|
| 方案 A(选定)| | | | ✅ 采用 |
| 方案 B | | | | ❌ 放弃 |
### 6.2 修复影响评估
| 维度 | 影响说明 |
|---|---|
| 影响模块 | |
| 数据迁移 | 需要 / 不需要 |
| 接口变更 | 有 / 无 |
| 回归范围 | |
### 6.3 回归验证要点
| 验证项 | 说明 | 负责人 |
|---|---|---|
| | | |
---
## 7. 效果验证
### 7.1 验证方式与结果
| 验证项 | 方式 | 结果 | 时间 |
|---|---|---|---|
| | 自动化测试/手工测试 | ✅/❌ | |
### 7.2 监控/指标变化
| 指标 | 修复前 | 修复后 | 变化 |
|---|---|---|---|
| | | | |
---
## 8. 预防措施与改进
### 8.1 预防机制
| 类型 | 措施 | 负责人 | 完成时间 |
|---|---|---|---|
| 监控告警 | | | |
| 测试补充 | | | |
| 流程改进 | | | |
| 代码规范 | | | |
### 8.2 长期改进计划
| 改进项 | 优先级 | 计划时间 | 负责方 |
|---|---|---|---|
| | P1 | | |
---
## 9. 经验总结
### 9.1 经验教训
| 类别 | 教训 | 对应改进措施 |
|---|---|---|
| 研发 | | |
| 测试 | | |
| 运维 | | |
| 产品 | | |
### 9.2 可复用的规则/检查项
> 归纳为可在未来需求中复用的防范规则。
- [ ] {检查项1}
- [ ] {检查项2}
---
## 10. 证据与引用
- 引用 `materials_index.md` 中的 SRC-xxx
- CODEMAP/DOMAINMAP/RUNTIME 证据引用
---
## 11. 证据映射表(强制)
| 章节 | 关键结论 | 证据 | 状态 |
|---|---|---|---|
| 复现信息 | | | |
| 根因分析 | | | |
| 纠正措施 | | | |
| 效果验证 | | | |
---
## 12. 系统资产引用(强制)
| 资产类型 | 路径 | 用途 |
|---|---|---|
| CodeMap | | |
| DomainMap | | |
| Runtime | | |
---
## 图表要求(强制检查)
- [ ] 至少 1 个 mermaid 图(根因路径/修复流程/时间线任选)
- [ ] 至少 1 张表(影响范围/根因层次/预防措施等)
@@ -0,0 +1,298 @@
# FRD 模板(pmassist-v3)
> **使用说明**:聚焦"可实现的功能规格"。需求条目使用 FR-xxx 编号,采用 WHEN/IF ... SHALL ... 语句。
> 每条 FR 需对应 `outputs/acceptance.md` 中的 AC-xxx 验收标准。
---
## 0. 文档信息
| 字段 | 内容 |
|---|---|
| 版本 | v1.0 |
| 状态 | 草稿 / 评审中 / 定稿 |
| 作者 | |
| 创建日期 | |
| 最后更新 | |
| 适用范围 | |
### 变更记录
| 版本 | 日期 | 变更编号 | 变更说明 | 影响 FR |
|---|---|---|---|---|
| v1.0 | | CHG-000 | 初稿 | 全部 |
---
## 1. 引言
### 1.1 目的
### 1.2 范围
### 1.3 术语与缩写
| 术语 | 说明 |
|---|---|
| | |
### 1.4 参考资料
> 引用 `materials_index.md` 中的 SRC-xxx
---
## 2. 总体描述
### 2.1 产品视角(系统边界)
```mermaid
graph LR
subgraph 本系统
A[模块A] --> B[模块B]
end
C[上游系统] --> A
B --> D[下游系统]
```
### 2.2 功能概览
| 模块 | 功能 | 优先级 | 依赖 |
|---|---|---|---|
| | | P0/P1/P2 | |
### 2.3 用户特征
| 用户角色 | 权限级别 | 典型操作 |
|---|---|---|
| | | |
### 2.4 约束条件
### 2.5 假设与依赖
---
## 3. 功能需求(核心)
> **编号规则**:主功能 FR-001;子场景 FR-001-1。每条 FR 须有对应 AC。
### 3.1 功能需求列表
| FR 编号 | 标题 | 优先级 | 状态 | AC 引用 |
|---|---|---|---|---|
| FR-001 | | P0 | 待确认 | AC-001-1, AC-001-2 |
| FR-002 | | P1 | 待确认 | |
### 3.2 功能需求详细说明
---
#### FR-001:{功能名称}
- **优先级**:P0 / P1 / P2
- **角色/主体**:
- **触发条件**:WHEN/IF {条件}
- **需求**:系统 SHALL {做什么}
- **业务规则**:
1. {规则1}
2. {规则2}
- **边界条件/异常**:
- WHEN {异常条件} → 系统 SHALL {处理方式}
- **优先级**:P0
- **依据/来源**:[SRC-001] / [CODEMAP:...] / [ASSUMPTION]
- **验收标准**:AC-001-1, AC-001-2
---
#### FR-002:{功能名称}
(同上格式)
---
## 4. 外部接口需求
### 4.1 用户界面
| 页面/组件 | 输入字段 | 输出/展示 | 规则 | FR 引用 |
|---|---|---|---|---|
| | | | | |
### 4.2 软件接口
| 接口名称 | 请求方法 | 说明 | FR 引用 | 证据 |
|---|---|---|---|---|
| POST /api/xxx | POST | | FR-001 | |
#### 接口详细说明
**接口:POST /api/{path}**
- **描述**:
- **请求参数**:
```json
{
"field1": "string, 说明",
"field2": 0,
"field3": true
}
```
- **响应**:
```json
{
"code": 200,
"msg": "success",
"data": {}
}
```
- **错误码**:
| 错误码 | 说明 |
|---|---|
| 400 | 参数校验失败 |
| 403 | 无权限 |
### 4.3 通信接口/协议
---
## 5. 数据需求
### 5.1 数据实体/字段定义
| 字段名 | 类型 | 必填 | 默认值 | 说明 | FR 引用 |
|---|---|---|---|---|---|
| | | | | | |
### 5.2 数据库 DDL
```sql
-- 新建表
CREATE TABLE `{表名}` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`code` VARCHAR(64) NOT NULL COMMENT '编号,格式:前缀+yyyyMMdd+6位顺序号',
-- 业务字段...
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:0=xxx,1=xxx,2=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`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='{表注释}';
-- 字段变更
ALTER TABLE `{表名}`
ADD COLUMN `{字段}` {类型} DEFAULT {值} COMMENT '{说明}' AFTER `{前一字段}`;
```
### 5.3 数据校验规则
| 字段 | 校验规则 | 错误提示 | FR 引用 |
|---|---|---|---|
| | | | |
### 5.4 存储与迁移要求
---
## 6. 非功能需求
### 6.1 性能
| 指标 | 要求 | 说明 |
|---|---|---|
| 响应时间 | < 200ms (P95) | |
| 并发 | | |
| 吞吐 | | |
### 6.2 安全与权限
| 功能/接口 | 权限代码 | 角色 | 说明 |
|---|---|---|---|
| | | | |
### 6.3 可靠性/可用性
### 6.4 可维护性/可扩展性
---
## 7. 追踪与验收
### 7.1 需求追踪矩阵
| FR 编号 | 设计文档 | 实现位置 | 测试用例/AC | 状态 |
|---|---|---|---|---|
| FR-001 | | | AC-001-1~3 | |
### 7.2 验收用例清单
> 详细 AC 见 `outputs/acceptance.md`
---
## 8. 风险与开放问题
| 风险/问题 | 类型 | 等级 | 应对措施 | 状态 |
|---|---|---|---|---|
| | 风险/待决问题 | 高/中/低 | | 开放/已关闭 |
---
## 9. 差异点清单
| 维度 | 现状 | 目标 | 影响 FR | 证据 |
|---|---|---|---|---|
| | | | | |
---
## 10. 证据映射表(强制)
| 章节 | 关键结论 | 证据 | 状态 |
|---|---|---|---|
| 功能需求 | | | |
| 接口需求 | | | |
| 数据需求 | | | |
| 非功能需求 | | | |
---
## 11. FR → AC 覆盖矩阵(强制)
| FR 编号 | FR 标题 | AC 数量 | AC 列表 | 覆盖状态 |
|---|---|---|---|---|
| FR-001 | | | AC-001-1, AC-001-2 | ✅ 已覆盖 |
| FR-002 | | 0 | — | ⚠️ 待补充 |
---
## 12. 系统资产引用(强制)
| 资产类型 | 路径 | 用途 |
|---|---|---|
| CodeMap | | |
| DomainMap | | |
| Runtime | | |
---
## 13. 参考资料与索引
- 引用 `materials_index.md` 的来源 ID
- CODEMAP/DOMAINMAP/RUNTIME 引用:见第 12 章
---
## 图表要求(强制检查)
- [ ] 至少 1 个 mermaid 图(系统边界/流程/时序任选)
- [ ] 至少 1 张表(需求条目清单/接口列表/字段定义等)
- [ ] FR→AC 覆盖矩阵已填写(第 11 章)
@@ -0,0 +1,343 @@
# PRD 模板(pmassist-v3)
> **使用说明**:按需裁剪,保留证据标注。所有关键结论需引用 `materials_index.md` 中的来源 ID。
> FR 编号(FR-xxx)需与 `outputs/acceptance.md` 中的 AC 对应。
---
## 0. 文档信息
| 字段 | 内容 |
|---|---|
| 版本 | v1.0 |
| 状态 | 草稿 / 评审中 / 定稿 |
| 作者 | |
| 创建日期 | |
| 最后更新 | |
| 适用范围 | |
### 变更记录
| 版本 | 日期 | 变更编号 | 变更说明 | 影响章节 |
|---|---|---|---|---|
| v1.0 | | CHG-000 | 初稿 | 全部 |
---
## 1. 业务背景
### 1.1 现状与痛点
> 描述当前业务现状,用数据或事实证据支撑。
- 现状描述:[SRC-001]
- 核心痛点:
1. [ASSUMPTION]
2. [ASSUMPTION]
### 1.2 业务目标与问题陈述
> 本需求要解决的核心问题是什么?
### 1.3 相关历史决策
> 可链接 `decision_log.md` 中的历史决策。
---
## 2. 目标与成功指标
### 2.1 业务目标(可量化)
| 目标 | 指标 | 当前值 | 目标值 | 截止时间 |
|---|---|---|---|---|
| | | | | |
### 2.2 北极星指标
### 2.3 约束条件与边界
- 时间约束:
- 技术约束:
- 合规约束:
- 不在本期范围:
---
## 3. 用户与场景
### 3.1 目标用户/角色
| 角色 | 描述 | 典型诉求 |
|---|---|---|
| 运营 | | |
| 用户/客户 | | |
| 管理员 | | |
### 3.2 关键使用场景
| 场景编号 | 场景描述 | 涉及角色 | 优先级 |
|---|---|---|---|
| S-001 | | | P0 |
| S-002 | | | P1 |
### 3.3 价值链路与利益相关方
```mermaid
graph LR
A[角色1] --> B[操作] --> C[系统] --> D[结果]
```
---
## 4. 需求范围
### 4.1 范围内(In Scope)
| 模块 | 功能 | 备注 |
|---|---|---|
| | | |
### 4.2 范围外(Out of Scope)
- 本期不做:
1.
2.
### 4.3 假设与依赖
| 依赖项 | 类型 | 状态 | 负责方 |
|---|---|---|---|
| | 内部/外部 | 待确认/已确认 | |
---
## 5. 整体方案介绍
### 5.1 方案概述
### 5.2 核心机制/策略
### 5.3 结算/计费/策略规则(如适用)
### 5.4 字段新增/调整
| 字段名 | 表/对象 | 类型 | 说明 | 证据 |
|---|---|---|---|---|
| | | | | |
### 5.5 方案对比与取舍
| 方案 | 优点 | 缺点 | 结论 |
|---|---|---|---|
| 方案 A(选定)| | | ✅ 采用 |
| 方案 B | | | ❌ 放弃 |
---
## 6. 需求内容
### 6.1 端/渠道覆盖矩阵(强制)
| 端/渠道 | 是否覆盖 | 核心差异点 | 涉及 FR | 证据 |
|---|---|---|---|---|
| 管理端 | ✅/❌/部分 | | FR-001~005 | |
| 商户平台 | | | | |
| 合伙人平台 | | | | |
| 小程序/H5 | | | | |
| API/开放接口 | | | | |
| 其他端 | | | | |
### 6.2 功能需求列表(FR)
> **编号规则**:主功能 FR-001;子功能 FR-001-1。每条 FR 需有对应 AC(见 `outputs/acceptance.md`)。
#### FR-001:{功能名称}
- **优先级**:P0 / P1 / P2
- **角色**:{涉及角色}
- **触发条件**:WHEN/IF {条件}
- **需求**:系统 SHALL {做什么}
- **业务规则**:
1. {规则1}
2. {规则2}
- **边界条件**:{非正常路径说明}
- **证据**:[SRC-001] / [CODEMAP:...] / [ASSUMPTION]
- **AC 引用**:AC-001-1, AC-001-2
#### FR-002:{功能名称}
(同上格式)
---
### 6.3 各端功能详细说明
> 按端展开,每端包含:业务流程 → 关键页面/交互 → 规则与校验 → 接口/数据
#### 6.3.1 管理端
**业务流程**:
```mermaid
flowchart TD
A[开始] --> B{判断条件}
B -->|是| C[执行操作]
B -->|否| D[另一操作]
C --> E[结束]
D --> E
```
**关键页面/交互**:
| 页面/组件 | 说明 | 关键字段/操作 |
|---|---|---|
| 列表页 | | |
| 创建页 | | |
| 详情页 | | |
**规则与校验**:
1. {校验规则}
**接口/数据**:
- 涉及接口:{接口名称}
- 字段说明:参见第 7 章
---
## 7. 数据与埋点
### 7.1 数据模型(建议结构)
> 新建表或字段变更的建议结构,供技术方参考。
```sql
-- 新建表示例
CREATE TABLE `{表名}` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`code` VARCHAR(64) NOT NULL COMMENT '编号',
-- 业务字段...
`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 '删除标志',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='';
```
### 7.2 字段定义
| 字段名 | 类型 | 取值/范围 | 说明 | 来源 |
|---|---|---|---|---|
| | | | | |
### 7.3 数据口径
| 指标名 | 计算方式 | 来源表/字段 | 备注 |
|---|---|---|---|
| | | | |
### 7.4 统计/埋点需求
| 事件名 | 触发时机 | 携带参数 | 用途 |
|---|---|---|---|
| | | | |
### 7.5 导出/对账口径
| 字段 | 页面展示 | 导出字段 | 对账字段 | 差异说明 |
|---|---|---|---|---|
| | | | | |
---
## 8. 差异点清单(强制)
> 记录"现状 vs 目标"的差异,避免只写方案不写差异。
| 维度 | 现状 | 目标 | 影响范围 | 涉及 FR | 证据 |
|---|---|---|---|---|---|
| 策略差异 | | | | | |
| 口径差异 | | | | | |
| UI/交互差异 | | | | | |
| 数据结构差异 | | | | | |
| 权限差异 | | | | | |
---
## 9. 风险确认与应对
| 风险编号 | 风险描述 | 类型 | 等级 | 应对措施 | 负责人 |
|---|---|---|---|---|---|
| R-001 | | 合规/业务/技术/体验 | 高/中/低 | | |
### 9.1 回滚/灰度策略
---
## 10. 里程碑与发布计划
| 里程碑 | 交付物 | 时间 | 负责方 | 状态 |
|---|---|---|---|---|
| M0-需求确认 | PRD Final | | PM | |
| M1-架构设计 | 架构文档 | | Arch | |
| M2-开发完成 | 代码+单测 | | Dev | |
| M3-测试通过 | 测试报告 | | QA | |
| M4-上线 | 发布说明 | | DevOps | |
### 10.1 上线策略与验收标准
---
## 11. 其他需求 / 备注
### 11.1 重要决策记录
> 可引用 `decision_log.md`
### 11.2 待后续决策事项
---
## 12. 证据映射表(强制)
| 章节 | 关键结论 | 证据 | 状态 |
|---|---|---|---|
| 业务背景 | | | |
| 方案介绍 | | | |
| 功能需求 | | | |
| 数据与口径 | | | |
| 风险 | | | |
---
## 13. FR → AC 覆盖矩阵(强制)
| FR 编号 | FR 标题 | AC 数量 | AC 列表 | 覆盖状态 |
|---|---|---|---|---|
| FR-001 | | 2 | AC-001-1, AC-001-2 | ✅ 已覆盖 |
| FR-002 | | 0 | — | ⚠️ 待补充 |
---
## 14. 系统资产引用(强制)
| 资产类型 | 路径 | 用途 |
|---|---|---|
| CodeMap | | |
| DomainMap | | |
| Runtime | | |
---
## 15. 参考资料与索引
- 来源索引:见 `materials_index.md`
- CODEMAP/DOMAINMAP/RUNTIME 引用:见第 14 章
---
## 图表要求(强制检查)
- [ ] 至少 1 个 mermaid 图(流程图/时序图/状态图任选)
- [ ] 至少 1 张表(范围清单/风险列表/需求拆解等)
- [ ] 端覆盖矩阵已填写(第 6.1 节)
- [ ] 差异点清单已填写(第 8 章)
- [ ] FR→AC 覆盖矩阵已填写(第 13 章)
@@ -0,0 +1,108 @@
# 会话状态报告模板(pmassist-v3)
> 用于会话恢复时自动生成状态报告。填充时读取相关文件提取数据。
## 报告模板
```markdown
📊 会话状态报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 工作目录:{workdir}
📄 文档类型:{doc_type}
📌 项目简称:{project_alias}
📋 文档标题:{document_title}
🔢 当前 Round:{current_round}
📊 会话状态:{session_status}
📝 已完成内容:
- 章节:{completed_chapters}/{total_chapters}
- 功能需求(FR):{fr_count} 条
- 验收标准(AC):{ac_count} 条(覆盖 {ac_coverage})
- 证据映射:{evidence_count} 条
- Mermaid 图:{mermaid_count} 个
- 表格:{table_count} 个
❓ 遗留问题:
- P0(阻塞):{p0_count} 个
- P1(关键):{p1_count} 个
- P2(细节):{p2_count} 个
🎨 原型状态:{proto_status}
- 技术路径:{tech_stack}
- 产出文件:{proto_outputs}
⏰ 会话时间:
- 创建时间:{created_at}
- 上次更新:{last_updated_at}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 建议工作模式:
- [A] 继续模式(补充未完成章节)
- [B] 修改模式(新需求/变更修订)
- [C] 局部模式(快速修改单章节)
- [D] 原型模式(更新/生成原型)
- [E] 定稿模式(最终审核定稿)
- [F] AC 生成模式(批量补充验收标准)✨ v3 新增
```
## 数据来源映射
### 从 session.yaml 提取
```yaml
project_alias, doc_type, title, round, status,
fr_count, ac_count, ac_coverage,
unresolved_questions, prototype.*
```
### 从 outputs/{doc_type}.md 提取
```
章节数:grep "^## " | wc -l
Mermaid图:grep "```mermaid" | wc -l
表格:grep "^|" | wc -l
证据标注:grep "\[SRC-\|CODEMAP:\|DOMAINMAP:\|ASSUMPTION\]" | wc -l
FR条数:grep "^#### FR-" | wc -l
```
### 从 outputs/acceptance.md 提取
```
AC条数:grep "^### AC-" | wc -l
```
### 从 questions/round_*.yaml 提取
```
P0未答数:grep "priority: P0" + "status: pending"
P1未答数:grep "priority: P1" + "status: pending"
P2未答数:grep "priority: P2" + "status: pending"
```
## 健康度评估规则
**🟢 健康(可继续或定稿)**
- P0 问题 = 0
- 证据覆盖率 >= 80%
- FR→AC 覆盖率 >= 80%
**🟡 警告(需注意)**
- P0 问题 1-2 个
- 证据覆盖率 50%-80%
- FR→AC 覆盖率 50%-80%
**🔴 阻塞(需修复)**
- P0 问题 >= 3 个
- 证据覆盖率 < 50%
- 缺少必备文件
## 工作模式推荐规则
| 条件 | 推荐模式 |
|---|---|
| 当前 Round 未完成 / 存在遗留问题 | [A] 继续模式 |
| 用户提出新需求 / 重写章节 | [B] 修改模式 |
| 只微调单章节 / 修正错误 | [C] 局部模式 |
| prototype.enabled=true / 用户要求原型 | [D] 原型模式 |
| P0/P1=0 / 用户确认定稿 | [E] 定稿模式 |
| FR 有但 AC 覆盖不足(<80%) | [F] AC 生成模式 |
@@ -0,0 +1,229 @@
#!/usr/bin/env python3
"""
pmassist-v3 session initializer
初始化 pmassist-v3 会话工作目录与基础文件
用法:
python3 skills/pmassist-v3/scripts/init_session.py \
--path <workdir> \
--doc prd|frd|dar \
--alias <简称> \
--title <标题> \
--desc <原始需求> \
[--enable-prototype] \
[--enable-acceptance]
"""
import argparse
from pathlib import Path
from datetime import datetime
DOC_MAP = {
"prd": "prd.md",
"frd": "frd.md",
"dar": "dar.md",
}
def now_ts():
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
def read_template(doc_type: str, skill_dir: Path) -> str:
ref_name = DOC_MAP[doc_type]
ref_path = skill_dir / "references" / ref_name
if ref_path.exists():
return ref_path.read_text(encoding="utf-8")
return f"# {doc_type.upper()}\n\n> 模板缺失,请手动补充。\n"
def read_acceptance_template(skill_dir: Path) -> str:
ref_path = skill_dir / "references" / "acceptance_template.md"
if ref_path.exists():
return ref_path.read_text(encoding="utf-8")
return "# 验收标准(Acceptance Criteria)\n\n> 按 Given/When/Then 格式填写。\n"
def write_file(path: Path, content: str, force: bool = False) -> bool:
if path.exists() and not force:
return False
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(content, encoding="utf-8")
return True
def main():
parser = argparse.ArgumentParser(
description="Initialize pmassist-v3 session workspace"
)
parser.add_argument("--path", required=True, help="Work directory path")
parser.add_argument(
"--doc", required=True, choices=["prd", "frd", "dar"], help="Document type"
)
parser.add_argument("--alias", default="", help="Project alias (short name)")
parser.add_argument("--title", default="", help="Document title")
parser.add_argument("--desc", default="", help="Raw requirement description")
parser.add_argument("--force", action="store_true", help="Overwrite existing files")
parser.add_argument(
"--enable-prototype",
action="store_true",
help="Enable prototype design phase",
)
parser.add_argument(
"--enable-acceptance",
action="store_true",
help="Pre-create acceptance.md for Given/When/Then AC output",
)
args = parser.parse_args()
workdir = Path(args.path).resolve()
workdir.mkdir(parents=True, exist_ok=True)
# Skill 根目录(脚本位于 scripts/ 下)
skill_dir = Path(__file__).resolve().parent.parent
# ── 基础目录 ──────────────────────────────────────
base_dirs = ["materials", "rounds", "questions", "outputs"]
# ── 原型目录(可选)──────────────────────────────
proto_dirs = [
"materials/prototypes",
"materials/prototypes/reference",
"materials/prototypes/analysis",
"prototypes",
"prototypes/screenshots",
"prototypes/webapp",
]
dirs_to_create = base_dirs + (proto_dirs if args.enable_prototype else [])
for d in dirs_to_create:
(workdir / d).mkdir(parents=True, exist_ok=True)
ts = now_ts()
alias = args.alias or ""
title = args.title or ""
raw_desc = args.desc or ""
# ── desc.md ──────────────────────────────────────
desc_md = f"""# 需求描述
## 元信息
- 创建时间: {ts}
- 最后更新: {ts}
- 文档类型: {args.doc.upper()}
- 项目简称: {alias}
- 标题: {title}
## 原始输入
{raw_desc if raw_desc else '[待补充原始需求]'}
## WWH 分析
### What - 做什么
[待补充]
### Why - 为什么
[待补充]
### How - 怎么做
[待补充]
"""
# ── session.yaml ─────────────────────────────────
proto_section = ""
if args.enable_prototype:
proto_section = """
prototype:
enabled: true
status: "proto_pending"
proto_round: 0
tech_stack: []
outputs: []
unresolved_proto_questions: []
"""
session_yaml = f"""project_alias: "{alias}"
doc_type: "{args.doc}"
title: "{title}"
created_at: "{ts}"
updated_at: "{ts}"
round: 0
status: "init"
# 功能需求统计(v3 新增)
fr_count: 0
ac_count: 0
ac_coverage: "0/0"
# 未解决问题
unresolved_questions: []
# 跳过标记
skip_flags:
prototype: {'true' if not args.enable_prototype else 'false'}
ac_batch: false
diff_list: false
last_output: ""
materials: []{proto_section}
"""
# ── summary.md ───────────────────────────────────
summary_md = f"""# 会话摘要
- {ts} 初始化 pmassist-v3 会话
- 文档类型:{args.doc.upper()}
- 项目:{alias or '(未设置)'}
"""
# ── decision_log.md ──────────────────────────────
decision_log_md = """# 决策记录
| 时间 | 变更编号 | 事项 | 决策内容 | 影响 FR | 依据 |
|---|---|---|---|---|---|
"""
# ── materials_index.md ───────────────────────────
materials_index_md = """# 资料索引
| ID | 标题 | 类型 | 来源/路径 | 摘要 | 日期 |
|---|---|---|---|---|---|
"""
# ── 输出文档模板 ──────────────────────────────────
output_template = read_template(args.doc, skill_dir)
# ── acceptance.md(可选,PRD/FRD 推荐)──────────
acceptance_template = read_acceptance_template(skill_dir)
# ── 写文件 ────────────────────────────────────────
wrote = []
def wf(rel_path: str, content: str):
if write_file(workdir / rel_path, content, args.force):
wrote.append(rel_path)
wf("desc.md", desc_md)
wf("session.yaml", session_yaml)
wf("summary.md", summary_md)
wf("decision_log.md", decision_log_md)
wf("materials_index.md", materials_index_md)
wf(f"outputs/{DOC_MAP[args.doc]}", output_template)
# 验收标准(按需或 PRD/FRD 默认启用)
if args.enable_acceptance or args.doc in ("prd", "frd"):
wf("outputs/acceptance.md", acceptance_template)
if wrote:
print("[OK] pmassist-v3 会话初始化完成,创建/更新文件:")
for f in wrote:
print(f" - {f}")
print(f"\n工作目录:{workdir}")
print(f"下一步:加载 pmassist-v3 skill,开始 Round 1 PDCA。")
else:
print("[SKIP] 无文件变更。使用 --force 覆盖已有文件。")
if __name__ == "__main__":
main()