---
role: planner
prefix: PLAN
inner_loop: true
cli_tools:
  - gemini --mode analysis
message_types:
  success: plan_ready
  progress: plan_progress
  error: error
---

# Planner

Research and plan creation per roadmap phase. Gathers codebase context via CLI exploration, then generates wave-based execution plans with convergence criteria via CLI planning tool.

## Phase 2: Context Loading + Research

| Input | Source | Required |
|-------|--------|----------|
| roadmap.md | <session>/roadmap.md | Yes |
| config.json | <session>/config.json | Yes |
| Prior summaries | <session>/phase-{1..N-1}/summary-*.md | No |
| Wisdom | <session>/wisdom/ | No |

1. Read roadmap.md, extract phase goal, requirements (REQ-IDs), success criteria
2. Read config.json for depth setting (quick/standard/comprehensive)
3. Load prior phase summaries for dependency context
4. Detect gap closure mode (task description contains "Gap closure")
5. Launch CLI exploration with phase requirements as exploration query:
   ```
   Bash({
     command: `ccw cli -p "PURPOSE: Explore codebase for phase requirements
   TASK: • Identify files needing modification • Map patterns and dependencies • Assess test infrastructure • Identify risks
   MODE: analysis
   CONTEXT: @**/* | Memory: Phase goal: ${phaseGoal}
   EXPECTED: Structured exploration results with file lists, patterns, risks
   CONSTRAINTS: Read-only analysis" --tool gemini --mode analysis`,
     run_in_background: false
   })
   ```
   - Target: files needing modification, patterns, dependencies, test infrastructure, risks
6. If depth=comprehensive: run Gemini CLI analysis (`--mode analysis --rule analysis-analyze-code-patterns`)
7. Write `<session>/phase-{N}/context.md` combining roadmap requirements + exploration results

## Phase 3: Plan Creation

1. Load context.md from Phase 2
2. Create output directory: `<session>/phase-{N}/.task/`
3. Delegate to CLI planning tool with:
   ```
   Bash({
     command: `ccw cli -p "PURPOSE: Generate wave-based execution plan for phase ${phaseNum}
   TASK: • Break down requirements into tasks • Define convergence criteria • Build dependency graph • Assign waves
   MODE: write
   CONTEXT: @${contextMd} | Memory: ${priorSummaries}
   EXPECTED: IMPL_PLAN.md + IMPL-*.json files + TODO_LIST.md
   CONSTRAINTS: <= 10 tasks | Valid DAG | Measurable convergence criteria" --tool gemini --mode write`,
     run_in_background: false
   })
   ```
4. CLI tool produces: `IMPL_PLAN.md`, `.task/IMPL-*.json`, `TODO_LIST.md`
5. If gap closure: only create tasks for gaps, starting from next available ID

## Phase 4: Self-Validation

| Check | Pass Criteria | Action on Failure |
|-------|---------------|-------------------|
| Task JSON files exist | >= 1 IMPL-*.json found | Error to coordinator |
| Required fields | id, title, description, files, implementation, convergence | Log warning |
| Convergence criteria | Each task has >= 1 criterion | Log warning |
| No self-dependency | task.id not in task.depends_on | Log error, remove cycle |
| All deps valid | Every depends_on ID exists | Log warning |
| IMPL_PLAN.md exists | File present | Generate minimal version from task JSONs |

After validation, compute wave structure from dependency graph for reporting:
- Wave count = topological layers of DAG
- Report: task count, wave count, file list
