doc-prd-fixer
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesedoc-prd-fixer
doc-prd-fixer
Purpose
用途
Automated fix skill that reads the latest review report and applies fixes to PRD documents. This skill bridges the gap between (which identifies issues) and the corrected PRD, enabling iterative improvement cycles.
doc-prd-reviewerLayer: 2 (PRD Quality Improvement)
Upstream: PRD document, Review Report (), BRD (source requirements)
PRD-NN.R_review_report_vNNN.mdDownstream: Fixed PRD, Fix Report ()
PRD-NN.F_fix_report_vNNN.md这是一款自动化修复工具,可读取最新的评审报告并对PRD文档进行修复。该工具填补了(用于识别问题)与修正后的PRD之间的空白,支持迭代优化循环。
doc-prd-reviewer层级:2(PRD质量优化)
上游依赖:PRD文档、评审报告()、BRD(需求来源)
PRD-NN.R_review_report_vNNN.md下游产出:修复后的PRD、修复报告()
PRD-NN.F_fix_report_vNNN.mdWhen to Use This Skill
适用场景
Use when:
doc-prd-fixer- After Review: Run after identifies issues
doc-prd-reviewer - Iterative Improvement: Part of Review -> Fix -> Review cycle
- Automated Pipeline: CI/CD integration for quality gates
- Batch Fixes: Apply fixes to multiple PRDs based on review reports
Do NOT use when:
- No review report exists (run first)
doc-prd-reviewer - Creating new PRD (use or
doc-prd)doc-prd-autopilot - Only need validation (use )
doc-prd-validator
当出现以下情况时,使用:
doc-prd-fixer- 评审后:在识别出问题后运行
doc-prd-reviewer - 迭代优化:作为「评审→修复→评审」循环的一部分
- 自动化流水线:集成到CI/CD中作为质量关卡
- 批量修复:基于评审报告对多份PRD进行批量修复
以下情况请勿使用:
- 无评审报告(请先运行)
doc-prd-reviewer - 创建新PRD(使用或
doc-prd)doc-prd-autopilot - 仅需验证(使用)
doc-prd-validator
Skill Dependencies
工具依赖
| Skill | Purpose | When Used |
|---|---|---|
| Source of issues to fix | Input (reads review report) |
| Element ID standards | Fix element IDs |
| PRD creation rules | Create missing sections |
| Upstream BRD validation | Check upstream alignment |
| 工具 | 用途 | 使用时机 |
|---|---|---|
| 提供待修复的问题来源 | 输入(读取评审报告) |
| 元素ID标准 | 修复元素ID |
| PRD创建规则 | 创建缺失章节 |
| 上游BRD验证 | 检查上游一致性 |
Workflow Overview
工作流概述
mermaid
flowchart TD
A[Input: PRD Path] --> B[Find Latest Review Report]
B --> C{Review Found?}
C -->|No| D[Run doc-prd-reviewer First]
C -->|Yes| E[Parse Review Report]
E --> F[Categorize Issues]
subgraph FixPhases["Fix Phases"]
F --> F0[Phase 0: Fix Structure Violations]
F0 --> G[Phase 1: Create Missing Files]
G --> H[Phase 2: Fix Broken Links]
H --> I[Phase 3: Fix Element IDs]
I --> J[Phase 4: Fix Content Issues]
J --> K[Phase 5: Update References]
K --> K2[Phase 6: Handle Upstream Drift]
end
K2 --> L[Write Fixed PRD]
L --> M[Generate Fix Report]
M --> N{Re-run Review?}
N -->|Yes| O[Invoke doc-prd-reviewer]
O --> P{Score >= Threshold?}
P -->|No, iterations < max| F
P -->|Yes| Q[COMPLETE]
N -->|No| Qmermaid
flowchart TD
A[Input: PRD Path] --> B[Find Latest Review Report]
B --> C{Review Found?}
C -->|No| D[Run doc-prd-reviewer First]
C -->|Yes| E[Parse Review Report]
E --> F[Categorize Issues]
subgraph FixPhases["Fix Phases"]
F --> F0[Phase 0: Fix Structure Violations]
F0 --> G[Phase 1: Create Missing Files]
G --> H[Phase 2: Fix Broken Links]
H --> I[Phase 3: Fix Element IDs]
I --> J[Phase 4: Fix Content Issues]
J --> K[Phase 5: Update References]
K --> K2[Phase 6: Handle Upstream Drift]
end
K2 --> L[Write Fixed PRD]
L --> M[Generate Fix Report]
M --> N{Re-run Review?}
N -->|Yes| O[Invoke doc-prd-reviewer]
O --> P{Score >= Threshold?}
P -->|No, iterations < max| F
P -->|Yes| Q[COMPLETE]
N -->|No| QFix Phases
修复阶段
Phase 0: Fix Structure Violations (CRITICAL)
阶段0:修复结构违规问题(关键)
Fixes PRDs that are not in nested folders. This phase runs FIRST because all subsequent phases depend on correct folder structure.
Nested Folder Rule: ALL PRDs MUST be in nested folders regardless of document size.
Required Structure:
| PRD Type | Required Location |
|---|---|
| Monolithic | |
| Sectioned | |
Fix Actions:
| Issue Code | Issue | Fix Action |
|---|---|---|
| REV-STR001 | PRD not in nested folder | Create folder, move file, update all links |
| REV-STR002 | PRD folder name doesn't match PRD ID | Rename folder to match |
| REV-STR004 | BRD link path incorrect for nested folder | Update |
Structure Fix Workflow:
python
def fix_prd_structure(prd_path: str) -> list[Fix]:
"""Fix PRD structure violations."""
fixes = []
filename = os.path.basename(prd_path)
parent_folder = os.path.dirname(prd_path)
# Extract PRD ID and slug from filename
match = re.match(r'PRD-(\d+)_([^/]+)\.md', filename)
if not match:
return [] # Cannot auto-fix invalid filename
prd_id = match.group(1)
slug = match.group(2)
expected_folder = f"PRD-{prd_id}_{slug}"
# Check if already in nested folder
if os.path.basename(parent_folder) != expected_folder:
# Create nested folder
new_folder = os.path.join(os.path.dirname(parent_folder), expected_folder)
os.makedirs(new_folder, exist_ok=True)
# Move file
new_path = os.path.join(new_folder, filename)
shutil.move(prd_path, new_path)
fixes.append(f"Moved {prd_path} to {new_path}")
# Update BRD links in moved file
content = Path(new_path).read_text()
updated_content = content.replace('../01_BRD/', '../../01_BRD/')
updated_content = updated_content.replace('../00_REF/', '../../00_REF/')
Path(new_path).write_text(updated_content)
fixes.append(f"Updated relative links for nested folder structure")
return fixesLink Path Updates After Move:
| Original Path | Updated Path |
|---|---|
| |
| |
| |
修复未存储在嵌套文件夹中的PRD。此阶段优先执行,因为后续所有阶段都依赖正确的文件夹结构。
嵌套文件夹规则:所有PRD无论大小,都必须存储在嵌套文件夹中。
要求结构:
| PRD类型 | 存储位置要求 |
|---|---|
| 单体式 | |
| 分段式 | |
修复操作:
| 问题代码 | 问题描述 | 修复动作 |
|---|---|---|
| REV-STR001 | PRD未在嵌套文件夹中 | 创建文件夹、移动文件、更新所有链接 |
| REV-STR002 | PRD文件夹名称与PRD ID不匹配 | 重命名文件夹以匹配ID |
| REV-STR004 | 嵌套文件夹下的BRD链接路径错误 | 将 |
结构修复工作流:
python
def fix_prd_structure(prd_path: str) -> list[Fix]:
"""Fix PRD structure violations."""
fixes = []
filename = os.path.basename(prd_path)
parent_folder = os.path.dirname(prd_path)
# Extract PRD ID and slug from filename
match = re.match(r'PRD-(\d+)_([^/]+)\.md', filename)
if not match:
return [] # Cannot auto-fix invalid filename
prd_id = match.group(1)
slug = match.group(2)
expected_folder = f"PRD-{prd_id}_{slug}"
# Check if already in nested folder
if os.path.basename(parent_folder) != expected_folder:
# Create nested folder
new_folder = os.path.join(os.path.dirname(parent_folder), expected_folder)
os.makedirs(new_folder, exist_ok=True)
# Move file
new_path = os.path.join(new_folder, filename)
shutil.move(prd_path, new_path)
fixes.append(f"Moved {prd_path} to {new_path}")
# Update BRD links in moved file
content = Path(new_path).read_text()
updated_content = content.replace('../01_BRD/', '../../01_BRD/')
updated_content = updated_content.replace('../00_REF/', '../../00_REF/')
Path(new_path).write_text(updated_content)
fixes.append(f"Updated relative links for nested folder structure")
return fixes移动后的链接路径更新:
| 原路径 | 更新后路径 |
|---|---|
| |
| |
| |
Phase 1: Create Missing Files
阶段1:创建缺失文件
Creates files that are referenced but don't exist.
Scope:
| Missing File | Action | Template Used |
|---|---|---|
| Create PRD glossary | Glossary template |
| Create appendix placeholder | Appendix template |
Reference docs ( | Create placeholder | REF template |
| Feature specs | Create placeholder with TODO sections | Feature template |
PRD Glossary Template:
markdown
---
title: "PRD-00: Product Glossary"
tags:
- prd
- glossary
- reference
custom_fields:
document_type: glossary
artifact_type: PRD-REFERENCE
layer: 2
---创建被引用但不存在的文件。
范围:
| 缺失文件 | 动作 | 使用模板 |
|---|---|---|
| 创建PRD术语表 | 术语表模板 |
| 创建附录占位符 | 附录模板 |
参考文档( | 创建占位符 | REF模板 |
| 功能规格 | 创建带TODO章节的占位符 | 功能模板 |
PRD术语表模板:
markdown
---
title: "PRD-00: Product Glossary"
tags:
- prd
- glossary
- reference
custom_fields:
document_type: glossary
artifact_type: PRD-REFERENCE
layer: 2
---PRD-00: Product Glossary
PRD-00: Product Glossary
Common terminology used across all Product Requirements Documents.
Common terminology used across all Product Requirements Documents.
Product Terms
Product Terms
| Term | Definition | Context |
|---|---|---|
| Feature | Discrete unit of product functionality | Scope definition |
| User Story | User-centric requirement format | Requirements |
| Acceptance Criteria | Conditions for feature completion | Validation |
| Term | Definition | Context |
|---|---|---|
| Feature | Discrete unit of product functionality | Scope definition |
| User Story | User-centric requirement format | Requirements |
| Acceptance Criteria | Conditions for feature completion | Validation |
Technical Terms
Technical Terms
| Term | Definition | Context |
|---|---|---|
| API | Application Programming Interface | Integration |
| UI | User Interface | Frontend |
| UX | User Experience | Design |
| Term | Definition | Context |
|---|---|---|
| API | Application Programming Interface | Integration |
| UI | User Interface | Frontend |
| UX | User Experience | Design |
Domain Terms
Domain Terms
<!-- Add project-specific terminology below -->
| Term | Definition | Context |
|---|---|---|
| [Term] | [Definition] | [Where used] |
**Feature Placeholder Template**:
```markdown
---
title: "Feature Specification: [Feature Name]"
tags:
- prd
- feature-spec
- reference
custom_fields:
document_type: feature-spec
status: placeholder
created_by: doc-prd-fixer
---<!-- Add project-specific terminology below -->
| Term | Definition | Context |
|---|---|---|
| [Term] | [Definition] | [Where used] |
**功能占位符模板**:
```markdown
---
title: "Feature Specification: [Feature Name]"
tags:
- prd
- feature-spec
- reference
custom_fields:
document_type: feature-spec
status: placeholder
created_by: doc-prd-fixer
---Feature Specification: [Feature Name]
Feature Specification: [Feature Name]
Status: Placeholder - Requires completion
Status: Placeholder - Requires completion
1. Feature Overview
1. Feature Overview
[TODO: Document feature overview]
[TODO: Document feature overview]
2. User Stories
2. User Stories
| Story ID | As a... | I want to... | So that... |
|---|---|---|---|
| US-XX-01 | [Role] | [Action] | [Benefit] |
| Story ID | As a... | I want to... | So that... |
|---|---|---|---|
| US-XX-01 | [Role] | [Action] | [Benefit] |
3. Acceptance Criteria
3. Acceptance Criteria
[TODO: Document acceptance criteria]
[TODO: Document acceptance criteria]
4. Dependencies
4. Dependencies
[TODO: Document feature dependencies]
Created by doc-prd-fixer as placeholder. Complete this document to resolve broken link issues.
---[TODO: Document feature dependencies]
Created by doc-prd-fixer as placeholder. Complete this document to resolve broken link issues.
---Phase 2: Fix Broken Links
阶段2:修复失效链接
Updates links to point to correct locations.
Fix Actions:
| Issue Code | Issue | Fix Action |
|---|---|---|
| REV-L001 | Broken internal link | Update path or create target file |
| REV-L002 | External link unreachable | Add warning comment, keep link |
| REV-L003 | Absolute path used | Convert to relative path |
| REV-L004 | Broken BRD reference | Update to correct BRD path |
Path Resolution Logic:
python
def fix_link_path(prd_location: str, target_path: str) -> str:
"""Calculate correct relative path based on PRD location."""
# ALL PRDs are in nested folders (mandatory rule):
# Monolithic PRD: docs/02_PRD/PRD-01_slug/PRD-01_slug.md
# Sectioned PRD: docs/02_PRD/PRD-01_slug/PRD-01.3_section.md
# Both types need to go up two levels to reach 01_BRD or 00_REF
return "../../" + calculate_relative_path(prd_location, target_path)BRD Link Fix (All PRDs in nested folders):
| Issue | Original Link | Fixed Link |
|---|---|---|
| After move to nested folder | | |
| Incorrect depth | | |
更新链接以指向正确位置。
修复操作:
| 问题代码 | 问题描述 | 修复动作 |
|---|---|---|
| REV-L001 | 内部链接失效 | 更新路径或创建目标文件 |
| REV-L002 | 外部链接无法访问 | 添加警告注释,保留链接 |
| REV-L003 | 使用绝对路径 | 转换为相对路径 |
| REV-L004 | BRD引用失效 | 更新为正确的BRD路径 |
路径解析逻辑:
python
def fix_link_path(prd_location: str, target_path: str) -> str:
"""Calculate correct relative path based on PRD location."""
# ALL PRDs are in nested folders (mandatory rule):
# Monolithic PRD: docs/02_PRD/PRD-01_slug/PRD-01_slug.md
# Sectioned PRD: docs/02_PRD/PRD-01_slug/PRD-01.3_section.md
# Both types need to go up two levels to reach 01_BRD or 00_REF
return "../../" + calculate_relative_path(prd_location, target_path)BRD链接修复(所有PRD均在嵌套文件夹中):
| 问题 | 原链接 | 修复后链接 |
|---|---|---|
| 移动到嵌套文件夹后 | | |
| 深度错误 | | |
Phase 3: Fix Element IDs
阶段3:修复元素ID
Converts invalid element IDs to correct format.
Conversion Rules:
| Pattern | Issue | Conversion |
|---|---|---|
| Code 25 invalid for PRD | |
| Code 33 invalid for PRD | |
| Legacy pattern | |
| Legacy pattern | |
| Legacy pattern | |
Type Code Mapping (PRD-specific valid codes: 01-09, 11, 22, 24):
| Invalid Code | Valid Code | Element Type |
|---|---|---|
| 25 | 01 | Functional Requirement |
| 33 | 22 | Feature Item |
| 35 | 06 | Acceptance Criterion |
| 10 | 09 | Business Rule |
| 12 | 11 | Interface Requirement |
Regex Patterns:
python
undefined将无效的元素ID转换为正确格式。
转换规则:
| 格式 | 问题 | 转换结果 |
|---|---|---|
| 代码25对PRD无效 | |
| 代码33对PRD无效 | |
| 旧版格式 | |
| 旧版格式 | |
| 旧版格式 | |
类型代码映射(PRD专属有效代码:01-09、11、22、24):
| 无效代码 | 有效代码 | 元素类型 |
|---|---|---|
| 25 | 01 | 功能需求 |
| 33 | 22 | 功能项 |
| 35 | 06 | 验收标准 |
| 10 | 09 | 业务规则 |
| 12 | 11 | 接口需求 |
正则表达式:
python
undefinedFind element IDs with invalid type codes for PRD
Find element IDs with invalid type codes for PRD
invalid_prd_type_25 = r'PRD.(\d{2}).25.(\d{2})'
replacement_25 = r'PRD.\1.01.\2'
invalid_prd_type_33 = r'PRD.(\d{2}).33.(\d{2})'
replacement_33 = r'PRD.\1.22.\2'
invalid_prd_type_25 = r'PRD.(\d{2}).25.(\d{2})'
replacement_25 = r'PRD.\1.01.\2'
invalid_prd_type_33 = r'PRD.(\d{2}).33.(\d{2})'
replacement_33 = r'PRD.\1.22.\2'
Find legacy patterns
Find legacy patterns
legacy_fr = r'###\s+FR-(\d+):'
legacy_us = r'###\s+US-(\d+):'
legacy_ac = r'###\s+AC-(\d+):'
---legacy_fr = r'###\s+FR-(\d+):'
legacy_us = r'###\s+US-(\d+):'
legacy_ac = r'###\s+AC-(\d+):'
---Phase 4: Fix Content Issues
阶段4:修复内容问题
Addresses placeholders and incomplete content.
Fix Actions:
| Issue Code | Issue | Fix Action |
|---|---|---|
| REV-P001 | | Flag for manual completion (cannot auto-fix) |
| REV-P002 | | Flag for manual completion (cannot auto-fix) |
| REV-P003 | Template date | Replace with current date |
| REV-P004 | Template name | Replace with metadata author or flag |
| REV-P005 | Empty section | Add minimum template content |
| REV-P006 | Missing user story format | Flag for manual review |
Auto-Replacements:
python
replacements = {
'YYYY-MM-DDTHH:MM:SS': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'),
'YYYY-MM-DD': datetime.now().strftime('%Y-%m-%d'),
'MM/DD/YYYY': datetime.now().strftime('%m/%d/%Y'),
'[Current date]': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'),
'[Product Name]': extract_product_name_from_metadata(),
}处理占位符和不完整内容。
修复操作:
| 问题代码 | 问题描述 | 修复动作 |
|---|---|---|
| REV-P001 | | 标记为需手动完成(无法自动修复) |
| REV-P002 | | 标记为需手动完成(无法自动修复) |
| REV-P003 | 模板日期 | 替换为当前日期 |
| REV-P004 | 模板名称 | 替换为元数据中的作者或标记待处理 |
| REV-P005 | 空章节 | 添加最低限度的模板内容 |
| REV-P006 | 缺失用户故事格式 | 标记为需手动评审 |
自动替换规则:
python
replacements = {
'YYYY-MM-DDTHH:MM:SS': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'),
'YYYY-MM-DD': datetime.now().strftime('%Y-%m-%d'),
'MM/DD/YYYY': datetime.now().strftime('%m/%d/%Y'),
'[Current date]': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'),
'[Product Name]': extract_product_name_from_metadata(),
}Phase 5: Update References
阶段5:更新引用
Ensures traceability and cross-references are correct.
Fix Actions:
| Issue | Fix Action |
|---|---|
Missing | Add reference tag |
| Incorrect cross-PRD path | Update to correct relative path |
| Missing BRD traceability | Add BRD reference with |
| Missing traceability entry | Add to traceability matrix |
Traceability Format:
markdown
<!-- Traceability to BRD -->
@trace: BRD-01.22.01 -> PRD-01.22.01
<!-- Reference to upstream -->
@ref: [BRD-01 Section 3](../01_BRD/BRD-01.md#3-business-requirements)确保可追溯性和交叉引用正确。
修复操作:
| 问题 | 修复动作 |
|---|---|
已创建文件缺失 | 添加引用标签 |
| PRD间路径错误 | 更新为正确的相对路径 |
| 缺失BRD可追溯性 | 使用 |
| 缺失可追溯性条目 | 添加到可追溯性矩阵 |
可追溯性格式:
markdown
<!-- Traceability to BRD -->
@trace: BRD-01.22.01 -> PRD-01.22.01
<!-- Reference to upstream -->
@ref: [BRD-01 Section 3](../01_BRD/BRD-01.md#3-business-requirements)Phase 6: Handle Upstream Drift (Auto-Merge)
阶段6:处理上游变更(自动合并)
Automatically merges upstream BRD changes into the PRD document based on change percentage thresholds.
Drift Detection Workflow:
mermaid
flowchart TD
A[Detect Upstream BRD Changes] --> B[Calculate Change %]
B --> C{Change Analysis}
C -->|< 5%| D[TIER 1: Auto-Merge]
C -->|5-15%| E[TIER 2: Auto-Merge + Detailed Log]
C -->|> 15%| F[TIER 3: Archive + Regenerate]
D --> D1[Add new requirements]
D1 --> D2[Update thresholds]
D2 --> D3[Update references]
D3 --> D4[Increment patch: 1.0->1.0.1]
E --> E1[Add new requirements]
E1 --> E2[Update thresholds]
E2 --> E3[Update references]
E3 --> E4[Generate detailed changelog]
E4 --> E5[Increment minor: 1.0->1.1]
F --> F1[Mark current as ARCHIVED]
F1 --> F2[Update status in frontmatter]
F2 --> F3[Trigger regeneration via autopilot]
F3 --> F4[Increment major: 1.x->2.0]
D4 --> G[Update Drift Cache]
E5 --> G
F4 --> G
G --> H[Add to Fix Report]基于变更百分比阈值,自动将上游BRD的变更合并到PRD文档中。
变更检测工作流:
mermaid
flowchart TD
A[Detect Upstream BRD Changes] --> B[Calculate Change %]
B --> C{Change Analysis}
C -->|< 5%| D[TIER 1: Auto-Merge]
C -->|5-15%| E[TIER 2: Auto-Merge + Detailed Log]
C -->|> 15%| F[TIER 3: Archive + Regenerate]
D --> D1[Add new requirements]
D1 --> D2[Update thresholds]
D2 --> D3[Update references]
D3 --> D4[Increment patch: 1.0->1.0.1]
E --> E1[Add new requirements]
E1 --> E2[Update thresholds]
E2 --> E3[Update references]
E3 --> E4[Generate detailed changelog]
E4 --> E5[Increment minor: 1.0->1.1]
F --> F1[Mark current as ARCHIVED]
F1 --> F2[Update status in frontmatter]
F2 --> F3[Trigger regeneration via autopilot]
F3 --> F4[Increment major: 1.x->2.0]
D4 --> G[Update Drift Cache]
E5 --> G
F4 --> G
G --> H[Add to Fix Report]6.1 Change Percentage Calculation
6.1 变更百分比计算
python
def calculate_change_percentage(upstream_old: str, upstream_new: str) -> dict:
"""
Calculate change percentage between upstream BRD versions.
Returns:
{
'total_change_pct': float, # Overall change percentage
'additions_pct': float, # New content added
'modifications_pct': float, # Existing content modified
'deletions_pct': float, # Content removed (tracked, not applied)
'change_type': str # 'minor' | 'moderate' | 'major'
}
"""
old_lines = upstream_old.strip().split('\n')
new_lines = upstream_new.strip().split('\n')
# Use difflib for precise change detection
import difflib
diff = difflib.unified_diff(old_lines, new_lines)
additions = sum(1 for line in diff if line.startswith('+') and not line.startswith('+++'))
deletions = sum(1 for line in diff if line.startswith('-') and not line.startswith('---'))
total_lines = max(len(old_lines), len(new_lines))
total_change_pct = ((additions + deletions) / total_lines) * 100 if total_lines > 0 else 0
return {
'total_change_pct': round(total_change_pct, 2),
'additions_pct': round((additions / total_lines) * 100, 2) if total_lines > 0 else 0,
'modifications_pct': round((min(additions, deletions) / total_lines) * 100, 2) if total_lines > 0 else 0,
'deletions_pct': round((deletions / total_lines) * 100, 2) if total_lines > 0 else 0,
'change_type': 'minor' if total_change_pct < 5 else 'moderate' if total_change_pct < 15 else 'major'
}python
def calculate_change_percentage(upstream_old: str, upstream_new: str) -> dict:
"""
Calculate change percentage between upstream BRD versions.
Returns:
{
'total_change_pct': float, # Overall change percentage
'additions_pct': float, # New content added
'modifications_pct': float, # Existing content modified
'deletions_pct': float, # Content removed (tracked, not applied)
'change_type': str # 'minor' | 'moderate' | 'major'
}
"""
old_lines = upstream_old.strip().split('\n')
new_lines = upstream_new.strip().split('\n')
# Use difflib for precise change detection
import difflib
diff = difflib.unified_diff(old_lines, new_lines)
additions = sum(1 for line in diff if line.startswith('+') and not line.startswith('+++'))
deletions = sum(1 for line in diff if line.startswith('-') and not line.startswith('---'))
total_lines = max(len(old_lines), len(new_lines))
total_change_pct = ((additions + deletions) / total_lines) * 100 if total_lines > 0 else 0
return {
'total_change_pct': round(total_change_pct, 2),
'additions_pct': round((additions / total_lines) * 100, 2) if total_lines > 0 else 0,
'modifications_pct': round((min(additions, deletions) / total_lines) * 100, 2) if total_lines > 0 else 0,
'deletions_pct': round((deletions / total_lines) * 100, 2) if total_lines > 0 else 0,
'change_type': 'minor' if total_change_pct < 5 else 'moderate' if total_change_pct < 15 else 'major'
}6.2 Tier 1: Auto-Merge (< 5% Change)
6.2 第一级:自动合并(变更<5%)
Trigger: Total change percentage < 5%
Actions:
| Change Type | Auto-Action | Example |
|---|---|---|
| New requirement added | Append with generated ID | |
| Threshold value changed | Find & replace value | |
| Reference updated | Update | Path correction |
| Version incremented | Update version reference | |
ID Generation for New Requirements:
python
def generate_next_id(doc_type: str, doc_num: str, element_type: str, existing_ids: list) -> str:
"""
Generate next sequential ID for new requirement.
Args:
doc_type: 'PRD', 'BRD', etc.
doc_num: '01', '02', etc.
element_type: '01' (Functional), '05' (User Story), etc.
existing_ids: List of existing IDs in document
Returns:
Next available ID (e.g., 'PRD.01.01.13')
"""
pattern = f"{doc_type}.{doc_num}.{element_type}."
matching = [id for id in existing_ids if id.startswith(pattern)]
if not matching:
return f"{pattern}01"
max_seq = max(int(id.split('.')[-1]) for id in matching)
return f"{pattern}{str(max_seq + 1).zfill(2)}"ID Pattern for PRD: where:
PRD.NN.TT.SS- = Document number (01, 02, etc.)
NN - = Type code (01=Functional, 05=User Story, 06=Acceptance Criterion, etc.)
TT - = Sequence number (01, 02, etc.)
SS
Auto-Merge Template for New Requirements:
markdown
undefined触发条件:总变更百分比<5%
操作:
| 变更类型 | 自动动作 | 示例 |
|---|---|---|
| 新增需求 | 附加生成的ID | |
| 阈值变更 | 查找并替换值 | |
| 引用更新 | 更新 | 路径修正 |
| 版本升级 | 更新版本引用 | |
新增需求的ID生成:
python
def generate_next_id(doc_type: str, doc_num: str, element_type: str, existing_ids: list) -> str:
"""
Generate next sequential ID for new requirement.
Args:
doc_type: 'PRD', 'BRD', etc.
doc_num: '01', '02', etc.
element_type: '01' (Functional), '05' (User Story), etc.
existing_ids: List of existing IDs in document
Returns:
Next available ID (e.g., 'PRD.01.01.13')
"""
pattern = f"{doc_type}.{doc_num}.{element_type}."
matching = [id for id in existing_ids if id.startswith(pattern)]
if not matching:
return f"{pattern}01"
max_seq = max(int(id.split('.')[-1]) for id in matching)
return f"{pattern}{str(max_seq + 1).zfill(2)}"PRD的ID格式:,其中:
PRD.NN.TT.SS- = 文档编号(01、02等)
NN - = 类型代码(01=功能需求、05=用户故事、06=验收标准等)
TT - = 序列号(01、02等)
SS
新增需求的自动合并模板:
markdown
undefined{GENERATED_ID}: {Requirement Title}
{GENERATED_ID}: {Requirement Title}
Source: Auto-merged from {upstream_brd} ({change_date})
Requirement: {requirement_text}
User Stories:
{user_stories}
Acceptance Criteria:
{acceptance_criteria}
Priority: {priority}
<!-- AUTO-MERGED: {timestamp} from {upstream_brd}#{section} -->
**Version Update**:
- Increment patch version: `1.0` -> `1.0.1`
- Update `last_updated` in frontmatter
- Add changelog entry
---Source: Auto-merged from {upstream_brd} ({change_date})
Requirement: {requirement_text}
User Stories:
{user_stories}
Acceptance Criteria:
{acceptance_criteria}
Priority: {priority}
<!-- AUTO-MERGED: {timestamp} from {upstream_brd}#{section} -->
**版本更新**:
- 升级补丁版本:`1.0` -> `1.0.1`
- 更新前置元数据中的`last_updated`
- 添加变更日志条目
---6.3 Tier 2: Auto-Merge with Detailed Log (5-15% Change)
6.3 第二级:自动合并+详细日志(变更5-15%)
Trigger: Total change percentage between 5% and 15%
Actions: Same as Tier 1, plus:
| Additional Action | Description |
|---|---|
| Detailed changelog | Section-by-section change log |
| Impact analysis | Which downstream artifacts affected (EARS, BDD) |
| Merge markers | |
| Version history | Detailed version history entry |
Changelog Entry Format:
markdown
undefined触发条件:总变更百分比在5%-15%之间
操作:与第一级相同,额外增加:
| 附加操作 | 描述 |
|---|---|
| 详细变更日志 | 按章节记录的变更日志 |
| 影响分析 | 受影响的下游工件(EARS、BDD) |
| 合并标记 | |
| 版本历史 | 详细的版本历史条目 |
变更日志条目格式:
markdown
undefinedChangelog
Changelog
Version 1.1 (2026-02-10T16:00:00)
Version 1.1 (2026-02-10T16:00:00)
Upstream Sync: Auto-merged 8.5% changes from upstream BRD documents
| Change | Source | Section | Description |
|---|---|---|---|
| Added | BRD-01.1_core.md | 3.5 | New passkey authentication requirement |
| Updated | BRD-01.2_requirements.md | 4.2 | Session timeout changed 30->45 min |
| Added | BRD-01.3_quality_ops.md | 7.2 | New performance requirement |
New Requirements Added:
- PRD.01.01.13: Passkey Authentication Support
- PRD.01.01.14: WebAuthn Fallback Mechanism
Thresholds Updated:
- PRD.01.02.05: session_idle_timeout: 30->45 min
Impact: EARS-01, BDD-01, ADR-01 may require review
**Version Update**:
- Increment minor version: `1.0` -> `1.1`
- Update `last_updated` in frontmatter
- Add detailed changelog entry
---Upstream Sync: Auto-merged 8.5% changes from upstream BRD documents
| Change | Source | Section | Description |
|---|---|---|---|
| Added | BRD-01.1_core.md | 3.5 | New passkey authentication requirement |
| Updated | BRD-01.2_requirements.md | 4.2 | Session timeout changed 30->45 min |
| Added | BRD-01.3_quality_ops.md | 7.2 | New performance requirement |
New Requirements Added:
- PRD.01.01.13: Passkey Authentication Support
- PRD.01.01.14: WebAuthn Fallback Mechanism
Thresholds Updated:
- PRD.01.02.05: session_idle_timeout: 30->45 min
Impact: EARS-01, BDD-01, ADR-01 may require review
**版本更新**:
- 升级次要版本:`1.0` -> `1.1`
- 更新前置元数据中的`last_updated`
- 添加详细变更日志条目
---6.4 Tier 3: Archive and Regenerate (> 15% Change)
6.4 第三级:归档并重新生成(变更>15%)
Trigger: Total change percentage > 15%
Actions:
| Step | Action | Result |
|---|---|---|
| 1 | Mark current version as ARCHIVED | Status update in frontmatter |
| 2 | Create archive copy | |
| 3 | Update frontmatter status | |
| 4 | Trigger autopilot regeneration | New version generated |
| 5 | Increment major version | |
Archive Frontmatter Update:
yaml
---
title: "PRD-01: F1 Identity & Access Management"
custom_fields:
version: "1.2"
status: "archived" # Changed from 'current'
archived_date: "2026-02-10T16:00:00"
archived_reason: "upstream_drift_major"
superseded_by: "PRD-01_v2.0"
upstream_change_pct: 18.5
---Archive File Naming:
docs/02_PRD/PRD-01_f1_iam/
├── PRD-01.0_index.md # Current (v2.0)
├── PRD-01.1_core.md # Current (v2.0)
├── .archive/
│ ├── v1.2/
│ │ ├── PRD-01.0_index.md # Archived v1.2
│ │ ├── PRD-01.1_core.md
│ │ └── ARCHIVE_MANIFEST.md # Archive metadataARCHIVE_MANIFEST.md:
markdown
undefined触发条件:总变更百分比>15%
操作:
| 步骤 | 动作 | 结果 |
|---|---|---|
| 1 | 将当前版本标记为ARCHIVED | 前置元数据中的状态更新 |
| 2 | 创建归档副本 | |
| 3 | 更新前置元数据状态 | |
| 4 | 触发自动生成工具重新生成 | 生成新版本 |
| 5 | 升级主版本 | |
归档前置元数据更新:
yaml
---
title: "PRD-01: F1 Identity & Access Management"
custom_fields:
version: "1.2"
status: "archived" # Changed from 'current'
archived_date: "2026-02-10T16:00:00"
archived_reason: "upstream_drift_major"
superseded_by: "PRD-01_v2.0"
upstream_change_pct: 18.5
---归档文件命名:
docs/02_PRD/PRD-01_f1_iam/
├── PRD-01.0_index.md # Current (v2.0)
├── PRD-01.1_core.md # Current (v2.0)
├── .archive/
│ ├── v1.2/
│ │ ├── PRD-01.0_index.md # Archived v1.2
│ │ ├── PRD-01.1_core.md
│ │ └── ARCHIVE_MANIFEST.md # Archive metadataARCHIVE_MANIFEST.md:
markdown
undefinedArchive Manifest: PRD-01 v1.2
Archive Manifest: PRD-01 v1.2
| Field | Value |
|---|---|
| Archived Version | 1.2 |
| Archived Date | 2026-02-10T16:00:00 |
| Reason | Upstream drift > 15% (18.5%) |
| Superseded By | v2.0 |
| Upstream Changes | BRD-01 (major revision) |
| Field | Value |
|---|---|
| Archived Version | 1.2 |
| Archived Date | 2026-02-10T16:00:00 |
| Reason | Upstream drift > 15% (18.5%) |
| Superseded By | v2.0 |
| Upstream Changes | BRD-01 (major revision) |
Change Summary
Change Summary
| Upstream Document | Change % | Key Changes |
|---|---|---|
| BRD-01.1_core.md | 18.5% | New auth methods, revised security model |
| Upstream Document | Change % | Key Changes |
|---|---|---|
| BRD-01.1_core.md | 18.5% | New auth methods, revised security model |
Downstream Impact
Downstream Impact
Documents requiring update after regeneration:
- EARS-01 (derived from PRD-01)
- BDD-01 (test scenarios)
- ADR-01 (architecture decisions)
**No Deletion Policy**:
- Upstream content marked as deleted is **NOT** removed from document
- Instead, marked with `[DEPRECATED]` status:
```markdownDocuments requiring update after regeneration:
- EARS-01 (derived from PRD-01)
- BDD-01 (test scenarios)
- ADR-01 (architecture decisions)
**不删除策略**:
- 上游标记为删除的内容**不会**从文档中移除
- 而是标记为`[DEPRECATED]`状态:
```markdownPRD.01.01.05: Legacy Authentication Method [DEPRECATED]
PRD.01.01.05: Legacy Authentication Method [DEPRECATED]
Status: DEPRECATED (upstream removed 2026-02-10T16:00:00) Reason: Replaced by PRD.01.01.13 (Passkey Authentication) Action: Retain for traceability; do not implement
Original Requirement: {original_text}
---Status: DEPRECATED (upstream removed 2026-02-10T16:00:00) Reason: Replaced by PRD.01.01.13 (Passkey Authentication) Action: Retain for traceability; do not implement
Original Requirement: {original_text}
---6.5 Drift Cache Update
6.5 更新变更缓存
After processing drift, update :
.drift_cache.jsonjson
{
"document_version": "1.1",
"last_synced": "2026-02-10T16:00:00",
"sync_status": "auto-merged",
"upstream_state": {
"../01_BRD/BRD-01.1_core.md": {
"hash": "sha256:a1b2c3d4e5f6...",
"version": "2.3",
"last_modified": "2026-02-10T15:30:00",
"change_pct": 4.2,
"sync_action": "tier1_auto_merge"
},
"../01_BRD/BRD-01.2_requirements.md": {
"hash": "sha256:g7h8i9j0k1l2...",
"version": "1.5",
"last_modified": "2026-02-10T14:00:00",
"change_pct": 8.7,
"sync_action": "tier2_auto_merge_detailed"
}
},
"merge_history": [
{
"date": "2026-02-10T16:00:00",
"tier": 1,
"change_pct": 4.2,
"items_added": 1,
"items_updated": 2,
"version_before": "1.0",
"version_after": "1.0.1"
}
],
"deprecated_items": [
{
"id": "PRD.01.01.05",
"deprecated_date": "2026-02-10T16:00:00",
"reason": "Upstream removal",
"replaced_by": "PRD.01.01.13"
}
]
}处理完变更后,更新:
.drift_cache.jsonjson
{
"document_version": "1.1",
"last_synced": "2026-02-10T16:00:00",
"sync_status": "auto-merged",
"upstream_state": {
"../01_BRD/BRD-01.1_core.md": {
"hash": "sha256:a1b2c3d4e5f6...",
"version": "2.3",
"last_modified": "2026-02-10T15:30:00",
"change_pct": 4.2,
"sync_action": "tier1_auto_merge"
},
"../01_BRD/BRD-01.2_requirements.md": {
"hash": "sha256:g7h8i9j0k1l2...",
"version": "1.5",
"last_modified": "2026-02-10T14:00:00",
"change_pct": 8.7,
"sync_action": "tier2_auto_merge_detailed"
}
},
"merge_history": [
{
"date": "2026-02-10T16:00:00",
"tier": 1,
"change_pct": 4.2,
"items_added": 1,
"items_updated": 2,
"version_before": "1.0",
"version_after": "1.0.1"
}
],
"deprecated_items": [
{
"id": "PRD.01.01.05",
"deprecated_date": "2026-02-10T16:00:00",
"reason": "Upstream removal",
"replaced_by": "PRD.01.01.13"
}
]
}6.6 Fix Report: Drift Section
6.6 修复报告:变更章节
Drift Summary in Fix Report:
markdown
undefined修复报告中的变更摘要:
markdown
undefinedPhase 6: Upstream Drift Resolution
Phase 6: Upstream Drift Resolution
Drift Analysis Summary
Drift Analysis Summary
| Upstream Document | Change % | Tier | Action Taken |
|---|---|---|---|
| BRD-01.1_core.md | 4.2% | 1 | Auto-merged |
| BRD-01.2_requirements.md | 8.7% | 2 | Auto-merged (detailed) |
| BRD-01.3_quality_ops.md | 18.5% | 3 | Archived + Regenerated |
| Upstream Document | Change % | Tier | Action Taken |
|---|---|---|---|
| BRD-01.1_core.md | 4.2% | 1 | Auto-merged |
| BRD-01.2_requirements.md | 8.7% | 2 | Auto-merged (detailed) |
| BRD-01.3_quality_ops.md | 18.5% | 3 | Archived + Regenerated |
Tier 1 Auto-Merges (< 5%)
Tier 1 Auto-Merges (< 5%)
| ID | Type | Source | Description |
|---|---|---|---|
| PRD.01.01.13 | Added | BRD-01.1:3.5 | Passkey authentication support |
| PRD.01.02.05 | Updated | BRD-01.1:4.2 | Session timeout 30->45 min |
| ID | Type | Source | Description |
|---|---|---|---|
| PRD.01.01.13 | Added | BRD-01.1:3.5 | Passkey authentication support |
| PRD.01.02.05 | Updated | BRD-01.1:4.2 | Session timeout 30->45 min |
Tier 2 Auto-Merges (5-15%)
Tier 2 Auto-Merges (5-15%)
| ID | Type | Source | Description |
|---|---|---|---|
| PRD.01.01.14 | Added | BRD-01.2:5.3 | WebAuthn fallback mechanism |
| PRD.01.07.04 | Added | BRD-01.2:7.2 | New risk: credential phishing |
| ID | Type | Source | Description |
|---|---|---|---|
| PRD.01.01.14 | Added | BRD-01.2:5.3 | WebAuthn fallback mechanism |
| PRD.01.07.04 | Added | BRD-01.2:7.2 | New risk: credential phishing |
Tier 3 Archives (> 15%)
Tier 3 Archives (> 15%)
| Document | Previous Version | New Version | Reason |
|---|---|---|---|
| PRD-01.2_requirements.md | 1.2 | 2.0 | 18.5% upstream change |
Archive Location:
docs/02_PRD/PRD-01_f1_iam/.archive/v1.2/| Document | Previous Version | New Version | Reason |
|---|---|---|---|
| PRD-01.2_requirements.md | 1.2 | 2.0 | 18.5% upstream change |
Archive Location:
docs/02_PRD/PRD-01_f1_iam/.archive/v1.2/Deprecated Items (No Deletion)
Deprecated Items (No Deletion)
| ID | Deprecated Date | Reason | Replaced By |
|---|---|---|---|
| PRD.01.01.05 | 2026-02-10T16:00:00 | Upstream removed | PRD.01.01.13 |
| ID | Deprecated Date | Reason | Replaced By |
|---|---|---|---|
| PRD.01.01.05 | 2026-02-10T16:00:00 | Upstream removed | PRD.01.01.13 |
Version Changes
Version Changes
| File | Before | After | Change Type |
|---|---|---|---|
| PRD-01.1_core.md | 1.0 | 1.0.1 | Patch (Tier 1) |
| PRD-01.2_requirements.md | 1.0 | 1.1 | Minor (Tier 2) |
| PRD-01.3_features.md | 1.2 | 2.0 | Major (Tier 3) |
---| File | Before | After | Change Type |
|---|---|---|---|
| PRD-01.1_core.md | 1.0 | 1.0.1 | Patch (Tier 1) |
| PRD-01.2_requirements.md | 1.0 | 1.1 | Minor (Tier 2) |
| PRD-01.3_features.md | 1.2 | 2.0 | Major (Tier 3) |
---Command Usage
命令使用
Basic Usage
基础用法
bash
undefinedbash
undefinedFix PRD based on latest review
Fix PRD based on latest review
/doc-prd-fixer PRD-01
/doc-prd-fixer PRD-01
Fix with explicit review report
Fix with explicit review report
/doc-prd-fixer PRD-01 --review-report PRD-01.R_review_report_v001.md
/doc-prd-fixer PRD-01 --review-report PRD-01.R_review_report_v001.md
Fix and re-run review
Fix and re-run review
/doc-prd-fixer PRD-01 --revalidate
/doc-prd-fixer PRD-01 --revalidate
Fix with iteration limit
Fix with iteration limit
/doc-prd-fixer PRD-01 --revalidate --max-iterations 3
undefined/doc-prd-fixer PRD-01 --revalidate --max-iterations 3
undefinedOptions
选项
| Option | Default | Description |
|---|---|---|
| latest | Specific review report to use |
| false | Run reviewer after fixes |
| 3 | Max fix-review cycles |
| all | Specific fix types (comma-separated) |
| true | Create missing reference files |
| true | Backup PRD before fixing |
| false | Preview fixes without applying |
| false | Interactive drift acknowledgment mode |
| true | Update .drift_cache.json after fixes |
| 选项 | 默认值 | 描述 |
|---|---|---|
| latest | 指定要使用的评审报告 |
| false | 修复后运行评审工具 |
| 3 | 最大修复-评审循环次数 |
| all | 指定修复类型(逗号分隔) |
| true | 创建缺失的参考文件 |
| true | 修复前备份PRD |
| false | 预览修复内容但不实际应用 |
| false | 交互式变更确认模式 |
| true | 修复后更新.drift_cache.json |
Fix Types
修复类型
| Type | Description |
|---|---|
| Create missing glossary, appendix, feature docs |
| Fix link paths |
| Convert invalid/legacy element IDs |
| Fix placeholders, dates, names |
| Update traceability and cross-references |
| Handle upstream drift detection issues |
| All fix types (default) |
| 类型 | 描述 |
|---|---|
| 创建缺失的术语表、附录、功能文档 |
| 修复链接路径 |
| 转换无效/旧版元素ID |
| 修复占位符、日期、名称 |
| 更新可追溯性和交叉引用 |
| 处理上游变更检测问题 |
| 所有修复类型(默认) |
Output Artifacts
输出工件
Fix Report
修复报告
Nested Folder Rule: ALL PRDs use nested folders () regardless of size. Fix reports are stored alongside the PRD document in the nested folder.
PRD-NN_{slug}/File Naming:
PRD-NN.F_fix_report_vNNN.mdLocation: Inside the PRD nested folder:
docs/02_PRD/PRD-NN_{slug}/Structure:
markdown
---
title: "PRD-NN.F: Fix Report v001"
tags:
- prd
- fix-report
- quality-assurance
custom_fields:
document_type: fix-report
artifact_type: PRD-FIX
layer: 2
parent_doc: PRD-NN
source_review: PRD-NN.R_review_report_v001.md
fix_date: "YYYY-MM-DDTHH:MM:SS"
fix_tool: doc-prd-fixer
fix_version: "2.0"
---嵌套文件夹规则:所有PRD无论大小,均使用嵌套文件夹()。修复报告与PRD文档一同存储在嵌套文件夹中。
PRD-NN_{slug}/文件命名:
PRD-NN.F_fix_report_vNNN.md存储位置:PRD嵌套文件夹内:
docs/02_PRD/PRD-NN_{slug}/结构:
markdown
---
title: "PRD-NN.F: Fix Report v001"
tags:
- prd
- fix-report
- quality-assurance
custom_fields:
document_type: fix-report
artifact_type: PRD-FIX
layer: 2
parent_doc: PRD-NN
source_review: PRD-NN.R_review_report_v001.md
fix_date: "YYYY-MM-DDTHH:MM:SS"
fix_tool: doc-prd-fixer
fix_version: "2.0"
---PRD-NN Fix Report v001
PRD-NN Fix Report v001
Summary
Summary
| Metric | Value |
|---|---|
| Source Review | PRD-NN.R_review_report_v001.md |
| Issues in Review | 12 |
| Issues Fixed | 10 |
| Issues Remaining | 2 (manual review required) |
| Files Created | 2 |
| Files Modified | 4 |
| Metric | Value |
|---|---|
| Source Review | PRD-NN.R_review_report_v001.md |
| Issues in Review | 12 |
| Issues Fixed | 10 |
| Issues Remaining | 2 (manual review required) |
| Files Created | 2 |
| Files Modified | 4 |
Files Created
Files Created
| File | Type | Location |
|---|---|---|
| PRD-00_GLOSSARY.md | Product Glossary | docs/02_PRD/ |
| PRD-01_APPENDIX_A.md | Appendix Placeholder | docs/02_PRD/ |
| File | Type | Location |
|---|---|---|
| PRD-00_GLOSSARY.md | Product Glossary | docs/02_PRD/ |
| PRD-01_APPENDIX_A.md | Appendix Placeholder | docs/02_PRD/ |
Fixes Applied
Fixes Applied
| # | Issue Code | Issue | Fix Applied | File |
|---|---|---|---|---|
| 1 | REV-L001 | Broken glossary link | Created PRD-00_GLOSSARY.md | PRD-01.3_features.md |
| 2 | REV-L004 | Broken BRD reference | Updated path to ../01_BRD/BRD-01.md | PRD-01.1_core.md |
| 3 | REV-N004 | Element type 25 invalid | Converted to type 01 | PRD-01.1_core.md |
| 4 | REV-L003 | Absolute path used | Converted to relative | PRD-01.2_requirements.md |
| # | Issue Code | Issue | Fix Applied | File |
|---|---|---|---|---|
| 1 | REV-L001 | Broken glossary link | Created PRD-00_GLOSSARY.md | PRD-01.3_features.md |
| 2 | REV-L004 | Broken BRD reference | Updated path to ../01_BRD/BRD-01.md | PRD-01.1_core.md |
| 3 | REV-N004 | Element type 25 invalid | Converted to type 01 | PRD-01.1_core.md |
| 4 | REV-L003 | Absolute path used | Converted to relative | PRD-01.2_requirements.md |
Issues Requiring Manual Review
Issues Requiring Manual Review
| # | Issue Code | Issue | Location | Reason |
|---|---|---|---|---|
| 1 | REV-P001 | [TODO] placeholder | PRD-01.2:L45 | Product decision needed |
| 2 | REV-P006 | Missing user story format | PRD-01.2:L120 | Story refinement required |
| # | Issue Code | Issue | Location | Reason |
|---|---|---|---|---|
| 1 | REV-P001 | [TODO] placeholder | PRD-01.2:L45 | Product decision needed |
| 2 | REV-P006 | Missing user story format | PRD-01.2:L120 | Story refinement required |
Validation After Fix
Validation After Fix
| Metric | Before | After | Delta |
|---|---|---|---|
| Review Score | 92 | 97 | +5 |
| Errors | 2 | 0 | -2 |
| Warnings | 4 | 1 | -3 |
| Metric | Before | After | Delta |
|---|---|---|---|
| Review Score | 92 | 97 | +5 |
| Errors | 2 | 0 | -2 |
| Warnings | 4 | 1 | -3 |
Next Steps
Next Steps
- Complete PRD-01_APPENDIX_A.md placeholder
- Address remaining [TODO] placeholders
- Run to verify fixes
/doc-prd-reviewer PRD-01
---- Complete PRD-01_APPENDIX_A.md placeholder
- Address remaining [TODO] placeholders
- Run to verify fixes
/doc-prd-reviewer PRD-01
---Integration with Autopilot
与自动生成工具的集成
This skill is invoked by in the Review -> Fix cycle:
doc-prd-autopilotmermaid
flowchart LR
subgraph Phase5["Phase 5: Review & Fix Cycle"]
A[doc-prd-reviewer] --> B{Score >= 90?}
B -->|No| C[doc-prd-fixer]
C --> D{Iteration < Max?}
D -->|Yes| A
D -->|No| E[Flag for Manual Review]
B -->|Yes| F[PASS]
endAutopilot Integration Points:
| Phase | Action | Skill |
|---|---|---|
| Phase 5a | Run initial review | |
| Phase 5b | Apply fixes if issues found | |
| Phase 5c | Re-run review | |
| Phase 5d | Repeat until pass or max iterations | Loop |
该工具在「评审→修复」循环中被调用:
doc-prd-autopilotmermaid
flowchart LR
subgraph Phase5["Phase 5: Review & Fix Cycle"]
A[doc-prd-reviewer] --> B{Score >= 90?}
B -->|No| C[doc-prd-fixer]
C --> D{Iteration < Max?}
D -->|Yes| A
D -->|No| E[Flag for Manual Review]
B -->|Yes| F[PASS]
end自动生成工具集成点:
| 阶段 | 动作 | 工具 |
|---|---|---|
| 阶段5a | 运行初始评审 | |
| 阶段5b | 发现问题后应用修复 | |
| 阶段5c | 重新运行评审 | |
| 阶段5d | 重复直到通过或达到最大迭代次数 | 循环 |
Error Handling
错误处理
Recovery Actions
恢复操作
| Error | Action |
|---|---|
| Review report not found | Prompt to run |
| Cannot create file (permissions) | Log error, continue with other fixes |
| Cannot parse review report | Abort with clear error message |
| Max iterations exceeded | Generate report, flag for manual review |
| BRD not found | Log warning, skip BRD-dependent fixes |
| 错误 | 动作 |
|---|---|
| 未找到评审报告 | 提示先运行 |
| 无法创建文件(权限问题) | 记录错误,继续其他修复 |
| 无法解析评审报告 | 终止并显示清晰的错误信息 |
| 达到最大迭代次数 | 生成报告,标记为需手动评审 |
| 未找到BRD | 记录警告,跳过依赖BRD的修复 |
Backup Strategy
备份策略
Before applying any fixes:
- Create backup in
tmp/backup/PRD-NN_YYYYMMDD_HHMMSS/ - Copy all PRD files to backup location
- Apply fixes to original files
- If error during fix, restore from backup
应用任何修复前:
- 在创建备份
tmp/backup/PRD-NN_YYYYMMDD_HHMMSS/ - 将所有PRD文件复制到备份位置
- 对原始文件应用修复
- 修复过程中出错时,从备份恢复
Related Skills
相关工具
| Skill | Relationship |
|---|---|
| Provides review report (input) |
| Orchestrates Review -> Fix cycle |
| Structural validation |
| Element ID standards |
| PRD creation rules |
| Upstream BRD validation |
| 工具 | 关系 |
|---|---|
| 提供评审报告(输入) |
| 编排「评审→修复」循环 |
| 结构验证 |
| 元素ID标准 |
| PRD创建规则 |
| 上游BRD验证 |
Version History
版本历史
| Version | Date | Changes |
|---|---|---|
| 2.1 | 2026-02-11 | Structure Compliance: Added Phase 0 for nested folder rule enforcement (REV-STR001-STR004); Fixed all path comments to use nested folders for both monolithic and sectioned PRDs; Updated link path calculations for mandatory nested structure |
| 2.0 | 2026-02-10T16:00:00 | Major: Implemented tiered auto-merge system - Tier 1 (<5%): auto-merge additions/updates with patch version increment; Tier 2 (5-15%): auto-merge with detailed changelog and minor version increment; Tier 3 (>15%): archive current version and trigger regeneration with major version increment; No deletion policy (mark as DEPRECATED instead); Auto-generated IDs for new requirements (PRD.NN.TT.SS format); Archive manifest creation; Enhanced drift cache with merge history |
| 1.0 | 2026-02-10T15:00:00 | Initial skill creation; 6-phase fix workflow; Glossary and feature file creation; Element ID conversion for PRD codes (01-09, 11, 22, 24); Broken link fixes; BRD drift detection; Integration with autopilot Review->Fix cycle |
| 版本 | 日期 | 变更 |
|---|---|---|
| 2.1 | 2026-02-11 | 结构合规性:新增阶段0用于强制实施嵌套文件夹规则(REV-STR001-STR004);修复所有路径注释,使单体式和分段式PRD均使用嵌套文件夹;更新强制嵌套结构下的链接路径计算 |
| 2.0 | 2026-02-10T16:00:00 | 重大更新:实现分级自动合并系统 - 第一级(<5%):自动合并新增/更新内容并升级补丁版本;第二级(5-15%):自动合并并生成详细变更日志,升级次要版本;第三级(>15%):归档当前版本并触发重新生成,升级主版本;不删除策略(标记为DEPRECATED而非删除);为新增需求自动生成ID(PRD.NN.TT.SS格式);创建归档清单;增强变更缓存,添加合并历史 |
| 1.0 | 2026-02-10T15:00:00 | 初始版本创建;6阶段修复工作流;术语表和功能文件创建;PRD代码的元素ID转换(01-09、11、22、24);失效链接修复;BRD变更检测;与自动生成工具的「评审→修复」循环集成 |