Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:24:40 +08:00
commit 5d86a939d2
18 changed files with 6171 additions and 0 deletions

View File

@@ -0,0 +1,955 @@
---
description: "需求规划拆解:将复杂需求转化为结构化任务树,生成执行计划"
---
# /runtime.plan - 需求规划与任务拆解
## 核心目标
**我们不是执行者,我们是规划者**
当面对复杂需求时,我们像经验丰富的架构师一样:
1. **理解需求本质** - 用户真正想要的是什么?
2. **功能分解** - 将大问题拆解为小任务
3. **识别依赖** - 哪些必须先做,哪些可以并行?
4. **估算工时** - 需要多少时间?风险在哪里?
5. **生成执行路径** - 最优的实施顺序
```
用户需求 → 需求分析 → 功能拆解 → 依赖识别 → 任务树 → 执行计划
/runtime.iterate
```
---
## 何时使用 /runtime.plan
### 必须使用场景
-**用户需求模糊**"我想加个电商功能" → 需要拆解为具体任务
-**技术方案不确定**:需要分析多种实现路径
-**项目范围大**:功能复杂,需要系统性规划
-**团队协作**:需要清晰的任务分配和依赖关系
-**估算和排期**:需要工作量估算和时间线
### 使用流程
```bash
用户: "实现用户认证系统注册、登录、密码重置、JWT"
AI:
/runtime.plan "用户认证系统"
↓ 自动执行...
[阶段1: 需求分析]
- 识别需求类型: 新功能开发
- 提取约束: JWT有效期7天、并发1000
- 分析技术栈: Express + PostgreSQL
- 识别范围: API、DB、安全、邮件
[阶段2: 功能拆解]
- 功能点: 注册、登录、密码重置、JWT管理、登出
- 任务数: 17个任务
- 分层: 基础设施 → 服务层 → API → 安全 → 测试
[阶段3: 依赖分析]
- 构建依赖图
- 计算关键路径
- 识别可并行任务
[阶段4: 估算与风险]
- 总工时: 17.75小时
- 关键路径: 9小时
- 风险: 密码重置流程复杂
[输出: 交付给用户]
- 可视化任务树 (ASCII/MD格式)
- JSON格式的机器可读计划
- 甘特图时间线
- 风险评估报告
# 然后进入迭代执行
/runtime.iterate --plan=plan-2025xx.json
↓ 自动执行...
```
---
## 规划过程详解
### 阶段1: 需求分析 (Understanding)
#### 1.1 需求类型识别
```python
def identify_requirement_type(text: str) -> RequirementType:
"""识别需求类型"""
if any(word in text for word in ["添加", "实现", "开发", "新功能"]):
return RequirementType.NEW_FEATURE
if any(word in text for word in ["修复", "bug", "错误", "问题"]):
return RequirementType.BUG_FIX
if any(word in text for word in ["重构", "优化", "改进", "清理"]):
return RequirementType.REFACTORING
if any(word in text for word in ["学习", "理解", "调研", "研究"]):
return RequirementType.RESEARCH
return RequirementType.UNKNOWN
```
#### 1.2 约束提取
从需求中提取隐含约束:
```python
def extract_constraints(demand: str) -> Constraints:
"""提取约束条件"""
constraints = {
"time": None, # 时间约束
"budget": None, # 资源约束
"tech_stack": [], # 技术栈约束
"performance": {}, # 性能约束
"security": {}, # 安全约束
}
# 性能约束
if "并发" in demand:
# "支持并发1000用户"
match = re.search(r"并发(\d+)", demand)
if match:
constraints["performance"]["concurrency"] = int(match.group(1))
# 时间约束
if "JWT" in demand and "" in demand:
# "JWT有效期7天"
match = re.search(r"有效期(\d+)天", demand)
if match:
constraints["security"]["tokenExpiry"] = int(match.group(1))
# 安全约束
if "加密" in demand:
constraints["security"]["encryption"] = True
return constraints
```
#### 1.3 知识缺口识别
```python
def identify_knowledge_gaps(demand: str, context: Memory) -> List[str]:
"""
识别规划需要但当前缺乏的知识
"""
gaps = []
# 检查技术栈
if "JWT" in demand and not context.has_pattern("jwt"):
gaps.append("JWT实现模式")
if "密码" in demand and not context.has_pattern("bcrypt"):
gaps.append("密码哈希模式")
# 检查架构
if "认证" in demand and not context.has_pattern("auth"):
gaps.append("认证架构模式")
# 检查项目上下文
if not context.has_key("tech_stack"):
gaps.append("项目技术栈")
return gaps
```
---
### 阶段2: 功能分解 (Decomposition)
#### 2.1 洋葱模型分解法
```
[用户可见功能]
╔═════════════════════╗
║ API层 (REST/GraphQL) ║
╚═══════════╦═══════════╝
╔═════════════════════╗
║ 服务层 (业务逻辑) ║
╚═══════════╦═══════════╝
╔═════════════════════╗
║ 数据层 (DB/Cache) ║
╚═══════════╦═══════════╝
╔═════════════════════╗
║ 基础设施 (安全/监控) ║
╚═════════════════════╝
```
**分解规则**:
- 每一层都可以独立分解
- 上层依赖下层
- 同层任务尽量解耦
#### 2.2 认证系统分解示例
```python
# 顶层: 用户故事
stories = [
"作为新用户,我可以注册账号",
"作为用户,我可以登录系统",
"作为忘记密码的用户,我可以重置密码",
"作为登录用户,我可以安全退出"
]
# 第二层: 功能点
features = {
"注册": {
"输入": ["email", "password"],
"验证": ["邮箱格式", "密码强度", "邮箱唯一性"],
"副作用": ["密码哈希", "生成验证Token", "发送邮件"]
},
"登录": {
"输入": ["email", "password"],
"验证": ["账号存在", "密码匹配", "账号已验证"],
"输出": ["JWT Token", "Refresh Token"]
}
}
# 第三层: 技术任务
tasks = {
"注册": [
"创建User表",
"实现密码bcrypt哈希",
"实现邮箱验证逻辑",
"实现Register API",
"集成邮件服务",
"写单元测试"
]
}
```
#### 2.3 MECE原则Mutually Exclusive, Collectively Exhaustive
```markdown
# 好的分解符合MECE
✅ 认证系统
├─ 注册(独立功能)
├─ 登录(独立功能)
├─ 密码重置(独立功能)
└─ Token管理独立功能
# 坏的分解不符合MECE
❌ 认证系统
├─ 注册(独立)
├─ 登录(独立)
├─ 发送邮件(重复:注册和密码重置都发送邮件) ← 不互斥
└─ ...缺少Token刷新、登出 ← 不穷尽
```
---
### 阶段3: 依赖关系分析
#### 3.1 依赖类型
```python
class DependencyType(Enum):
# 必须先完成A才能开始B
SEQUENTIAL = "sequential" # 串行
# A和B可以同时进行
PARALLEL = "parallel" # 并行
# A完成后B才能开始但C不需要A
PARTIAL = "partial" # 部分依赖
# A和B互相依赖需要重构设计
CIRCULAR = "circular" # 循环依赖(坏味道)
```
#### 3.2 构建依赖图
```python
def build_dependency_graph(tasks: List[Task]) -> nx.DiGraph:
"""
构建任务依赖关系图
"""
G = nx.DiGraph()
# 添加节点
for task in tasks:
G.add_node(task.id,
name=task.name,
effort=task.effort,
priority=task.priority,
risk=task.risk_level)
# 添加边(依赖关系)
for task in tasks:
for dep_id in task.dependencies:
G.add_edge(dep_id, task.id, type="depends_on")
return G
```
#### 3.3 识别关键路径
```python
def find_critical_path(G: nx.DiGraph) -> List[str]:
"""
计算关键路径(最长工时路径)
"""
# 计算每个节点到终点的最长路径
critical_path = nx.dag_longest_path(G, weight="effort")
return critical_path
```
**认证系统关键路径示例**: `User表 → Token表 → Token服务 → Login API → 集成测试`
**总工时**: 9小时最短可能完成时间
---
### 阶段4: 任务树生成
#### 4.1 可视化任务树 (ASCII)
```python
def generate_ascii_tree(tasks: List[Task]) -> str:
"""
生成ASCII格式的任务树
"""
lines = []
lines.append("实现用户认证系统 (目标)")
lines.append("")
# 按层级分组
layers = {
"基础设施": ["", "", ""],
"服务层": ["", "", ""],
"API层": ["", "", "", "", ""],
"安全层": ["", "", ""],
"测试": ["", "", ""]
}
for i, (layer_name, task_ids) in enumerate(layers.items()):
lines.append(f"├─ {layer_name}")
for j, task_id in enumerate(task_ids):
task = get_task(task_id)
prefix = "└─" if j == len(task_ids) - 1 else "├─"
lines.append(f"{prefix} {task_id}: {task.name} ({task.effort}h)")
return "\n".join(lines)
```
**输出示例**: `.ai-runtime/commands/runtime.plan.md`中包含完整示例
#### 4.2 JSON格式的任务树
```json
{
"project": "用户认证系统",
"total_tasks": 17,
"total_effort": "17.75h",
"critical_path": ["①","②","⑤","⑧","⑮","⑯"],
"critical_path_effort": "9h",
"tasks": [
{
"id": "①",
"name": "创建User表",
"layer": "基础设施",
"effort": 0.5,
"priority": "P0",
"dependencies": [],
"risk": "low",
"acceptance_criteria": [
"表结构符合User模型",
"已添加email唯一索引",
"created_at自动填充"
]
},
{
"id": "②",
"name": "创建Token表",
"layer": "基础设施",
"effort": 0.5,
"priority": "P0",
"dependencies": ["①"],
"risk": "low"
}
],
"phases": [
{
"phase": 1,
"name": "基础设施",
"tasks": ["①","②","③"],
"parallelizable": true
},
{
"phase": 2,
"name": "服务层",
"tasks": ["④","⑤","⑥"]
}
]
}
```
#### 4.3 甘特图生成
```python
def generate_gantt(tasks: List[Task]) -> str:
"""
生成简单的甘特图Markdown格式
"""
lines = []
lines.append("```gantt")
lines.append("title 认证系统实施计划")
lines.append("dateFormat YYYY-MM-DD")
lines.append("")
# 按阶段分组
for phase in ["基础设施", "服务层", "API层", "安全层", "测试"]:
phase_tasks = [t for t in tasks if t.layer == phase]
if phase_tasks:
lines.append(f"section {phase}")
for task in phase_tasks:
start = task.start_date.strftime('%Y-%m-%d')
end = task.end_date.strftime('%Y-%m-%d')
lines.append(f"{task.name} :a{task.id}, {start}, {end}")
lines.append("```")
return "\n".join(lines)
```
---
### 阶段5: 风险评估
#### 5.1 识别风险
```python
def identify_risks(tasks: List[Task]) -> List[Risk]:
"""
基于任务特征识别风险
"""
risks = []
for task in tasks:
# 复杂度过高风险
if task.effort > 4:
risks.append(Risk(
task=task.id,
level="medium",
category="complexity",
description="任务过大,可能隐藏未知问题",
mitigation="进一步分解成子任务"
))
# 依赖过多风险
if len(task.dependencies) > 3:
risks.append(Risk(
task=task.id,
level="high",
category="dependency",
description="强依赖多个任务,成为阻塞点",
mitigation="尽早开始,或与下游任务同步进行"
))
# 新知识风险
if task.confidence < 0.6:
risks.append(Risk(
task=task.id,
level="high",
category="knowledge",
description="不熟悉的技术/模式,容易出错",
mitigation="先进行小的Spike或请求专家帮助"
))
return risks
```
#### 5.2 风险矩阵
```markdown
## 风险评估矩阵
| 任务 | 风险类型 | 可能性 | 影响 | 等级 | 应对策略 |
|------|---------|--------|------|------|---------|
| 密码重置流程 | 复杂度 | 中 | 高 | 🔴 高 | 进一步分解先做Spike |
| Token刷新 | 知识缺口 | 高 | 中 | 🟡 中 | 查阅资料,咨询专家 |
| Email服务 | 外部依赖 | 低 | 中 | 🟢 低 | 设计降级方案 |
```
---
## 命令定义
### 语法
```bash
/runtime.plan "[需求描述]" \
--strategy=[full|mvp|risk-driven] \
--estimate=[true|false] \
--detail=[high|medium|low] \
--output=[json|md|both]
```
### 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `strategy` | 规划策略<br>- `full`: 完整规划所有细节<br>- `mvp`: 只规划MVP核心功能<br>- `risk-driven`: 优先规划高风险部分 | `full` |
| `estimate` | 是否包含工时估算 | `true` |
| `detail` | 任务详细程度 | `medium` |
| `output` | 输出格式 | `both` |
### 使用示例
#### 示例1: 完整规划
```bash
/runtime.plan "实现用户认证系统包括注册、登录、密码重置、JWT管理使用bcrypt加密JWT有效期7天"
```
**输出**:
**console**:
```
📋 需求规划: 用户认证系统
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
需求类型: 新功能开发
技术栈: Node.js + Express + PostgreSQL + JWT
约束: JWT有效期7天bcrypt加密
[功能拆解]
├─ 注册
├─ 登录
├─ 密码重置
└─ JWT管理
[任务统计]
总任务数: 17个
总工时: 17.75小时
关键路径: 9小时
[风险]
⚠️ 密码重置流程复杂度高建议Spike
⚠️ Token刷新机制不熟悉建议先调研
输出文件:
✓ cognition/plans/plan-20251114-1045.json
✓ cognition/plans/plan-20251114-1045.md
✓ cognition/graphs/task-tree-20251114-1045.svg
```
**JSON输出**: `cognition/plans/plan-20251114-1045.json`
```json
{
"project": "用户认证系统",
"requirement": "实现用户认证系统,包括注册...",
"total_tasks": 17,
"total_effort": "17.75h",
"critical_path": ["①","②","⑤","⑧","⑮","⑯"],
"tasks": [...],
"risks": [...]
}
```
**Markdown输出**: `cognition/plans/plan-20251114-1045.md`
```markdown
# 用户认证系统 - 实施计划
## 需求概述
实现用户认证系统...
## 任务树
### 阶段1: 基础设施
- ① 创建User表 (0.5h) - P0
- ② 创建Token表 (0.5h) - P0 - 依赖:①
- ③ 配置JWT (0.25h) - P0
...
## 甘特图
```gantt
...
```
## 风险评估
...
```
#### 示例2: MVP规划
```bash
/runtime.plan "构建图片分享社交平台" --strategy=mvp
```
**特点**:
- 只规划核心功能(上传图片、浏览、点赞、评论)
- 非核心功能(滤镜、故事、推荐算法)推迟到后续迭代
- 快速交付可演示版本
#### 示例3: 风险驱动规划
```bash
/runtime.plan "实现微服务架构的电商平台" --strategy=risk-driven
```
**特点**:
- 优先识别高风险任务(服务拆分、数据一致性、分布式事务)
- 建议先Spike降低不确定性
- 生成风险评估报告
---
## 规划策略
### 策略1: Full完整规划
```
适用: 项目需求明确,技术方案清晰,有足够时间
特点:
- 规划所有细节
- 包括测试、文档、监控
- 精确到小时的估算
输出: 完整项目计划类似PRD + 技术方案)
```
### 策略2: MVP最小可行产品
```
适用: 需求探索期,需要快速验证,时间紧张
特点:
- 只规划核心价值功能
- 砍掉所有"锦上添花"的功能
- 估算粗略(只到天)
输出: MVP功能清单 + 最小任务集
```
**示例**: 社交应用MVP
- ✅ 用户注册/登录
- ✅ 发帖
- ✅ 浏览帖子
- ✅ 点赞
**推迟到迭代2**:
- ❌ 评论回复
- ❌ 私信
- ❌ 推荐算法
- ❌ 图片滤镜
### 策略3: Risk-Driven风险驱动规划
```
适用: 技术不确定性强,有高风险模块
特点:
- 优先分析高风险任务
- 建议先做技术调研Spike
- 生成风险缓解计划
输出: 风险矩阵 + 应对策略 + 调整后任务树
```
**示例**: 微服务架构
高风险任务:
1. 服务拆分策略 → 先做Spike
2. 分布式事务 → 调研Saga模式
3. 数据一致性 → 评估最终一致性影响
低风险任务(可以推迟):
- API网关 → 成熟技术,直接使用
- 服务发现 → Consul/Nacos直接使用
- 配置中心 → Apollo/Nacos直接使用
---
## 任务规格模板
每个任务使用统一模板:
```markdown
## Task {ID}: {任务名称}
**ID**: TASK-{ID}
**类型**: [feature|bug|refactor|doc|test]
**优先级**: [P0|P1|P2]
**预计工时**: X小时
**置信度**: 0.X (0-1)
**依赖**: [依赖的任务ID列表]
### 目标
[清晰描述任务的目标]
### 验收标准DoD
- [ ] 代码实现完成
- [ ] 单元测试覆盖率 > 80%
- [ ] 手动测试通过
- [ ] 代码审查通过
- [ ] 文档更新
- [ ] 无回归错误
### 实现大纲
1. [步骤1]
2. [步骤2]
3. [步骤3]
### 潜在风险
- ⚠️ [风险1]
- ⚠️ [风险2]
### 如果卡住Escalation
- [求助谁/查阅什么]
### 相关文件
- [文件路径]
```
---
## 与 /runtime.learn 的区别
| 维度 | `/runtime.learn` | `/runtime.plan` | 为什么分开? |
|------|-----------------|----------------|------------|
| **目标** | 理解未知问题 | 规划已知需求 | 认知阶段不同 |
| **输入** | 问题(需要探索) | 需求(相对明确) | 前提条件不同 |
| **核心** | 知识缺口识别 | 功能拆解与依赖分析 | 方法论不同 |
| **输出** | 学习报告 + 新知识 | 任务树 + 执行计划 | 产物不同 |
| **下一步** | 通常接 /runtime.plan | 接 /runtime.iterate | 工作流分工 |
**典型工作流**:
```
情况A: 完全未知的问题
/runtime.learn "为什么服务会崩溃?"
↓ 理解后,发现问题: "需要添加限流"
/runtime.plan "实现限流功能" # 生成实施计划
/runtime.iterate --plan=plan-xx.json # 执行计划
情况B: 明确的需求
/runtime.plan "实现用户认证系统" # 直接规划
/runtime.iterate --plan=plan-xx.json # 执行计划
```
---
## 工具与脚本
### 辅助脚本: task-analyzer.py
```python
#!/usr/bin/env python3
"""
任务分析器 - 从需求文本提取结构化信息
"""
import re
import json
class TaskAnalyzer:
def __init__(self):
self.patterns = {
"action": r"(实现|添加|修改|删除|重构|修复)",
"object": r"(用户|认证|JWT|密码|邮件|Token|API)",
"constraint": r"\[(.*?)\]",
"time": r"(\d+天|\d+小时|\d+h)"
}
def analyze(self, requirement_text):
"""分析需求文本"""
result = {
"actions": [],
"objects": [],
"constraints": [],
"time_keywords": []
}
for key, pattern in self.patterns.items():
matches = re.findall(pattern, requirement_text)
result[f"{key}s"] = matches
return result
def suggest_tasks(self, analysis):
"""基于分析建议任务"""
tasks = []
# 如果发现"认证"和"用户"
if "认证" in analysis["objects"] and "用户" in analysis["objects"]:
tasks.extend([
"创建User表",
"实现密码哈希",
"实现注册API",
"实现登录API"
])
# 如果发现"JWT"
if "JWT" in analysis["objects"]:
tasks.extend([
"配置JWT",
"实现Token生成",
"实现Token验证",
"实现Token刷新"
])
return list(set(tasks))
# 使用示例
analyzer = TaskAnalyzer()
result = analyzer.analyze("实现用户认证系统包括JWT和bcrypt加密")
print(json.dumps(result, indent=2, ensure_ascii=False))
```
---
## 最佳实践
### 实践1: 规划前先用Learn如果不确定
```bash
# 不确定现有架构
❌ /runtime.plan "实现新功能X" # 可能规划不切实际
# 先学习,再规划
✅ /runtime.learn "理解现有架构" → 置信度>0.8
✅ /runtime.plan "实现新功能X"
```
### 实践2: 用小需求练习
```bash
# 复杂需求(不建议首次尝试)
❌ /runtime.plan "重构整个微服务架构"
# 从小需求开始
✅ /runtime.plan "添加密码重置功能" # 3-5个任务
✅ /runtime.plan "实现用户注册" # 2-3个任务
```
### 实践3: 定期重新规划
```python
# 需求变更时
if requirement_changed:
# 不是继续执行旧计划
old_plan = load_old_plan()
# 而是重新规划
new_plan = runtime.plan(new_requirement)
# 比较差异
diff = compare_plans(old_plan, new_plan)
# 适应新计划
runtime.iterate(plan=new_plan)
```
### 实践4: 保存并复用模式
```bash
# 规划完成后
/runtime.plan "实现OAuth2.0认证"
# 固化成功模式
/runtime.remember "OAuth2.0认证的任务树模板"
# 下次类似需求
/runtime.plan "实现SAML认证"
→ AI从记忆中提取OAuth2.0模式作为参考
→ 生成类似结构的任务树
```
---
## 输出规范
### JSON Schema
```json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"version": {"type": "string"},
"project": {"type": "string"},
"requirement": {"type": "string"},
"created_at": {"type": "string"},
"total_tasks": {"type": "integer"},
"total_effort": {"type": "string"},
"critical_path": {
"type": "array",
"items": {"type": "string"}
},
"tasks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"name": {"type": "string"},
"layer": {"type": "string"},
"effort": {"type": "number"},
"priority": {"type": "string"},
"dependencies": {
"type": "array",
"items": {"type": "string"}
},
"acceptance_criteria": {
"type": "array",
"items": {"type": "string"}
}
}
}
},
"risks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"task": {"type": "string"},
"level": {"type": "string"},
"category": {"type": "string"},
"description": {"type": "string"},
"mitigation": {"type": "string"}
}
}
}
}
}
```
---
## 宪法遵循
**遵循原则**:
- ✓ 1.2 类脑思维: 将需求拆解为可管理的模块
- ✓ 2.1 代码即知识: 任务树是代码结构的心智模型
- ✓ 4.4 规划透明: 规划过程清晰可见(新增)
- ✓ 1.3 谦逊与不确定: 明确标注置信度和风险
- ✓ 2.2 渐进式实施: 支持MVP和风险驱动策略
---
**命令定义**: `.ai-runtime/commands/runtime.plan.md`
**脚本**: `.ai-runtime/scripts/task-analyzer.py` (辅助分析)
**输出**: `cognition/plans/plan-{timestamp}.{json|md}`
**版本**: 1.0.0