req-plan-with-file
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCodex Req-Plan-With-File Prompt
Codex Req-Plan-With-File 提示词
Overview
概述
Requirement-level roadmap planning with JSONL output and convergence criteria. Decomposes a requirement into self-contained layers or tasks, each with testable completion criteria, independently executable via .
lite-planCore workflow: Requirement Understanding → Strategy Selection → Context Collection (optional) → Decomposition → Validation → Quality Check → Output
Dual modes:
- Progressive: Layered MVP→iterations, suitable for high-uncertainty requirements (validate first, then refine)
- Direct: Topologically-sorted task sequence, suitable for low-uncertainty requirements (clear tasks, directly ordered)
- Auto: Automatically selects based on uncertainty assessment
基于JSONL输出与收敛标准的需求级路线图规划工具。可将单个需求分解为独立的层级或任务,每个层级/任务均附带可测试的完成标准,可通过独立执行。
lite-plan核心工作流:需求理解 → 策略选择 → 上下文收集(可选)→ 需求分解 → 验证 → 质量检查 → 输出
双模式:
- 渐进式模式:分层式MVP→迭代版本,适用于高不确定性需求(先验证,再细化)
- 直接模式:拓扑排序的任务序列,适用于低不确定性需求(任务清晰,可直接排序)
- 自动模式:基于不确定性评估自动选择模式
Auto Mode
自动模式
When or : Auto-confirm strategy selection, use recommended mode, skip interactive validation rounds.
--yes-y当使用或参数时,将自动确认策略选择,使用推荐模式,跳过交互式验证环节。
--yes-yQuick Start
快速开始
bash
undefinedbash
undefinedBasic usage
Basic usage
/codex:req-plan-with-file "Implement user authentication system with OAuth and 2FA"
/codex:req-plan-with-file "Implement user authentication system with OAuth and 2FA"
With mode selection
With mode selection
/codex:req-plan-with-file -m progressive "Build real-time notification system"
/codex:req-plan-with-file -m direct "Refactor payment module"
/codex:req-plan-with-file -m auto "Add data export feature"
/codex:req-plan-with-file -m progressive "Build real-time notification system"
/codex:req-plan-with-file -m direct "Refactor payment module"
/codex:req-plan-with-file -m auto "Add data export feature"
Continue existing session
Continue existing session
/codex:req-plan-with-file --continue "user authentication system"
/codex:req-plan-with-file --continue "user authentication system"
Auto mode (skip all confirmations)
Auto mode (skip all confirmations)
/codex:req-plan-with-file -y "Implement caching layer"
undefined/codex:req-plan-with-file -y "Implement caching layer"
undefinedTarget Requirement
目标需求
$ARGUMENTS
$ARGUMENTS
Execution Process
执行流程
Step 0: Session Setup
├─ Parse flags (-y, -c, -m) and requirement text
├─ Generate session ID: RPLAN-{slug}-{date}
└─ Create session folder (or detect existing → continue mode)
Step 1: Parse Requirement & Select Strategy
├─ Extract goal, constraints, stakeholders, domain keywords
├─ Assess uncertainty (5 dimensions)
├─ Select mode: progressive / direct
├─ Write strategy-assessment.json
└─ Initialize roadmap.md skeleton
Step 2: Explore Codebase (Optional)
├─ Detect project markers (package.json, go.mod, etc.)
├─ Has codebase → search relevant modules, patterns, integration points
│ ├─ Read project-tech.json / project-guidelines.json (if exists)
│ ├─ Search modules/components related to the requirement
│ └─ Write exploration-codebase.json
└─ No codebase → skip
Step 3: Decompose Requirement → roadmap.jsonl
├─ Step 3.1: Build decomposition (requirement + strategy + context)
│ ├─ Generate JSONL records with convergence criteria
│ └─ Apply convergence quality requirements
├─ Step 3.2: Validate records
│ ├─ Schema compliance, scope integrity
│ ├─ No circular dependencies (topological sort)
│ ├─ Convergence quality (testable criteria, executable verification, business DoD)
│ └─ Write roadmap.jsonl
└─ Step 3.3: Quality check (MANDATORY)
├─ Requirement coverage, convergence quality, scope integrity
├─ Dependency correctness, effort balance
└─ Auto-fix or report issues
Step 4: Validate & Finalize → roadmap.md
├─ Display decomposition (tabular + convergence details)
├─ User feedback loop (up to 5 rounds, skip if -y)
├─ Write final roadmap.md
└─ Next step options: lite-plan / issue / export / done步骤0: 会话设置
├─ 解析参数(-y、-c、-m)与需求文本
├─ 生成会话ID:RPLAN-{slug}-{date}
└─ 创建会话文件夹(或检测已有文件夹 → 续会话模式)
步骤1: 解析需求并选择策略
├─ 提取目标、约束、干系人、领域关键词
├─ 评估不确定性(5个维度)
├─ 选择模式:渐进式/直接式
├─ 写入strategy-assessment.json
└─ 初始化roadmap.md框架
步骤2: 探索代码库(可选)
├─ 检测项目标识(package.json、go.mod等)
├─ 存在代码库 → 搜索相关模块、模式、集成点
│ ├─ 读取project-tech.json / project-guidelines.json(若存在)
│ ├─ 搜索与需求相关的模块/组件
│ └─ 写入exploration-codebase.json
└─ 无代码库 → 跳过
步骤3: 分解需求 → roadmap.jsonl
├─ 步骤3.1:构建分解方案(需求+策略+上下文)
│ ├─ 生成带收敛标准的JSONL记录
│ └─ 遵循收敛质量要求
├─ 步骤3.2:验证记录
│ ├─ Schema合规性、范围完整性
│ ├─ 无循环依赖(拓扑排序)
│ ├─ 收敛质量(可测试标准、可执行验证、业务完成定义)
│ └─ 写入roadmap.jsonl
└─ 步骤3.3:质量检查(强制要求)
├─ 需求覆盖率、收敛质量、范围完整性
├─ 依赖正确性、工作量均衡
└─ 自动修复或上报问题
步骤4: 验证并定稿 → roadmap.md
├─ 展示分解结果(表格+收敛细节)
├─ 用户反馈循环(最多5轮,使用-y则跳过)
├─ 写入最终roadmap.md
└─ 后续操作选项:lite-plan / 创建Issue / 导出报告 / 完成Configuration
配置参数
| Flag | Default | Description |
|---|---|---|
| false | Auto-confirm all decisions |
| false | Continue existing session |
| auto | Decomposition strategy: progressive / direct / auto |
Session ID format:
RPLAN-{slug}-{YYYY-MM-DD}- slug: lowercase, alphanumeric + CJK characters, max 40 chars
- date: YYYY-MM-DD (UTC+8)
- Auto-detect continue: session folder + roadmap.jsonl exists → continue mode
| 参数 | 默认值 | 说明 |
|---|---|---|
| false | 自动确认所有决策 |
| false | 继续已有会话 |
| auto | 分解策略:progressive / direct / auto |
会话ID格式:
RPLAN-{slug}-{YYYY-MM-DD}- slug:小写字母、数字+中日韩字符,最长40字符
- date:YYYY-MM-DD(UTC+8)
- 自动检测续会话:会话文件夹+roadmap.jsonl存在 → 进入续会话模式
Implementation Details
实现细节
Session Setup
会话设置
Step 0: Initialize Session
步骤0:初始化会话
javascript
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
// Parse flags
const autoYes = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
const continueMode = $ARGUMENTS.includes('--continue') || $ARGUMENTS.includes('-c')
const modeMatch = $ARGUMENTS.match(/(?:--mode|-m)\s+(progressive|direct|auto)/)
const requestedMode = modeMatch ? modeMatch[1] : 'auto'
// Clean requirement text
const requirement = $ARGUMENTS
.replace(/--yes|-y|--continue|-c|--mode\s+\w+|-m\s+\w+/g, '')
.trim()
const slug = requirement.toLowerCase()
.replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-')
.substring(0, 40)
const dateStr = getUtc8ISOString().substring(0, 10)
const sessionId = `RPLAN-${slug}-${dateStr}`
const sessionFolder = `.workflow/.req-plan/${sessionId}`
// Auto-detect continue: session folder + roadmap.jsonl exists → continue mode
// If continue → skip to Step 4 (load existing roadmap.jsonl, display, collect feedback)
Bash(`mkdir -p ${sessionFolder}`)javascript
const getUtc8ISOString = () => new Date(Date.now() + 8 * 60 * 60 * 1000).toISOString()
// Parse flags
const autoYes = $ARGUMENTS.includes('--yes') || $ARGUMENTS.includes('-y')
const continueMode = $ARGUMENTS.includes('--continue') || $ARGUMENTS.includes('-c')
const modeMatch = $ARGUMENTS.match(/(?:--mode|-m)\s+(progressive|direct|auto)/)
const requestedMode = modeMatch ? modeMatch[1] : 'auto'
// Clean requirement text
const requirement = $ARGUMENTS
.replace(/--yes|-y|--continue|-c|--mode\s+\w+|-m\s+\w+/g, '')
.trim()
const slug = requirement.toLowerCase()
.replace(/[^a-z0-9\u4e00-\u9fa5]+/g, '-')
.substring(0, 40)
const dateStr = getUtc8ISOString().substring(0, 10)
const sessionId = `RPLAN-${slug}-${dateStr}`
const sessionFolder = `.workflow/.req-plan/${sessionId}`
// Auto-detect continue: session folder + roadmap.jsonl exists → continue mode
// If continue → skip to Step 4 (load existing roadmap.jsonl, display, collect feedback)
Bash(`mkdir -p ${sessionFolder}`)Phase 1: Parse Requirement & Select Strategy
阶段1:解析需求并选择策略
Objective: Parse requirement, assess uncertainty, select decomposition strategy.
目标:解析需求、评估不确定性、选择分解策略。
Step 1.1: Analyze Requirement & Select Strategy
步骤1.1:分析需求并选择策略
Parse the requirement, evaluate uncertainty across 5 dimensions, and select decomposition strategy in one step:
javascript
// 1. Extract from requirement text
const goal = extractCoreGoal(requirement) // What to achieve
const constraints = extractConstraints(requirement) // Tech stack, timeline, compatibility
const stakeholders = extractStakeholders(requirement) // Users, admins, developers
const domainKeywords = extractDomainKeywords(requirement) // Domain-specific terms
// 2. Assess uncertainty (each: low | medium | high)
const uncertaintyFactors = {
scope_clarity: '...', // Is scope well-defined?
technical_risk: '...', // Known tech vs experimental?
dependency_unknown: '...', // Are dependencies clear?
domain_familiarity: '...', // Team knows this domain?
requirement_stability: '...' // Will requirements change?
}
// >=3 high → progressive, >=3 low → direct, otherwise → ask
// 3. Select strategy
let selectedMode
if (requestedMode !== 'auto') {
selectedMode = requestedMode
} else if (autoYes) {
selectedMode = recommendedMode
} else {
AskUserQuestion({
questions: [{
question: `Decomposition strategy selection:\n\nUncertainty assessment: ${uncertaintyLevel}\nRecommended strategy: ${recommendedMode}\n\nSelect decomposition strategy:`,
header: "Strategy",
multiSelect: false,
options: [
{
label: recommendedMode === 'progressive' ? "Progressive (Recommended)" : "Progressive",
description: "Layered MVP→iterations, validate core first then refine progressively. Suitable for high-uncertainty requirements needing quick validation"
},
{
label: recommendedMode === 'direct' ? "Direct (Recommended)" : "Direct",
description: "Topologically-sorted task sequence with explicit dependencies. Suitable for clear requirements with confirmed technical approach"
}
]
}]
})
}
// 4. Write strategy assessment
Write(`${sessionFolder}/strategy-assessment.json`, JSON.stringify({
session_id: sessionId,
requirement, timestamp: getUtc8ISOString(),
uncertainty_factors: uncertaintyFactors,
uncertainty_level: uncertaintyLevel,
recommended_mode: recommendedMode,
selected_mode: selectedMode,
goal, constraints, stakeholders,
domain_keywords: domainKeywords
}, null, 2))
// 5. Initialize roadmap.md skeleton
const roadmapMdSkeleton = `# Requirement Roadmap
**Session**: ${sessionId}
**Requirement**: ${requirement}
**Strategy**: ${selectedMode}
**Status**: Planning
**Created**: ${getUtc8ISOString()}一次性完成需求解析、5维度不确定性评估与分解策略选择:
javascript
// 1. Extract from requirement text
const goal = extractCoreGoal(requirement) // What to achieve
const constraints = extractConstraints(requirement) // Tech stack, timeline, compatibility
const stakeholders = extractStakeholders(requirement) // Users, admins, developers
const domainKeywords = extractDomainKeywords(requirement) // Domain-specific terms
// 2. Assess uncertainty (each: low | medium | high)
const uncertaintyFactors = {
scope_clarity: '...', // Is scope well-defined?
technical_risk: '...', // Known tech vs experimental?
dependency_unknown: '...', // Are dependencies clear?
domain_familiarity: '...', // Team knows this domain?
requirement_stability: '...' // Will requirements change?
}
// >=3 high → progressive, >=3 low → direct, otherwise → ask
// 3. Select strategy
let selectedMode
if (requestedMode !== 'auto') {
selectedMode = requestedMode
} else if (autoYes) {
selectedMode = recommendedMode
} else {
AskUserQuestion({
questions: [{
question: `Decomposition strategy selection:\n\nUncertainty assessment: ${uncertaintyLevel}\nRecommended strategy: ${recommendedMode}\n\nSelect decomposition strategy:`,
header: "Strategy",
multiSelect: false,
options: [
{
label: recommendedMode === 'progressive' ? "Progressive (Recommended)" : "Progressive",
description: "Layered MVP→iterations, validate core first then refine progressively. Suitable for high-uncertainty requirements needing quick validation"
},
{
label: recommendedMode === 'direct' ? "Direct (Recommended)" : "Direct",
description: "Topologically-sorted task sequence with explicit dependencies. Suitable for clear requirements with confirmed technical approach"
}
]
}]
})
}
// 4. Write strategy assessment
Write(`${sessionFolder}/strategy-assessment.json`, JSON.stringify({
session_id: sessionId,
requirement, timestamp: getUtc8ISOString(),
uncertainty_factors: uncertaintyFactors,
uncertainty_level: uncertaintyLevel,
recommended_mode: recommendedMode,
selected_mode: selectedMode,
goal, constraints, stakeholders,
domain_keywords: domainKeywords
}, null, 2))
// 5. Initialize roadmap.md skeleton
const roadmapMdSkeleton = `# Requirement Roadmap
**Session**: ${sessionId}
**Requirement**: ${requirement}
**Strategy**: ${selectedMode}
**Status**: Planning
**Created**: ${getUtc8ISOString()}Strategy Assessment
Strategy Assessment
- Uncertainty level: ${uncertaintyLevel}
- Decomposition mode: ${selectedMode}
- Assessment basis: ${Object.entries(uncertaintyFactors).map(([k,v]) => ).join(', ')}
${k}=${v}
- Uncertainty level: ${uncertaintyLevel}
- Decomposition mode: ${selectedMode}
- Assessment basis: ${Object.entries(uncertaintyFactors).map(([k,v]) => ).join(', ')}
${k}=${v}
Roadmap
Roadmap
To be populated after Phase 3 decomposition
To be populated after Phase 3 decomposition
Convergence Criteria Details
Convergence Criteria Details
To be populated after Phase 3 decomposition
To be populated after Phase 3 decomposition
Risk Items
Risk Items
To be populated after Phase 3 decomposition
To be populated after Phase 3 decomposition
Next Steps
Next Steps
To be populated after Phase 4 validation${sessionFolder}/roadmap.md`, roadmapMdSkeleton)Write(
**Success Criteria**:
- Requirement goal, constraints, stakeholders, domain keywords identified
- Uncertainty level assessed across 5 dimensions
- Strategy selected (progressive or direct)
- strategy-assessment.json generated
- roadmap.md skeleton initializedTo be populated after Phase 4 validation${sessionFolder}/roadmap.md`, roadmapMdSkeleton)Write(
**成功标准**:
- 已识别需求目标、约束、干系人、领域关键词
- 完成5维度不确定性评估
- 已选择分解策略(渐进式或直接式)
- 已生成strategy-assessment.json
- 已初始化roadmap.md框架Phase 2: Explore Codebase (Optional)
阶段2:探索代码库(可选)
Objective: If a codebase exists, collect relevant context to enhance decomposition quality.
目标:若存在代码库,收集相关上下文以提升分解质量。
Step 2.1: Detect & Explore
步骤2.1:检测与探索
If a codebase exists, directly search for relevant context. No agent delegation — use search tools inline.
javascript
const hasCodebase = Bash(`
test -f package.json && echo "nodejs" ||
test -f go.mod && echo "golang" ||
test -f Cargo.toml && echo "rust" ||
test -f pyproject.toml && echo "python" ||
test -f pom.xml && echo "java" ||
test -d src && echo "generic" ||
echo "none"
`).trim()
if (hasCodebase !== 'none') {
// 1. Read project metadata (if exists)
// - .workflow/project-tech.json (tech stack info)
// - .workflow/project-guidelines.json (project conventions)
// 2. Search codebase for modules related to the requirement
// Use: Grep, Glob, Read, or mcp__ace-tool__search_context
// Focus on:
// - Modules/components related to the requirement
// - Existing patterns to follow
// - Integration points for new functionality
// - Architecture constraints
// 3. Write findings to exploration-codebase.json:
Write(`${sessionFolder}/exploration-codebase.json`, JSON.stringify({
project_type: hasCodebase,
relevant_modules: [...], // [{name, path, relevance}]
existing_patterns: [...], // [{pattern, files, description}]
integration_points: [...], // [{location, description, risk}]
architecture_constraints: [...],
tech_stack: {languages, frameworks, tools},
_metadata: {timestamp: getUtc8ISOString(), exploration_scope: '...'}
}, null, 2))
}
// No codebase → skip, proceed to Phase 3Success Criteria:
- Codebase detection complete
- When codebase exists, exploration-codebase.json generated with relevant modules, patterns, integration points
- When no codebase, skipped and proceed to Phase 3
若存在代码库,直接搜索相关上下文。无需代理委托——内联使用搜索工具。
javascript
const hasCodebase = Bash(`
test -f package.json && echo "nodejs" ||
test -f go.mod && echo "golang" ||
test -f Cargo.toml && echo "rust" ||
test -f pyproject.toml && echo "python" ||
test -f pom.xml && echo "java" ||
test -d src && echo "generic" ||
echo "none"
`).trim()
if (hasCodebase !== 'none') {
// 1. Read project metadata (if exists)
// - .workflow/project-tech.json (tech stack info)
// - .workflow/project-guidelines.json (project conventions)
// 2. Search codebase for modules related to the requirement
// Use: Grep, Glob, Read, or mcp__ace-tool__search_context
// Focus on:
// - Modules/components related to the requirement
// - Existing patterns to follow
// - Integration points for new functionality
// - Architecture constraints
// 3. Write findings to exploration-codebase.json:
Write(`${sessionFolder}/exploration-codebase.json`, JSON.stringify({
project_type: hasCodebase,
relevant_modules: [...], // [{name, path, relevance}]
existing_patterns: [...], // [{pattern, files, description}]
integration_points: [...], // [{location, description, risk}]
architecture_constraints: [...],
tech_stack: {languages, frameworks, tools},
_metadata: {timestamp: getUtc8ISOString(), exploration_scope: '...'}
}, null, 2))
}
// No codebase → skip, proceed to Phase 3成功标准:
- 代码库检测完成
- 存在代码库时,已生成包含相关模块、模式、集成点的exploration-codebase.json
- 无代码库时,跳过并进入阶段3
Phase 3: Decompose Requirement
阶段3:分解需求
Objective: Execute requirement decomposition, generating validated roadmap.jsonl.
目标:执行需求分解,生成经过验证的roadmap.jsonl。
Step 3.1: Generate JSONL Records
步骤3.1:生成JSONL记录
Directly decompose the requirement into JSONL records based on the selected mode. Analyze the requirement yourself and produce the records, referencing strategy assessment and codebase context (if available).
javascript
// Load context
const strategy = JSON.parse(Read(`${sessionFolder}/strategy-assessment.json`))
let explorationContext = null
if (file_exists(`${sessionFolder}/exploration-codebase.json`)) {
explorationContext = JSON.parse(Read(`${sessionFolder}/exploration-codebase.json`))
}Progressive mode — generate 2-4 layers:
javascript
// Each layer must have:
// - id: L0, L1, L2, L3
// - title: "MVP" / "Usable" / "Refined" / "Optimized"
// - description: what this layer achieves (goal)
// - type: feature (default for layers)
// - priority: high (L0) | medium (L1) | low (L2-L3)
// - scope[]: features included
// - excludes[]: features explicitly deferred
// - convergence: { criteria[], verification, definition_of_done }
// - risk_items[], effort (small|medium|large), depends_on[]
// - source: { tool, session_id, original_id }
//
// Rules:
// - L0 (MVP) = self-contained closed loop, no dependencies
// - Each feature in exactly ONE layer (no overlap)
// - 2-4 layers total
// - Convergence MUST satisfy quality requirements (see below)
const layers = [
{
id: "L0", title: "MVP",
description: "...",
type: "feature", priority: "high",
scope: ["..."], excludes: ["..."],
convergence: {
criteria: ["... (testable)"],
verification: "... (executable command or steps)",
definition_of_done: "... (business language)"
},
risk_items: [], effort: "medium", depends_on: [],
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "L0" }
},
// L1, L2, ...
]Direct mode — generate topologically-sorted tasks:
javascript
// Each task must have:
// - id: T1, T2, ...
// - title, description, type (infrastructure|feature|enhancement|testing)
// - priority (high|medium|low)
// - scope, inputs[], outputs[]
// - convergence: { criteria[], verification, definition_of_done }
// - depends_on[], parallel_group
// - source: { tool, session_id, original_id }
//
// Rules:
// - Inputs must come from preceding task outputs or existing resources
// - Same parallel_group = truly independent
// - No circular dependencies
// - Convergence MUST satisfy quality requirements (see below)
const tasks = [
{
id: "T1", title: "...", description: "...", type: "infrastructure",
priority: "high",
scope: "...", inputs: [], outputs: ["..."],
convergence: {
criteria: ["... (testable)"],
verification: "... (executable)",
definition_of_done: "... (business language)"
},
depends_on: [], parallel_group: 1,
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "T1" }
},
// T2, T3, ...
]基于所选模式直接将需求分解为JSONL记录。自行分析需求并生成记录,参考策略评估与代码库上下文(若有)。
javascript
// Load context
const strategy = JSON.parse(Read(`${sessionFolder}/strategy-assessment.json`))
let explorationContext = null
if (file_exists(`${sessionFolder}/exploration-codebase.json`)) {
explorationContext = JSON.parse(Read(`${sessionFolder}/exploration-codebase.json`))
}渐进式模式 — 生成2-4个层级:
javascript
// Each layer must have:
// - id: L0, L1, L2, L3
// - title: "MVP" / "Usable" / "Refined" / "Optimized"
// - description: what this layer achieves (goal)
// - type: feature (default for layers)
// - priority: high (L0) | medium (L1) | low (L2-L3)
// - scope[]: features included
// - excludes[]: features explicitly deferred
// - convergence: { criteria[], verification, definition_of_done }
// - risk_items[], effort (small|medium|large), depends_on[]
// - source: { tool, session_id, original_id }
//
// Rules:
// - L0 (MVP) = self-contained closed loop, no dependencies
// - Each feature in exactly ONE layer (no overlap)
// - 2-4 layers total
// - Convergence MUST satisfy quality requirements (see below)
const layers = [
{
id: "L0", title: "MVP",
description: "...",
type: "feature", priority: "high",
scope: ["..."], excludes: ["..."],
convergence: {
criteria: ["... (testable)"],
verification: "... (executable command or steps)",
definition_of_done: "... (business language)"
},
risk_items: [], effort: "medium", depends_on: [],
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "L0" }
},
// L1, L2, ...
]直接模式 — 生成拓扑排序的任务:
javascript
// Each task must have:
// - id: T1, T2, ...
// - title, description, type (infrastructure|feature|enhancement|testing)
// - priority (high|medium|low)
// - scope, inputs[], outputs[]
// - convergence: { criteria[], verification, definition_of_done }
// - depends_on[], parallel_group
// - source: { tool, session_id, original_id }
//
// Rules:
// - Inputs must come from preceding task outputs or existing resources
// - Same parallel_group = truly independent
// - No circular dependencies
// - Convergence MUST satisfy quality requirements (see below)
const tasks = [
{
id: "T1", title: "...", description: "...", type: "infrastructure",
priority: "high",
scope: "...", inputs: [], outputs: ["..."],
convergence: {
criteria: ["... (testable)"],
verification: "... (executable)",
definition_of_done: "... (business language)"
},
depends_on: [], parallel_group: 1,
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "T1" }
},
// T2, T3, ...
]Step 3.2: Validate Records
步骤3.2:验证记录
Validate all records before writing JSONL. Fix any issues found.
javascript
const items = selectedMode === 'progressive' ? layers : tasks
const errors = []
// 1. Schema validation: each record has convergence with all 3 fields
items.forEach(item => {
if (!item.convergence?.criteria?.length) errors.push(`${item.id}: missing convergence.criteria`)
if (!item.convergence?.verification) errors.push(`${item.id}: missing convergence.verification`)
if (!item.convergence?.definition_of_done) errors.push(`${item.id}: missing convergence.definition_of_done`)
})
// 2. Convergence quality check
const vaguePatterns = /正常|正确|好|可以|没问题|works|fine|good|correct/i
items.forEach(item => {
item.convergence.criteria.forEach((criterion, i) => {
if (vaguePatterns.test(criterion) && criterion.length < 15) {
errors.push(`${item.id} criteria[${i}]: Too vague - "${criterion}"`)
}
})
if (item.convergence.verification.length < 10) {
errors.push(`${item.id} verification: Too short, needs executable steps`)
}
const technicalPatterns = /compile|build|lint|npm|npx|jest|tsc|eslint/i
if (technicalPatterns.test(item.convergence.definition_of_done)) {
errors.push(`${item.id} definition_of_done: Should be business language, not technical commands`)
}
})
// 3. Circular dependency detection
function detectCycles(records, prefix) {
const graph = new Map(records.map(r => [r.id, r.depends_on]))
const visited = new Set(), inStack = new Set(), cycleErrors = []
function dfs(node, path) {
if (inStack.has(node)) { cycleErrors.push(`Circular: ${[...path, node].join(' → ')}`); return }
if (visited.has(node)) return
visited.add(node); inStack.add(node)
;(graph.get(node) || []).forEach(dep => dfs(dep, [...path, node]))
inStack.delete(node)
}
records.forEach(r => { if (!visited.has(r.id)) dfs(r.id, []) })
return cycleErrors
}
errors.push(...detectCycles(items, selectedMode === 'progressive' ? 'L' : 'T'))
// 4. Mode-specific validation
if (selectedMode === 'progressive') {
// Check 2-4 layers
if (items.length < 2 || items.length > 4) errors.push(`Expected 2-4 layers, got ${items.length}`)
// Check L0 is self-contained (no depends_on)
const l0 = items.find(l => l.id === 'L0')
if (l0 && l0.depends_on.length > 0) errors.push("L0 (MVP) should not have dependencies")
// Check scope overlap
const allScopes = new Map()
items.forEach(layer => {
layer.scope.forEach(feature => {
if (allScopes.has(feature)) {
errors.push(`Scope overlap: "${feature}" in both ${allScopes.get(feature)} and ${layer.id}`)
}
allScopes.set(feature, layer.id)
})
})
} else {
// Check inputs/outputs chain
const availableOutputs = new Set()
items.forEach(task => {
task.inputs.forEach(input => {
if (!availableOutputs.has(input)) {
// Only warn for non-existing resources - existing files are valid inputs
}
})
task.outputs.forEach(output => availableOutputs.add(output))
})
// Check parallel_group consistency (same group tasks should not depend on each other)
const groups = new Map()
items.forEach(task => {
if (!groups.has(task.parallel_group)) groups.set(task.parallel_group, [])
groups.get(task.parallel_group).push(task)
})
groups.forEach((groupTasks, groupId) => {
if (groupTasks.length > 1) {
const ids = new Set(groupTasks.map(t => t.id))
groupTasks.forEach(task => {
task.depends_on.forEach(dep => {
if (ids.has(dep)) {
errors.push(`Parallel group ${groupId}: ${task.id} depends on ${dep} but both in same group`)
}
})
})
}
})
}
// 5. Fix errors if any, then write
// If errors found → fix records and re-validate
// Write roadmap.jsonl (one JSON record per line)
const jsonlContent = items.map(item => JSON.stringify(item)).join('\n')
Write(`${sessionFolder}/roadmap.jsonl`, jsonlContent)在写入JSONL前验证所有记录。修复发现的任何问题。
javascript
const items = selectedMode === 'progressive' ? layers : tasks
const errors = []
// 1. Schema validation: each record has convergence with all 3 fields
items.forEach(item => {
if (!item.convergence?.criteria?.length) errors.push(`${item.id}: missing convergence.criteria`)
if (!item.convergence?.verification) errors.push(`${item.id}: missing convergence.verification`)
if (!item.convergence?.definition_of_done) errors.push(`${item.id}: missing convergence.definition_of_done`)
})
// 2. Convergence quality check
const vaguePatterns = /正常|正确|好|可以|没问题|works|fine|good|correct/i
items.forEach(item => {
item.convergence.criteria.forEach((criterion, i) => {
if (vaguePatterns.test(criterion) && criterion.length < 15) {
errors.push(`${item.id} criteria[${i}]: Too vague - "${criterion}"`)
}
})
if (item.convergence.verification.length < 10) {
errors.push(`${item.id} verification: Too short, needs executable steps`)
}
const technicalPatterns = /compile|build|lint|npm|npx|jest|tsc|eslint/i
if (technicalPatterns.test(item.convergence.definition_of_done)) {
errors.push(`${item.id} definition_of_done: Should be business language, not technical commands`)
}
})
// 3. Circular dependency detection
function detectCycles(records, prefix) {
const graph = new Map(records.map(r => [r.id, r.depends_on]))
const visited = new Set(), inStack = new Set(), cycleErrors = []
function dfs(node, path) {
if (inStack.has(node)) { cycleErrors.push(`Circular: ${[...path, node].join(' → ')}`); return }
if (visited.has(node)) return
visited.add(node); inStack.add(node)
;(graph.get(node) || []).forEach(dep => dfs(dep, [...path, node]))
inStack.delete(node)
}
records.forEach(r => { if (!visited.has(r.id)) dfs(r.id, []) })
return cycleErrors
}
errors.push(...detectCycles(items, selectedMode === 'progressive' ? 'L' : 'T'))
// 4. Mode-specific validation
if (selectedMode === 'progressive') {
// Check 2-4 layers
if (items.length < 2 || items.length > 4) errors.push(`Expected 2-4 layers, got ${items.length}`)
// Check L0 is self-contained (no depends_on)
const l0 = items.find(l => l.id === 'L0')
if (l0 && l0.depends_on.length > 0) errors.push("L0 (MVP) should not have dependencies")
// Check scope overlap
const allScopes = new Map()
items.forEach(layer => {
layer.scope.forEach(feature => {
if (allScopes.has(feature)) {
errors.push(`Scope overlap: "${feature}" in both ${allScopes.get(feature)} and ${layer.id}`)
}
allScopes.set(feature, layer.id)
})
})
} else {
// Check inputs/outputs chain
const availableOutputs = new Set()
items.forEach(task => {
task.inputs.forEach(input => {
if (!availableOutputs.has(input)) {
// Only warn for non-existing resources - existing files are valid inputs
}
})
task.outputs.forEach(output => availableOutputs.add(output))
})
// Check parallel_group consistency (same group tasks should not depend on each other)
const groups = new Map()
items.forEach(task => {
if (!groups.has(task.parallel_group)) groups.set(task.parallel_group, [])
groups.get(task.parallel_group).push(task)
})
groups.forEach((groupTasks, groupId) => {
if (groupTasks.length > 1) {
const ids = new Set(groupTasks.map(t => t.id))
groupTasks.forEach(task => {
task.depends_on.forEach(dep => {
if (ids.has(dep)) {
errors.push(`Parallel group ${groupId}: ${task.id} depends on ${dep} but both in same group`)
}
})
})
}
})
}
// 5. Fix errors if any, then write
// If errors found → fix records and re-validate
// Write roadmap.jsonl (one JSON record per line)
const jsonlContent = items.map(item => JSON.stringify(item)).join('\n')
Write(`${sessionFolder}/roadmap.jsonl`, jsonlContent)Step 3.3: Quality Check (MANDATORY)
步骤3.3:质量检查(强制要求)
After generating roadmap.jsonl, execute a self-check across 5 quality dimensions before proceeding.
javascript
const roadmapJsonlContent = Read(`${sessionFolder}/roadmap.jsonl`)
// Quality dimensions to verify:
//
// | Dimension | Check Criteria | Critical? |
// |------------------------|-------------------------------------------------------------|-----------|
// | Requirement Coverage | All aspects of original requirement addressed in layers/tasks | Yes |
// | Convergence Quality | criteria testable, verification executable, DoD business-readable | Yes |
// | Scope Integrity | Progressive: no overlap/gaps; Direct: inputs/outputs chain valid | Yes |
// | Dependency Correctness | No circular deps, proper ordering | Yes |
// | Effort Balance | No single layer/task disproportionately large | No |
//
// Decision after check:
// - PASS → proceed to Phase 4
// - AUTO_FIX → fix convergence wording, rebalance scope, update roadmap.jsonl
// - NEEDS_REVIEW → report issues to user in Phase 4 feedback
// Auto-fix strategy:
// | Issue Type | Auto-Fix Action |
// |-----------------|----------------------------------------------|
// | Vague criteria | Replace with specific, testable conditions |
// | Technical DoD | Rewrite in business language |
// | Missing scope | Add to appropriate layer/task |
// | Effort imbalance| Split oversized layer/task |
// After auto-fixes, update roadmap.jsonlSuccess Criteria:
- roadmap.jsonl generated, each line independently JSON.parse-able
- Each record contains convergence (criteria + verification + definition_of_done)
- Quality check passed (all critical dimensions)
- No circular dependencies
- Progressive: 2-4 layers, no scope overlap, L0 self-contained
- Direct: tasks have explicit inputs/outputs, parallel_group assigned correctly
生成roadmap.jsonl后,在进入下一阶段前执行5个质量维度的自检。
javascript
const roadmapJsonlContent = Read(`${sessionFolder}/roadmap.jsonl`)
// Quality dimensions to verify:
//
// | Dimension | Check Criteria | Critical? |
// |------------------------|-------------------------------------------------------------|-----------|
// | Requirement Coverage | All aspects of original requirement addressed in layers/tasks | Yes |
// | Convergence Quality | criteria testable, verification executable, DoD business-readable | Yes |
// | Scope Integrity | Progressive: no overlap/gaps; Direct: inputs/outputs chain valid | Yes |
// | Dependency Correctness | No circular deps, proper ordering | Yes |
// | Effort Balance | No single layer/task disproportionately large | No |
//
// Decision after check:
// - PASS → proceed to Phase 4
// - AUTO_FIX → fix convergence wording, rebalance scope, update roadmap.jsonl
// - NEEDS_REVIEW → report issues to user in Phase 4 feedback
// Auto-fix strategy:
// | Issue Type | Auto-Fix Action |
// |-----------------|----------------------------------------------|
// | Vague criteria | Replace with specific, testable conditions |
// | Technical DoD | Rewrite in business language |
// | Missing scope | Add to appropriate layer/task |
// | Effort imbalance| Split oversized layer/task |
// After auto-fixes, update roadmap.jsonl成功标准:
- 已生成roadmap.jsonl,每行均可独立通过JSON.parse解析
- 每条记录均包含收敛字段(criteria + verification + definition_of_done)
- 质量检查通过(所有关键维度)
- 无循环依赖
- 渐进式模式:2-4个层级,无范围重叠,L0独立闭环
- 直接模式:任务含明确输入/输出,已分配parallel_group
Phase 4: Validate & Finalize
阶段4:验证并定稿
Objective: Display decomposition results, collect user feedback, generate final artifacts.
目标:展示分解结果、收集用户反馈、生成最终产物。
Step 4.1: Display Results & Collect Feedback
步骤4.1:展示结果并收集反馈
Display the decomposition as a table with convergence criteria, then run feedback loop.
Progressive Mode display format:
markdown
undefined以表格形式展示分解结果及收敛标准,然后执行反馈循环。
渐进式模式展示格式:
markdown
undefinedRoadmap Overview
路线图概述
| Layer | Title | Description | Effort | Dependencies |
|---|---|---|---|---|
| L0 | MVP | ... | medium | - |
| L1 | Usable | ... | medium | L0 |
| 层级 | 标题 | 描述 | 工作量 | 依赖项 |
|---|---|---|---|---|
| L0 | MVP | ... | medium | - |
| L1 | 可用版 | ... | medium | L0 |
Convergence Criteria
收敛标准
L0 - MVP:
- Criteria: [criteria list]
- Verification: [verification]
- Definition of Done: [definition_of_done]
**Direct Mode display format**:
```markdownL0 - MVP:
- 标准:[标准列表]
- 验证方式:[验证步骤]
- 完成定义:[业务语言描述]
**直接模式展示格式**:
```markdownTask Sequence
任务序列
| Group | ID | Title | Type | Description | Dependencies |
|---|---|---|---|---|---|
| 1 | T1 | ... | infrastructure | ... | - |
| 2 | T2 | ... | feature | ... | T1 |
| 并行组 | ID | 标题 | 类型 | 描述 | 依赖项 |
|---|---|---|---|---|---|
| 1 | T1 | ... | 基础设施 | ... | - |
| 2 | T2 | ... | 功能特性 | ... | T1 |
Convergence Criteria
收敛标准
T1 - Establish Data Model:
- Criteria: [criteria list]
- Verification: [verification]
- Definition of Done: [definition_of_done]
**Feedback loop**:
```javascript
const items = Read(`${sessionFolder}/roadmap.jsonl`)
.split('\n').filter(l => l.trim()).map(l => JSON.parse(l))
// Display tabular results + convergence for each item (using format above)
if (!autoYes) {
let round = 0, continueLoop = true
while (continueLoop && round < 5) {
round++
const feedback = AskUserQuestion({
questions: [{
question: `Roadmap validation (round ${round}):\nAny feedback on the current decomposition?`,
header: "Feedback",
multiSelect: false,
options: [
{ label: "Approve", description: "Decomposition is reasonable, generate final artifacts" },
{ label: "Adjust Scope", description: "Some layer/task scopes need adjustment" },
{ label: "Modify Convergence", description: "Convergence criteria not specific enough" },
{ label: "Re-decompose", description: "Overall strategy or layering needs change" }
]
}]
})
if (feedback === 'Approve') continueLoop = false
// else: apply adjustment, re-write roadmap.jsonl, re-display, loop
}
}T1 - 建立数据模型:
- 标准:[标准列表]
- 验证方式:[验证步骤]
- 完成定义:[业务语言描述]
**反馈循环**:
```javascript
const items = Read(`${sessionFolder}/roadmap.jsonl`)
.split('\n').filter(l => l.trim()).map(l => JSON.parse(l))
// Display tabular results + convergence for each item (using format above)
if (!autoYes) {
let round = 0, continueLoop = true
while (continueLoop && round < 5) {
round++
const feedback = AskUserQuestion({
questions: [{
question: `Roadmap validation (round ${round}):\nAny feedback on the current decomposition?`,
header: "Feedback",
multiSelect: false,
options: [
{ label: "Approve", description: "Decomposition is reasonable, generate final artifacts" },
{ label: "Adjust Scope", description: "Some layer/task scopes need adjustment" },
{ label: "Modify Convergence", description: "Convergence criteria not specific enough" },
{ label: "Re-decompose", description: "Overall strategy or layering needs change" }
]
}]
})
if (feedback === 'Approve') continueLoop = false
// else: apply adjustment, re-write roadmap.jsonl, re-display, loop
}
}Step 4.2: Write roadmap.md & Next Steps
步骤4.2:写入roadmap.md与后续操作
Generate final roadmap.md using the generation templates below, then provide post-completion options.
Progressive mode roadmap.md generation:
javascript
const roadmapMd = `# Requirement Roadmap
**Session**: ${sessionId}
**Requirement**: ${requirement}
**Strategy**: progressive
**Uncertainty**: ${strategy.uncertainty_level}
**Generated**: ${getUtc8ISOString()}使用以下生成模板生成最终roadmap.md,然后提供完成后的操作选项。
渐进式模式roadmap.md生成:
javascript
const roadmapMd = `# 需求路线图
**会话ID**: ${sessionId}
**需求**: ${requirement}
**策略**: progressive
**不确定性**: ${strategy.uncertainty_level}
**生成时间**: ${getUtc8ISOString()}Strategy Assessment
策略评估
- Uncertainty level: ${strategy.uncertainty_level}
- Decomposition mode: progressive
- Assessment basis: ${Object.entries(strategy.uncertainty_factors).map(([k,v]) => ).join(', ')}
${k}=${v} - Goal: ${strategy.goal}
- Constraints: ${strategy.constraints.join(', ') || 'None'}
- Stakeholders: ${strategy.stakeholders.join(', ') || 'None'}
- 不确定性等级: ${strategy.uncertainty_level}
- 分解模式: progressive
- 评估依据: ${Object.entries(strategy.uncertainty_factors).map(([k,v]) => ).join(', ')}
${k}=${v} - 目标: ${strategy.goal}
- 约束: ${strategy.constraints.join(', ') || '无'}
- 干系人: ${strategy.stakeholders.join(', ') || '无'}
Roadmap Overview
路线图概述
| Layer | Title | Description | Effort | Dependencies |
|---|---|---|---|---|
| ${items.map(l => ` | ${l.id} | ${l.title} | ${l.description} | ${l.effort} |
| 层级 | 标题 | 描述 | 工作量 | 依赖项 |
|---|---|---|---|---|
| ${items.map(l => ` | ${l.id} | ${l.title} | ${l.description} | ${l.effort} |
Layer Details
层级详情
${items.map(l => `### ${l.id}: ${l.title}
Description: ${l.description}
Scope: ${l.scope.join(', ')}
Excludes: ${l.excludes.join(', ') || 'None'}
Convergence Criteria:
${l.convergence.criteria.map(c => `- ${c}`).join('\n')}
- Verification: ${l.convergence.verification}
- Definition of Done: ${l.convergence.definition_of_done}
Risk Items: ${l.risk_items.length ? l.risk_items.map(r => `\n- ${r}`).join('') : 'None'}
Effort: ${l.effort}
`).join('\n---\n\n')}
${items.map(l => `### ${l.id}: ${l.title}
描述: ${l.description}
范围: ${l.scope.join(', ')}
排除项: ${l.excludes.join(', ') || '无'}
收敛标准:
${l.convergence.criteria.map(c => `- ${c}`).join('\n')}
- 验证方式: ${l.convergence.verification}
- 完成定义: ${l.convergence.definition_of_done}
风险项: ${l.risk_items.length ? l.risk_items.map(r => `\n- ${r}`).join('') : '无'}
工作量: ${l.effort}
`).join('\n---\n\n')}
Risk Summary
风险汇总
${items.flatMap(l => l.risk_items.map(r => `- ${l.id}: ${r}`)).join('\n') || 'No identified risks'}
${items.flatMap(l => l.risk_items.map(r => `- ${l.id}: ${r}`)).join('\n') || '未识别风险'}
Next Steps
后续操作
Each layer can be executed independently:
\`\`\`bash
/workflow:lite-plan "${items[0]?.title}: ${items[0]?.scope.join(', ')}"
\`\`\`
Roadmap JSONL file: \`${sessionFolder}/roadmap.jsonl\`
`
**Direct mode roadmap.md generation**:
```javascript
const roadmapMd = `# Requirement Roadmap
**Session**: ${sessionId}
**Requirement**: ${requirement}
**Strategy**: direct
**Generated**: ${getUtc8ISOString()}每个层级均可独立执行:
\`\`\`bash
/workflow:lite-plan "${items[0]?.title}: ${items[0]?.scope.join(', ')}"
\`\`\`
路线图JSONL文件: \`${sessionFolder}/roadmap.jsonl\`
`
**直接模式roadmap.md生成**:
```javascript
const roadmapMd = `# 需求路线图
**会话ID**: ${sessionId}
**需求**: ${requirement}
**策略**: direct
**生成时间**: ${getUtc8ISOString()}Strategy Assessment
策略评估
- Goal: ${strategy.goal}
- Constraints: ${strategy.constraints.join(', ') || 'None'}
- Assessment basis: ${Object.entries(strategy.uncertainty_factors).map(([k,v]) => ).join(', ')}
${k}=${v}
- 目标: ${strategy.goal}
- 约束: ${strategy.constraints.join(', ') || '无'}
- 评估依据: ${Object.entries(strategy.uncertainty_factors).map(([k,v]) => ).join(', ')}
${k}=${v}
Task Sequence
任务序列
| Group | ID | Title | Type | Description | Dependencies |
|---|---|---|---|---|---|
| ${items.map(t => ` | ${t.parallel_group} | ${t.id} | ${t.title} | ${t.type} | ${t.description} |
| 并行组 | ID | 标题 | 类型 | 描述 | 依赖项 |
|---|---|---|---|---|---|
| ${items.map(t => ` | ${t.parallel_group} | ${t.id} | ${t.title} | ${t.type} | ${t.description} |
Task Details
任务详情
${items.map(t => `### ${t.id}: ${t.title}
Type: ${t.type} | Parallel Group: ${t.parallel_group}
Description: ${t.description}
Scope: ${t.scope}
Inputs: ${t.inputs.length ? t.inputs.join(', ') : 'None (starting task)'}
Outputs: ${t.outputs.join(', ')}
Convergence Criteria:
${t.convergence.criteria.map(c => `- ${c}`).join('\n')}
- Verification: ${t.convergence.verification}
- Definition of Done: ${t.convergence.definition_of_done} `).join('\n---\n\n')}
${items.map(t => `### ${t.id}: ${t.title}
类型: ${t.type} | 并行组: ${t.parallel_group}
描述: ${t.description}
范围: ${t.scope}
输入: ${t.inputs.length ? t.inputs.join(', ') : '无(起始任务)'}
输出: ${t.outputs.join(', ')}
收敛标准:
${t.convergence.criteria.map(c => `- ${c}`).join('\n')}
- 验证方式: ${t.convergence.verification}
- 完成定义: ${t.convergence.definition_of_done} `).join('\n---\n\n')}
Next Steps
后续操作
Each task can be executed independently:
\`\`\`bash
/workflow:lite-plan "${items[0]?.title}: ${items[0]?.scope}"
\`\`\`
Roadmap JSONL file: \`${sessionFolder}/roadmap.jsonl\`
`
**Write and provide post-completion options**:
```javascript
Write(`${sessionFolder}/roadmap.md`, roadmapMd)
// Post-completion options
if (!autoYes) {
AskUserQuestion({
questions: [{
question: "Roadmap generated. Next step:",
header: "Next Step",
multiSelect: false,
options: [
{ label: "Execute First Layer", description: `Launch lite-plan to execute ${items[0].id}` },
{ label: "Create Issue", description: "Create GitHub Issue based on roadmap" },
{ label: "Export Report", description: "Generate standalone shareable roadmap report" },
{ label: "Done", description: "Save roadmap only, execute later" }
]
}]
})
}| Selection | Action |
|---|---|
| Execute First Layer | |
| Create Issue | |
| Export Report | Copy roadmap.md + roadmap.jsonl to user-specified location |
| Done | Display roadmap file paths, end |
Success Criteria:
- User feedback processed (or skipped via autoYes)
- roadmap.md finalized with full tables and convergence details
- roadmap.jsonl final version updated
- Post-completion options provided
每个任务均可独立执行:
\`\`\`bash
/workflow:lite-plan "${items[0]?.title}: ${items[0]?.scope}"
\`\`\`
路线图JSONL文件: \`${sessionFolder}/roadmap.jsonl\`
`
**写入文件并提供完成后选项**:
```javascript
Write(`${sessionFolder}/roadmap.md`, roadmapMd)
// Post-completion options
if (!autoYes) {
AskUserQuestion({
questions: [{
question: "路线图已生成。下一步操作:",
header: "下一步",
multiSelect: false,
options: [
{ label: "执行第一个层级", description: `启动lite-plan执行${items[0].id}` },
{ label: "创建Issue", description: "基于路线图创建GitHub Issue" },
{ label: "导出报告", description: "生成独立可分享的路线图报告" },
{ label: "完成", description: "仅保存路线图,后续再执行" }
]
}]
})
}| 选择项 | 操作 |
|---|---|
| 执行第一个层级 | |
| 创建Issue | |
| 导出报告 | 将roadmap.md + roadmap.jsonl复制到用户指定位置 |
| 完成 | 显示路线图文件路径,结束流程 |
成功标准:
- 已处理用户反馈(或通过autoYes跳过)
- 已定稿roadmap.md,包含完整表格与收敛细节
- 已更新roadmap.jsonl最终版本
- 已提供完成后操作选项
Session Folder Structure
会话文件夹结构
.workflow/.req-plan/RPLAN-{slug}-{YYYY-MM-DD}/
├── roadmap.md # Human-readable roadmap
├── roadmap.jsonl # Machine-readable, one self-contained record per line
├── strategy-assessment.json # Strategy assessment result
└── exploration-codebase.json # Codebase context (optional)| File | Phase | Description |
|---|---|---|
| 1 | Uncertainty analysis + mode recommendation + extracted goal/constraints/stakeholders/domain_keywords |
| 1 | Initial skeleton with placeholders, finalized in Phase 4 |
| 2 | Codebase context: relevant modules, patterns, integration points (only when codebase exists) |
| 3 | One self-contained JSON record per line with convergence criteria and source provenance |
| 4 | Human-readable roadmap with tabular display + convergence details, revised per user feedback |
.workflow/.req-plan/RPLAN-{slug}-{YYYY-MM-DD}/
├── roadmap.md # 人类可读的路线图
├── roadmap.jsonl # 机器可读,每行一个独立记录
├── strategy-assessment.json # 策略评估结果
└── exploration-codebase.json # 代码库上下文(可选)| 文件 | 阶段 | 描述 |
|---|---|---|
| 1 | 不确定性分析 + 模式推荐 + 提取的目标/约束/干系人/领域关键词 |
| 1 | 带占位符的初始框架,阶段4定稿 |
| 2 | 代码库上下文:相关模块、模式、集成点(仅当存在代码库时生成) |
| 3 | 每行一个独立JSON记录,含收敛标准与来源溯源 |
| 4 | 人类可读路线图,含表格展示+收敛细节,已根据用户反馈修订 |
JSONL Schema
JSONL Schema
Convergence Criteria
收敛标准
Each record's object:
convergence| Field | Purpose | Requirement |
|---|---|---|
| List of checkable specific conditions | Testable - can be written as assertions or manual steps |
| How to verify these conditions | Executable - command, script, or explicit steps |
| One-sentence completion definition | Business language - non-technical person can judge |
每条记录的对象:
convergence| 字段 | 用途 | 要求 |
|---|---|---|
| 可检查的具体条件列表 | 可测试 - 可编写断言或手动验证步骤 |
| 验证这些条件的方式 | 可执行 - 命令、脚本或明确步骤 |
| 一句话式完成定义 | 业务语言 - 非技术人员可判断 |
Progressive Mode (one layer per line)
渐进式模式(每行一个层级)
| Layer | Title | Typical Description |
|---|---|---|
| L0 | MVP | Minimum viable closed loop, core path end-to-end |
| L1 | Usable | Key user paths refined, basic error handling |
| L2 | Refined | Edge cases, performance, security hardening |
| L3 | Optimized | Advanced features, observability, operations |
Schema:
id, title, description, type, priority, scope[], excludes[], convergence{}, risk_items[], effort, depends_on[], source{}jsonl
{"id":"L0","title":"MVP","description":"Minimum viable closed loop","type":"feature","priority":"high","scope":["User registration and login","Basic CRUD"],"excludes":["OAuth","2FA"],"convergence":{"criteria":["End-to-end register→login→operate flow works","Core API returns correct responses"],"verification":"curl/Postman manual testing or smoke test script","definition_of_done":"New user can complete register→login→perform one core operation"},"risk_items":["JWT library selection needs validation"],"effort":"medium","depends_on":[],"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"L0"}}
{"id":"L1","title":"Usable","description":"Complete key user paths","type":"feature","priority":"medium","scope":["Password reset","Input validation","Error messages"],"excludes":["Audit logs","Rate limiting"],"convergence":{"criteria":["All form fields have frontend+backend validation","Password reset email can be sent and reset completed","Error scenarios show user-friendly messages"],"verification":"Unit tests cover validation logic + manual test of reset flow","definition_of_done":"Users have a clear recovery path when encountering input errors or forgotten passwords"},"risk_items":[],"effort":"medium","depends_on":["L0"],"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"L1"}}Constraints: 2-4 layers, L0 must be a self-contained closed loop with no dependencies, each feature belongs to exactly ONE layer (no scope overlap).
| 层级 | 标题 | 典型描述 |
|---|---|---|
| L0 | MVP | 最小可行闭环,核心路径端到端 |
| L1 | 可用版 | 关键用户路径优化,基础错误处理 |
| L2 | 优化版 | 边缘场景、性能、安全加固 |
| L3 | 完善版 | 高级功能、可观测性、运维支持 |
Schema:
id, title, description, type, priority, scope[], excludes[], convergence{}, risk_items[], effort, depends_on[], source{}jsonl
{"id":"L0","title":"MVP","description":"Minimum viable closed loop","type":"feature","priority":"high","scope":["User registration and login","Basic CRUD"],"excludes":["OAuth","2FA"],"convergence":{"criteria":["End-to-end register→login→operate flow works","Core API returns correct responses"],"verification":"curl/Postman manual testing or smoke test script","definition_of_done":"New user can complete register→login→perform one core operation"},"risk_items":["JWT library selection needs validation"],"effort":"medium","depends_on":[],"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"L0"}}
{"id":"L1","title":"Usable","description":"Complete key user paths","type":"feature","priority":"medium","scope":["Password reset","Input validation","Error messages"],"excludes":["Audit logs","Rate limiting"],"convergence":{"criteria":["All form fields have frontend+backend validation","Password reset email can be sent and reset completed","Error scenarios show user-friendly messages"],"verification":"Unit tests cover validation logic + manual test of reset flow","definition_of_done":"Users have a clear recovery path when encountering input errors or forgotten passwords"},"risk_items":[],"effort":"medium","depends_on":["L0"],"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"L1"}}约束:2-4个层级,L0必须是无依赖的独立闭环,每个功能仅属于一个层级(无范围重叠)。
Direct Mode (one task per line)
直接模式(每行一个任务)
| Type | Use Case |
|---|---|
| infrastructure | Data models, configuration, scaffolding |
| feature | API, UI, business logic implementation |
| enhancement | Validation, error handling, edge cases |
| testing | Unit tests, integration tests, E2E |
Schema:
id, title, description, type, scope, inputs[], outputs[], convergence{}, depends_on[], parallel_group, source{}jsonl
{"id":"T1","title":"Establish data model","description":"Create database schema and TypeScript type definitions for all business entities","type":"infrastructure","scope":"DB schema + TypeScript types","inputs":[],"outputs":["schema.prisma","types/user.ts"],"convergence":{"criteria":["Migration executes without errors","TypeScript types compile successfully","Fields cover all business entities"],"verification":"npx prisma migrate dev && npx tsc --noEmit","definition_of_done":"Database schema migrates correctly, type definitions can be referenced by other modules"},"depends_on":[],"parallel_group":1,"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"T1"}}
{"id":"T2","title":"Implement core API","description":"Build CRUD endpoints for User entity with proper validation and error handling","type":"feature","scope":"CRUD endpoints for User","inputs":["schema.prisma","types/user.ts"],"outputs":["routes/user.ts","controllers/user.ts"],"convergence":{"criteria":["GET/POST/PUT/DELETE return correct status codes","Request/response conforms to schema","No N+1 queries"],"verification":"jest --testPathPattern=user.test.ts","definition_of_done":"All User CRUD endpoints pass integration tests"},"depends_on":["T1"],"parallel_group":2,"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"T2"}}Constraints: Inputs must come from preceding task outputs or existing resources, tasks in same parallel_group must be truly independent, no circular dependencies.
| 类型 | 适用场景 |
|---|---|
| infrastructure | 数据模型、配置、项目脚手架 |
| feature | API、UI、业务逻辑实现 |
| enhancement | 验证、错误处理、边缘场景 |
| testing | 单元测试、集成测试、端到端测试 |
Schema:
id, title, description, type, scope, inputs[], outputs[], convergence{}, depends_on[], parallel_group, source{}jsonl
{"id":"T1","title":"Establish data model","description":"Create database schema and TypeScript type definitions for all business entities","type":"infrastructure","scope":"DB schema + TypeScript types","inputs":[],"outputs":["schema.prisma","types/user.ts"],"convergence":{"criteria":["Migration executes without errors","TypeScript types compile successfully","Fields cover all business entities"],"verification":"npx prisma migrate dev && npx tsc --noEmit","definition_of_done":"Database schema migrates correctly, type definitions can be referenced by other modules"},"depends_on":[],"parallel_group":1,"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"T1"}}
{"id":"T2","title":"Implement core API","description":"Build CRUD endpoints for User entity with proper validation and error handling","type":"feature","scope":"CRUD endpoints for User","inputs":["schema.prisma","types/user.ts"],"outputs":["routes/user.ts","controllers/user.ts"],"convergence":{"criteria":["GET/POST/PUT/DELETE return correct status codes","Request/response conforms to schema","No N+1 queries"],"verification":"jest --testPathPattern=user.test.ts","definition_of_done":"All User CRUD endpoints pass integration tests"},"depends_on":["T1"],"parallel_group":2,"source":{"tool":"req-plan-with-file","session_id":"RPLAN-xxx","original_id":"T2"}}约束:输入必须来自前置任务输出或已有资源,同一parallel_group的任务必须完全独立,无循环依赖。
Convergence Quality Requirements
收敛质量要求
Every field MUST satisfy these quality standards:
convergence| Field | Requirement | Bad Example | Good Example |
|---|---|---|---|
| Testable - can write assertions or manual steps | | |
| Executable - command, script, or clear steps | | |
| Business language - non-technical person can judge | | |
NEVER output vague convergence criteria ("works correctly", "system is normal"). ALWAYS ensure:
- criteria are testable (can be written as assertions or manual verification steps)
- verification is executable (commands or explicit steps)
- definition_of_done uses business language (non-technical stakeholders can judge)
每个字段必须满足以下质量标准:
convergence| 字段 | 要求 | 反面示例 | 正面示例 |
|---|---|---|---|
| 可测试 - 可编写断言或手动验证步骤 | | |
| 可执行 - 命令、脚本或明确步骤 | | |
| 业务语言 - 非技术人员可判断 | | |
绝对禁止输出模糊的收敛标准(如"正常工作"、"系统正常")。必须确保:
- 标准可测试(可编写断言或手动验证步骤)
- 验证方式可执行(命令或明确步骤)
- 完成定义使用业务语言(非技术干系人可判断)
Fallback Decomposition
回退分解方案
When normal decomposition fails or produces empty results, use fallback templates:
Progressive fallback:
javascript
[
{
id: "L0", title: "MVP", description: "Minimum viable closed loop",
type: "feature", priority: "high",
scope: ["Core functionality"], excludes: ["Advanced features", "Optimization"],
convergence: {
criteria: ["Core path works end-to-end"],
verification: "Manual test of core flow",
definition_of_done: "User can complete one full core operation"
},
risk_items: ["Tech selection needs validation"], effort: "medium", depends_on: [],
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "L0" }
},
{
id: "L1", title: "Usable", description: "Refine key user paths",
type: "feature", priority: "medium",
scope: ["Error handling", "Input validation"], excludes: ["Performance optimization", "Monitoring"],
convergence: {
criteria: ["All user inputs validated", "Error scenarios show messages"],
verification: "Unit tests + manual error scenario testing",
definition_of_done: "Users have clear guidance and recovery paths when encountering problems"
},
risk_items: [], effort: "medium", depends_on: ["L0"],
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "L1" }
}
]Direct fallback:
javascript
[
{
id: "T1", title: "Infrastructure setup", description: "Project scaffolding and base configuration",
type: "infrastructure", priority: "high",
scope: "Project scaffolding and base configuration",
inputs: [], outputs: ["project-structure"],
convergence: {
criteria: ["Project builds without errors", "Base configuration complete"],
verification: "npm run build (or equivalent build command)",
definition_of_done: "Project foundation ready for feature development"
},
depends_on: [], parallel_group: 1,
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "T1" }
},
{
id: "T2", title: "Core feature implementation", description: "Implement core business logic",
type: "feature", priority: "high",
scope: "Core business logic",
inputs: ["project-structure"], outputs: ["core-module"],
convergence: {
criteria: ["Core API/functionality callable", "Returns expected results"],
verification: "Run core feature tests",
definition_of_done: "Core business functionality works as expected"
},
depends_on: ["T1"], parallel_group: 2,
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "T2" }
}
]当正常分解失败或产生空结果时,使用回退模板:
渐进式回退模板:
javascript
[
{
id: "L0", title: "MVP", description: "Minimum viable closed loop",
type: "feature", priority: "high",
scope: ["Core functionality"], excludes: ["Advanced features", "Optimization"],
convergence: {
criteria: ["Core path works end-to-end"],
verification: "Manual test of core flow",
definition_of_done: "User can complete one full core operation"
},
risk_items: ["Tech selection needs validation"], effort: "medium", depends_on: [],
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "L0" }
},
{
id: "L1", title: "Usable", description: "Refine key user paths",
type: "feature", priority: "medium",
scope: ["Error handling", "Input validation"], excludes: ["Performance optimization", "Monitoring"],
convergence: {
criteria: ["All user inputs validated", "Error scenarios show messages"],
verification: "Unit tests + manual error scenario testing",
definition_of_done: "Users have clear guidance and recovery paths when encountering problems"
},
risk_items: [], effort: "medium", depends_on: ["L0"],
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "L1" }
}
]直接式回退模板:
javascript
[
{
id: "T1", title: "Infrastructure setup", description: "Project scaffolding and base configuration",
type: "infrastructure", priority: "high",
scope: "Project scaffolding and base configuration",
inputs: [], outputs: ["project-structure"],
convergence: {
criteria: ["Project builds without errors", "Base configuration complete"],
verification: "npm run build (or equivalent build command)",
definition_of_done: "Project foundation ready for feature development"
},
depends_on: [], parallel_group: 1,
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "T1" }
},
{
id: "T2", title: "Core feature implementation", description: "Implement core business logic",
type: "feature", priority: "high",
scope: "Core business logic",
inputs: ["project-structure"], outputs: ["core-module"],
convergence: {
criteria: ["Core API/functionality callable", "Returns expected results"],
verification: "Run core feature tests",
definition_of_done: "Core business functionality works as expected"
},
depends_on: ["T1"], parallel_group: 2,
source: { tool: "req-plan-with-file", session_id: sessionId, original_id: "T2" }
}
]Error Handling
错误处理
| Situation | Action |
|---|---|
| No codebase detected | Normal flow, skip Phase 2 |
| Codebase search fails | Proceed with pure requirement decomposition |
| Circular dependency in records | Fix dependency graph before writing JSONL |
| User feedback timeout | Save current state, display |
| Max feedback rounds (5) | Use current version to generate final artifacts |
| Session folder conflict | Append timestamp suffix |
| JSONL format error | Validate line by line, report problematic lines and fix |
| Quality check fails | Auto-fix if possible, otherwise report to user in feedback loop |
| Decomposition produces empty results | Use fallback decomposition templates |
| 场景 | 操作 |
|---|---|
| 未检测到代码库 | 正常流程,跳过阶段2 |
| 代码库搜索失败 | 基于纯需求继续分解 |
| 记录存在循环依赖 | 写入JSONL前修复依赖图 |
| 用户反馈超时 | 保存当前状态,显示 |
| 达到最大反馈轮次(5轮) | 使用当前版本生成最终产物 |
| 会话文件夹冲突 | 追加时间戳后缀 |
| JSONL格式错误 | 逐行验证,上报问题行并修复 |
| 质量检查失败 | 尽可能自动修复,否则在反馈循环中上报给用户 |
| 分解产生空结果 | 使用回退分解模板 |
Best Practices
最佳实践
- Clear requirement description: Detailed description leads to more accurate uncertainty assessment and decomposition
- Validate MVP first: In progressive mode, L0 should be the minimum verifiable closed loop
- Testable convergence: criteria must be writable as assertions or manual steps; definition_of_done should be judgeable by non-technical stakeholders
- Incremental validation: Use to iterate on existing roadmaps
--continue - Independently executable: Each JSONL record should be independently passable to lite-plan for execution
- 清晰的需求描述:详细描述可提升不确定性评估与分解的准确性
- 优先验证MVP:渐进式模式下,L0应是最小可验证闭环
- 可测试的收敛标准:标准必须可编写断言或手动验证步骤;完成定义需让非技术干系人可判断
- 增量式验证:使用迭代已有路线图
--continue - 独立可执行:每个JSONL记录应可独立传入lite-plan执行
When to Use
适用场景
Use req-plan-with-file when:
- You need to decompose a large requirement into a progressively executable roadmap
- Unsure where to start, need an MVP strategy
- Need to generate a trackable task sequence for the team
- Requirement involves multiple stages or iterations
Use lite-plan when:
- You have a clear single task to execute
- The requirement is already a layer/task from the roadmap
- No layered planning needed
Use collaborative-plan-with-file when:
- A single complex task needs multi-agent parallel planning
- Need to analyze the same task from multiple domain perspectives
Use analyze-with-file when:
- Need in-depth analysis of a technical problem
- Not about planning execution, but understanding and discussion
Now execute the req-plan-with-file workflow for: $ARGUMENTS
使用req-plan-with-file的场景:
- 需要将大型需求分解为可渐进执行的路线图
- 不确定从何入手,需要MVP策略
- 需要为团队生成可追踪的任务序列
- 需求涉及多个阶段或迭代
使用lite-plan的场景:
- 已有明确的单个任务需要执行
- 需求已是路线图中的某个层级/任务
- 无需分层规划
使用collaborative-plan-with-file的场景:
- 单个复杂任务需要多代理并行规划
- 需要从多个领域视角分析同一任务
使用analyze-with-file的场景:
- 需要深入分析技术问题
- 不涉及执行规划,仅需理解与讨论
现在为以下需求执行req-plan-with-file工作流:$ARGUMENTS