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.
- package/README.md +263 -0
- package/agents/.gitkeep +0 -0
- package/agents/mid-debugger.md +88 -0
- package/agents/mid-executor.md +69 -0
- package/agents/mid-planner.md +97 -0
- package/agents/mid-researcher.md +101 -0
- package/agents/mid-verifier.md +92 -0
- package/bin/install.js +122 -0
- package/commands/mid/.gitkeep +0 -0
- package/commands/mid/debug.md +19 -0
- package/commands/mid/do.md +24 -0
- package/commands/mid/help.md +77 -0
- package/commands/mid/init.md +18 -0
- package/commands/mid/next.md +18 -0
- package/commands/mid/plan.md +21 -0
- package/commands/mid/quick.md +24 -0
- package/commands/mid/report.md +16 -0
- package/commands/mid/status.md +16 -0
- package/commands/mid/verify.md +19 -0
- package/makeitdone/bin/mid-tools.cjs +2048 -0
- package/makeitdone/steps/agent-contracts.md +184 -0
- package/makeitdone/steps/anti-patterns.md +291 -0
- package/makeitdone/steps/context-budget.md +157 -0
- package/makeitdone/steps/init-gate.md +42 -0
- package/makeitdone/steps/model-route.md +70 -0
- package/makeitdone/steps/state-read.md +56 -0
- package/makeitdone/templates/plan.md +94 -0
- package/makeitdone/templates/project.md +62 -0
- package/makeitdone/templates/requirements.md +97 -0
- package/makeitdone/templates/roadmap.md +111 -0
- package/makeitdone/templates/state.md +28 -0
- package/makeitdone/templates/summary.md +58 -0
- package/makeitdone/workflows/debug.md +135 -0
- package/makeitdone/workflows/execute.md +218 -0
- package/makeitdone/workflows/init.md +113 -0
- package/makeitdone/workflows/next.md +114 -0
- package/makeitdone/workflows/plan.md +231 -0
- package/makeitdone/workflows/quick.md +151 -0
- package/makeitdone/workflows/report.md +138 -0
- package/makeitdone/workflows/status.md +135 -0
- package/makeitdone/workflows/verify.md +177 -0
- 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)
|