@howlil/ez-agents 3.4.1 → 3.5.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 (162) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +84 -20
  3. package/agents/ez-observer-agent.md +260 -0
  4. package/agents/ez-release-agent.md +333 -0
  5. package/agents/ez-requirements-agent.md +377 -0
  6. package/agents/ez-scrum-master-agent.md +242 -0
  7. package/agents/ez-tech-lead-agent.md +267 -0
  8. package/bin/install.js +3221 -3230
  9. package/commands/ez/arch-review.md +102 -0
  10. package/commands/ez/execute-phase.md +11 -0
  11. package/commands/ez/export-session.md +79 -0
  12. package/commands/ez/gather-requirements.md +117 -0
  13. package/commands/ez/git-workflow.md +72 -0
  14. package/commands/ez/hotfix.md +120 -0
  15. package/commands/ez/import-session.md +82 -0
  16. package/commands/ez/join-discord.md +18 -18
  17. package/commands/ez/list-sessions.md +96 -0
  18. package/commands/ez/package-manager.md +316 -0
  19. package/commands/ez/plan-phase.md +9 -1
  20. package/commands/ez/preflight.md +79 -0
  21. package/commands/ez/progress.md +13 -1
  22. package/commands/ez/release.md +153 -0
  23. package/commands/ez/resume.md +107 -0
  24. package/commands/ez/standup.md +85 -0
  25. package/ez-agents/bin/ez-tools.cjs +1095 -716
  26. package/ez-agents/bin/lib/assistant-adapter.cjs +264 -264
  27. package/ez-agents/bin/lib/audit-exec.cjs +7 -2
  28. package/ez-agents/bin/lib/bdd-validator.cjs +622 -0
  29. package/ez-agents/bin/lib/circuit-breaker.cjs +118 -118
  30. package/ez-agents/bin/lib/config.cjs +190 -190
  31. package/ez-agents/bin/lib/content-scanner.cjs +238 -0
  32. package/ez-agents/bin/lib/context-cache.cjs +154 -0
  33. package/ez-agents/bin/lib/context-errors.cjs +71 -0
  34. package/ez-agents/bin/lib/context-manager.cjs +220 -0
  35. package/ez-agents/bin/lib/discussion-synthesizer.cjs +458 -0
  36. package/ez-agents/bin/lib/file-access.cjs +207 -0
  37. package/ez-agents/bin/lib/file-lock.cjs +236 -236
  38. package/ez-agents/bin/lib/frontmatter.cjs +299 -299
  39. package/ez-agents/bin/lib/fs-utils.cjs +153 -153
  40. package/ez-agents/bin/lib/git-errors.cjs +83 -0
  41. package/ez-agents/bin/lib/git-utils.cjs +118 -0
  42. package/ez-agents/bin/lib/git-workflow-engine.cjs +1157 -0
  43. package/ez-agents/bin/lib/index.cjs +157 -113
  44. package/ez-agents/bin/lib/init.cjs +757 -757
  45. package/ez-agents/bin/lib/lockfile-validator.cjs +227 -0
  46. package/ez-agents/bin/lib/logger.cjs +124 -124
  47. package/ez-agents/bin/lib/memory-compression.cjs +256 -0
  48. package/ez-agents/bin/lib/metrics-tracker.cjs +406 -0
  49. package/ez-agents/bin/lib/milestone.cjs +241 -241
  50. package/ez-agents/bin/lib/model-provider.cjs +241 -241
  51. package/ez-agents/bin/lib/package-manager-detector.cjs +203 -0
  52. package/ez-agents/bin/lib/package-manager-executor.cjs +385 -0
  53. package/ez-agents/bin/lib/package-manager-service.cjs +216 -0
  54. package/ez-agents/bin/lib/phase.cjs +925 -925
  55. package/ez-agents/bin/lib/planning-write.cjs +107 -107
  56. package/ez-agents/bin/lib/release-validator.cjs +614 -0
  57. package/ez-agents/bin/lib/retry.cjs +119 -119
  58. package/ez-agents/bin/lib/roadmap.cjs +306 -306
  59. package/ez-agents/bin/lib/safe-exec.cjs +128 -128
  60. package/ez-agents/bin/lib/safe-path.cjs +130 -130
  61. package/ez-agents/bin/lib/session-chain.cjs +304 -0
  62. package/ez-agents/bin/lib/session-errors.cjs +81 -0
  63. package/ez-agents/bin/lib/session-export.cjs +251 -0
  64. package/ez-agents/bin/lib/session-import.cjs +262 -0
  65. package/ez-agents/bin/lib/session-manager.cjs +280 -0
  66. package/ez-agents/bin/lib/state.cjs +736 -736
  67. package/ez-agents/bin/lib/temp-file.cjs +239 -239
  68. package/ez-agents/bin/lib/template.cjs +223 -223
  69. package/ez-agents/bin/lib/test-file-lock.cjs +112 -112
  70. package/ez-agents/bin/lib/test-graceful.cjs +93 -93
  71. package/ez-agents/bin/lib/test-logger.cjs +60 -60
  72. package/ez-agents/bin/lib/test-safe-exec.cjs +38 -38
  73. package/ez-agents/bin/lib/test-safe-path.cjs +33 -33
  74. package/ez-agents/bin/lib/test-temp-file.cjs +125 -125
  75. package/ez-agents/bin/lib/tier-manager.cjs +428 -0
  76. package/ez-agents/bin/lib/timeout-exec.cjs +63 -63
  77. package/ez-agents/bin/lib/url-fetch.cjs +170 -0
  78. package/ez-agents/bin/lib/verify.cjs +15 -1
  79. package/ez-agents/references/checkpoints.md +776 -776
  80. package/ez-agents/references/continuation-format.md +249 -249
  81. package/ez-agents/references/metrics-schema.md +118 -0
  82. package/ez-agents/references/planning-config.md +140 -0
  83. package/ez-agents/references/questioning.md +162 -162
  84. package/ez-agents/references/tdd.md +263 -263
  85. package/ez-agents/references/tier-strategy.md +103 -0
  86. package/ez-agents/templates/bdd-feature.md +173 -0
  87. package/ez-agents/templates/codebase/concerns.md +310 -310
  88. package/ez-agents/templates/codebase/conventions.md +307 -307
  89. package/ez-agents/templates/codebase/integrations.md +280 -280
  90. package/ez-agents/templates/codebase/stack.md +186 -186
  91. package/ez-agents/templates/codebase/testing.md +480 -480
  92. package/ez-agents/templates/config.json +37 -37
  93. package/ez-agents/templates/continue-here.md +78 -78
  94. package/ez-agents/templates/discussion.md +68 -0
  95. package/ez-agents/templates/incident-runbook.md +205 -0
  96. package/ez-agents/templates/milestone-archive.md +123 -123
  97. package/ez-agents/templates/milestone.md +115 -115
  98. package/ez-agents/templates/release-checklist.md +133 -0
  99. package/ez-agents/templates/requirements.md +231 -231
  100. package/ez-agents/templates/research-project/ARCHITECTURE.md +204 -204
  101. package/ez-agents/templates/research-project/FEATURES.md +147 -147
  102. package/ez-agents/templates/research-project/PITFALLS.md +200 -200
  103. package/ez-agents/templates/research-project/STACK.md +120 -120
  104. package/ez-agents/templates/research-project/SUMMARY.md +170 -170
  105. package/ez-agents/templates/retrospective.md +54 -54
  106. package/ez-agents/templates/roadmap.md +202 -202
  107. package/ez-agents/templates/rollback-plan.md +201 -0
  108. package/ez-agents/templates/summary-minimal.md +41 -41
  109. package/ez-agents/templates/summary-standard.md +48 -48
  110. package/ez-agents/templates/summary.md +248 -248
  111. package/ez-agents/templates/user-setup.md +311 -311
  112. package/ez-agents/templates/verification-report.md +322 -322
  113. package/ez-agents/workflows/add-phase.md +112 -112
  114. package/ez-agents/workflows/add-tests.md +351 -351
  115. package/ez-agents/workflows/add-todo.md +158 -158
  116. package/ez-agents/workflows/arch-review.md +54 -0
  117. package/ez-agents/workflows/audit-milestone.md +332 -332
  118. package/ez-agents/workflows/autonomous.md +131 -30
  119. package/ez-agents/workflows/check-todos.md +177 -177
  120. package/ez-agents/workflows/cleanup.md +152 -152
  121. package/ez-agents/workflows/complete-milestone.md +766 -766
  122. package/ez-agents/workflows/diagnose-issues.md +219 -219
  123. package/ez-agents/workflows/discovery-phase.md +289 -289
  124. package/ez-agents/workflows/discuss-phase.md +762 -762
  125. package/ez-agents/workflows/execute-phase.md +513 -468
  126. package/ez-agents/workflows/execute-plan.md +483 -483
  127. package/ez-agents/workflows/export-session.md +255 -0
  128. package/ez-agents/workflows/gather-requirements.md +206 -0
  129. package/ez-agents/workflows/health.md +159 -159
  130. package/ez-agents/workflows/help.md +584 -492
  131. package/ez-agents/workflows/hotfix.md +291 -0
  132. package/ez-agents/workflows/import-session.md +303 -0
  133. package/ez-agents/workflows/insert-phase.md +130 -130
  134. package/ez-agents/workflows/list-phase-assumptions.md +178 -178
  135. package/ez-agents/workflows/map-codebase.md +316 -316
  136. package/ez-agents/workflows/new-milestone.md +339 -10
  137. package/ez-agents/workflows/new-project.md +293 -299
  138. package/ez-agents/workflows/node-repair.md +92 -92
  139. package/ez-agents/workflows/pause-work.md +122 -122
  140. package/ez-agents/workflows/plan-milestone-gaps.md +274 -274
  141. package/ez-agents/workflows/plan-phase.md +673 -651
  142. package/ez-agents/workflows/progress.md +372 -382
  143. package/ez-agents/workflows/quick.md +610 -610
  144. package/ez-agents/workflows/release.md +253 -0
  145. package/ez-agents/workflows/remove-phase.md +155 -155
  146. package/ez-agents/workflows/research-phase.md +74 -74
  147. package/ez-agents/workflows/resume-project.md +307 -307
  148. package/ez-agents/workflows/resume-session.md +215 -0
  149. package/ez-agents/workflows/set-profile.md +81 -81
  150. package/ez-agents/workflows/settings.md +242 -242
  151. package/ez-agents/workflows/standup.md +64 -0
  152. package/ez-agents/workflows/stats.md +57 -57
  153. package/ez-agents/workflows/transition.md +544 -544
  154. package/ez-agents/workflows/ui-phase.md +290 -290
  155. package/ez-agents/workflows/ui-review.md +157 -157
  156. package/ez-agents/workflows/update.md +320 -320
  157. package/ez-agents/workflows/validate-phase.md +167 -167
  158. package/ez-agents/workflows/verify-phase.md +243 -243
  159. package/ez-agents/workflows/verify-work.md +584 -584
  160. package/package.json +10 -4
  161. package/scripts/build-hooks.js +43 -43
  162. package/scripts/run-tests.cjs +29 -29
