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,151 @@
|
|
|
1
|
+
# Quick Task Execution Workflow
|
|
2
|
+
|
|
3
|
+
Ad-hoc task execution without full phase structure. Useful for out-of-band work.
|
|
4
|
+
|
|
5
|
+
**Token budget**: ~12K (direct executor spawn, no wave structure)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Context Setup
|
|
10
|
+
|
|
11
|
+
@/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/model-route.md
|
|
12
|
+
@/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/agent-contracts.md
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Execution
|
|
17
|
+
|
|
18
|
+
### 1. Parse Task Description
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
TASK_DESC="$ARGUMENTS"
|
|
22
|
+
|
|
23
|
+
if [ -z "$TASK_DESC" ]; then
|
|
24
|
+
error "Usage: /mid:quick '<task description>'"
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. Route Model
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
context_window=$(mid-tools config get context_window)
|
|
33
|
+
model_profile=$(mid-tools config get model_profile)
|
|
34
|
+
|
|
35
|
+
if [ "$context_window" -lt 500000 ]; then
|
|
36
|
+
# Degrade to haiku
|
|
37
|
+
EXECUTOR_MODEL=haiku
|
|
38
|
+
output "warn: Low context, using haiku"
|
|
39
|
+
else
|
|
40
|
+
# Use profile routing
|
|
41
|
+
case "$model_profile" in
|
|
42
|
+
budget) EXECUTOR_MODEL=haiku ;;
|
|
43
|
+
balanced) EXECUTOR_MODEL=sonnet ;;
|
|
44
|
+
quality) EXECUTOR_MODEL=opus ;;
|
|
45
|
+
esac
|
|
46
|
+
fi
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 3. Spawn Executor (Direct)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
EXECUTOR_OUTPUT=$(spawn agent \
|
|
53
|
+
name=mid-executor \
|
|
54
|
+
model=$EXECUTOR_MODEL \
|
|
55
|
+
context=$(cat << EOF
|
|
56
|
+
mode: quick
|
|
57
|
+
task: $TASK_DESC
|
|
58
|
+
interactive: $([ "$INTERACTIVE_FLAG" = true ] && echo "true" || echo "false")
|
|
59
|
+
EOF
|
|
60
|
+
))
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 4. Parse Output
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
if [[ $EXECUTOR_OUTPUT == *"## WAVE COMPLETE"* ]] || \
|
|
67
|
+
[[ $EXECUTOR_OUTPUT == *"completed"* ]]; then
|
|
68
|
+
output "## TASK COMPLETE"
|
|
69
|
+
|
|
70
|
+
# Extract results
|
|
71
|
+
RESULTS=$(echo "$EXECUTOR_OUTPUT" | grep -A 10 "Results:")
|
|
72
|
+
echo "$RESULTS"
|
|
73
|
+
|
|
74
|
+
if [ "$VERIFY_FLAG" = true ]; then
|
|
75
|
+
# Quick verification
|
|
76
|
+
spawn mid-verifier mode=integration
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
elif [[ $EXECUTOR_OUTPUT == *"## BLOCKED"* ]]; then
|
|
80
|
+
output "## TASK BLOCKED"
|
|
81
|
+
|
|
82
|
+
# Show blocker
|
|
83
|
+
BLOCKER=$(echo "$EXECUTOR_OUTPUT" | grep -A 5 "BLOCKED")
|
|
84
|
+
echo "$BLOCKER"
|
|
85
|
+
|
|
86
|
+
ask_user "How to proceed?"
|
|
87
|
+
|
|
88
|
+
else
|
|
89
|
+
output "## TASK FAILED"
|
|
90
|
+
ask_user "Debug or skip?"
|
|
91
|
+
fi
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 5. Update STATE (Optional)
|
|
95
|
+
|
|
96
|
+
If task is part of current phase:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
if [ "$UPDATE_STATE" = true ]; then
|
|
100
|
+
mid-tools state set last_quick_task "$TASK_DESC"
|
|
101
|
+
mid-tools state set last_quick_time $(date -u +%s)
|
|
102
|
+
fi
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Usage Examples
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Simple task
|
|
111
|
+
/mid:quick "Write unit tests for auth module"
|
|
112
|
+
|
|
113
|
+
# With verification
|
|
114
|
+
/mid:quick "Refactor login endpoint" --verify
|
|
115
|
+
|
|
116
|
+
# Interactive (ask questions)
|
|
117
|
+
/mid:quick "Design database schema" --interactive
|
|
118
|
+
|
|
119
|
+
# Don't update state
|
|
120
|
+
/mid:quick "Review code in PR" --no-state-update
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Key Differences from /mid:do
|
|
126
|
+
|
|
127
|
+
| Aspect | /mid:do | /mid:quick |
|
|
128
|
+
|--------|---------|-----------|
|
|
129
|
+
| **Scope** | Full phase execution | Single task |
|
|
130
|
+
| **Structure** | PLAN.md + waves | Task description only |
|
|
131
|
+
| **State** | Full tracking | Optional |
|
|
132
|
+
| **Verification** | Per-wave gates | Optional |
|
|
133
|
+
| **Time budget** | Hours | 30 minutes max |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Error Handling
|
|
138
|
+
|
|
139
|
+
- **No task description**: Show usage error
|
|
140
|
+
- **Blocked task**: Escalate to user
|
|
141
|
+
- **Context too low**: Fail with suggestion to run `/mid:status`
|
|
142
|
+
- **Task too complex**: Suggest using `/mid:plan` + `/mid:do`
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Anti-patterns Avoided
|
|
147
|
+
|
|
148
|
+
✓ Lightweight (direct executor spawn)
|
|
149
|
+
✓ No wave structure (simpler context)
|
|
150
|
+
✓ Optional state updates (don't force tracking)
|
|
151
|
+
✓ Time-boxed execution
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Report Generation Workflow
|
|
2
|
+
|
|
3
|
+
Create comprehensive project report across all phases.
|
|
4
|
+
|
|
5
|
+
**Token budget**: ~6K (frontmatter reads + light processing)
|
|
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. Gather Phase Summaries
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
for phase in 1 2 3 4 5; do
|
|
21
|
+
PHASE_DIR=".planning/phases/$(printf '%02d' $phase)-*"
|
|
22
|
+
|
|
23
|
+
if [ ! -d "$PHASE_DIR" ]; then
|
|
24
|
+
break # No more phases
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
if [ -f "$PHASE_DIR/SUMMARY.md" ]; then
|
|
28
|
+
# Extract frontmatter + first 10 lines
|
|
29
|
+
SUMMARY=$(mid-tools fm get "$PHASE_DIR/SUMMARY.md")
|
|
30
|
+
STATUS=$(echo "$SUMMARY" | grep "^status:" | cut -d: -f2)
|
|
31
|
+
ACTUAL_HOURS=$(echo "$SUMMARY" | grep "^actual_hours:" | cut -d: -f2)
|
|
32
|
+
|
|
33
|
+
accumulate_phase_data $phase "$STATUS" "$ACTUAL_HOURS"
|
|
34
|
+
fi
|
|
35
|
+
done
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. Generate Report
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
cat > report_output.md << EOF
|
|
42
|
+
# Project Report
|
|
43
|
+
|
|
44
|
+
**Generated**: $(date)
|
|
45
|
+
**Project**: $(mid-tools config get project_name)
|
|
46
|
+
|
|
47
|
+
## Summary
|
|
48
|
+
|
|
49
|
+
Total Phases: $TOTAL_PHASES
|
|
50
|
+
Completed: $COMPLETED_PHASES
|
|
51
|
+
In Progress: $IN_PROGRESS_PHASES
|
|
52
|
+
Total Hours: $TOTAL_HOURS
|
|
53
|
+
Average per Phase: $AVG_HOURS
|
|
54
|
+
|
|
55
|
+
## Phase Breakdown
|
|
56
|
+
|
|
57
|
+
| Phase | Status | Hours | Variance |
|
|
58
|
+
|-------|--------|-------|----------|
|
|
59
|
+
EOF
|
|
60
|
+
|
|
61
|
+
for phase in phases_data; do
|
|
62
|
+
echo "| Phase $phase | $status | $hours | $var |" >> report_output.md
|
|
63
|
+
done
|
|
64
|
+
|
|
65
|
+
cat >> report_output.md << EOF
|
|
66
|
+
|
|
67
|
+
## Key Metrics
|
|
68
|
+
|
|
69
|
+
- Time Efficiency: Actual vs Estimated
|
|
70
|
+
- Quality Gates: Tests passed, reviews completed
|
|
71
|
+
- Risks Resolved: [count]
|
|
72
|
+
- Blockers Encountered: [count]
|
|
73
|
+
|
|
74
|
+
## Next Steps
|
|
75
|
+
|
|
76
|
+
- $(phase_specific_next_step)
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
*Report generated by makeitdone*
|
|
80
|
+
EOF
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 3. Save Report
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
cp report_output.md .planning/REPORT_$(date +%Y%m%d_%H%M%S).md
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 4. Output
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
## REPORT GENERATED
|
|
93
|
+
|
|
94
|
+
File: .planning/REPORT_$(date +%Y%m%d_%H%M%S).md
|
|
95
|
+
Phases covered: $COVERED_PHASES
|
|
96
|
+
Total hours: $TOTAL_HOURS
|
|
97
|
+
|
|
98
|
+
Key metrics above.
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Formats
|
|
104
|
+
|
|
105
|
+
Text format (default): Markdown report (above)
|
|
106
|
+
|
|
107
|
+
JSON format (--format json):
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
jq -n \
|
|
111
|
+
--arg project "$(mid-tools config get project_name)" \
|
|
112
|
+
--arg phases "$TOTAL_PHASES" \
|
|
113
|
+
--arg hours "$TOTAL_HOURS" \
|
|
114
|
+
'{project: $project, phases: $phases | tonumber, hours: $hours | tonumber}'
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
TOON format (--format toon):
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
echo '{project: "'$(mid-tools config get project_name)'", phases: '$TOTAL_PHASES', hours: '$TOTAL_HOURS'}' | \
|
|
121
|
+
node ~/.claude/makeitdone/bin/mid-tools.cjs toon -
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Error Handling
|
|
127
|
+
|
|
128
|
+
- **No SUMMARY.md files**: Report partial data (phases completed so far)
|
|
129
|
+
- **Invalid config**: Use defaults
|
|
130
|
+
- **Date formatting issue**: Use ISO format fallback
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Anti-patterns Avoided
|
|
135
|
+
|
|
136
|
+
✓ Frontmatter-only reads (small data)
|
|
137
|
+
✓ Report uses TOON for JSON output
|
|
138
|
+
✓ No agent spawning (pure data aggregation)
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Status Workflow
|
|
2
|
+
|
|
3
|
+
Show current project status and phase progress.
|
|
4
|
+
|
|
5
|
+
**Token budget**: ~4K (frontmatter reads only)
|
|
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. Load State
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
context_window=$(mid-tools config get context_window)
|
|
21
|
+
|
|
22
|
+
if [ "$context_window" -lt 500000 ]; then
|
|
23
|
+
STATE=$(mid-tools fm get .planning/STATE.md)
|
|
24
|
+
else
|
|
25
|
+
STATE=$(mid-tools state get)
|
|
26
|
+
fi
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. Extract Metrics
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
PHASE=$(echo "$STATE" | grep "^phase:" | cut -d: -f2 | tr -d ' ')
|
|
33
|
+
CURRENT_WAVE=$(echo "$STATE" | grep "^current_wave:" | cut -d: -f2 | tr -d ' ')
|
|
34
|
+
PHASE_START=$(echo "$STATE" | grep "phase_start_time:" | cut -d: -f2 | tr -d ' ')
|
|
35
|
+
|
|
36
|
+
# Calculate elapsed time
|
|
37
|
+
ELAPSED=$(($(date +%s) - $PHASE_START))
|
|
38
|
+
ELAPSED_HOURS=$(($ELAPSED / 3600))
|
|
39
|
+
ELAPSED_MINS=$((($ELAPSED % 3600) / 60))
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 3. Load Roadmap (frontmatter)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
ROADMAP_FM=$(mid-tools fm get .planning/ROADMAP.md)
|
|
46
|
+
TOTAL_PHASES=$(echo "$ROADMAP_FM" | grep -c "^## [0-9]")
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 4. Load Plan Progress
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
PHASE_DIR=".planning/phases/$(printf '%02d' $PHASE)-*"
|
|
53
|
+
|
|
54
|
+
if [ -f "$PHASE_DIR/PLAN.md" ]; then
|
|
55
|
+
PLAN_FM=$(mid-tools fm get "$PHASE_DIR/PLAN.md")
|
|
56
|
+
TOTAL_TASKS=$(echo "$PLAN_FM" | grep "^tasks:" | cut -d: -f2)
|
|
57
|
+
TOTAL_WAVES=$(echo "$PLAN_FM" | grep "^waves:" | cut -d: -f2)
|
|
58
|
+
fi
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 5. Format Output
|
|
62
|
+
|
|
63
|
+
Text format (default):
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
╔════════════════════════════════════╗
|
|
67
|
+
║ makeitdone Project Status ║
|
|
68
|
+
╚════════════════════════════════════╝
|
|
69
|
+
|
|
70
|
+
Project: [from config.json]
|
|
71
|
+
Phase: $PHASE / $TOTAL_PHASES
|
|
72
|
+
Wave: $CURRENT_WAVE / $TOTAL_WAVES
|
|
73
|
+
|
|
74
|
+
Tasks: [count completed] / $TOTAL_TASKS
|
|
75
|
+
Time: ${ELAPSED_HOURS}h ${ELAPSED_MINS}m
|
|
76
|
+
|
|
77
|
+
Recent Updates:
|
|
78
|
+
- [from STATE.md notes]
|
|
79
|
+
|
|
80
|
+
Next: /mid:do $PHASE --wave $CURRENT_WAVE
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
JSON format (--format json):
|
|
84
|
+
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"phase": $PHASE,
|
|
88
|
+
"total_phases": $TOTAL_PHASES,
|
|
89
|
+
"wave": $CURRENT_WAVE,
|
|
90
|
+
"total_waves": $TOTAL_WAVES,
|
|
91
|
+
"tasks_total": $TOTAL_TASKS,
|
|
92
|
+
"elapsed_seconds": $ELAPSED,
|
|
93
|
+
"status": "in-progress"
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
TOON format (--format toon):
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
phase: $PHASE
|
|
101
|
+
total_phases: $TOTAL_PHASES
|
|
102
|
+
wave: $CURRENT_WAVE
|
|
103
|
+
total_waves: $TOTAL_WAVES
|
|
104
|
+
tasks_total: $TOTAL_TASKS
|
|
105
|
+
elapsed_seconds: $ELAPSED
|
|
106
|
+
status: in-progress
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 6. Output Status
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
## STATUS REPORT
|
|
113
|
+
|
|
114
|
+
Phase: $PHASE / $TOTAL_PHASES (progress%)
|
|
115
|
+
Wave: $CURRENT_WAVE / $TOTAL_WAVES
|
|
116
|
+
Time: ${ELAPSED_HOURS}h ${ELAPSED_MINS}m
|
|
117
|
+
|
|
118
|
+
Next: See command above
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Error Handling
|
|
124
|
+
|
|
125
|
+
- **Missing STATE.md**: Suggest `/mid:init`
|
|
126
|
+
- **Missing PLAN.md**: Suggest `/mid:plan --mode phase --phase $PHASE`
|
|
127
|
+
- **Invalid format flag**: Default to text
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Anti-patterns Avoided
|
|
132
|
+
|
|
133
|
+
✓ Frontmatter-only reads (no full files)
|
|
134
|
+
✓ Multiple output formats (user choice)
|
|
135
|
+
✓ Fast calculation (no spawning agents)
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Verify Phase Workflow
|
|
2
|
+
|
|
3
|
+
Quality gate for phase completion. Validates against acceptance criteria.
|
|
4
|
+
|
|
5
|
+
**Token budget**: ~8K (read-only work, haiku agents)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Context Setup
|
|
10
|
+
|
|
11
|
+
@/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/state-read.md
|
|
12
|
+
@/Users/ismailalam/Development/my/makeitdone/makeitdone/steps/model-route.md
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Modes
|
|
17
|
+
|
|
18
|
+
- `--mode integration` — test coordination, file presence, contracts
|
|
19
|
+
- `--mode security` — OWASP checks, auth patterns, secret scanning
|
|
20
|
+
- `--mode ui` — visual validation checkpoints
|
|
21
|
+
- `--mode audit` — full verification (all three)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Initialization
|
|
26
|
+
|
|
27
|
+
### 1. Load Phase
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
PHASE=${phase_arg}
|
|
31
|
+
PHASE_DIR=".planning/phases/$(printf '%02d' $PHASE)-*"
|
|
32
|
+
|
|
33
|
+
if [ ! -f "$PHASE_DIR/PLAN.md" ] || [ ! -f ".planning/REQUIREMENTS.md" ]; then
|
|
34
|
+
error "Phase or requirements not found"
|
|
35
|
+
fi
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 2. Check Acceptance Criteria
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
ACCEPTANCE=$(mid-tools fm get ".planning/REQUIREMENTS.md" --field "acceptance_criteria" || \
|
|
42
|
+
mid-tools fm get "$PHASE_DIR/PLAN.md" --field "acceptance_criteria")
|
|
43
|
+
|
|
44
|
+
if [ -z "$ACCEPTANCE" ]; then
|
|
45
|
+
warn "No acceptance criteria found, skipping verification"
|
|
46
|
+
exit 0
|
|
47
|
+
fi
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Execution (Integration Mode)
|
|
53
|
+
|
|
54
|
+
### 1. Spawn Verifier
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
VERIFIER_OUTPUT=$(spawn agent \
|
|
58
|
+
name=mid-verifier \
|
|
59
|
+
model=haiku \
|
|
60
|
+
context=$(cat << EOF
|
|
61
|
+
mode: integration
|
|
62
|
+
phase: $PHASE
|
|
63
|
+
acceptance_criteria: $ACCEPTANCE
|
|
64
|
+
phase_dir: $PHASE_DIR
|
|
65
|
+
EOF
|
|
66
|
+
))
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 2. Parse Result
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
if [[ $VERIFIER_OUTPUT == *"## VERIFICATION PASSED"* ]]; then
|
|
73
|
+
output_marker "## VERIFICATION PASSED"
|
|
74
|
+
exit 0
|
|
75
|
+
elif [[ $VERIFIER_OUTPUT == *"## VERIFICATION FAILED"* ]]; then
|
|
76
|
+
# Extract blocker reasons
|
|
77
|
+
BLOCKERS=$(echo "$VERIFIER_OUTPUT" | grep -A 10 "FAILED")
|
|
78
|
+
echo "$BLOCKERS"
|
|
79
|
+
output_marker "## VERIFICATION FAILED"
|
|
80
|
+
ask_user "Fix blockers and retry? /mid:verify --phase $PHASE"
|
|
81
|
+
else
|
|
82
|
+
output_marker "## VERIFICATION INCOMPLETE"
|
|
83
|
+
fi
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Execution (Security Mode)
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
VERIFIER_OUTPUT=$(spawn agent \
|
|
92
|
+
name=mid-verifier \
|
|
93
|
+
model=haiku \
|
|
94
|
+
context=$(cat << EOF
|
|
95
|
+
mode: security
|
|
96
|
+
phase: $PHASE
|
|
97
|
+
phase_dir: $PHASE_DIR
|
|
98
|
+
EOF
|
|
99
|
+
))
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Parse same as integration mode. Typical blockers:
|
|
103
|
+
- Hardcoded secrets
|
|
104
|
+
- Missing auth checks
|
|
105
|
+
- Vulnerable dependencies
|
|
106
|
+
- SQL injection patterns
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Execution (Audit Mode)
|
|
111
|
+
|
|
112
|
+
Runs all three modes sequentially:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
for mode in integration security ui; do
|
|
116
|
+
spawn mid-verifier mode=$mode phase=$PHASE
|
|
117
|
+
|
|
118
|
+
if result contains "FAILED"; then
|
|
119
|
+
accumulate_blockers
|
|
120
|
+
fi
|
|
121
|
+
done
|
|
122
|
+
|
|
123
|
+
if [ ${#blockers[@]} -eq 0 ]; then
|
|
124
|
+
output_marker "## VERIFICATION PASSED"
|
|
125
|
+
mid-tools state advance $PHASE
|
|
126
|
+
else
|
|
127
|
+
output_marker "## VERIFICATION FAILED - $BLOCKER_COUNT issues"
|
|
128
|
+
fi
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Success Path
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
## VERIFICATION PASSED
|
|
137
|
+
|
|
138
|
+
Criteria: 8/8 ✅
|
|
139
|
+
Duration: 3m
|
|
140
|
+
Phase: Ready for /mid:next
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Failure Path
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
## VERIFICATION FAILED - Security issues
|
|
149
|
+
|
|
150
|
+
Blockers:
|
|
151
|
+
1. Hardcoded API key in .env.example (line 5)
|
|
152
|
+
Fix: Move to .env, add to .gitignore
|
|
153
|
+
|
|
154
|
+
2. Missing CSRF token on POST /user (route.ts:42)
|
|
155
|
+
Fix: Add csrf middleware
|
|
156
|
+
|
|
157
|
+
Action: Apply fixes, then /mid:verify --phase 1
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Error Handling
|
|
163
|
+
|
|
164
|
+
- **No acceptance criteria**: Warn, skip verification
|
|
165
|
+
- **Verifier timeout**: Partial results OK, user can retry
|
|
166
|
+
- **Verification incomplete**: Mark as incomplete, ask for review
|
|
167
|
+
- **Critical blocker**: Escalate to user
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Anti-patterns Avoided
|
|
172
|
+
|
|
173
|
+
✓ Read-only work (haiku agents only)
|
|
174
|
+
✓ Frontmatter-only reads (context budget)
|
|
175
|
+
✓ Exact completion marker checking
|
|
176
|
+
✓ Fast-fail on critical blockers
|
|
177
|
+
✓ No attempt to fix (diagnose + escalate)
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "make-it-done",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Token-optimized skill orchestration framework for Claude Code",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"makeitdone": "bin/install.js",
|
|
8
|
+
"mid": "bin/install.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"prepublishOnly": "node -e \"import('fs').then(fs => fs.chmodSync('bin/install.js', '755'))\""
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"claude",
|
|
15
|
+
"claude-code",
|
|
16
|
+
"orchestration",
|
|
17
|
+
"toon",
|
|
18
|
+
"token-optimization",
|
|
19
|
+
"spec-driven"
|
|
20
|
+
],
|
|
21
|
+
"author": "Ismail Alam",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@toon-format/toon": "^2.1.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^20.10.0",
|
|
28
|
+
"esbuild": "^0.19.10",
|
|
29
|
+
"typescript": "^5.3.3"
|
|
30
|
+
},
|
|
31
|
+
"engines": {
|
|
32
|
+
"node": ">=18.0.0"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"bin/",
|
|
36
|
+
"makeitdone/",
|
|
37
|
+
"commands/",
|
|
38
|
+
"agents/",
|
|
39
|
+
"README.md",
|
|
40
|
+
"package.json"
|
|
41
|
+
],
|
|
42
|
+
"repository": {
|
|
43
|
+
"type": "git",
|
|
44
|
+
"url": "git+https://github.com/itzmail/make-it-done.git"
|
|
45
|
+
},
|
|
46
|
+
"homepage": "https://github.com/itzmail/make-it-done#readme",
|
|
47
|
+
"bugs": {
|
|
48
|
+
"url": "https://github.com/itzmail/make-it-done/issues"
|
|
49
|
+
}
|
|
50
|
+
}
|