make-it-done 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +263 -0
  2. package/agents/.gitkeep +0 -0
  3. package/agents/mid-debugger.md +88 -0
  4. package/agents/mid-executor.md +69 -0
  5. package/agents/mid-planner.md +97 -0
  6. package/agents/mid-researcher.md +101 -0
  7. package/agents/mid-verifier.md +92 -0
  8. package/bin/install.js +122 -0
  9. package/commands/mid/.gitkeep +0 -0
  10. package/commands/mid/debug.md +19 -0
  11. package/commands/mid/do.md +24 -0
  12. package/commands/mid/help.md +77 -0
  13. package/commands/mid/init.md +18 -0
  14. package/commands/mid/next.md +18 -0
  15. package/commands/mid/plan.md +21 -0
  16. package/commands/mid/quick.md +24 -0
  17. package/commands/mid/report.md +16 -0
  18. package/commands/mid/status.md +16 -0
  19. package/commands/mid/verify.md +19 -0
  20. package/makeitdone/bin/mid-tools.cjs +2048 -0
  21. package/makeitdone/steps/agent-contracts.md +184 -0
  22. package/makeitdone/steps/anti-patterns.md +291 -0
  23. package/makeitdone/steps/context-budget.md +157 -0
  24. package/makeitdone/steps/init-gate.md +42 -0
  25. package/makeitdone/steps/model-route.md +70 -0
  26. package/makeitdone/steps/state-read.md +56 -0
  27. package/makeitdone/templates/plan.md +94 -0
  28. package/makeitdone/templates/project.md +62 -0
  29. package/makeitdone/templates/requirements.md +97 -0
  30. package/makeitdone/templates/roadmap.md +111 -0
  31. package/makeitdone/templates/state.md +28 -0
  32. package/makeitdone/templates/summary.md +58 -0
  33. package/makeitdone/workflows/debug.md +135 -0
  34. package/makeitdone/workflows/execute.md +218 -0
  35. package/makeitdone/workflows/init.md +113 -0
  36. package/makeitdone/workflows/next.md +114 -0
  37. package/makeitdone/workflows/plan.md +231 -0
  38. package/makeitdone/workflows/quick.md +151 -0
  39. package/makeitdone/workflows/report.md +138 -0
  40. package/makeitdone/workflows/status.md +135 -0
  41. package/makeitdone/workflows/verify.md +177 -0
  42. package/package.json +50 -0
