@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.
Files changed (145) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +157 -110
  3. package/README.zh-CN.md +84 -84
  4. package/agents/ez-plan-checker.md +2 -2
  5. package/agents/ez-research-synthesizer.md +1 -1
  6. package/agents/ez-ui-auditor.md +0 -2
  7. package/agents/ez-ui-checker.md +2 -4
  8. package/agents/ez-ui-researcher.md +0 -2
  9. package/agents/ez-verifier.md +1 -1
  10. package/bin/install.js +211 -211
  11. package/commands/ez/debug.md +1 -1
  12. package/commands/ez/map-codebase.md +1 -1
  13. package/commands/ez/reapply-patches.md +3 -3
  14. package/commands/ez/research-phase.md +1 -1
  15. package/{get-shit-done → ez-agents}/bin/ez-tools.cjs +1 -1
  16. package/{get-shit-done → ez-agents}/bin/lib/assistant-adapter.cjs +205 -205
  17. package/{get-shit-done → ez-agents}/bin/lib/audit-exec.cjs +150 -150
  18. package/{get-shit-done → ez-agents}/bin/lib/auth.cjs +175 -175
  19. package/{get-shit-done → ez-agents}/bin/lib/circuit-breaker.cjs +118 -118
  20. package/{get-shit-done → ez-agents}/bin/lib/commands.cjs +666 -666
  21. package/{get-shit-done → ez-agents}/bin/lib/config.cjs +183 -183
  22. package/{get-shit-done → ez-agents}/bin/lib/core.cjs +495 -495
  23. package/{get-shit-done → ez-agents}/bin/lib/file-lock.cjs +236 -236
  24. package/{get-shit-done → ez-agents}/bin/lib/frontmatter.cjs +299 -299
  25. package/{get-shit-done → ez-agents}/bin/lib/fs-utils.cjs +153 -153
  26. package/{get-shit-done → ez-agents}/bin/lib/git-utils.cjs +203 -203
  27. package/{get-shit-done → ez-agents}/bin/lib/health-check.cjs +163 -163
  28. package/{get-shit-done → ez-agents}/bin/lib/index.cjs +113 -113
  29. package/{get-shit-done → ez-agents}/bin/lib/init.cjs +710 -710
  30. package/{get-shit-done → ez-agents}/bin/lib/logger.cjs +117 -117
  31. package/{get-shit-done → ez-agents}/bin/lib/milestone.cjs +241 -241
  32. package/{get-shit-done → ez-agents}/bin/lib/model-provider.cjs +146 -146
  33. package/{get-shit-done → ez-agents}/bin/lib/phase.cjs +908 -908
  34. package/{get-shit-done → ez-agents}/bin/lib/retry.cjs +119 -119
  35. package/{get-shit-done → ez-agents}/bin/lib/roadmap.cjs +305 -305
  36. package/{get-shit-done → ez-agents}/bin/lib/safe-exec.cjs +128 -128
  37. package/{get-shit-done → ez-agents}/bin/lib/safe-path.cjs +130 -130
  38. package/{get-shit-done → ez-agents}/bin/lib/state.cjs +721 -721
  39. package/{get-shit-done → ez-agents}/bin/lib/temp-file.cjs +239 -239
  40. package/{get-shit-done → ez-agents}/bin/lib/template.cjs +222 -222
  41. package/{get-shit-done → ez-agents}/bin/lib/test-file-lock.cjs +112 -112
  42. package/{get-shit-done → ez-agents}/bin/lib/test-graceful.cjs +93 -93
  43. package/{get-shit-done → ez-agents}/bin/lib/test-logger.cjs +60 -60
  44. package/{get-shit-done → ez-agents}/bin/lib/test-safe-exec.cjs +38 -38
  45. package/{get-shit-done → ez-agents}/bin/lib/test-safe-path.cjs +33 -33
  46. package/{get-shit-done → ez-agents}/bin/lib/test-temp-file.cjs +125 -125
  47. package/{get-shit-done → ez-agents}/bin/lib/timeout-exec.cjs +62 -62
  48. package/{get-shit-done → ez-agents}/bin/lib/verify.cjs +820 -820
  49. package/{get-shit-done → ez-agents}/references/checkpoints.md +776 -776
  50. package/{get-shit-done → ez-agents}/references/questioning.md +162 -162
  51. package/{get-shit-done → ez-agents}/references/tdd.md +263 -263
  52. package/{get-shit-done → ez-agents}/templates/codebase/concerns.md +310 -310
  53. package/{get-shit-done → ez-agents}/templates/codebase/conventions.md +307 -307
  54. package/{get-shit-done → ez-agents}/templates/codebase/integrations.md +280 -280
  55. package/{get-shit-done → ez-agents}/templates/codebase/stack.md +186 -186
  56. package/{get-shit-done → ez-agents}/templates/codebase/testing.md +480 -480
  57. package/{get-shit-done → ez-agents}/templates/config.json +37 -37
  58. package/{get-shit-done → ez-agents}/templates/continue-here.md +78 -78
  59. package/{get-shit-done → ez-agents}/templates/milestone-archive.md +123 -123
  60. package/{get-shit-done → ez-agents}/templates/milestone.md +115 -115
  61. package/{get-shit-done → ez-agents}/templates/requirements.md +231 -231
  62. package/{get-shit-done → ez-agents}/templates/research-project/ARCHITECTURE.md +204 -204
  63. package/{get-shit-done → ez-agents}/templates/research-project/FEATURES.md +147 -147
  64. package/{get-shit-done → ez-agents}/templates/research-project/PITFALLS.md +200 -200
  65. package/{get-shit-done → ez-agents}/templates/research-project/STACK.md +120 -120
  66. package/{get-shit-done → ez-agents}/templates/research-project/SUMMARY.md +170 -170
  67. package/{get-shit-done → ez-agents}/templates/retrospective.md +54 -54
  68. package/{get-shit-done → ez-agents}/templates/roadmap.md +202 -202
  69. package/{get-shit-done → ez-agents}/templates/summary-minimal.md +41 -41
  70. package/{get-shit-done → ez-agents}/templates/summary-standard.md +48 -48
  71. package/{get-shit-done → ez-agents}/templates/summary.md +248 -248
  72. package/{get-shit-done → ez-agents}/templates/user-setup.md +311 -311
  73. package/{get-shit-done → ez-agents}/templates/verification-report.md +322 -322
  74. package/{get-shit-done → ez-agents}/workflows/add-phase.md +112 -112
  75. package/{get-shit-done → ez-agents}/workflows/add-tests.md +351 -351
  76. package/{get-shit-done → ez-agents}/workflows/add-todo.md +158 -158
  77. package/{get-shit-done → ez-agents}/workflows/audit-milestone.md +332 -332
  78. package/{get-shit-done → ez-agents}/workflows/autonomous.md +743 -743
  79. package/{get-shit-done → ez-agents}/workflows/check-todos.md +177 -177
  80. package/{get-shit-done → ez-agents}/workflows/cleanup.md +152 -152
  81. package/{get-shit-done → ez-agents}/workflows/complete-milestone.md +766 -766
  82. package/ez-agents/workflows/debug.md +0 -0
  83. package/{get-shit-done → ez-agents}/workflows/diagnose-issues.md +219 -219
  84. package/{get-shit-done → ez-agents}/workflows/discovery-phase.md +289 -289
  85. package/{get-shit-done → ez-agents}/workflows/discuss-phase.md +762 -762
  86. package/{get-shit-done → ez-agents}/workflows/execute-phase.md +468 -468
  87. package/{get-shit-done → ez-agents}/workflows/execute-plan.md +483 -483
  88. package/{get-shit-done → ez-agents}/workflows/health.md +159 -159
  89. package/{get-shit-done → ez-agents}/workflows/help.md +492 -492
  90. package/{get-shit-done → ez-agents}/workflows/insert-phase.md +130 -130
  91. package/{get-shit-done → ez-agents}/workflows/list-phase-assumptions.md +178 -178
  92. package/{get-shit-done → ez-agents}/workflows/map-codebase.md +316 -316
  93. package/{get-shit-done → ez-agents}/workflows/new-milestone.md +384 -384
  94. package/{get-shit-done → ez-agents}/workflows/new-project.md +1111 -1111
  95. package/{get-shit-done → ez-agents}/workflows/node-repair.md +92 -92
  96. package/{get-shit-done → ez-agents}/workflows/pause-work.md +122 -122
  97. package/{get-shit-done → ez-agents}/workflows/plan-milestone-gaps.md +274 -274
  98. package/{get-shit-done → ez-agents}/workflows/plan-phase.md +651 -651
  99. package/{get-shit-done → ez-agents}/workflows/progress.md +382 -382
  100. package/{get-shit-done → ez-agents}/workflows/quick.md +610 -610
  101. package/{get-shit-done → ez-agents}/workflows/remove-phase.md +155 -155
  102. package/{get-shit-done → ez-agents}/workflows/research-phase.md +74 -74
  103. package/{get-shit-done → ez-agents}/workflows/resume-project.md +307 -307
  104. package/{get-shit-done → ez-agents}/workflows/set-profile.md +81 -81
  105. package/{get-shit-done → ez-agents}/workflows/settings.md +242 -242
  106. package/{get-shit-done → ez-agents}/workflows/stats.md +57 -57
  107. package/{get-shit-done → ez-agents}/workflows/transition.md +544 -544
  108. package/{get-shit-done → ez-agents}/workflows/ui-phase.md +290 -290
  109. package/{get-shit-done → ez-agents}/workflows/ui-review.md +157 -157
  110. package/{get-shit-done → ez-agents}/workflows/update.md +320 -320
  111. package/{get-shit-done → ez-agents}/workflows/validate-phase.md +167 -167
  112. package/{get-shit-done → ez-agents}/workflows/verify-phase.md +243 -243
  113. package/{get-shit-done → ez-agents}/workflows/verify-work.md +5 -5
  114. package/hooks/dist/ez-check-update.js +81 -0
  115. package/hooks/dist/ez-context-monitor.js +141 -0
  116. package/hooks/dist/ez-statusline.js +115 -0
  117. package/package.json +13 -3
  118. package/scripts/build-hooks.js +43 -43
  119. package/scripts/run-tests.cjs +29 -29
  120. /package/{get-shit-done → ez-agents}/references/continuation-format.md +0 -0
  121. /package/{get-shit-done → ez-agents}/references/decimal-phase-calculation.md +0 -0
  122. /package/{get-shit-done → ez-agents}/references/git-integration.md +0 -0
  123. /package/{get-shit-done → ez-agents}/references/git-planning-commit.md +0 -0
  124. /package/{get-shit-done → ez-agents}/references/model-profile-resolution.md +0 -0
  125. /package/{get-shit-done → ez-agents}/references/model-profiles.md +0 -0
  126. /package/{get-shit-done → ez-agents}/references/phase-argument-parsing.md +0 -0
  127. /package/{get-shit-done → ez-agents}/references/planning-config.md +0 -0
  128. /package/{get-shit-done → ez-agents}/references/ui-brand.md +0 -0
  129. /package/{get-shit-done → ez-agents}/references/verification-patterns.md +0 -0
  130. /package/{get-shit-done → ez-agents}/templates/DEBUG.md +0 -0
  131. /package/{get-shit-done → ez-agents}/templates/UAT.md +0 -0
  132. /package/{get-shit-done → ez-agents}/templates/UI-SPEC.md +0 -0
  133. /package/{get-shit-done → ez-agents}/templates/VALIDATION.md +0 -0
  134. /package/{get-shit-done → ez-agents}/templates/codebase/architecture.md +0 -0
  135. /package/{get-shit-done → ez-agents}/templates/codebase/structure.md +0 -0
  136. /package/{get-shit-done → ez-agents}/templates/context.md +0 -0
  137. /package/{get-shit-done → ez-agents}/templates/copilot-instructions.md +0 -0
  138. /package/{get-shit-done → ez-agents}/templates/debug-subagent-prompt.md +0 -0
  139. /package/{get-shit-done → ez-agents}/templates/discovery.md +0 -0
  140. /package/{get-shit-done → ez-agents}/templates/phase-prompt.md +0 -0
  141. /package/{get-shit-done → ez-agents}/templates/planner-subagent-prompt.md +0 -0
  142. /package/{get-shit-done → ez-agents}/templates/project.md +0 -0
  143. /package/{get-shit-done → ez-agents}/templates/research.md +0 -0
  144. /package/{get-shit-done → ez-agents}/templates/state.md +0 -0
  145. /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>