feat: 根目录文档、脚本、gitignore
This commit is contained in:
@@ -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 工作流程
|
||||
@@ -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()
|
||||
Reference in New Issue
Block a user