名称: 路线图 描述: “创建和管理项目路线图,包括里程碑和PRD队列。在架构定义后用于项目规划。触发条件: 创建路线图、规划里程碑、组织PRD。”
路线图技能
通过创建里程碑和组织PRD到可执行队列来规划项目执行。
工作空间模式说明
在运行于工作空间模式时,所有路径相对于.aha-loop/目录:
- 愿景分析:
.aha-loop/project.vision-analysis.md - 架构:
.aha-loop/project.architecture.md - 路线图:
.aha-loop/project.roadmap.json - PRD文件:
.aha-loop/tasks/
协调器将在提示上下文中提供实际路径。
工作
- 读取
project.vision-analysis.md和project.architecture.md - 将项目分解为里程碑
- 将每个里程碑分解为PRD
- 按依赖关系排序PRD
- 输出
project.roadmap.json - 在
tasks/中生成初始PRD文件
里程碑策略
标准里程碑结构
| 里程碑 | 焦点 | 目标 |
|---|---|---|
| M0: 基础 | 项目脚手架、CI/CD、工具 | 开发环境就绪 |
| M1: MVP | 仅核心功能 | 最小可用产品 |
| M2: 必需功能 | 重要功能 | 基本使用功能完备 |
| M3: 增强 | 锦上添花的功能 | 抛光产品 |
| M4: 优化 | 性能、UX抛光 | 生产就绪 |
里程碑规模
每个里程碑应:
- 在合理时间内可完成
- 有3-7个PRD(避免过多或过少)
- 提供可测试的价值
- 建立在先前里程碑基础上
PRD分解
从功能到PRD
对于每个里程碑,将功能分解为PRD:
里程碑: M1 - MVP
├── PRD-001: 项目脚手架
├── PRD-002: 数据库模式
├── PRD-003: 核心数据模型
├── PRD-004: 基本API端点
└── PRD-005: 最小UI
PRD规模
每个PRD应:
- 需要1-5次Aha Loop迭代(5-25个故事)
- 专注于一个连贯的功能区域
- 可独立测试
- 不依赖于未完成的PRD
PRD排序
按依赖关系排序PRD:
- 基础设施优先 - 项目设置、数据库、认证
- 后端先于前端 - API先于使用它们的UI
- 核心先于可选 - 必须功能先于锦上添花
- 数据先于呈现 - 模型先于视图
路线图JSON结构
{
"version": 1,
"projectName": "[来自愿景]",
"status": "in_progress",
"currentMilestone": "M1",
"currentPRD": "PRD-002",
"createdAt": "[时间戳]",
"updatedAt": "[时间戳]",
"milestones": [
{
"id": "M0",
"title": "基础",
"description": "项目设置和开发环境",
"status": "completed",
"completedAt": "[时间戳]",
"prds": [
{
"id": "PRD-001",
"title": "项目脚手架",
"description": "初始化项目结构、依赖和工具",
"status": "completed",
"prdFile": "tasks/prd-scaffolding.md",
"stories": 5,
"completedAt": "[时间戳]"
}
]
},
{
"id": "M1",
"title": "MVP",
"description": "具有核心功能的最小可行产品",
"status": "in_progress",
"prds": [
{
"id": "PRD-002",
"title": "数据库模式",
"description": "设计和实施数据库模式",
"status": "in_progress",
"prdFile": "tasks/prd-database.md",
"stories": 8,
"dependsOn": ["PRD-001"]
},
{
"id": "PRD-003",
"title": "核心API",
"description": "实施核心API端点",
"status": "pending",
"prdFile": "tasks/prd-core-api.md",
"stories": 12,
"dependsOn": ["PRD-002"]
}
]
},
{
"id": "M2",
"title": "必需功能",
"description": "完成基本使用的必需功能",
"status": "pending",
"prds": []
}
],
"changelog": [
{
"timestamp": "[时间戳]",
"action": "created",
"description": "从愿景和架构创建的初始路线图"
}
]
}
路线图创建过程
步骤1: 分析需求
从愿景分析,分类功能:
## 功能分类
### M1: MVP(必须交付)
- [功能1]
- [功能2]
### M2: 必需功能(应该交付)
- [功能3]
- [功能4]
### M3: 增强(锦上添花)
- [功能5]
步骤2: 创建M0基础
每个项目从M0开始:
## M0: 基础PRD
### PRD-001: 项目脚手架
- 使用选定的技术栈初始化项目
- 设置目录结构
- 配置代码检查和格式化
- 设置基本CI(如果适用)
- 创建初始README
### PRD-002: 开发环境
- 数据库设置(如果适用)
- 环境配置
- 开发脚本
- 基本测试基础设施
步骤3: 将里程碑分解为PRD
对于M0之后的每个里程碑:
- 列出此里程碑的所有功能
- 分组相关功能
- 按依赖关系排序
- 为每个组创建PRD
- 估计每个PRD的故事数
步骤4: 生成PRD文件
对于每个PRD,在tasks/中创建存根文件:
# PRD: [标题]
**ID:** PRD-XXX
**里程碑:** M[N]
**状态:** 待定
## 概述
[来自路线图的简要描述]
## 上下文
[这与先前PRD和整体项目的关系]
## 目标
- [目标1]
- [目标2]
## 用户故事
[当此PRD激活时生成]
## 依赖
- PRD-XXX: [它依赖的内容]
## 验收标准
- [ ] [高层次标准]
- [ ] [另一个标准]
---
*当此PRD成为活动PRD时,将完全扩展。*
动态路线图更新
何时更新路线图
路线图应在以下情况更新:
- PRD完成 - 标记为完成,更新时间戳
- 发现新需求 - 添加新PRD
- 范围变更 - 修改或删除PRD
- 找到更好方法 - 重构PRD
- 里程碑完成 - 更新状态,移至下一个
更新过程
{
"changelog": [
{
"timestamp": "2026-01-29T12:00:00Z",
"action": "prd_completed",
"prdId": "PRD-002",
"description": "数据库模式已实施"
},
{
"timestamp": "2026-01-29T14:00:00Z",
"action": "prd_added",
"prdId": "PRD-007",
"description": "基于性能研究添加缓存层PRD"
}
]
}
自动触发器
协调器应触发路线图审查:
- 每次PRD完成后
- 每次里程碑完成后
- 当记录到重要学习时
- 当错误重复发生时
与协调器集成
协调器读取
# 获取当前PRD
jq '.currentPRD' project.roadmap.json
# 获取PRD文件路径
jq -r '.milestones[].prds[] | select(.id == "PRD-002") | .prdFile' project.roadmap.json
协调器更新
PRD完成后:
# 更新PRD状态
jq '.milestones[].prds[] |= if .id == "PRD-002" then .status = "completed" else . end' project.roadmap.json
PRD队列管理
获取下一个PRD
# 伪代码,用于查找下一个PRD
def get_next_prd(roadmap):
for milestone in roadmap.milestones:
if milestone.status == "completed":
continue
for prd in milestone.prds:
if prd.status == "pending":
if all_dependencies_complete(prd):
return prd
return None # 全部完成或阻塞
处理阻塞的PRD
如果PRD的依赖不满足:
- 跳过到下一个可用PRD
- 如果没有PRD可用,报告阻塞问题
- 考虑是否需要重新优先依赖
示例路线图
项目: 个人财务追踪器(来自愿景示例)
{
"version": 1,
"projectName": "财务追踪器",
"status": "in_progress",
"currentMilestone": "M0",
"currentPRD": "PRD-001",
"milestones": [
{
"id": "M0",
"title": "基础",
"status": "in_progress",
"prds": [
{
"id": "PRD-001",
"title": "SvelteKit项目设置",
"description": "使用TypeScript、Tailwind、PWA支持初始化SvelteKit项目",
"status": "in_progress",
"prdFile": "tasks/prd-project-setup.md",
"stories": 6
}
]
},
{
"id": "M1",
"title": "MVP - 核心支出追踪",
"status": "pending",
"prds": [
{
"id": "PRD-002",
"title": "数据层",
"description": "使用Dexie实施IndexedDB用于支出存储",
"status": "pending",
"prdFile": "tasks/prd-data-layer.md",
"stories": 8,
"dependsOn": ["PRD-001"]
},
{
"id": "PRD-003",
"title": "快速支出输入",
"description": "快速支出输入表单(< 5秒目标)",
"status": "pending",
"prdFile": "tasks/prd-expense-entry.md",
"stories": 10,
"dependsOn": ["PRD-002"]
},
{
"id": "PRD-004",
"title": "支出列表视图",
"description": "查看和管理记录的支出",
"status": "pending",
"prdFile": "tasks/prd-expense-list.md",
"stories": 8,
"dependsOn": ["PRD-002"]
}
]
},
{
"id": "M2",
"title": "报告和PWA",
"status": "pending",
"prds": [
{
"id": "PRD-005",
"title": "月度报告",
"description": "自动生成的月度支出报告",
"status": "pending",
"prdFile": "tasks/prd-reports.md",
"stories": 10,
"dependsOn": ["PRD-003", "PRD-004"]
},
{
"id": "PRD-006",
"title": "PWA离线支持",
"description": "具有服务工作器的完全离线能力",
"status": "pending",
"prdFile": "tasks/prd-pwa.md",
"stories": 8,
"dependsOn": ["PRD-002"]
}
]
}
]
}
清单
完成路线图前:
- [ ] 所有里程碑定义明确目标
- [ ] 为至少M0和M1创建PRD
- [ ] PRD间的依赖关系映射
- [ ] 在tasks/中创建PRD存根文件
- [ ] 路线图JSON验证通过
- [ ] 当前里程碑和PRD设置正确
- [ ] 初始化变更日志
- [ ] 保存到
project.roadmap.json