@howlil/ez-agents 2.0.0 → 3.0.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/LICENSE +21 -21
- package/README.md +157 -110
- package/README.zh-CN.md +84 -84
- package/agents/ez-plan-checker.md +2 -2
- package/agents/ez-research-synthesizer.md +1 -1
- package/agents/ez-ui-auditor.md +0 -2
- package/agents/ez-ui-checker.md +2 -4
- package/agents/ez-ui-researcher.md +0 -2
- package/agents/ez-verifier.md +1 -1
- package/bin/install.js +211 -211
- package/commands/ez/debug.md +1 -1
- package/commands/ez/map-codebase.md +1 -1
- package/commands/ez/reapply-patches.md +3 -3
- package/commands/ez/research-phase.md +1 -1
- package/{get-shit-done → ez-agents}/bin/ez-tools.cjs +1 -1
- package/{get-shit-done → ez-agents}/bin/lib/assistant-adapter.cjs +205 -205
- package/{get-shit-done → ez-agents}/bin/lib/audit-exec.cjs +150 -150
- package/{get-shit-done → ez-agents}/bin/lib/auth.cjs +175 -175
- package/{get-shit-done → ez-agents}/bin/lib/circuit-breaker.cjs +118 -118
- package/{get-shit-done → ez-agents}/bin/lib/commands.cjs +666 -666
- package/{get-shit-done → ez-agents}/bin/lib/config.cjs +183 -183
- package/{get-shit-done → ez-agents}/bin/lib/core.cjs +495 -495
- package/{get-shit-done → ez-agents}/bin/lib/file-lock.cjs +236 -236
- package/{get-shit-done → ez-agents}/bin/lib/frontmatter.cjs +299 -299
- package/{get-shit-done → ez-agents}/bin/lib/fs-utils.cjs +153 -153
- package/{get-shit-done → ez-agents}/bin/lib/git-utils.cjs +203 -203
- package/{get-shit-done → ez-agents}/bin/lib/health-check.cjs +163 -163
- package/{get-shit-done → ez-agents}/bin/lib/index.cjs +113 -113
- package/{get-shit-done → ez-agents}/bin/lib/init.cjs +710 -710
- package/{get-shit-done → ez-agents}/bin/lib/logger.cjs +117 -117
- package/{get-shit-done → ez-agents}/bin/lib/milestone.cjs +241 -241
- package/{get-shit-done → ez-agents}/bin/lib/model-provider.cjs +146 -146
- package/{get-shit-done → ez-agents}/bin/lib/phase.cjs +908 -908
- package/{get-shit-done → ez-agents}/bin/lib/retry.cjs +119 -119
- package/{get-shit-done → ez-agents}/bin/lib/roadmap.cjs +305 -305
- package/{get-shit-done → ez-agents}/bin/lib/safe-exec.cjs +128 -128
- package/{get-shit-done → ez-agents}/bin/lib/safe-path.cjs +130 -130
- package/{get-shit-done → ez-agents}/bin/lib/state.cjs +721 -721
- package/{get-shit-done → ez-agents}/bin/lib/temp-file.cjs +239 -239
- package/{get-shit-done → ez-agents}/bin/lib/template.cjs +222 -222
- package/{get-shit-done → ez-agents}/bin/lib/test-file-lock.cjs +112 -112
- package/{get-shit-done → ez-agents}/bin/lib/test-graceful.cjs +93 -93
- package/{get-shit-done → ez-agents}/bin/lib/test-logger.cjs +60 -60
- package/{get-shit-done → ez-agents}/bin/lib/test-safe-exec.cjs +38 -38
- package/{get-shit-done → ez-agents}/bin/lib/test-safe-path.cjs +33 -33
- package/{get-shit-done → ez-agents}/bin/lib/test-temp-file.cjs +125 -125
- package/{get-shit-done → ez-agents}/bin/lib/timeout-exec.cjs +62 -62
- package/{get-shit-done → ez-agents}/bin/lib/verify.cjs +820 -820
- package/{get-shit-done → ez-agents}/references/checkpoints.md +776 -776
- package/{get-shit-done → ez-agents}/references/questioning.md +162 -162
- package/{get-shit-done → ez-agents}/references/tdd.md +263 -263
- package/{get-shit-done → ez-agents}/templates/codebase/concerns.md +310 -310
- package/{get-shit-done → ez-agents}/templates/codebase/conventions.md +307 -307
- package/{get-shit-done → ez-agents}/templates/codebase/integrations.md +280 -280
- package/{get-shit-done → ez-agents}/templates/codebase/stack.md +186 -186
- package/{get-shit-done → ez-agents}/templates/codebase/testing.md +480 -480
- package/{get-shit-done → ez-agents}/templates/config.json +37 -37
- package/{get-shit-done → ez-agents}/templates/continue-here.md +78 -78
- package/{get-shit-done → ez-agents}/templates/milestone-archive.md +123 -123
- package/{get-shit-done → ez-agents}/templates/milestone.md +115 -115
- package/{get-shit-done → ez-agents}/templates/requirements.md +231 -231
- package/{get-shit-done → ez-agents}/templates/research-project/ARCHITECTURE.md +204 -204
- package/{get-shit-done → ez-agents}/templates/research-project/FEATURES.md +147 -147
- package/{get-shit-done → ez-agents}/templates/research-project/PITFALLS.md +200 -200
- package/{get-shit-done → ez-agents}/templates/research-project/STACK.md +120 -120
- package/{get-shit-done → ez-agents}/templates/research-project/SUMMARY.md +170 -170
- package/{get-shit-done → ez-agents}/templates/retrospective.md +54 -54
- package/{get-shit-done → ez-agents}/templates/roadmap.md +202 -202
- package/{get-shit-done → ez-agents}/templates/summary-minimal.md +41 -41
- package/{get-shit-done → ez-agents}/templates/summary-standard.md +48 -48
- package/{get-shit-done → ez-agents}/templates/summary.md +248 -248
- package/{get-shit-done → ez-agents}/templates/user-setup.md +311 -311
- package/{get-shit-done → ez-agents}/templates/verification-report.md +322 -322
- package/{get-shit-done → ez-agents}/workflows/add-phase.md +112 -112
- package/{get-shit-done → ez-agents}/workflows/add-tests.md +351 -351
- package/{get-shit-done → ez-agents}/workflows/add-todo.md +158 -158
- package/{get-shit-done → ez-agents}/workflows/audit-milestone.md +332 -332
- package/{get-shit-done → ez-agents}/workflows/autonomous.md +743 -743
- package/{get-shit-done → ez-agents}/workflows/check-todos.md +177 -177
- package/{get-shit-done → ez-agents}/workflows/cleanup.md +152 -152
- package/{get-shit-done → ez-agents}/workflows/complete-milestone.md +766 -766
- package/ez-agents/workflows/debug.md +0 -0
- package/{get-shit-done → ez-agents}/workflows/diagnose-issues.md +219 -219
- package/{get-shit-done → ez-agents}/workflows/discovery-phase.md +289 -289
- package/{get-shit-done → ez-agents}/workflows/discuss-phase.md +762 -762
- package/{get-shit-done → ez-agents}/workflows/execute-phase.md +468 -468
- package/{get-shit-done → ez-agents}/workflows/execute-plan.md +483 -483
- package/{get-shit-done → ez-agents}/workflows/health.md +159 -159
- package/{get-shit-done → ez-agents}/workflows/help.md +492 -492
- package/{get-shit-done → ez-agents}/workflows/insert-phase.md +130 -130
- package/{get-shit-done → ez-agents}/workflows/list-phase-assumptions.md +178 -178
- package/{get-shit-done → ez-agents}/workflows/map-codebase.md +316 -316
- package/{get-shit-done → ez-agents}/workflows/new-milestone.md +384 -384
- package/{get-shit-done → ez-agents}/workflows/new-project.md +1111 -1111
- package/{get-shit-done → ez-agents}/workflows/node-repair.md +92 -92
- package/{get-shit-done → ez-agents}/workflows/pause-work.md +122 -122
- package/{get-shit-done → ez-agents}/workflows/plan-milestone-gaps.md +274 -274
- package/{get-shit-done → ez-agents}/workflows/plan-phase.md +651 -651
- package/{get-shit-done → ez-agents}/workflows/progress.md +382 -382
- package/{get-shit-done → ez-agents}/workflows/quick.md +610 -610
- package/{get-shit-done → ez-agents}/workflows/remove-phase.md +155 -155
- package/{get-shit-done → ez-agents}/workflows/research-phase.md +74 -74
- package/{get-shit-done → ez-agents}/workflows/resume-project.md +307 -307
- package/{get-shit-done → ez-agents}/workflows/set-profile.md +81 -81
- package/{get-shit-done → ez-agents}/workflows/settings.md +242 -242
- package/{get-shit-done → ez-agents}/workflows/stats.md +57 -57
- package/{get-shit-done → ez-agents}/workflows/transition.md +544 -544
- package/{get-shit-done → ez-agents}/workflows/ui-phase.md +290 -290
- package/{get-shit-done → ez-agents}/workflows/ui-review.md +157 -157
- package/{get-shit-done → ez-agents}/workflows/update.md +320 -320
- package/{get-shit-done → ez-agents}/workflows/validate-phase.md +167 -167
- package/{get-shit-done → ez-agents}/workflows/verify-phase.md +243 -243
- package/{get-shit-done → ez-agents}/workflows/verify-work.md +5 -5
- package/hooks/dist/ez-check-update.js +81 -0
- package/hooks/dist/ez-context-monitor.js +141 -0
- package/hooks/dist/ez-statusline.js +115 -0
- package/package.json +13 -3
- package/scripts/build-hooks.js +43 -43
- package/scripts/run-tests.cjs +29 -29
- /package/{get-shit-done → ez-agents}/references/continuation-format.md +0 -0
- /package/{get-shit-done → ez-agents}/references/decimal-phase-calculation.md +0 -0
- /package/{get-shit-done → ez-agents}/references/git-integration.md +0 -0
- /package/{get-shit-done → ez-agents}/references/git-planning-commit.md +0 -0
- /package/{get-shit-done → ez-agents}/references/model-profile-resolution.md +0 -0
- /package/{get-shit-done → ez-agents}/references/model-profiles.md +0 -0
- /package/{get-shit-done → ez-agents}/references/phase-argument-parsing.md +0 -0
- /package/{get-shit-done → ez-agents}/references/planning-config.md +0 -0
- /package/{get-shit-done → ez-agents}/references/ui-brand.md +0 -0
- /package/{get-shit-done → ez-agents}/references/verification-patterns.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/DEBUG.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/UAT.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/UI-SPEC.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/VALIDATION.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/codebase/architecture.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/codebase/structure.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/context.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/copilot-instructions.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/debug-subagent-prompt.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/discovery.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/phase-prompt.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/planner-subagent-prompt.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/project.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/research.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/state.md +0 -0
- /package/{get-shit-done → ez-agents}/templates/summary-complex.md +0 -0
|
@@ -1,274 +1,274 @@
|
|
|
1
|
-
<purpose>
|
|
2
|
-
Create all phases necessary to close gaps identified by `/ez:audit-milestone`. Reads MILESTONE-AUDIT.md, groups gaps into logical phases, creates phase entries in ROADMAP.md, and offers to plan each phase. One command creates all fix phases — no manual `/ez:add-phase` per gap.
|
|
3
|
-
</purpose>
|
|
4
|
-
|
|
5
|
-
<required_reading>
|
|
6
|
-
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
|
-
</required_reading>
|
|
8
|
-
|
|
9
|
-
<process>
|
|
10
|
-
|
|
11
|
-
## 1. Load Audit Results
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# Find the most recent audit file
|
|
15
|
-
ls -t .planning/v*-MILESTONE-AUDIT.md 2>/dev/null | head -1
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Parse YAML frontmatter to extract structured gaps:
|
|
19
|
-
- `gaps.requirements` — unsatisfied requirements
|
|
20
|
-
- `gaps.integration` — missing cross-phase connections
|
|
21
|
-
- `gaps.flows` — broken E2E flows
|
|
22
|
-
|
|
23
|
-
If no audit file exists or has no gaps, error:
|
|
24
|
-
```
|
|
25
|
-
No audit gaps found. Run `/ez:audit-milestone` first.
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## 2. Prioritize Gaps
|
|
29
|
-
|
|
30
|
-
Group gaps by priority from REQUIREMENTS.md:
|
|
31
|
-
|
|
32
|
-
| Priority | Action |
|
|
33
|
-
|----------|--------|
|
|
34
|
-
| `must` | Create phase, blocks milestone |
|
|
35
|
-
| `should` | Create phase, recommended |
|
|
36
|
-
| `nice` | Ask user: include or defer? |
|
|
37
|
-
|
|
38
|
-
For integration/flow gaps, infer priority from affected requirements.
|
|
39
|
-
|
|
40
|
-
## 3. Group Gaps into Phases
|
|
41
|
-
|
|
42
|
-
Cluster related gaps into logical phases:
|
|
43
|
-
|
|
44
|
-
**Grouping rules:**
|
|
45
|
-
- Same affected phase → combine into one fix phase
|
|
46
|
-
- Same subsystem (auth, API, UI) → combine
|
|
47
|
-
- Dependency order (fix stubs before wiring)
|
|
48
|
-
- Keep phases focused: 2-4 tasks each
|
|
49
|
-
|
|
50
|
-
**Example grouping:**
|
|
51
|
-
```
|
|
52
|
-
Gap: DASH-01 unsatisfied (Dashboard doesn't fetch)
|
|
53
|
-
Gap: Integration Phase 1→3 (Auth not passed to API calls)
|
|
54
|
-
Gap: Flow "View dashboard" broken at data fetch
|
|
55
|
-
|
|
56
|
-
→ Phase 6: "Wire Dashboard to API"
|
|
57
|
-
- Add fetch to Dashboard.tsx
|
|
58
|
-
- Include auth header in fetch
|
|
59
|
-
- Handle response, update state
|
|
60
|
-
- Render user data
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## 4. Determine Phase Numbers
|
|
64
|
-
|
|
65
|
-
Find highest existing phase:
|
|
66
|
-
```bash
|
|
67
|
-
# Get sorted phase list, extract last one
|
|
68
|
-
PHASES=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phases list)
|
|
69
|
-
HIGHEST=$(printf '%s\n' "$PHASES" | jq -r '.directories[-1]')
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
New phases continue from there:
|
|
73
|
-
- If Phase 5 is highest, gaps become Phase 6, 7, 8...
|
|
74
|
-
|
|
75
|
-
## 5. Present Gap Closure Plan
|
|
76
|
-
|
|
77
|
-
```markdown
|
|
78
|
-
## Gap Closure Plan
|
|
79
|
-
|
|
80
|
-
**Milestone:** {version}
|
|
81
|
-
**Gaps to close:** {N} requirements, {M} integration, {K} flows
|
|
82
|
-
|
|
83
|
-
### Proposed Phases
|
|
84
|
-
|
|
85
|
-
**Phase {N}: {Name}**
|
|
86
|
-
Closes:
|
|
87
|
-
- {REQ-ID}: {description}
|
|
88
|
-
- Integration: {from} → {to}
|
|
89
|
-
Tasks: {count}
|
|
90
|
-
|
|
91
|
-
**Phase {N+1}: {Name}**
|
|
92
|
-
Closes:
|
|
93
|
-
- {REQ-ID}: {description}
|
|
94
|
-
- Flow: {flow name}
|
|
95
|
-
Tasks: {count}
|
|
96
|
-
|
|
97
|
-
{If nice-to-have gaps exist:}
|
|
98
|
-
|
|
99
|
-
### Deferred (nice-to-have)
|
|
100
|
-
|
|
101
|
-
These gaps are optional. Include them?
|
|
102
|
-
- {gap description}
|
|
103
|
-
- {gap description}
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
Create these {X} phases? (yes / adjust / defer all optional)
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
Wait for user confirmation.
|
|
111
|
-
|
|
112
|
-
## 6. Update ROADMAP.md
|
|
113
|
-
|
|
114
|
-
Add new phases to current milestone:
|
|
115
|
-
|
|
116
|
-
```markdown
|
|
117
|
-
### Phase {N}: {Name}
|
|
118
|
-
**Goal:** {derived from gaps being closed}
|
|
119
|
-
**Requirements:** {REQ-IDs being satisfied}
|
|
120
|
-
**Gap Closure:** Closes gaps from audit
|
|
121
|
-
|
|
122
|
-
### Phase {N+1}: {Name}
|
|
123
|
-
...
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## 7. Update REQUIREMENTS.md Traceability Table (REQUIRED)
|
|
127
|
-
|
|
128
|
-
For each REQ-ID assigned to a gap closure phase:
|
|
129
|
-
- Update the Phase column to reflect the new gap closure phase
|
|
130
|
-
- Reset Status to `Pending`
|
|
131
|
-
|
|
132
|
-
Reset checked-off requirements the audit found unsatisfied:
|
|
133
|
-
- Change `[x]` → `[ ]` for any requirement marked unsatisfied in the audit
|
|
134
|
-
- Update coverage count at top of REQUIREMENTS.md
|
|
135
|
-
|
|
136
|
-
```bash
|
|
137
|
-
# Verify traceability table reflects gap closure assignments
|
|
138
|
-
grep -c "Pending" .planning/REQUIREMENTS.md
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## 8. Create Phase Directories
|
|
142
|
-
|
|
143
|
-
```bash
|
|
144
|
-
mkdir -p ".planning/phases/{NN}-{name}"
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## 9. Commit Roadmap and Requirements Update
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs(roadmap): add gap closure phases {N}-{M}" --files .planning/ROADMAP.md .planning/REQUIREMENTS.md
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
## 10. Offer Next Steps
|
|
154
|
-
|
|
155
|
-
```markdown
|
|
156
|
-
## ✓ Gap Closure Phases Created
|
|
157
|
-
|
|
158
|
-
**Phases added:** {N} - {M}
|
|
159
|
-
**Gaps addressed:** {count} requirements, {count} integration, {count} flows
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## ▶ Next Up
|
|
164
|
-
|
|
165
|
-
**Plan first gap closure phase**
|
|
166
|
-
|
|
167
|
-
`/ez:plan-phase {N}`
|
|
168
|
-
|
|
169
|
-
<sub>`/clear` first → fresh context window</sub>
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
**Also available:**
|
|
174
|
-
- `/ez:execute-phase {N}` — if plans already exist
|
|
175
|
-
- `cat .planning/ROADMAP.md` — see updated roadmap
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
**After all gap phases complete:**
|
|
180
|
-
|
|
181
|
-
`/ez:audit-milestone` — re-audit to verify gaps closed
|
|
182
|
-
`/ez:complete-milestone {version}` — archive when audit passes
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
</process>
|
|
186
|
-
|
|
187
|
-
<gap_to_phase_mapping>
|
|
188
|
-
|
|
189
|
-
## How Gaps Become Tasks
|
|
190
|
-
|
|
191
|
-
**Requirement gap → Tasks:**
|
|
192
|
-
```yaml
|
|
193
|
-
gap:
|
|
194
|
-
id: DASH-01
|
|
195
|
-
description: "User sees their data"
|
|
196
|
-
reason: "Dashboard exists but doesn't fetch from API"
|
|
197
|
-
missing:
|
|
198
|
-
- "useEffect with fetch to /api/user/data"
|
|
199
|
-
- "State for user data"
|
|
200
|
-
- "Render user data in JSX"
|
|
201
|
-
|
|
202
|
-
becomes:
|
|
203
|
-
|
|
204
|
-
phase: "Wire Dashboard Data"
|
|
205
|
-
tasks:
|
|
206
|
-
- name: "Add data fetching"
|
|
207
|
-
files: [src/components/Dashboard.tsx]
|
|
208
|
-
action: "Add useEffect that fetches /api/user/data on mount"
|
|
209
|
-
|
|
210
|
-
- name: "Add state management"
|
|
211
|
-
files: [src/components/Dashboard.tsx]
|
|
212
|
-
action: "Add useState for userData, loading, error states"
|
|
213
|
-
|
|
214
|
-
- name: "Render user data"
|
|
215
|
-
files: [src/components/Dashboard.tsx]
|
|
216
|
-
action: "Replace placeholder with userData.map rendering"
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
**Integration gap → Tasks:**
|
|
220
|
-
```yaml
|
|
221
|
-
gap:
|
|
222
|
-
from_phase: 1
|
|
223
|
-
to_phase: 3
|
|
224
|
-
connection: "Auth token → API calls"
|
|
225
|
-
reason: "Dashboard API calls don't include auth header"
|
|
226
|
-
missing:
|
|
227
|
-
- "Auth header in fetch calls"
|
|
228
|
-
- "Token refresh on 401"
|
|
229
|
-
|
|
230
|
-
becomes:
|
|
231
|
-
|
|
232
|
-
phase: "Add Auth to Dashboard API Calls"
|
|
233
|
-
tasks:
|
|
234
|
-
- name: "Add auth header to fetches"
|
|
235
|
-
files: [src/components/Dashboard.tsx, src/lib/api.ts]
|
|
236
|
-
action: "Include Authorization header with token in all API calls"
|
|
237
|
-
|
|
238
|
-
- name: "Handle 401 responses"
|
|
239
|
-
files: [src/lib/api.ts]
|
|
240
|
-
action: "Add interceptor to refresh token or redirect to login on 401"
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
**Flow gap → Tasks:**
|
|
244
|
-
```yaml
|
|
245
|
-
gap:
|
|
246
|
-
name: "User views dashboard after login"
|
|
247
|
-
broken_at: "Dashboard data load"
|
|
248
|
-
reason: "No fetch call"
|
|
249
|
-
missing:
|
|
250
|
-
- "Fetch user data on mount"
|
|
251
|
-
- "Display loading state"
|
|
252
|
-
- "Render user data"
|
|
253
|
-
|
|
254
|
-
becomes:
|
|
255
|
-
|
|
256
|
-
# Usually same phase as requirement/integration gap
|
|
257
|
-
# Flow gaps often overlap with other gap types
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
</gap_to_phase_mapping>
|
|
261
|
-
|
|
262
|
-
<success_criteria>
|
|
263
|
-
- [ ] MILESTONE-AUDIT.md loaded and gaps parsed
|
|
264
|
-
- [ ] Gaps prioritized (must/should/nice)
|
|
265
|
-
- [ ] Gaps grouped into logical phases
|
|
266
|
-
- [ ] User confirmed phase plan
|
|
267
|
-
- [ ] ROADMAP.md updated with new phases
|
|
268
|
-
- [ ] REQUIREMENTS.md traceability table updated with gap closure phase assignments
|
|
269
|
-
- [ ] Unsatisfied requirement checkboxes reset (`[x]` → `[ ]`)
|
|
270
|
-
- [ ] Coverage count updated in REQUIREMENTS.md
|
|
271
|
-
- [ ] Phase directories created
|
|
272
|
-
- [ ] Changes committed (includes REQUIREMENTS.md)
|
|
273
|
-
- [ ] User knows to run `/ez:plan-phase` next
|
|
274
|
-
</success_criteria>
|
|
1
|
+
<purpose>
|
|
2
|
+
Create all phases necessary to close gaps identified by `/ez:audit-milestone`. Reads MILESTONE-AUDIT.md, groups gaps into logical phases, creates phase entries in ROADMAP.md, and offers to plan each phase. One command creates all fix phases — no manual `/ez:add-phase` per gap.
|
|
3
|
+
</purpose>
|
|
4
|
+
|
|
5
|
+
<required_reading>
|
|
6
|
+
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
|
+
</required_reading>
|
|
8
|
+
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
## 1. Load Audit Results
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Find the most recent audit file
|
|
15
|
+
ls -t .planning/v*-MILESTONE-AUDIT.md 2>/dev/null | head -1
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Parse YAML frontmatter to extract structured gaps:
|
|
19
|
+
- `gaps.requirements` — unsatisfied requirements
|
|
20
|
+
- `gaps.integration` — missing cross-phase connections
|
|
21
|
+
- `gaps.flows` — broken E2E flows
|
|
22
|
+
|
|
23
|
+
If no audit file exists or has no gaps, error:
|
|
24
|
+
```
|
|
25
|
+
No audit gaps found. Run `/ez:audit-milestone` first.
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 2. Prioritize Gaps
|
|
29
|
+
|
|
30
|
+
Group gaps by priority from REQUIREMENTS.md:
|
|
31
|
+
|
|
32
|
+
| Priority | Action |
|
|
33
|
+
|----------|--------|
|
|
34
|
+
| `must` | Create phase, blocks milestone |
|
|
35
|
+
| `should` | Create phase, recommended |
|
|
36
|
+
| `nice` | Ask user: include or defer? |
|
|
37
|
+
|
|
38
|
+
For integration/flow gaps, infer priority from affected requirements.
|
|
39
|
+
|
|
40
|
+
## 3. Group Gaps into Phases
|
|
41
|
+
|
|
42
|
+
Cluster related gaps into logical phases:
|
|
43
|
+
|
|
44
|
+
**Grouping rules:**
|
|
45
|
+
- Same affected phase → combine into one fix phase
|
|
46
|
+
- Same subsystem (auth, API, UI) → combine
|
|
47
|
+
- Dependency order (fix stubs before wiring)
|
|
48
|
+
- Keep phases focused: 2-4 tasks each
|
|
49
|
+
|
|
50
|
+
**Example grouping:**
|
|
51
|
+
```
|
|
52
|
+
Gap: DASH-01 unsatisfied (Dashboard doesn't fetch)
|
|
53
|
+
Gap: Integration Phase 1→3 (Auth not passed to API calls)
|
|
54
|
+
Gap: Flow "View dashboard" broken at data fetch
|
|
55
|
+
|
|
56
|
+
→ Phase 6: "Wire Dashboard to API"
|
|
57
|
+
- Add fetch to Dashboard.tsx
|
|
58
|
+
- Include auth header in fetch
|
|
59
|
+
- Handle response, update state
|
|
60
|
+
- Render user data
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 4. Determine Phase Numbers
|
|
64
|
+
|
|
65
|
+
Find highest existing phase:
|
|
66
|
+
```bash
|
|
67
|
+
# Get sorted phase list, extract last one
|
|
68
|
+
PHASES=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" phases list)
|
|
69
|
+
HIGHEST=$(printf '%s\n' "$PHASES" | jq -r '.directories[-1]')
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
New phases continue from there:
|
|
73
|
+
- If Phase 5 is highest, gaps become Phase 6, 7, 8...
|
|
74
|
+
|
|
75
|
+
## 5. Present Gap Closure Plan
|
|
76
|
+
|
|
77
|
+
```markdown
|
|
78
|
+
## Gap Closure Plan
|
|
79
|
+
|
|
80
|
+
**Milestone:** {version}
|
|
81
|
+
**Gaps to close:** {N} requirements, {M} integration, {K} flows
|
|
82
|
+
|
|
83
|
+
### Proposed Phases
|
|
84
|
+
|
|
85
|
+
**Phase {N}: {Name}**
|
|
86
|
+
Closes:
|
|
87
|
+
- {REQ-ID}: {description}
|
|
88
|
+
- Integration: {from} → {to}
|
|
89
|
+
Tasks: {count}
|
|
90
|
+
|
|
91
|
+
**Phase {N+1}: {Name}**
|
|
92
|
+
Closes:
|
|
93
|
+
- {REQ-ID}: {description}
|
|
94
|
+
- Flow: {flow name}
|
|
95
|
+
Tasks: {count}
|
|
96
|
+
|
|
97
|
+
{If nice-to-have gaps exist:}
|
|
98
|
+
|
|
99
|
+
### Deferred (nice-to-have)
|
|
100
|
+
|
|
101
|
+
These gaps are optional. Include them?
|
|
102
|
+
- {gap description}
|
|
103
|
+
- {gap description}
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
Create these {X} phases? (yes / adjust / defer all optional)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Wait for user confirmation.
|
|
111
|
+
|
|
112
|
+
## 6. Update ROADMAP.md
|
|
113
|
+
|
|
114
|
+
Add new phases to current milestone:
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
### Phase {N}: {Name}
|
|
118
|
+
**Goal:** {derived from gaps being closed}
|
|
119
|
+
**Requirements:** {REQ-IDs being satisfied}
|
|
120
|
+
**Gap Closure:** Closes gaps from audit
|
|
121
|
+
|
|
122
|
+
### Phase {N+1}: {Name}
|
|
123
|
+
...
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 7. Update REQUIREMENTS.md Traceability Table (REQUIRED)
|
|
127
|
+
|
|
128
|
+
For each REQ-ID assigned to a gap closure phase:
|
|
129
|
+
- Update the Phase column to reflect the new gap closure phase
|
|
130
|
+
- Reset Status to `Pending`
|
|
131
|
+
|
|
132
|
+
Reset checked-off requirements the audit found unsatisfied:
|
|
133
|
+
- Change `[x]` → `[ ]` for any requirement marked unsatisfied in the audit
|
|
134
|
+
- Update coverage count at top of REQUIREMENTS.md
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Verify traceability table reflects gap closure assignments
|
|
138
|
+
grep -c "Pending" .planning/REQUIREMENTS.md
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## 8. Create Phase Directories
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
mkdir -p ".planning/phases/{NN}-{name}"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## 9. Commit Roadmap and Requirements Update
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" commit "docs(roadmap): add gap closure phases {N}-{M}" --files .planning/ROADMAP.md .planning/REQUIREMENTS.md
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 10. Offer Next Steps
|
|
154
|
+
|
|
155
|
+
```markdown
|
|
156
|
+
## ✓ Gap Closure Phases Created
|
|
157
|
+
|
|
158
|
+
**Phases added:** {N} - {M}
|
|
159
|
+
**Gaps addressed:** {count} requirements, {count} integration, {count} flows
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## ▶ Next Up
|
|
164
|
+
|
|
165
|
+
**Plan first gap closure phase**
|
|
166
|
+
|
|
167
|
+
`/ez:plan-phase {N}`
|
|
168
|
+
|
|
169
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
**Also available:**
|
|
174
|
+
- `/ez:execute-phase {N}` — if plans already exist
|
|
175
|
+
- `cat .planning/ROADMAP.md` — see updated roadmap
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
**After all gap phases complete:**
|
|
180
|
+
|
|
181
|
+
`/ez:audit-milestone` — re-audit to verify gaps closed
|
|
182
|
+
`/ez:complete-milestone {version}` — archive when audit passes
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
</process>
|
|
186
|
+
|
|
187
|
+
<gap_to_phase_mapping>
|
|
188
|
+
|
|
189
|
+
## How Gaps Become Tasks
|
|
190
|
+
|
|
191
|
+
**Requirement gap → Tasks:**
|
|
192
|
+
```yaml
|
|
193
|
+
gap:
|
|
194
|
+
id: DASH-01
|
|
195
|
+
description: "User sees their data"
|
|
196
|
+
reason: "Dashboard exists but doesn't fetch from API"
|
|
197
|
+
missing:
|
|
198
|
+
- "useEffect with fetch to /api/user/data"
|
|
199
|
+
- "State for user data"
|
|
200
|
+
- "Render user data in JSX"
|
|
201
|
+
|
|
202
|
+
becomes:
|
|
203
|
+
|
|
204
|
+
phase: "Wire Dashboard Data"
|
|
205
|
+
tasks:
|
|
206
|
+
- name: "Add data fetching"
|
|
207
|
+
files: [src/components/Dashboard.tsx]
|
|
208
|
+
action: "Add useEffect that fetches /api/user/data on mount"
|
|
209
|
+
|
|
210
|
+
- name: "Add state management"
|
|
211
|
+
files: [src/components/Dashboard.tsx]
|
|
212
|
+
action: "Add useState for userData, loading, error states"
|
|
213
|
+
|
|
214
|
+
- name: "Render user data"
|
|
215
|
+
files: [src/components/Dashboard.tsx]
|
|
216
|
+
action: "Replace placeholder with userData.map rendering"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Integration gap → Tasks:**
|
|
220
|
+
```yaml
|
|
221
|
+
gap:
|
|
222
|
+
from_phase: 1
|
|
223
|
+
to_phase: 3
|
|
224
|
+
connection: "Auth token → API calls"
|
|
225
|
+
reason: "Dashboard API calls don't include auth header"
|
|
226
|
+
missing:
|
|
227
|
+
- "Auth header in fetch calls"
|
|
228
|
+
- "Token refresh on 401"
|
|
229
|
+
|
|
230
|
+
becomes:
|
|
231
|
+
|
|
232
|
+
phase: "Add Auth to Dashboard API Calls"
|
|
233
|
+
tasks:
|
|
234
|
+
- name: "Add auth header to fetches"
|
|
235
|
+
files: [src/components/Dashboard.tsx, src/lib/api.ts]
|
|
236
|
+
action: "Include Authorization header with token in all API calls"
|
|
237
|
+
|
|
238
|
+
- name: "Handle 401 responses"
|
|
239
|
+
files: [src/lib/api.ts]
|
|
240
|
+
action: "Add interceptor to refresh token or redirect to login on 401"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Flow gap → Tasks:**
|
|
244
|
+
```yaml
|
|
245
|
+
gap:
|
|
246
|
+
name: "User views dashboard after login"
|
|
247
|
+
broken_at: "Dashboard data load"
|
|
248
|
+
reason: "No fetch call"
|
|
249
|
+
missing:
|
|
250
|
+
- "Fetch user data on mount"
|
|
251
|
+
- "Display loading state"
|
|
252
|
+
- "Render user data"
|
|
253
|
+
|
|
254
|
+
becomes:
|
|
255
|
+
|
|
256
|
+
# Usually same phase as requirement/integration gap
|
|
257
|
+
# Flow gaps often overlap with other gap types
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
</gap_to_phase_mapping>
|
|
261
|
+
|
|
262
|
+
<success_criteria>
|
|
263
|
+
- [ ] MILESTONE-AUDIT.md loaded and gaps parsed
|
|
264
|
+
- [ ] Gaps prioritized (must/should/nice)
|
|
265
|
+
- [ ] Gaps grouped into logical phases
|
|
266
|
+
- [ ] User confirmed phase plan
|
|
267
|
+
- [ ] ROADMAP.md updated with new phases
|
|
268
|
+
- [ ] REQUIREMENTS.md traceability table updated with gap closure phase assignments
|
|
269
|
+
- [ ] Unsatisfied requirement checkboxes reset (`[x]` → `[ ]`)
|
|
270
|
+
- [ ] Coverage count updated in REQUIREMENTS.md
|
|
271
|
+
- [ ] Phase directories created
|
|
272
|
+
- [ ] Changes committed (includes REQUIREMENTS.md)
|
|
273
|
+
- [ ] User knows to run `/ez:plan-phase` next
|
|
274
|
+
</success_criteria>
|