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.
Files changed (80) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +6 -6
  3. package/lib/colors.generated.js +117 -0
  4. package/lib/colors.js +59 -109
  5. package/lib/generator-factory.js +333 -0
  6. package/lib/path-utils.js +49 -0
  7. package/lib/session-registry.js +25 -15
  8. package/lib/smart-json-file.js +40 -32
  9. package/lib/state-machine.js +286 -0
  10. package/package.json +1 -1
  11. package/scripts/agileflow-configure.js +7 -6
  12. package/scripts/archive-completed-stories.sh +86 -11
  13. package/scripts/babysit-context-restore.js +89 -0
  14. package/scripts/claude-tmux.sh +186 -7
  15. package/scripts/damage-control/bash-tool-damage-control.js +11 -247
  16. package/scripts/damage-control/edit-tool-damage-control.js +9 -249
  17. package/scripts/damage-control/write-tool-damage-control.js +9 -244
  18. package/scripts/generate-colors.js +314 -0
  19. package/scripts/lib/colors.generated.sh +82 -0
  20. package/scripts/lib/colors.sh +10 -70
  21. package/scripts/lib/configure-features.js +401 -0
  22. package/scripts/lib/context-loader.js +181 -52
  23. package/scripts/precompact-context.sh +54 -17
  24. package/scripts/session-coordinator.sh +2 -2
  25. package/scripts/session-manager.js +677 -11
  26. package/src/core/agents/council-advocate.md +202 -0
  27. package/src/core/agents/council-analyst.md +248 -0
  28. package/src/core/agents/council-optimist.md +166 -0
  29. package/src/core/commands/audit.md +93 -0
  30. package/src/core/commands/auto.md +73 -0
  31. package/src/core/commands/babysit.md +169 -13
  32. package/src/core/commands/baseline.md +73 -0
  33. package/src/core/commands/batch.md +64 -0
  34. package/src/core/commands/blockers.md +60 -0
  35. package/src/core/commands/board.md +66 -0
  36. package/src/core/commands/choose.md +77 -0
  37. package/src/core/commands/ci.md +77 -0
  38. package/src/core/commands/compress.md +27 -1
  39. package/src/core/commands/configure.md +126 -10
  40. package/src/core/commands/council.md +591 -0
  41. package/src/core/commands/debt.md +72 -0
  42. package/src/core/commands/deploy.md +73 -0
  43. package/src/core/commands/deps.md +68 -0
  44. package/src/core/commands/docs.md +60 -0
  45. package/src/core/commands/feedback.md +68 -0
  46. package/src/core/commands/help.md +189 -3
  47. package/src/core/commands/ideate.md +219 -20
  48. package/src/core/commands/impact.md +74 -0
  49. package/src/core/commands/install.md +529 -0
  50. package/src/core/commands/maintain.md +558 -0
  51. package/src/core/commands/metrics.md +75 -0
  52. package/src/core/commands/multi-expert.md +74 -0
  53. package/src/core/commands/packages.md +69 -0
  54. package/src/core/commands/readme-sync.md +64 -0
  55. package/src/core/commands/research/analyze.md +285 -121
  56. package/src/core/commands/research/import.md +281 -109
  57. package/src/core/commands/retro.md +76 -0
  58. package/src/core/commands/review.md +72 -0
  59. package/src/core/commands/rlm.md +83 -0
  60. package/src/core/commands/rpi.md +90 -0
  61. package/src/core/commands/session/cleanup.md +214 -12
  62. package/src/core/commands/session/end.md +229 -17
  63. package/src/core/commands/sprint.md +72 -0
  64. package/src/core/commands/story-validate.md +68 -0
  65. package/src/core/commands/template.md +69 -0
  66. package/src/core/commands/tests.md +83 -0
  67. package/src/core/commands/update.md +59 -0
  68. package/src/core/commands/validate-expertise.md +76 -0
  69. package/src/core/commands/velocity.md +74 -0
  70. package/src/core/commands/verify.md +91 -0
  71. package/src/core/commands/whats-new.md +69 -0
  72. package/src/core/commands/workflow.md +88 -0
  73. package/src/core/council/sessions/.gitkeep +0 -0
  74. package/src/core/council/shared_reasoning.template.md +106 -0
  75. package/src/core/templates/command-documentation.md +187 -0
  76. package/tools/cli/commands/session.js +1171 -0
  77. package/tools/cli/commands/setup.js +2 -81
  78. package/tools/cli/installers/core/installer.js +0 -5
  79. package/tools/cli/installers/ide/claude-code.js +6 -0
  80. 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
- - "Merge flow: check uncommitted preview check conflicts → strategy → confirm → execute"
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
- Please commit your changes before merging:
148
- git add .
149
- git commit -m "your message"
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
- Or discard changes:
152
- git checkout -- .
269
+ Continue to **Merge Step 2**.
153
270
 
154
- Then run /agileflow:session:end again.
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 commit instructions EXIT
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 → block if dirty
553
- b. Preview commits/files
554
- c. Check conflicts → offer alternatives if conflicts
555
- d. Choose strategy (squash/merge)
556
- e. Confirm cleanup
557
- f. Execute integrate
558
- g. Show success with cd command
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 before anything
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
- - Merge flow: uncommitted preview conflicts → strategy → confirm → execute
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