名称: 计划评审技能 描述: “基于研究发现评审和调整PRD计划。在研究完成后使用,以评估故事修改。触发于:评审计划、调整故事、基于研究更新PRD。”
计划评审技能
评估研究发现并决定是否调整PRD中的即将到来的故事。
工作内容
- 阅读当前故事的研究报告
- 评估发现是否影响当前或未来故事
- 决定计划修改(如果有)
- 更新
prd.json并记录更改 - 在
changeLog中记录所有更改 - 确保计划保持连贯和可实现
何时修改计划
当研究揭示以下内容时修改故事:
- 比原计划更好的技术方法
- 缺失的先决步骤
- 应拆分的故事(太大不适合一个上下文)
- 可合并的故事(太小,紧密耦合)
- 依赖关系改变需要重新排序
- 新边缘情况需要额外验收标准
当以下情况时不要修改:
- 发现有趣但不影响实现
- 更改会使已完成故事无效
- 修改是范围蔓延(超出原PRD目标)
计划修改类型
1. 修改现有故事
更新验收标准、描述或研究主题。
{
"timestamp": "2026-01-29T12:00:00Z",
"storyId": "US-002",
"action": "modified",
"reason": "研究发现现有徽章组件支持优先级颜色,简化实现",
"changes": {
"acceptanceCriteria": {
"removed": ["创建新的PriorityBadge组件"],
"added": ["复用Badge组件并带有优先级颜色变体"]
}
}
}
2. 添加新故事
插入先决或后续故事。
{
"timestamp": "2026-01-29T12:00:00Z",
"storyId": "US-001.5",
"action": "added",
"reason": "研究显示需要对优先级列添加数据库索引以提高过滤性能",
"insertAfter": "US-001"
}
3. 拆分故事
将故事分解为更小的部分。
{
"timestamp": "2026-01-29T12:00:00Z",
"storyId": "US-003",
"action": "split",
"reason": "故事太大 - 将下拉组件与保存逻辑分离",
"splitInto": ["US-003a", "US-003b"]
}
4. 重新排序故事
基于新依赖关系更改优先级/顺序。
{
"timestamp": "2026-01-29T12:00:00Z",
"storyId": "US-004",
"action": "reordered",
"reason": "URL状态管理需要在过滤器实现之前完成",
"newPriority": 2,
"previousPriority": 4
}
5. 移除故事
标记故事为不必要(无法移除已完成故事)。
{
"timestamp": "2026-01-29T12:00:00Z",
"storyId": "US-005",
"action": "removed",
"reason": "研究发现此功能在代码库中已存在"
}
计划评审流程
步骤1:阅读研究报告
从 scripts/aha-loop/research/[story-id]-research.md 加载研究报告
关注:
- 实施建议
- 替代方案比较(如果建议与计划不同)
- 后续研究需求
- 发现的问题
步骤2:评估影响
针对每个发现,询问:
-
这影响当前故事吗?
- 如果需要,更新验收标准
- 添加实施笔记
-
这影响未来故事吗?
- 检查依赖关系是否改变
- 检查是否需要新先决条件
- 检查是否有故事可以简化/移除
-
这揭示范围问题吗?
- 故事太大?拆分它。
- 故事太小?与相关故事合并。
- 缺失故事?添加它们。
步骤3:起草更改
修改 prd.json 前:
- 列出所有提议更改
- 确认未影响已完成故事
- 确保更改保持逻辑故事顺序
- 检查所有故事在一个上下文窗口中可实现
步骤4:更新prd.json
首先备份(通过aha-loop.sh自动,但需验证)。
应用更改到 prd.json:
// 示例:添加故事
{
"id": "US-001.5",
"title": "为优先级过滤添加数据库索引",
"description": "作为开发者,我需要优先级列上的索引以支持高效过滤。",
"acceptanceCriteria": [
"在tasks.priority列创建索引",
"迁移运行无误",
"类型检查通过"
],
"priority": 1.5, // 后续会归一化
"passes": false,
"researchTopics": [],
"researchCompleted": true, // 简单索引无需研究
"learnings": "",
"implementationNotes": "在US-001研究中发现过滤查询需要此索引",
"notes": ""
}
添加到changeLog:
{
"changeLog": [
// ... 现有条目
{
"timestamp": "2026-01-29T12:00:00Z",
"storyId": "US-001.5",
"action": "added",
"reason": "US-001研究揭示需要索引以支持高效优先级过滤(US-004)",
"researchSource": "scripts/aha-loop/research/US-001-research.md"
}
]
}
步骤5:归一化优先级
修改后,确保优先级连续:
// 之前: [1, 1.5, 2, 3, 4]
// 之后: [1, 2, 3, 4, 5]
安全规则
绝对不要:
- 删除或修改
passes: true的故事 - 添加超出原PRD目标的范围
- 创建故事间循环依赖
- 未记录在
changeLog中做更改
总是:
- 记录每个更改原因
- 引用研究来源
- 保持依赖顺序(模式 → 后端 → UI)
- 保持故事大小适合一个上下文窗口
评审报告模板
计划评审后,追加到 progress.txt:
## 计划评审 - [日期/时间]
### 分析的研究
- [故事 ID]: [研究报告路径]
### 所做更改
**[动作类型]: [故事 ID]**
- 原因: [为什么需要此更改]
- 影响: [影响内容]
### 无更改(如果适用)
- 研究发现无需计划修改
- 原因: [为什么无需更改]
### 更新故事顺序
1. US-001: [标题] ✓ (已完成)
2. US-001.5: [标题] (新增)
3. US-002: [标题]
...
---
示例:完整计划评审
场景: US-001(添加优先级到数据库)研究揭示:
- 需要索引以提高过滤性能
- 现有徽章组件可复用
- URL状态管理模式已存在于代码库
更改:
-
添加 US-001.5 - 在优先级列创建索引
- 原因: 过滤查询(US-004)无索引会慢
-
修改 US-002 - 更新验收标准
- 移除: “创建PriorityBadge组件”
- 添加: “复用Badge组件并带有’priority’变体属性”
-
修改 US-004 - 添加实施笔记
- 笔记: “使用来自src/hooks/的现有useUrlState钩子”
无需重新排序 - 依赖关系未变。
检查清单
完成计划评审前:
- [ ] 研究报告完全分析
- [ ] 所有影响故事识别
- [ ] 未修改已完成故事
- [ ] 更改记录在
changeLog中 - [ ] 优先级归一化
- [ ] 依赖关系仍有效
- [ ] 所有故事在一个上下文窗口中可实现
- [ ] 评审摘要添加到
progress.txt