@@ -0,0 +1,218 @@
1
+ # Execute Phase Workflow
2
+
3
+ Wave-based phase execution with parallelization and per-task verification.
4
+
5
+ **Token budget**: ~12K per wave (includes executor + verifier spawns)
6
+
7
+ ---
8
+
9
+ ## Context Setup
10
+
11
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/init-gate.md
12
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/state-read.md
13
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/model-route.md
14
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/agent-contracts.md
15
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/anti-patterns.md
16
+
17
+ ---
18
+
19
+ ## Initialization
20
+
21
+ ### 1. Get Phase Context
22
+
23
+ ```bash
24
+ PHASE=${phase_arg}
25
+ PHASE_DIR=".planning/phases/$(printf '%02d' $PHASE)-*"
26
+
27
+ if [ ! -d "$PHASE_DIR" ]; then
28
+ error "Phase $PHASE not found"
29
+ fi
30
+
31
+ if [ ! -f "$PHASE_DIR/PLAN.md" ]; then
32
+ error "PLAN.md not found for phase $PHASE"
33
+ fi
34
+ ```
35
+
36
+ ### 2. Load Execution Payload
37
+
38
+ ```bash
39
+ PAYLOAD=$(node ~/.claude/makeitdone/bin/mid-tools.cjs init execute $PHASE)
40
+
41
+ # Parse TOON payload
42
+ BRANCH_NAME=$(echo "$PAYLOAD" | grep "branch_name" | cut -d: -f2 | tr -d ' ')
43
+ EXECUTOR_MODEL=$(echo "$PAYLOAD" | grep "executor_model" | cut -d: -f2 | tr -d ' ')
44
+ EXECUTOR=$(echo "$PAYLOAD" | grep "parallelization" | grep -q "true" && echo "parallel" || echo "serial")
45
+ ```
46
+
47
+ ### 3. Check State
48
+
49
+ ```bash
50
+ STATE=$(mid-tools state get)
51
+
52
+ CURRENT_WAVE=$(echo "$STATE" | grep "current_wave" | cut -d: -f2)
53
+ CURRENT_PHASE=$(echo "$STATE" | grep "phase" | cut -d: -f2)
54
+
55
+ if [ "$CURRENT_PHASE" != "$PHASE" ]; then
56
+ warn "Phase mismatch: state says $CURRENT_PHASE, executing $PHASE"
57
+ mid-tools state set phase $PHASE
58
+ fi
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Wave Execution Loop
64
+
65
+ ### 1. Extract Wave Tasks
66
+
67
+ ```bash
68
+ WAVE=$CURRENT_WAVE
69
+
70
+ # Parse PLAN.md for Wave N tasks
71
+ TASKS=$(grep -A 200 "^## Wave $WAVE" "$PHASE_DIR/PLAN.md" | \
72
+ grep "^### [0-9]" | \
73
+ sed 's/### //' | \
74
+ cut -d' ' -f1-2)
75
+ ```
76
+
77
+ ### 2. Update STATE (Wave Start)
78
+
79
+ ```bash
80
+ mid-tools state set current_wave $WAVE
81
+ mid-tools state set wave_${WAVE}_start $(date -u +%s)
82
+ ```
83
+
84
+ ### 3. Spawn Executor
85
+
86
+ ```bash
87
+ EXECUTOR_OUTPUT=$(spawn agent \
88
+ name=mid-executor \
89
+ model=$EXECUTOR_MODEL \
90
+ context=$(cat << EOF
91
+ phase: $PHASE
92
+ wave: $WAVE
93
+ tasks: $TASKS
94
+ phase_dir: $PHASE_DIR
95
+ branch: $BRANCH_NAME
96
+ mode: execute
97
+ parallelization: $EXECUTOR
98
+ EOF
99
+ ))
100
+ ```
101
+
102
+ ### 4. Parse Completion Marker
103
+
104
+ ```bash
105
+ if [[ $EXECUTOR_OUTPUT == *"## WAVE COMPLETE"* ]]; then
106
+ handle_wave_complete
107
+ elif [[ $EXECUTOR_OUTPUT == *"## BLOCKED"* ]]; then
108
+ handle_blocked
109
+ elif [[ $EXECUTOR_OUTPUT == *"## FAILED"* ]]; then
110
+ handle_failed
111
+ else
112
+ error "Unexpected executor output, no completion marker"
113
+ fi
114
+ ```
115
+
116
+ ### 5. Wave Complete Actions
117
+
118
+ ```bash
119
+ mid-tools state set wave_${WAVE}_complete true
120
+ mid-tools state set wave_${WAVE}_end $(date -u +%s)
121
+
122
+ # Check if more waves
123
+ NEXT_WAVE=$((WAVE + 1))
124
+
125
+ if grep -q "^## Wave $NEXT_WAVE" "$PHASE_DIR/PLAN.md"; then
126
+ # More waves exist
127
+ mid-tools state set current_wave $NEXT_WAVE
128
+
129
+ echo "Wave $WAVE complete. Ready for Wave $NEXT_WAVE."
130
+ echo "Run: /mid:do $PHASE --wave $NEXT_WAVE"
131
+
132
+ output_marker "## WAVE COMPLETE"
133
+ else
134
+ # No more waves - phase complete
135
+ spawn mid-verifier mode=integration phase=$PHASE
136
+
137
+ # After verification passes
138
+ mid-tools state advance $PHASE
139
+
140
+ output_marker "## PHASE EXECUTION COMPLETE"
141
+ fi
142
+ ```
143
+
144
+ ---
145
+
146
+ ## Error Handling
147
+
148
+ ### Blocked by User Decision
149
+
150
+ ```bash
151
+ if [[ $EXECUTOR_OUTPUT == *"## BLOCKED"* ]]; then
152
+ # Extract blocker details
153
+ BLOCKER=$(echo "$EXECUTOR_OUTPUT" | grep -A 5 "BLOCKED")
154
+
155
+ echo "$BLOCKER"
156
+
157
+ ask_user "How should we proceed?"
158
+ - "Skip this task and continue"
159
+ - "Retry task"
160
+ - "Stop and escalate"
161
+
162
+ if [ $user_choice = "Skip" ]; then
163
+ mark_task_skipped $task_id
164
+ continue_wave
165
+ fi
166
+ fi
167
+ ```
168
+
169
+ ### Task Failure
170
+
171
+ ```bash
172
+ if [[ $EXECUTOR_OUTPUT == *"## FAILED"* ]]; then
173
+ spawn mid-debugger with executor_output
174
+
175
+ # Wait for debug report
176
+
177
+ ask_user "Debugging complete. Options:"
178
+ - "Apply suggested fix and retry"
179
+ - "Skip task"
180
+ - "Stop phase execution"
181
+ fi
182
+ ```
183
+
184
+ ### Context Exhaustion
185
+
186
+ ```bash
187
+ if [ "$context_window" -lt 300000 ]; then
188
+ error "Context too low for continuation"
189
+ output "Current state saved in .planning/STATE.md"
190
+ output "Resume later: /mid:do $PHASE --wave $WAVE"
191
+ fi
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Per-Wave Verification (Optional)
197
+
198
+ If `--verify` flag:
199
+
200
+ ```bash
201
+ after_wave_complete:
202
+ spawn mid-verifier \
203
+ mode=integration \
204
+ phase=$PHASE \
205
+ wave=$WAVE \
206
+ tasks=$COMPLETED_TASKS
207
+ ```
208
+
209
+ ---
210
+
211
+ ## Anti-patterns Avoided
212
+
213
+ ✓ Fresh init payload per wave (not cached)
214
+ ✓ Exact completion marker checking
215
+ ✓ Atomic state updates via mid-tools
216
+ ✓ Spawn verifier only as quality gate
217
+ ✓ Escalate on failure (don't continue blindly)
218
+ ✓ Fast-fail on context < 300k
@@ -0,0 +1,113 @@
1
+ # Initialize makeitdone Project
2
+
3
+ Token optimized initialization workflow for new projects.
4
+
5
+ **Token budget**: ~8K (init-gate + questions + template copy)
6
+
7
+ ---
8
+
9
+ ## Context Setup
10
+
11
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/init-gate.md
12
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/anti-patterns.md
13
+
14
+ ---
15
+
16
+ ## Execution
17
+
18
+ ### 1. Project Metadata Collection
19
+
20
+ Ask user 5 critical questions:
21
+
22
+ - Project name: ?
23
+ - Description (one-liner): ?
24
+ - Team size (1-5+ people): ?
25
+ - Timeline estimate (weeks): ?
26
+ - Tech stack (framework/lang): ?
27
+
28
+ Store in memory for next session.
29
+
30
+ ### 2. Create .planning Directory
31
+
32
+ ```bash
33
+ mkdir -p .planning/phases/{01,02,03}
34
+ touch .planning/config.json
35
+ ```
36
+
37
+ ### 3. Initialize Templates
38
+
39
+ Copy templates to project:
40
+
41
+ ```bash
42
+ cp ~/.claude/makeitdone/templates/project.md .planning/PROJECT.md
43
+ cp ~/.claude/makeitdone/templates/requirements.md .planning/REQUIREMENTS.md
44
+ cp ~/.claude/makeitdone/templates/roadmap.md .planning/ROADMAP.md
45
+ cp ~/.claude/makeitdone/templates/state.md .planning/STATE.md
46
+ ```
47
+
48
+ ### 4. Populate Config
49
+
50
+ ```json
51
+ {
52
+ "project_name": "[user input]",
53
+ "description": "[user input]",
54
+ "model_profile": "balanced",
55
+ "context_window": 200000,
56
+ "team_size": [user input],
57
+ "created": "2026-04-05"
58
+ }
59
+ ```
60
+
61
+ ### 5. Update PROJECT.md
62
+
63
+ Populate with user answers:
64
+ - Name, description (frontmatter)
65
+ - Goals section (auto-generate 3 generic + ask user for specific)
66
+ - Scope, constraints, timeline
67
+ - Tech stack
68
+
69
+ ### 6. First Roadmap Question
70
+
71
+ Ask: "How many phases do you estimate? (2-5)"
72
+
73
+ Create ROADMAP.md structure with user's phase count.
74
+
75
+ ### 7. Success Checkpoint
76
+
77
+ ```bash
78
+ # Verify structure
79
+ test -f .planning/PROJECT.md && echo "✅ PROJECT.md"
80
+ test -f .planning/REQUIREMENTS.md && echo "✅ REQUIREMENTS.md"
81
+ test -f .planning/ROADMAP.md && echo "✅ ROADMAP.md"
82
+ test -f .planning/STATE.md && echo "✅ STATE.md"
83
+ test -f .planning/config.json && echo "✅ config.json"
84
+ ```
85
+
86
+ Output completion marker:
87
+
88
+ ```
89
+ ## PROJECT INITIALIZED
90
+
91
+ Name: [project name]
92
+ Location: .planning/
93
+ Files: 5 created
94
+
95
+ Next step: Run /mid:plan --mode roadmap to detail your phases
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Error Handling
101
+
102
+ - **Missing input**: Re-ask question
103
+ - **.planning already exists**: Skip creation, verify files
104
+ - **Invalid JSON**: Use defaults, warn user
105
+
106
+ ---
107
+
108
+ ## Anti-patterns Avoided
109
+
110
+ ✓ Frontmatter-first (no full-file reads needed)
111
+ ✓ No agents spawned (user-facing interview only)
112
+ ✓ Templates via copy, not text generation
113
+ ✓ Fast-fail on directory issues (escalate to user)
@@ -0,0 +1,114 @@
1
+ # Next Phase Workflow
2
+
3
+ Move to next phase after current phase verification passes.
4
+
5
+ **Token budget**: ~6K (state reads + verification spawn)
6
+
7
+ ---
8
+
9
+ ## Context Setup
10
+
11
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/state-read.md
12
+
13
+ ---
14
+
15
+ ## Execution
16
+
17
+ ### 1. Check Current Phase State
18
+
19
+ ```bash
20
+ STATE=$(mid-tools state get)
21
+ CURRENT_PHASE=$(echo "$STATE" | grep "^phase:" | cut -d: -f2 | tr -d ' ')
22
+ PHASE_COMPLETE=$(echo "$STATE" | grep "phase_complete:" | cut -d: -f2 | tr -d ' ')
23
+
24
+ if [ "$PHASE_COMPLETE" != "true" ]; then
25
+ error "Phase $CURRENT_PHASE not marked complete"
26
+ output "Run /mid:verify --mode audit --phase $CURRENT_PHASE first"
27
+ fi
28
+ ```
29
+
30
+ ### 2. Verify All Waves Complete
31
+
32
+ ```bash
33
+ PHASE_DIR=".planning/phases/$(printf '%02d' $CURRENT_PHASE)-*"
34
+
35
+ # Extract max wave number from PLAN.md
36
+ MAX_WAVE=$(grep "^## Wave" "$PHASE_DIR/PLAN.md" | tail -1 | grep -o "[0-9]")
37
+
38
+ for wave in $(seq 1 $MAX_WAVE); do
39
+ WAVE_COMPLETE=$(echo "$STATE" | grep "wave_${wave}_complete" | cut -d: -f2)
40
+ if [ "$WAVE_COMPLETE" != "true" ]; then
41
+ error "Wave $wave not complete"
42
+ fi
43
+ done
44
+ ```
45
+
46
+ ### 3. Calculate Next Phase
47
+
48
+ ```bash
49
+ NEXT_PHASE=$((CURRENT_PHASE + 1))
50
+
51
+ # Check if next phase exists in roadmap
52
+ if ! grep -q "^## $(printf '%02d' $NEXT_PHASE)" .planning/ROADMAP.md; then
53
+ output "All phases complete! Project done."
54
+ output "Final report: /mid:report"
55
+ exit 0
56
+ fi
57
+ ```
58
+
59
+ ### 4. Update State
60
+
61
+ ```bash
62
+ mid-tools state set phase $NEXT_PHASE
63
+ mid-tools state set current_wave 1
64
+ mid-tools state set phase_start_time $(date -u +%s)
65
+
66
+ # Clear wave tracking for new phase
67
+ for wave in 1 2 3 4 5; do
68
+ mid-tools state set wave_${wave}_complete false || true
69
+ done
70
+ ```
71
+
72
+ ### 5. Create PLAN.md Stub for Next Phase
73
+
74
+ If PLAN.md doesn't exist for next phase:
75
+
76
+ ```bash
77
+ NEXT_DIR=".planning/phases/$(printf '%02d' $NEXT_PHASE)-*"
78
+
79
+ if [ ! -f "$NEXT_DIR/PLAN.md" ]; then
80
+ cp ~/.claude/makeitdone/templates/plan.md "$NEXT_DIR/PLAN.md"
81
+ output "Created PLAN.md stub for Phase $NEXT_PHASE"
82
+ output "Next: /mid:plan --mode phase --phase $NEXT_PHASE"
83
+ fi
84
+ ```
85
+
86
+ ### 6. Success Output
87
+
88
+ ```
89
+ ## PHASE TRANSITION COMPLETE
90
+
91
+ Previous phase: $CURRENT_PHASE ✅
92
+ Current phase: $NEXT_PHASE (ready)
93
+
94
+ Status: Waiting for /mid:plan --mode phase --phase $NEXT_PHASE
95
+
96
+ To start execution: /mid:do $NEXT_PHASE
97
+ ```
98
+
99
+ ---
100
+
101
+ ## Error Handling
102
+
103
+ - **Current phase not marked complete**: Fail, guide to `/mid:verify`
104
+ - **Waves not complete**: Fail, guide to `/mid:do`
105
+ - **No next phase in roadmap**: Success, output final report option
106
+ - **PLAN.md creation fails**: Warn, ask user to create manually
107
+
108
+ ---
109
+
110
+ ## Anti-patterns Avoided
111
+
112
+ ✓ Fast-fail on state inconsistency
113
+ ✓ Atomic state updates (no partial updates)
114
+ ✓ Clear next steps for user
@@ -0,0 +1,231 @@
1
+ # Plan Phase Workflow
2
+
3
+ Create or update project plans with token-optimized research gate.
4
+
5
+ **Token budget**: ~10K (depends on research flag; lazy-loaded)
6
+
7
+ ---
8
+
9
+ ## Context Setup
10
+
11
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/init-gate.md
12
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/state-read.md
13
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/model-route.md
14
+ @/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/context-budget.md
15
+
16
+ ---
17
+
18
+ ## Modes
19
+
20
+ - `--mode roadmap` — create ROADMAP.md from PROJECT.md + REQUIREMENTS.md
21
+ - `--mode phase --phase N` — create PLAN.md for specific phase
22
+ - `--mode gap --phase N` — identify missing requirements, create gap plan
23
+ - `--mode check --phase N` — validate plan against requirements
24
+
25
+ ---
26
+
27
+ ## Execution (Roadmap Mode)
28
+
29
+ ### 1. Check Context
30
+
31
+ ```bash
32
+ context_window=$(mid-tools config get context_window)
33
+
34
+ if [ "$context_window" -lt 300000 ]; then
35
+ error "Context too low for roadmap planning (need > 300k)"
36
+ fi
37
+ ```
38
+
39
+ ### 2. Research Gate
40
+
41
+ ```bash
42
+ if [ "$research_required" = true ] || [ "$RESEARCH_FLAG" = true ]; then
43
+ spawn mid-researcher mode=project
44
+ else:
45
+ skip research
46
+ fi
47
+ ```
48
+
49
+ ### 3. Spawn Planner (Roadmap)
50
+
51
+ ```bash
52
+ spawn mid-planner \
53
+ mode=roadmap \
54
+ context=$(cat .planning/PROJECT.md | head -50) \
55
+ requirements=$(mid-tools fm get .planning/REQUIREMENTS.md)
56
+ ```
57
+
58
+ **mid-planner contract**: Must output `## ROADMAP CREATED` when complete.
59
+
60
+ ### 4. Verify Output
61
+
62
+ ```bash
63
+ if [ -f .planning/ROADMAP.md ] && grep -q "^## [0-9]" .planning/ROADMAP.md; then
64
+ success "ROADMAP.md created"
65
+ else
66
+ error "ROADMAP.md not created or invalid format"
67
+ fi
68
+ ```
69
+
70
+ ### 5. Update STATE.md
71
+
72
+ ```bash
73
+ mid-tools state set current_phase 1
74
+ mid-tools state set status planning_complete
75
+ ```
76
+
77
+ Output completion marker:
78
+
79
+ ```
80
+ ## PHASE PLAN CREATED
81
+
82
+ File: .planning/ROADMAP.md
83
+ Phases: 3
84
+ Status: Ready for phase-level planning
85
+
86
+ Next: Run /mid:plan --mode phase --phase 1
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Execution (Phase Mode)
92
+
93
+ ### 1. Load Phase Context
94
+
95
+ ```bash
96
+ PHASE=${phase_arg}
97
+ PHASE_DIR=".planning/phases/$(printf '%02d' $PHASE)-*"
98
+
99
+ if [ ! -d "$PHASE_DIR" ]; then
100
+ error "Phase $PHASE directory not found"
101
+ fi
102
+ ```
103
+
104
+ ### 2. Research Gate
105
+
106
+ Only if `--research` flag:
107
+
108
+ ```bash
109
+ if [ "$RESEARCH_FLAG" = true ]; then
110
+ spawn mid-researcher mode=phase phase=$PHASE
111
+ else
112
+ skip
113
+ fi
114
+ ```
115
+
116
+ ### 3. Spawn Planner (Phase)
117
+
118
+ ```bash
119
+ spawn mid-planner \
120
+ mode=phase \
121
+ phase=$PHASE \
122
+ requirements=$(mid-tools fm get .planning/REQUIREMENTS.md) \
123
+ phase_context=$(mid-tools fm get "$PHASE_DIR/PLAN.md" 2>/dev/null || echo "")
124
+ ```
125
+
126
+ **Expectation**: Output `## PHASE PLAN CREATED` + PLAN.md file.
127
+
128
+ ### 4. Validate Plan Size
129
+
130
+ ```bash
131
+ LINES=$(wc -l < "$PHASE_DIR/PLAN.md")
132
+ if [ "$LINES" -gt 150 ]; then
133
+ warn "PLAN.md exceeds 150 lines ($LINES), may need splitting"
134
+ fi
135
+ ```
136
+
137
+ ### 5. Update STATE
138
+
139
+ ```bash
140
+ mid-tools state set current_phase $PHASE
141
+ TASKS=$(grep -c "^### [0-9]" "$PHASE_DIR/PLAN.md")
142
+ mid-tools state set phase_${PHASE}_tasks $TASKS
143
+ ```
144
+
145
+ Output:
146
+
147
+ ```
148
+ ## PHASE PLAN CREATED
149
+
150
+ Phase: $PHASE
151
+ Tasks: $TASKS (N waves)
152
+ File: .planning/phases/NN-name/PLAN.md
153
+
154
+ Next: Run /mid:do $PHASE to execute
155
+ ```
156
+
157
+ ---
158
+
159
+ ## Execution (Gap Mode)
160
+
161
+ ### 1. Load PLAN.md
162
+
163
+ ```bash
164
+ if [ ! -f "$PHASE_DIR/PLAN.md" ]; then
165
+ error "PLAN.md not found for phase $PHASE"
166
+ fi
167
+ ```
168
+
169
+ ### 2. Spawn Planner (Gap)
170
+
171
+ ```bash
172
+ spawn mid-planner \
173
+ mode=gap \
174
+ phase=$PHASE \
175
+ plan=$(cat "$PHASE_DIR/PLAN.md") \
176
+ requirements=$(cat .planning/REQUIREMENTS.md)
177
+ ```
178
+
179
+ ### 3. Handle Output
180
+
181
+ Creates gap-closure plan file(s): `$PHASE_DIR/gap-plan-N.md`
182
+
183
+ Output:
184
+
185
+ ```
186
+ ## GAP PLANS CREATED
187
+
188
+ Gaps found: N
189
+ Plans: gap-plan-1.md, gap-plan-2.md
190
+
191
+ Next: Review gaps, then /mid:do $PHASE --include-gaps
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Execution (Check Mode)
197
+
198
+ ### 1. Spawn Planner (Check)
199
+
200
+ ```bash
201
+ spawn mid-planner \
202
+ mode=check \
203
+ phase=$PHASE \
204
+ plan=$(cat "$PHASE_DIR/PLAN.md")
205
+ ```
206
+
207
+ ### 2. Parse Result
208
+
209
+ If contains `## PLAN VALIDATION PASSED`:
210
+ - Success, continue
211
+ If contains `## PLAN VALIDATION FAILED`:
212
+ - Show issues, escalate to user
213
+
214
+ ---
215
+
216
+ ## Error Handling
217
+
218
+ - **Phase not found**: Create phase directory, ask user for phase name
219
+ - **PLAN.md invalid format**: Show format error, offer template
220
+ - **Research timeout**: Partial research OK, continue with findings
221
+ - **Planner blocked**: Escalate findings to user
222
+
223
+ ---
224
+
225
+ ## Anti-patterns Avoided
226
+
227
+ ✓ Lazy research gate (only spawn if flagged)
228
+ ✓ Frontmatter reads for context (no full files)
229
+ ✓ Path-based delegation to agents
230
+ ✓ Exact completion markers for verification
231
+ ✓ Context guard for roadmap mode (> 300k required)