req-plan-with-file

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Codex 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-plan
.
Core 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
--yes
or
-y
: Auto-confirm strategy selection, use recommended mode, skip interactive validation rounds.
当使用
--yes
-y
参数时,将自动确认策略选择,使用推荐模式,跳过交互式验证环节。

Quick Start

快速开始

bash
undefined
bash
undefined

Basic 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"
undefined

Target 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

配置参数

FlagDefaultDescription
-y, --yes
falseAuto-confirm all decisions
-c, --continue
falseContinue existing session
-m, --mode
autoDecomposition 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
参数默认值说明
-y, --yes
false自动确认所有决策
-c, --continue
false继续已有会话
-m, --mode
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]) =>
    ${k}=${v}
    ).join(', ')}
  • Uncertainty level: ${uncertaintyLevel}
  • Decomposition mode: ${selectedMode}
  • Assessment basis: ${Object.entries(uncertaintyFactors).map(([k,v]) =>
    ${k}=${v}
    ).join(', ')}

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
 Write(
${sessionFolder}/roadmap.md`, roadmapMdSkeleton)

**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 initialized
To be populated after Phase 4 validation
 Write(
${sessionFolder}/roadmap.md`, roadmapMdSkeleton)

**成功标准**:
- 已识别需求目标、约束、干系人、领域关键词
- 完成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 3
Success 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.jsonl
Success 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
undefined

Roadmap Overview

路线图概述

LayerTitleDescriptionEffortDependencies
L0MVP...medium-
L1Usable...mediumL0
层级标题描述工作量依赖项
L0MVP...medium-
L1可用版...mediumL0

Convergence Criteria

收敛标准

L0 - MVP:
  • Criteria: [criteria list]
  • Verification: [verification]
  • Definition of Done: [definition_of_done]

**Direct Mode display format**:

```markdown
L0 - MVP:
  • 标准:[标准列表]
  • 验证方式:[验证步骤]
  • 完成定义:[业务语言描述]

**直接模式展示格式**:

```markdown

Task Sequence

任务序列

GroupIDTitleTypeDescriptionDependencies
1T1...infrastructure...-
2T2...feature...T1
并行组ID标题类型描述依赖项
1T1...基础设施...-
2T2...功能特性...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]) =>
    ${k}=${v}
    ).join(', ')}
  • 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]) =>
    ${k}=${v}
    ).join(', ')}
  • 目标: ${strategy.goal}
  • 约束: ${strategy.constraints.join(', ') || '无'}
  • 干系人: ${strategy.stakeholders.join(', ') || '无'}

Roadmap Overview

路线图概述

LayerTitleDescriptionEffortDependencies
${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]) =>
    ${k}=${v}
    ).join(', ')}
  • 目标: ${strategy.goal}
  • 约束: ${strategy.constraints.join(', ') || '无'}
  • 评估依据: ${Object.entries(strategy.uncertainty_factors).map(([k,v]) =>
    ${k}=${v}
    ).join(', ')}

Task Sequence

任务序列

GroupIDTitleTypeDescriptionDependencies
${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" }
      ]
    }]
  })
}
SelectionAction
Execute First Layer
Skill(skill="workflow:lite-plan", args="${firstItem.scope}")
Create Issue
Skill(skill="issue:new", args="...")
Export ReportCopy roadmap.md + roadmap.jsonl to user-specified location
DoneDisplay 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: "仅保存路线图,后续再执行" }
      ]
    }]
  })
}
选择项操作
执行第一个层级
Skill(skill="workflow:lite-plan", args="${firstItem.scope}")
创建Issue
Skill(skill="issue:new", args="...")
导出报告将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)
FilePhaseDescription
strategy-assessment.json
1Uncertainty analysis + mode recommendation + extracted goal/constraints/stakeholders/domain_keywords
roadmap.md
(skeleton)
1Initial skeleton with placeholders, finalized in Phase 4
exploration-codebase.json
2Codebase context: relevant modules, patterns, integration points (only when codebase exists)
roadmap.jsonl
3One self-contained JSON record per line with convergence criteria and source provenance
roadmap.md
(final)
4Human-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     # 代码库上下文(可选)
文件阶段描述
strategy-assessment.json
1不确定性分析 + 模式推荐 + 提取的目标/约束/干系人/领域关键词
roadmap.md
(框架)
1带占位符的初始框架,阶段4定稿
exploration-codebase.json
2代码库上下文:相关模块、模式、集成点(仅当存在代码库时生成)
roadmap.jsonl
3每行一个独立JSON记录,含收敛标准与来源溯源
roadmap.md
(最终版)
4人类可读路线图,含表格展示+收敛细节,已根据用户反馈修订