@@ -0,0 +1,255 @@
1
+ # Workflow: export-session
2
+
3
+ **Purpose:** Export session data for model handoff or archival
4
+
5
+ **Related Commands:** `/ez:export-session`
6
+
7
+ ---
8
+
9
+ ## Workflow Steps
10
+
11
+ ### 1. Parameters
12
+
13
+ ```
14
+ session_id: string (default: 'last')
15
+ format: 'markdown' | 'json' (default: 'markdown')
16
+ output_path: string (default: auto-generated)
17
+ ```
18
+
19
+ ### 2. Resolve Session
20
+
21
+ ```
22
+ SessionManager mgr = new SessionManager();
23
+
24
+ if (session_id === 'last') {
25
+ session = mgr.getLastSession();
26
+ if (!session) {
27
+ throw error("No sessions found");
28
+ }
29
+ session_id = session.metadata.session_id;
30
+ } else {
31
+ session = mgr.loadSession(session_id);
32
+ if (!session) {
33
+ throw error(`Session not found: ${session_id}`);
34
+ }
35
+ }
36
+
37
+ logger.info('Exporting session', { session_id });
38
+ ```
39
+
40
+ ### 3. Validate Format
41
+
42
+ ```
43
+ if (!['markdown', 'json'].includes(format)) {
44
+ throw error("Format must be 'markdown' or 'json'");
45
+ }
46
+ ```
47
+
48
+ ### 4. Generate Output Path
49
+
50
+ ```
51
+ if (!output_path) {
52
+ ext = format === 'markdown' ? 'md' : 'json';
53
+ output_path = `.planning/sessions/export-${session_id}.${ext}`;
54
+ }
55
+ ```
56
+
57
+ ### 5. Export
58
+
59
+ ```
60
+ SessionExport exporter = new SessionExport(mgr);
61
+
62
+ try {
63
+ result = exporter.exportToFile(session_id, format, output_path);
64
+ } catch (SessionExportError err) {
65
+ logger.error('Export failed', { session_id, format, error: err.message });
66
+ throw error(`Export failed: ${err.message}`);
67
+ }
68
+ ```
69
+
70
+ ### 6. Verify Output
71
+
72
+ ```
73
+ if (!fs.existsSync(output_path)) {
74
+ throw error("Export verification failed: File not created");
75
+ }
76
+
77
+ const stats = fs.statSync(output_path);
78
+ if (stats.size === 0) {
79
+ throw error("Export verification failed: File is empty");
80
+ }
81
+
82
+ logger.info('Export verified', { path: output_path, size: stats.size });
83
+ ```
84
+
85
+ ### 7. Log Success
86
+
87
+ ```
88
+ logger.info('Session exported', {
89
+ session_id,
90
+ format,
91
+ output_path,
92
+ size: stats.size
93
+ });
94
+ ```
95
+
96
+ ### 8. Return Result
97
+
98
+ ```
99
+ return {
100
+ success: true,
101
+ path: output_path,
102
+ format: format,
103
+ size: stats.size
104
+ };
105
+ ```
106
+
107
+ ---
108
+
109
+ ## Output Format Examples
110
+
111
+ ### Markdown Export
112
+ ```markdown
113
+ # Session Export: session-20260319-143052
114
+
115
+ **Exported:** 2026-03-19T15:45:00.000Z
116
+ **Model:** qwen
117
+ **Phase:** 18
118
+ **Plan:** 18
119
+ **Duration:** 1h 15m
120
+
121
+ ---
122
+
123
+ ## Session Summary
124
+
125
+ **Objective:** Implement session memory and model continuity
126
+
127
+ **Completed:**
128
+ - Task 1: Create session error classes
129
+ - Task 2: Create session manager
130
+
131
+ **Incomplete:**
132
+ - Task 3: Create session export module
133
+
134
+ ---
135
+
136
+ ## Key Decisions
137
+
138
+ 1. **Use timestamp-based session IDs**
139
+ - Rationale: Easy to sort and identify
140
+ - Status: Implemented
141
+
142
+ ---
143
+
144
+ ## File Changes
145
+
146
+ | File | Action | Reason |
147
+ |------|--------|--------|
148
+ | ez-agents/bin/lib/session-errors.cjs | created | Error classes |
149
+ | ez-agents/bin/lib/session-manager.cjs | created | Core module |
150
+
151
+ ---
152
+
153
+ ## Open Questions
154
+
155
+ None
156
+
157
+ ---
158
+
159
+ ## Blockers/Concerns
160
+
161
+ None
162
+
163
+ ---
164
+
165
+ ## Recommended Next Actions
166
+
167
+ - Complete session export module implementation
168
+
169
+ ---
170
+
171
+ ## Session Chain
172
+
173
+ - Previous: session-20260319-120000
174
+ - Current: session-20260319-143052
175
+ - Next: none
176
+ ```
177
+
178
+ ### JSON Export
179
+ ```json
180
+ {
181
+ "export_version": "1.0",
182
+ "exported_at": "2026-03-19T15:45:00.000Z",
183
+ "export_format": "json",
184
+ "session": {
185
+ "metadata": {
186
+ "session_id": "session-20260319-143052",
187
+ "session_version": "1.0",
188
+ "started_at": "2026-03-19T14:30:52.000Z",
189
+ "ended_at": "2026-03-19T15:45:00.000Z",
190
+ "model": "qwen",
191
+ "phase": 18,
192
+ "plan": 18,
193
+ "status": "completed",
194
+ "session_chain": ["session-20260319-120000"],
195
+ "token_usage": {
196
+ "input": 50000,
197
+ "output": 30000,
198
+ "total": 80000
199
+ }
200
+ },
201
+ "context": {
202
+ "transcript": "...",
203
+ "tasks": [],
204
+ "decisions": [],
205
+ "file_changes": [],
206
+ "open_questions": [],
207
+ "blockers": []
208
+ },
209
+ "state": {
210
+ "current_phase": 18,
211
+ "current_plan": 18,
212
+ "incomplete_tasks": [],
213
+ "last_action": "Task 2 complete",
214
+ "next_recommended_action": "Continue with Task 3"
215
+ }
216
+ }
217
+ }
218
+ ```
219
+
220
+ ---
221
+
222
+ ## Error Handling
223
+
224
+ ### Session Not Found
225
+ ```
226
+ if (!session) {
227
+ throw error(`Session not found: ${session_id}`);
228
+ }
229
+ ```
230
+
231
+ ### Invalid Format
232
+ ```
233
+ if (!['markdown', 'json'].includes(format)) {
234
+ throw error(`Unsupported export format: ${format}`);
235
+ }
236
+ ```
237
+
238
+ ### Write Failure
239
+ ```
240
+ try {
241
+ safePlanningWriteSync(output_path, content);
242
+ } catch (err) {
243
+ logger.error('Write failed', { path: output_path, error: err.message });
244
+ throw error(`Failed to write export file: ${err.message}`);
245
+ }
246
+ ```
247
+
248
+ ---
249
+
250
+ ## Related Files
251
+
252
+ - `ez-agents/bin/lib/session-manager.cjs` - Session loading
253
+ - `ez-agents/bin/lib/session-export.cjs` - Export logic
254
+ - `ez-agents/bin/lib/planning-write.cjs` - Safe file writes
255
+ - `.planning/sessions/` - Output directory
@@ -0,0 +1,206 @@
1
+ <purpose>
2
+ Orchestrate BDD requirements gathering for a phase. Spawns ez-requirements-agent to interview user, produce .feature files, validate INVEST, and create acceptance criteria documents.
3
+ </purpose>
4
+
5
+ <process>
6
+
7
+ ## 1. Initialize
8
+
9
+ ```bash
10
+ INIT=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" init plan-phase "${PHASE}" 2>/dev/null || echo '{}')
11
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
12
+ ```
13
+
14
+ Parse JSON for: `phase_number`, `phase_name`, `phase_dir`, `padded_phase`, `phase_slug`, `context_path`, `requirements_path`, `state_path`, `roadmap_path`.
15
+
16
+ **If `.planning/` missing:** Error — run `/ez:new-project` first.
17
+
18
+ ## 2. Parse Arguments
19
+
20
+ Extract from $ARGUMENTS:
21
+ - Phase number (integer or decimal like `3.1`)
22
+ - `--auto` flag — skip interactive interview, derive from context
23
+
24
+ **If no phase number:** Detect next unplanned phase from roadmap.
25
+
26
+ ## 3. Check Phase Exists
27
+
28
+ ```bash
29
+ PHASE_INFO=$(node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" roadmap get-phase "${PHASE}")
30
+ ```
31
+
32
+ **If not found:** Error — phase does not exist in ROADMAP.md.
33
+
34
+ Display:
35
+ ```
36
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
37
+ EZ ► GATHERING REQUIREMENTS — Phase {X}: {Name}
38
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
39
+ ```
40
+
41
+ ## 4. Check Existing .feature Files
42
+
43
+ ```bash
44
+ ls specs/features/ 2>/dev/null
45
+ find specs/features/ -name "*.feature" 2>/dev/null | wc -l
46
+ ```
47
+
48
+ **If .feature files exist for this phase:**
49
+
50
+ Check `.planning/phases/{phase_dir}/{phase_num}-ACCEPTANCE-CRITERIA.md`.
51
+
52
+ If exists, ask:
53
+ 1. "Regenerate — replace existing requirements" → Clear old files, re-gather
54
+ 2. "Extend — add more scenarios" → Append mode
55
+ 3. "View existing" → Display ACCEPTANCE-CRITERIA.md and exit
56
+
57
+ **If no .feature files:** Proceed to step 5.
58
+
59
+ ## 5. Spawn ez-requirements-agent
60
+
61
+ ```
62
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
63
+ ◆ Spawning requirements agent...
64
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
65
+ ```
66
+
67
+ Requirements prompt:
68
+
69
+ ```markdown
70
+ <objective>
71
+ Gather BDD requirements for Phase {phase_number}: {phase_name}.
72
+ Mode: {interactive | auto}
73
+ </objective>
74
+
75
+ <files_to_read>
76
+ - {state_path} (Project State)
77
+ - {roadmap_path} (Roadmap — phase goal and requirements)
78
+ - {requirements_path} (Existing requirements)
79
+ - {context_path} (USER DECISIONS from /ez:discuss-phase, if exists)
80
+ </files_to_read>
81
+
82
+ <phase_info>
83
+ Phase: {phase_number}
84
+ Name: {phase_name}
85
+ Goal: {goal from ROADMAP}
86
+ Phase directory: {phase_dir}
87
+ Padded phase: {padded_phase}
88
+ </phase_info>
89
+
90
+ <mode>
91
+ {If --auto:}
92
+ AUTO MODE: Do NOT ask the user questions. Derive all requirements from:
93
+ 1. ROADMAP.md phase goal and description
94
+ 2. CONTEXT.md locked decisions (if exists)
95
+ 3. Existing REQUIREMENTS.md entries for this phase
96
+
97
+ {If interactive:}
98
+ INTERACTIVE MODE: Conduct a focused interview with the user.
99
+ - Group questions into batches of 3-4 at a time
100
+ - Confirm understanding after each batch before proceeding
101
+ - Focus on observable behavior, not implementation
102
+ </mode>
103
+
104
+ <project_instructions>
105
+ Read ./CLAUDE.md if exists — follow project-specific guidelines.
106
+ Check .claude/skills/ or .agents/skills/ — apply skill rules to requirements scope.
107
+ </project_instructions>
108
+ ```
109
+
110
+ ```
111
+ Task(
112
+ prompt=requirements_prompt,
113
+ subagent_type="ez-requirements-agent",
114
+ model="{planner_model from init}"
115
+ )
116
+ ```
117
+
118
+ ## 6. Handle Agent Return
119
+
120
+ **`## REQUIREMENTS GATHERED`:**
121
+
122
+ Display:
123
+ ```
124
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
125
+ EZ ► REQUIREMENTS COMPLETE ✓
126
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
127
+
128
+ {agent summary}
129
+ ```
130
+
131
+ Continue to step 7.
132
+
133
+ **`## REQUIREMENTS BLOCKED`:**
134
+
135
+ Display blocker details. Offer:
136
+ 1. "Provide more context about the phase goal"
137
+ 2. "Use --auto mode to derive from existing context"
138
+ 3. "Skip requirements for this phase"
139
+
140
+ ## 7. Validate BDD Output
141
+
142
+ ```bash
143
+ # Check .feature files were created
144
+ FEATURE_COUNT=$(find specs/features/ -name "*.feature" 2>/dev/null | wc -l)
145
+
146
+ # Validate structure
147
+ node "$HOME/.claude/ez-agents/bin/ez-tools.cjs" bdd validate specs/features/ 2>/dev/null || true
148
+
149
+ # Check ACCEPTANCE-CRITERIA.md exists
150
+ ls .planning/phases/${PHASE_DIR}/*-ACCEPTANCE-CRITERIA.md 2>/dev/null
151
+ ```
152
+
153
+ Report findings:
154
+ ```
155
+ Validation:
156
+ ✓ {N} .feature file(s) created
157
+ ✓ INVEST: {score}/6 dimensions pass
158
+ ✓ MoSCoW: {must} must / {should} should / {could} could / {wont} wont
159
+ ✓ ACCEPTANCE-CRITERIA.md created
160
+ ```
161
+
162
+ If INVEST score < 5, warn: "User stories may need refinement before planning — run `/ez:gather-requirements {phase}` again."
163
+
164
+ ## 8. Present Final Status
165
+
166
+ ```
167
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
168
+ EZ ► PHASE {X} REQUIREMENTS ✓
169
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
170
+
171
+ **Phase {X}: {Name}**
172
+ Feature files: {N}
173
+ Scenarios: {M} total ({must} @must / {should} @should / {could} @could)
174
+ INVEST: {score}/6
175
+
176
+ ───────────────────────────────────────────────────────────────
177
+
178
+ ## ▶ Next Up
179
+
180
+ **Plan Phase {X}** — create implementation plans cross-checked against BDD specs
181
+
182
+ /ez:plan-phase {X}
183
+
184
+ <sub>/clear first → fresh context window</sub>
185
+
186
+ ───────────────────────────────────────────────────────────────
187
+
188
+ **Also available:**
189
+ - cat specs/features/{domain}/*.feature — review scenarios
190
+ - cat .planning/phases/{phase-dir}/{phase}-ACCEPTANCE-CRITERIA.md — review acceptance criteria
191
+ - /ez:discuss-phase {X} — capture design decisions first (if not done)
192
+ ```
193
+
194
+ </process>
195
+
196
+ <success_criteria>
197
+ - [ ] Phase validated against roadmap
198
+ - [ ] Existing .feature files checked
199
+ - [ ] ez-requirements-agent spawned with correct mode and file paths
200
+ - [ ] .feature files created in specs/features/
201
+ - [ ] Every scenario has MoSCoW + tier tags
202
+ - [ ] INVEST validation run
203
+ - [ ] ACCEPTANCE-CRITERIA.md exists in phase directory
204
+ - [ ] REQUIREMENTS-BDD.md updated
205
+ - [ ] User sees summary with scenario counts and next steps
206
+ </success_criteria>