agileflow 2.94.0 → 2.95.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/CHANGELOG.md +20 -0
- package/README.md +6 -6
- package/lib/colors.generated.js +117 -0
- package/lib/colors.js +59 -109
- package/lib/generator-factory.js +333 -0
- package/lib/path-utils.js +49 -0
- package/lib/session-registry.js +25 -15
- package/lib/smart-json-file.js +40 -32
- package/lib/state-machine.js +286 -0
- package/package.json +1 -1
- package/scripts/agileflow-configure.js +7 -6
- package/scripts/archive-completed-stories.sh +86 -11
- package/scripts/babysit-context-restore.js +89 -0
- package/scripts/claude-tmux.sh +186 -7
- package/scripts/damage-control/bash-tool-damage-control.js +11 -247
- package/scripts/damage-control/edit-tool-damage-control.js +9 -249
- package/scripts/damage-control/write-tool-damage-control.js +9 -244
- package/scripts/generate-colors.js +314 -0
- package/scripts/lib/colors.generated.sh +82 -0
- package/scripts/lib/colors.sh +10 -70
- package/scripts/lib/configure-features.js +401 -0
- package/scripts/lib/context-loader.js +181 -52
- package/scripts/precompact-context.sh +54 -17
- package/scripts/session-coordinator.sh +2 -2
- package/scripts/session-manager.js +677 -11
- package/src/core/agents/council-advocate.md +202 -0
- package/src/core/agents/council-analyst.md +248 -0
- package/src/core/agents/council-optimist.md +166 -0
- package/src/core/commands/audit.md +93 -0
- package/src/core/commands/auto.md +73 -0
- package/src/core/commands/babysit.md +169 -13
- package/src/core/commands/baseline.md +73 -0
- package/src/core/commands/batch.md +64 -0
- package/src/core/commands/blockers.md +60 -0
- package/src/core/commands/board.md +66 -0
- package/src/core/commands/choose.md +77 -0
- package/src/core/commands/ci.md +77 -0
- package/src/core/commands/compress.md +27 -1
- package/src/core/commands/configure.md +126 -10
- package/src/core/commands/council.md +591 -0
- package/src/core/commands/debt.md +72 -0
- package/src/core/commands/deploy.md +73 -0
- package/src/core/commands/deps.md +68 -0
- package/src/core/commands/docs.md +60 -0
- package/src/core/commands/feedback.md +68 -0
- package/src/core/commands/help.md +189 -3
- package/src/core/commands/ideate.md +219 -20
- package/src/core/commands/impact.md +74 -0
- package/src/core/commands/install.md +529 -0
- package/src/core/commands/maintain.md +558 -0
- package/src/core/commands/metrics.md +75 -0
- package/src/core/commands/multi-expert.md +74 -0
- package/src/core/commands/packages.md +69 -0
- package/src/core/commands/readme-sync.md +64 -0
- package/src/core/commands/research/analyze.md +285 -121
- package/src/core/commands/research/import.md +281 -109
- package/src/core/commands/retro.md +76 -0
- package/src/core/commands/review.md +72 -0
- package/src/core/commands/rlm.md +83 -0
- package/src/core/commands/rpi.md +90 -0
- package/src/core/commands/session/cleanup.md +214 -12
- package/src/core/commands/session/end.md +229 -17
- package/src/core/commands/sprint.md +72 -0
- package/src/core/commands/story-validate.md +68 -0
- package/src/core/commands/template.md +69 -0
- package/src/core/commands/tests.md +83 -0
- package/src/core/commands/update.md +59 -0
- package/src/core/commands/validate-expertise.md +76 -0
- package/src/core/commands/velocity.md +74 -0
- package/src/core/commands/verify.md +91 -0
- package/src/core/commands/whats-new.md +69 -0
- package/src/core/commands/workflow.md +88 -0
- package/src/core/council/sessions/.gitkeep +0 -0
- package/src/core/council/shared_reasoning.template.md +106 -0
- package/src/core/templates/command-documentation.md +187 -0
- package/tools/cli/commands/session.js +1171 -0
- package/tools/cli/commands/setup.js +2 -81
- package/tools/cli/installers/core/installer.js +0 -5
- package/tools/cli/installers/ide/claude-code.js +6 -0
- package/tools/cli/lib/config-manager.js +42 -5
|
@@ -7,7 +7,8 @@ compact_context:
|
|
|
7
7
|
- "ACTIVE COMMAND: /agileflow:session:end - Terminate current session"
|
|
8
8
|
- "For NON-MAIN sessions: 4 options (merge/end/delete/cancel)"
|
|
9
9
|
- "For MAIN sessions: 2 options (end/cancel)"
|
|
10
|
-
- "
|
|
10
|
+
- "Uncommitted changes: INLINE options (commit/commit-custom/stash/discard/cancel) - NOT blocking!"
|
|
11
|
+
- "Merge flow: check uncommitted → handle inline → preview → conflicts → strategy → confirm → execute → unstash if stashed"
|
|
11
12
|
- "Main session can only be marked inactive, not deleted or merged"
|
|
12
13
|
- "Use AskUserQuestion for all user choices"
|
|
13
14
|
state_fields:
|
|
@@ -15,6 +16,7 @@ compact_context:
|
|
|
15
16
|
- is_main_session
|
|
16
17
|
- user_choice
|
|
17
18
|
- merge_strategy
|
|
19
|
+
- stash_used
|
|
18
20
|
---
|
|
19
21
|
|
|
20
22
|
# /agileflow:session:end
|
|
@@ -106,6 +108,8 @@ Display:
|
|
|
106
108
|
To resume later: cd {path} && claude
|
|
107
109
|
```
|
|
108
110
|
|
|
111
|
+
Then proceed to **Step 4: Offer to Close Tab**.
|
|
112
|
+
|
|
109
113
|
### Step 3c: If "End and delete worktree" Selected
|
|
110
114
|
|
|
111
115
|
```bash
|
|
@@ -123,6 +127,8 @@ Display:
|
|
|
123
127
|
git branch -d {branch}
|
|
124
128
|
```
|
|
125
129
|
|
|
130
|
+
Then proceed to **Step 4: Offer to Close Tab**.
|
|
131
|
+
|
|
126
132
|
### Step 3d: If "Cancel" Selected
|
|
127
133
|
|
|
128
134
|
```
|
|
@@ -131,6 +137,39 @@ Session remains active.
|
|
|
131
137
|
|
|
132
138
|
---
|
|
133
139
|
|
|
140
|
+
## Step 4: Offer to Close Tab (if in tmux)
|
|
141
|
+
|
|
142
|
+
After ending a session (via end, delete, or merge), check if we're in tmux and offer to close the tab.
|
|
143
|
+
|
|
144
|
+
**Check if in tmux:**
|
|
145
|
+
```bash
|
|
146
|
+
echo $TMUX
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
If `$TMUX` is set (non-empty), we're in tmux. Ask:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
AskUserQuestion:
|
|
153
|
+
question: "Close this tmux tab?"
|
|
154
|
+
header: "Close tab"
|
|
155
|
+
multiSelect: false
|
|
156
|
+
options:
|
|
157
|
+
- label: "Yes, close tab"
|
|
158
|
+
description: "Close this terminal tab (Alt+x also works)"
|
|
159
|
+
- label: "No, keep open"
|
|
160
|
+
description: "Stay in this tab"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**If "Yes, close tab" selected:**
|
|
164
|
+
```bash
|
|
165
|
+
tmux kill-window
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**If "No, keep open" selected:**
|
|
169
|
+
Display any final messages and end.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
134
173
|
## MERGE FLOW (for "Complete & merge to main")
|
|
135
174
|
|
|
136
175
|
### Merge Step 1: Check for Uncommitted Changes
|
|
@@ -141,17 +180,123 @@ node .agileflow/scripts/session-manager.js check-merge {session_id}
|
|
|
141
180
|
|
|
142
181
|
If response contains `reason: "uncommitted_changes"`:
|
|
143
182
|
|
|
183
|
+
**Display change summary:**
|
|
144
184
|
```
|
|
145
185
|
⚠️ You have uncommitted changes in this session.
|
|
146
186
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
187
|
+
{details_from_response}
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**Present inline options with AskUserQuestion:**
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
AskUserQuestion:
|
|
195
|
+
question: "How would you like to handle these uncommitted changes?"
|
|
196
|
+
header: "Uncommitted changes"
|
|
197
|
+
multiSelect: false
|
|
198
|
+
options:
|
|
199
|
+
- label: "Commit all changes (Recommended)"
|
|
200
|
+
description: "Create a commit with auto-generated message"
|
|
201
|
+
- label: "Commit with custom message"
|
|
202
|
+
description: "Enter your own commit message"
|
|
203
|
+
- label: "Stash changes temporarily"
|
|
204
|
+
description: "Stash, merge, then restore after merge"
|
|
205
|
+
- label: "Discard all changes"
|
|
206
|
+
description: "Discard local changes and continue with merge"
|
|
207
|
+
- label: "Cancel"
|
|
208
|
+
description: "Keep session active with uncommitted changes"
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
#### If "Commit all changes" selected:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
node .agileflow/scripts/session-manager.js commit-changes {session_id}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Display:
|
|
218
|
+
```
|
|
219
|
+
✓ Changes committed: {commitHash}
|
|
220
|
+
Message: {message}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Continue to **Merge Step 2**.
|
|
224
|
+
|
|
225
|
+
#### If "Commit with custom message" selected:
|
|
226
|
+
|
|
227
|
+
First, ask for the commit message:
|
|
228
|
+
```
|
|
229
|
+
AskUserQuestion:
|
|
230
|
+
question: "Enter your commit message:"
|
|
231
|
+
header: "Commit message"
|
|
232
|
+
multiSelect: false
|
|
233
|
+
options:
|
|
234
|
+
- label: "feat: ..."
|
|
235
|
+
description: "New feature"
|
|
236
|
+
- label: "fix: ..."
|
|
237
|
+
description: "Bug fix"
|
|
238
|
+
- label: "chore: ..."
|
|
239
|
+
description: "Maintenance/cleanup"
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
The user will select "Other" to enter a custom message. Then:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
node .agileflow/scripts/session-manager.js commit-changes {session_id} --message="{user_message}"
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Display:
|
|
249
|
+
```
|
|
250
|
+
✓ Changes committed: {commitHash}
|
|
251
|
+
Message: {message}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Continue to **Merge Step 2**.
|
|
255
|
+
|
|
256
|
+
#### If "Stash changes temporarily" selected:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
node .agileflow/scripts/session-manager.js stash {session_id}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Display:
|
|
263
|
+
```
|
|
264
|
+
✓ Changes stashed: {message}
|
|
265
|
+
|
|
266
|
+
Note: After merge completes, stash will be restored on main branch.
|
|
267
|
+
```
|
|
150
268
|
|
|
151
|
-
|
|
152
|
-
git checkout -- .
|
|
269
|
+
Continue to **Merge Step 2**.
|
|
153
270
|
|
|
154
|
-
|
|
271
|
+
**IMPORTANT**: After the merge completes successfully (at the end of Merge Step 7), run:
|
|
272
|
+
```bash
|
|
273
|
+
node .agileflow/scripts/session-manager.js unstash {session_id}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Display:
|
|
277
|
+
```
|
|
278
|
+
✓ Stashed changes restored to main branch.
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
#### If "Discard all changes" selected:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
node .agileflow/scripts/session-manager.js discard-changes {session_id}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Display:
|
|
288
|
+
```
|
|
289
|
+
✓ All uncommitted changes discarded.
|
|
290
|
+
|
|
291
|
+
⚠️ Note: Untracked files were NOT deleted.
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
Continue to **Merge Step 2**.
|
|
295
|
+
|
|
296
|
+
#### If "Cancel" selected:
|
|
297
|
+
|
|
298
|
+
```
|
|
299
|
+
Session remains active with uncommitted changes.
|
|
155
300
|
```
|
|
156
301
|
|
|
157
302
|
**Exit the flow here.** Do not continue to merge.
|
|
@@ -345,6 +490,8 @@ Summary:
|
|
|
345
490
|
💡 To push your changes: git push
|
|
346
491
|
```
|
|
347
492
|
|
|
493
|
+
Then proceed to **Step 4: Offer to Close Tab**.
|
|
494
|
+
|
|
348
495
|
If failed:
|
|
349
496
|
|
|
350
497
|
```
|
|
@@ -446,7 +593,30 @@ node .agileflow/scripts/session-manager.js status
|
|
|
446
593
|
```bash
|
|
447
594
|
node .agileflow/scripts/session-manager.js check-merge {session_id}
|
|
448
595
|
```
|
|
449
|
-
If `reason: "uncommitted_changes"` → Show
|
|
596
|
+
If `reason: "uncommitted_changes"` → Show inline options (5 choices):
|
|
597
|
+
```xml
|
|
598
|
+
<invoke name="AskUserQuestion">
|
|
599
|
+
<parameter name="questions">[{
|
|
600
|
+
"question": "How would you like to handle these uncommitted changes?",
|
|
601
|
+
"header": "Uncommitted changes",
|
|
602
|
+
"multiSelect": false,
|
|
603
|
+
"options": [
|
|
604
|
+
{"label": "Commit all changes (Recommended)", "description": "Create a commit with auto-generated message"},
|
|
605
|
+
{"label": "Commit with custom message", "description": "Enter your own commit message"},
|
|
606
|
+
{"label": "Stash changes temporarily", "description": "Stash, merge, then restore after merge"},
|
|
607
|
+
{"label": "Discard all changes", "description": "Discard local changes and continue"},
|
|
608
|
+
{"label": "Cancel", "description": "Keep session active with uncommitted changes"}
|
|
609
|
+
]
|
|
610
|
+
}]</parameter>
|
|
611
|
+
</invoke>
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
**Step 1a: Handle uncommitted choice**
|
|
615
|
+
- "Commit all": `node .agileflow/scripts/session-manager.js commit-changes {id}` → continue
|
|
616
|
+
- "Commit custom": Ask for message → `commit-changes {id} --message="..."` → continue
|
|
617
|
+
- "Stash": `node .agileflow/scripts/session-manager.js stash {id}` → continue (unstash after merge)
|
|
618
|
+
- "Discard": `node .agileflow/scripts/session-manager.js discard-changes {id}` → continue
|
|
619
|
+
- "Cancel": EXIT
|
|
450
620
|
|
|
451
621
|
**Step 2: Get preview**
|
|
452
622
|
```bash
|
|
@@ -532,6 +702,39 @@ Session remains active.
|
|
|
532
702
|
|
|
533
703
|
---
|
|
534
704
|
|
|
705
|
+
### 🚨 RULE #5: OFFER TO CLOSE TMUX TAB
|
|
706
|
+
|
|
707
|
+
After session ends (via end, delete, or merge), check if in tmux and offer to close:
|
|
708
|
+
|
|
709
|
+
```bash
|
|
710
|
+
# Check if in tmux
|
|
711
|
+
echo $TMUX
|
|
712
|
+
```
|
|
713
|
+
|
|
714
|
+
If in tmux, ask:
|
|
715
|
+
```xml
|
|
716
|
+
<invoke name="AskUserQuestion">
|
|
717
|
+
<parameter name="questions">[{
|
|
718
|
+
"question": "Close this tmux tab?",
|
|
719
|
+
"header": "Close tab",
|
|
720
|
+
"multiSelect": false,
|
|
721
|
+
"options": [
|
|
722
|
+
{"label": "Yes, close tab",
|
|
723
|
+
"description": "Close this terminal tab (Alt+x also works)"},
|
|
724
|
+
{"label": "No, keep open",
|
|
725
|
+
"description": "Stay in this tab"}
|
|
726
|
+
]
|
|
727
|
+
}]</parameter>
|
|
728
|
+
</invoke>
|
|
729
|
+
```
|
|
730
|
+
|
|
731
|
+
If "Yes":
|
|
732
|
+
```bash
|
|
733
|
+
tmux kill-window
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
---
|
|
737
|
+
|
|
535
738
|
### KEY FILES
|
|
536
739
|
|
|
537
740
|
| File | Purpose |
|
|
@@ -549,14 +752,17 @@ Session remains active.
|
|
|
549
752
|
2. Check is_main
|
|
550
753
|
3. Show options (4 for non-main, 2 for main)
|
|
551
754
|
4. If merge selected:
|
|
552
|
-
a. Check uncommitted →
|
|
553
|
-
b.
|
|
554
|
-
c.
|
|
555
|
-
d.
|
|
556
|
-
e.
|
|
557
|
-
f.
|
|
558
|
-
g.
|
|
755
|
+
a. Check uncommitted → show inline options (commit/stash/discard/cancel)
|
|
756
|
+
b. Handle uncommitted (commit-changes, stash, or discard-changes)
|
|
757
|
+
c. Preview commits/files
|
|
758
|
+
d. Check conflicts → offer alternatives if conflicts
|
|
759
|
+
e. Choose strategy (squash/merge)
|
|
760
|
+
f. Confirm cleanup
|
|
761
|
+
g. Execute integrate
|
|
762
|
+
h. If stash was used → unstash on main
|
|
763
|
+
i. Show success with cd command
|
|
559
764
|
5. If end/delete → Execute and show result
|
|
765
|
+
6. If in tmux → Offer to close tab
|
|
560
766
|
```
|
|
561
767
|
|
|
562
768
|
---
|
|
@@ -565,18 +771,22 @@ Session remains active.
|
|
|
565
771
|
|
|
566
772
|
❌ Show merge option for main session
|
|
567
773
|
❌ Skip uncommitted check before merge
|
|
774
|
+
❌ Block and exit on uncommitted changes (use inline options instead!)
|
|
568
775
|
❌ Merge without showing preview
|
|
569
776
|
❌ Merge when conflicts exist without warning
|
|
570
777
|
❌ Delete worktree before merge completes
|
|
778
|
+
❌ Forget to unstash after merge if stash was used
|
|
571
779
|
|
|
572
780
|
### DO THESE
|
|
573
781
|
|
|
574
782
|
✅ Always check is_main first
|
|
575
|
-
✅ Check uncommitted changes
|
|
783
|
+
✅ Check uncommitted changes and offer inline options
|
|
784
|
+
✅ Handle uncommitted with commit-changes, stash, or discard-changes
|
|
576
785
|
✅ Show preview before merge
|
|
577
786
|
✅ Handle conflicts gracefully
|
|
578
787
|
✅ Squash as default strategy
|
|
579
788
|
✅ Show cd command after successful merge
|
|
789
|
+
✅ If stash was used, unstash after merge completes
|
|
580
790
|
|
|
581
791
|
---
|
|
582
792
|
|
|
@@ -585,8 +795,10 @@ Session remains active.
|
|
|
585
795
|
- `/agileflow:session:end` IS ACTIVE
|
|
586
796
|
- Non-main: 4 options (merge first!)
|
|
587
797
|
- Main: 2 options only
|
|
588
|
-
-
|
|
798
|
+
- Uncommitted changes: inline options (commit/stash/discard/cancel) - NOT blocking!
|
|
799
|
+
- Merge flow: uncommitted → handle → preview → conflicts → strategy → confirm → execute → unstash if needed
|
|
589
800
|
- Default strategy: squash
|
|
590
801
|
- Always show cd command to return to main
|
|
802
|
+
- **After session ends: Offer to close tmux tab (if in tmux)**
|
|
591
803
|
|
|
592
804
|
<!-- COMPACT_SUMMARY_END -->
|
|
@@ -630,6 +630,78 @@ After displaying plan, ask:
|
|
|
630
630
|
|
|
631
631
|
---
|
|
632
632
|
|
|
633
|
+
## Expected Output
|
|
634
|
+
|
|
635
|
+
### Success - Sprint Planning
|
|
636
|
+
|
|
637
|
+
```
|
|
638
|
+
📅 Sprint Planning: Sprint 13
|
|
639
|
+
══════════════════════════════════════════════════════════════
|
|
640
|
+
|
|
641
|
+
📊 Capacity Analysis
|
|
642
|
+
┌────────────────────────────────────────────────────────────┐
|
|
643
|
+
│ Team Velocity (avg last 3 sprints): 38 points │
|
|
644
|
+
│ Available capacity: 36 points (1 dev on PTO) │
|
|
645
|
+
│ Recommended commitment: 32-36 points │
|
|
646
|
+
└────────────────────────────────────────────────────────────┘
|
|
647
|
+
|
|
648
|
+
📋 Suggested Sprint Backlog
|
|
649
|
+
┌────────────────────────────────────────────────────────────┐
|
|
650
|
+
│ MUST HAVE (P0-P1) - 24 points │
|
|
651
|
+
├────────────────────────────────────────────────────────────┤
|
|
652
|
+
│ US-0060: OAuth completion (8 pts) - AG-API │
|
|
653
|
+
│ US-0061: Rate limiting (5 pts) - AG-CI │
|
|
654
|
+
│ US-0062: Session security fix (3 pts) - AG-SECURITY │
|
|
655
|
+
│ US-0063: Dashboard updates (8 pts) - AG-UI │
|
|
656
|
+
├────────────────────────────────────────────────────────────┤
|
|
657
|
+
│ SHOULD HAVE (P2) - 12 points │
|
|
658
|
+
├────────────────────────────────────────────────────────────┤
|
|
659
|
+
│ US-0064: Email notifications (5 pts) - AG-API │
|
|
660
|
+
│ US-0065: Metrics dashboard (4 pts) - AG-UI │
|
|
661
|
+
│ US-0066: Documentation update (3 pts) - AG-DOCS │
|
|
662
|
+
└────────────────────────────────────────────────────────────┘
|
|
663
|
+
|
|
664
|
+
⚠️ Dependency Alert:
|
|
665
|
+
US-0060 must complete before US-0064 can start
|
|
666
|
+
|
|
667
|
+
Total: 36 points | Risk: Low
|
|
668
|
+
|
|
669
|
+
Commit this sprint plan? [Y/n]
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
### Success - Sprint Started
|
|
673
|
+
|
|
674
|
+
```
|
|
675
|
+
📅 Sprint 13 Started
|
|
676
|
+
══════════════════════════════════════════════════════════════
|
|
677
|
+
|
|
678
|
+
Duration: 2026-01-29 to 2026-02-12 (14 days)
|
|
679
|
+
Commitment: 7 stories (36 points)
|
|
680
|
+
Goal: Complete OAuth and security hardening
|
|
681
|
+
|
|
682
|
+
✓ Status.json updated
|
|
683
|
+
✓ Sprint created in milestones.md
|
|
684
|
+
✓ Stories moved to 'in_progress' column
|
|
685
|
+
|
|
686
|
+
Next: /agileflow:board to see sprint view
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
### Error - Active Sprint Exists
|
|
690
|
+
|
|
691
|
+
```
|
|
692
|
+
❌ Error: Sprint 12 is still active
|
|
693
|
+
|
|
694
|
+
Stories remaining: 2 (4 points)
|
|
695
|
+
Days remaining: 1
|
|
696
|
+
|
|
697
|
+
Options:
|
|
698
|
+
1. Complete current sprint: /agileflow:sprint ACTION=end
|
|
699
|
+
2. Carry over stories: /agileflow:sprint ACTION=carryover
|
|
700
|
+
3. Force new sprint: /agileflow:sprint ACTION=start FORCE=true
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
---
|
|
704
|
+
|
|
633
705
|
## Related Commands
|
|
634
706
|
|
|
635
707
|
- `/agileflow:board` - Visual kanban board
|
|
@@ -413,6 +413,74 @@ After validation completes, offer context-aware next steps:
|
|
|
413
413
|
|
|
414
414
|
---
|
|
415
415
|
|
|
416
|
+
## Expected Output
|
|
417
|
+
|
|
418
|
+
### Success - Story Valid
|
|
419
|
+
|
|
420
|
+
```
|
|
421
|
+
✅ Story Validation: US-0050
|
|
422
|
+
══════════════════════════════════════════════════════════════
|
|
423
|
+
|
|
424
|
+
Checking story completeness...
|
|
425
|
+
|
|
426
|
+
✓ Title: Clear and descriptive
|
|
427
|
+
✓ Description: Contains user value
|
|
428
|
+
✓ Acceptance Criteria: 5 criteria in Given/When/Then format
|
|
429
|
+
✓ Estimate: 1.5d (within range)
|
|
430
|
+
✓ Owner: AG-API (valid agent)
|
|
431
|
+
✓ Dependencies: None or all exist
|
|
432
|
+
✓ Epic: EP-0010 (linked)
|
|
433
|
+
|
|
434
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
435
|
+
✅ Story is ready for development
|
|
436
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
437
|
+
|
|
438
|
+
INVEST Score: 9/10
|
|
439
|
+
- Independent: ✓
|
|
440
|
+
- Negotiable: ✓
|
|
441
|
+
- Valuable: ✓
|
|
442
|
+
- Estimable: ✓
|
|
443
|
+
- Small: ✓
|
|
444
|
+
- Testable: ✓
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
### Partial Success - Issues Found
|
|
448
|
+
|
|
449
|
+
```
|
|
450
|
+
⚠️ Story Validation: US-0051
|
|
451
|
+
══════════════════════════════════════════════════════════════
|
|
452
|
+
|
|
453
|
+
Issues found (2):
|
|
454
|
+
|
|
455
|
+
🔴 CRITICAL:
|
|
456
|
+
1. Acceptance criteria missing Given/When/Then format
|
|
457
|
+
Found: "Login should work"
|
|
458
|
+
Expected: "Given a registered user, When they submit valid credentials, Then they receive a JWT token"
|
|
459
|
+
|
|
460
|
+
🟡 WARNING:
|
|
461
|
+
2. Estimate missing
|
|
462
|
+
Add estimate: 0.5d, 1d, 1.5d, or 2d
|
|
463
|
+
|
|
464
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
465
|
+
⚠️ Story needs fixes before development
|
|
466
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
467
|
+
|
|
468
|
+
Fix issues now? [Y/n]
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### Error - Story Not Found
|
|
472
|
+
|
|
473
|
+
```
|
|
474
|
+
❌ Error: Story not found: US-9999
|
|
475
|
+
|
|
476
|
+
Check story ID and try again.
|
|
477
|
+
|
|
478
|
+
List available stories:
|
|
479
|
+
/agileflow:story:list STATUS=ready
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
---
|
|
483
|
+
|
|
416
484
|
## Related Commands
|
|
417
485
|
|
|
418
486
|
- `/agileflow:story:view` - View story details with contextual actions
|
|
@@ -566,6 +566,75 @@ OUTPUT
|
|
|
566
566
|
|
|
567
567
|
---
|
|
568
568
|
|
|
569
|
+
## Expected Output
|
|
570
|
+
|
|
571
|
+
### Success - List Templates
|
|
572
|
+
|
|
573
|
+
```
|
|
574
|
+
📋 Available Templates
|
|
575
|
+
══════════════════════════════════════════════════════════════
|
|
576
|
+
|
|
577
|
+
Built-in Templates (docs/00-meta/templates/):
|
|
578
|
+
• story-template.md User stories with AC
|
|
579
|
+
• epic-template.md Epics with milestones
|
|
580
|
+
• adr-template.md Architecture Decision Records
|
|
581
|
+
• agent-profile-template.md Agent profiles
|
|
582
|
+
• research-template.md Research notes
|
|
583
|
+
|
|
584
|
+
Custom Templates (docs/00-meta/templates/custom/):
|
|
585
|
+
• meeting-notes.md (created 2025-10-15)
|
|
586
|
+
• incident-report.md (created 2025-10-10)
|
|
587
|
+
• sprint-retro.md (created 2025-10-01)
|
|
588
|
+
|
|
589
|
+
Usage: /agileflow:template ACTION=use TYPE=custom NAME=meeting-notes
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
### Success - Create Template
|
|
593
|
+
|
|
594
|
+
```
|
|
595
|
+
📝 Creating Template: sprint-retro
|
|
596
|
+
══════════════════════════════════════════════════════════════
|
|
597
|
+
|
|
598
|
+
Template type: Sprint Retrospective
|
|
599
|
+
Variables detected: {{SPRINT_NUMBER}}, {{START_DATE}}, {{END_DATE}}, {{TEAM}}
|
|
600
|
+
|
|
601
|
+
Preview:
|
|
602
|
+
─────────────────────────────────────────
|
|
603
|
+
# Sprint {{SPRINT_NUMBER}} Retrospective
|
|
604
|
+
|
|
605
|
+
**Dates**: {{START_DATE}} to {{END_DATE}}
|
|
606
|
+
**Team**: {{TEAM}}
|
|
607
|
+
|
|
608
|
+
## What Went Well?
|
|
609
|
+
1.
|
|
610
|
+
|
|
611
|
+
## What Didn't Go Well?
|
|
612
|
+
1.
|
|
613
|
+
|
|
614
|
+
## Action Items
|
|
615
|
+
- [ ] {{ACTION_1}}
|
|
616
|
+
─────────────────────────────────────────
|
|
617
|
+
|
|
618
|
+
Save to: docs/00-meta/templates/custom/sprint-retro.md
|
|
619
|
+
Proceed? (YES/NO)
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
### Error - Template Not Found
|
|
623
|
+
|
|
624
|
+
```
|
|
625
|
+
❌ Template not found: my-template
|
|
626
|
+
|
|
627
|
+
Available templates:
|
|
628
|
+
• story-template
|
|
629
|
+
• epic-template
|
|
630
|
+
• adr-template
|
|
631
|
+
• meeting-notes (custom)
|
|
632
|
+
|
|
633
|
+
Create new: /agileflow:template ACTION=create NAME=my-template
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
---
|
|
637
|
+
|
|
569
638
|
## Related Commands
|
|
570
639
|
|
|
571
640
|
- `/agileflow:configure` - Manage AgileFlow features and hooks
|
|
@@ -638,6 +638,89 @@ OUTPUT
|
|
|
638
638
|
|
|
639
639
|
---
|
|
640
640
|
|
|
641
|
+
## Expected Output
|
|
642
|
+
|
|
643
|
+
### Success - Test Setup Complete
|
|
644
|
+
|
|
645
|
+
```
|
|
646
|
+
🧪 Test Infrastructure Setup
|
|
647
|
+
══════════════════════════════════════════════════════════════
|
|
648
|
+
|
|
649
|
+
Detected: Node.js (TypeScript)
|
|
650
|
+
Framework: Jest
|
|
651
|
+
|
|
652
|
+
✅ Installed dependencies:
|
|
653
|
+
• jest @types/jest ts-jest
|
|
654
|
+
• @testing-library/react @testing-library/jest-dom
|
|
655
|
+
|
|
656
|
+
✅ Created configuration:
|
|
657
|
+
• jest.config.js (coverage threshold: 70%)
|
|
658
|
+
|
|
659
|
+
✅ Created example tests:
|
|
660
|
+
• tests/unit/example.test.ts (2 tests)
|
|
661
|
+
• tests/integration/api.test.ts (2 tests)
|
|
662
|
+
|
|
663
|
+
✅ Updated package.json scripts:
|
|
664
|
+
• test, test:watch, test:coverage, test:unit, test:integration
|
|
665
|
+
|
|
666
|
+
✅ Updated CI workflow:
|
|
667
|
+
• .github/workflows/ci.yml (test job added)
|
|
668
|
+
|
|
669
|
+
✅ Created documentation:
|
|
670
|
+
• docs/02-practices/testing.md
|
|
671
|
+
|
|
672
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
673
|
+
Running verification...
|
|
674
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
675
|
+
|
|
676
|
+
$ npm test
|
|
677
|
+
PASS tests/unit/example.test.ts (4 tests)
|
|
678
|
+
PASS tests/integration/api.test.ts (2 tests)
|
|
679
|
+
|
|
680
|
+
Tests: 6 passed, 6 total
|
|
681
|
+
Time: 2.3s
|
|
682
|
+
|
|
683
|
+
✅ Test infrastructure ready!
|
|
684
|
+
|
|
685
|
+
Try running: npm test
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
### Error - Tests Already Exist
|
|
689
|
+
|
|
690
|
+
```
|
|
691
|
+
⚠️ Existing Test Setup Detected
|
|
692
|
+
══════════════════════════════════════════════════════════════
|
|
693
|
+
|
|
694
|
+
Found:
|
|
695
|
+
• jest.config.js (existing configuration)
|
|
696
|
+
• tests/ directory (14 test files)
|
|
697
|
+
• package.json test script
|
|
698
|
+
|
|
699
|
+
Current coverage: 72%
|
|
700
|
+
|
|
701
|
+
Options:
|
|
702
|
+
1. Skip setup (tests already configured)
|
|
703
|
+
2. Add missing components only
|
|
704
|
+
3. Reset and reconfigure
|
|
705
|
+
|
|
706
|
+
What would you like to do?
|
|
707
|
+
```
|
|
708
|
+
|
|
709
|
+
### Error - Unknown Project Type
|
|
710
|
+
|
|
711
|
+
```
|
|
712
|
+
❌ Could not detect project type
|
|
713
|
+
|
|
714
|
+
No package.json, requirements.txt, Gemfile, or go.mod found.
|
|
715
|
+
|
|
716
|
+
Please specify framework manually:
|
|
717
|
+
/agileflow:tests FRAMEWORK=jest
|
|
718
|
+
/agileflow:tests FRAMEWORK=pytest
|
|
719
|
+
/agileflow:tests FRAMEWORK=rspec
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
---
|
|
723
|
+
|
|
641
724
|
## Related Commands
|
|
642
725
|
|
|
643
726
|
- `/agileflow:configure` - Manage AgileFlow features and hooks
|