JSONL Schema

JSONL Schema

Convergence Criteria

收敛标准

Each record's
convergence
object:
FieldPurposeRequirement
criteria[]
List of checkable specific conditionsTestable - can be written as assertions or manual steps
verification
How to verify these conditionsExecutable - command, script, or explicit steps
definition_of_done
One-sentence completion definitionBusiness language - non-technical person can judge
每条记录的
convergence
对象:
字段用途要求
criteria[]
可检查的具体条件列表可测试 - 可编写断言或手动验证步骤
verification
验证这些条件的方式可执行 - 命令、脚本或明确步骤
definition_of_done
一句话式完成定义业务语言 - 非技术人员可判断

Progressive Mode (one layer per line)

渐进式模式(每行一个层级)

LayerTitleTypical Description
L0MVPMinimum viable closed loop, core path end-to-end
L1UsableKey user paths refined, basic error handling
L2RefinedEdge cases, performance, security hardening
L3OptimizedAdvanced 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).
层级标题典型描述
L0MVP最小可行闭环,核心路径端到端
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)

直接模式(每行一个任务)

TypeUse Case
infrastructureData models, configuration, scaffolding
featureAPI, UI, business logic implementation
enhancementValidation, error handling, edge cases
testingUnit 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数据模型、配置、项目脚手架
featureAPI、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
convergence
field MUST satisfy these quality standards:
FieldRequirementBad ExampleGood Example
criteria[]
Testable - can write assertions or manual steps
"System works correctly"
"API returns 200 and response body contains user_id field"
verification
Executable - command, script, or clear steps
"Check it"
"jest --testPathPattern=auth && curl -s localhost:3000/health"
definition_of_done
Business language - non-technical person can judge
"Code compiles"
"New user can complete register→login→perform core operation flow"
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
字段必须满足以下质量标准:
字段要求反面示例正面示例
criteria[]
可测试 - 可编写断言或手动验证步骤
"System works correctly"
"API returns 200 and response body contains user_id field"
verification
可执行 - 命令、脚本或明确步骤
"Check it"
"jest --testPathPattern=auth && curl -s localhost:3000/health"
definition_of_done
业务语言 - 非技术人员可判断
"Code compiles"
"New user can complete register→login→perform core operation flow"
绝对禁止输出模糊的收敛标准(如"正常工作"、"系统正常")。必须确保:
  • 标准可测试(可编写断言或手动验证步骤)
  • 验证方式可执行(命令或明确步骤)
  • 完成定义使用业务语言(非技术干系人可判断)

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

错误处理

SituationAction
No codebase detectedNormal flow, skip Phase 2
Codebase search failsProceed with pure requirement decomposition
Circular dependency in recordsFix dependency graph before writing JSONL
User feedback timeoutSave current state, display
--continue
recovery command
Max feedback rounds (5)Use current version to generate final artifacts
Session folder conflictAppend timestamp suffix
JSONL format errorValidate line by line, report problematic lines and fix
Quality check failsAuto-fix if possible, otherwise report to user in feedback loop
Decomposition produces empty resultsUse fallback decomposition templates
场景操作
未检测到代码库正常流程,跳过阶段2
代码库搜索失败基于纯需求继续分解
记录存在循环依赖写入JSONL前修复依赖图
用户反馈超时保存当前状态,显示
--continue
恢复命令
达到最大反馈轮次(5轮)使用当前版本生成最终产物
会话文件夹冲突追加时间戳后缀
JSONL格式错误逐行验证,上报问题行并修复
质量检查失败尽可能自动修复,否则在反馈循环中上报给用户
分解产生空结果使用回退分解模板

Best Practices

最佳实践

  1. Clear requirement description: Detailed description leads to more accurate uncertainty assessment and decomposition
  2. Validate MVP first: In progressive mode, L0 should be the minimum verifiable closed loop
  3. Testable convergence: criteria must be writable as assertions or manual steps; definition_of_done should be judgeable by non-technical stakeholders
  4. Incremental validation: Use
    --continue
    to iterate on existing roadmaps
  5. Independently executable: Each JSONL record should be independently passable to lite-plan for execution
  1. 清晰的需求描述:详细描述可提升不确定性评估与分解的准确性
  2. 优先验证MVP:渐进式模式下,L0应是最小可验证闭环
  3. 可测试的收敛标准:标准必须可编写断言或手动验证步骤;完成定义需让非技术干系人可判断
  4. 增量式验证:使用
    --continue
    迭代已有路线图
  5. 独立可执行:每个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