appydave-tools 0.70.0 → 0.71.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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/commands/brainstorming-agent.md +227 -0
  3. data/.claude/commands/cli-test.md +251 -0
  4. data/.claude/commands/dev.md +234 -0
  5. data/.claude/commands/po.md +227 -0
  6. data/.claude/commands/progress.md +51 -0
  7. data/.claude/commands/uat.md +321 -0
  8. data/.rubocop.yml +9 -0
  9. data/AGENTS.md +43 -0
  10. data/CHANGELOG.md +12 -0
  11. data/CLAUDE.md +26 -3
  12. data/README.md +15 -0
  13. data/bin/dam +21 -1
  14. data/bin/jump.rb +29 -0
  15. data/bin/subtitle_processor.rb +54 -1
  16. data/bin/zsh_history.rb +846 -0
  17. data/docs/README.md +162 -69
  18. data/docs/architecture/cli/exe-bin-convention.md +434 -0
  19. data/docs/architecture/cli-patterns.md +631 -0
  20. data/docs/architecture/gpt-context/gpt-context-architecture.md +325 -0
  21. data/docs/architecture/gpt-context/gpt-context-implementation-guide.md +419 -0
  22. data/docs/architecture/gpt-context/gpt-context-vision.md +179 -0
  23. data/docs/architecture/testing/testing-patterns.md +762 -0
  24. data/docs/backlog.md +120 -0
  25. data/docs/cli-tests/FR-3-jump-location-tool.md +515 -0
  26. data/docs/specs/fr-002-gpt-context-help-system.md +265 -0
  27. data/docs/specs/fr-003-jump-location-tool.md +779 -0
  28. data/docs/specs/zsh-history-tool.md +820 -0
  29. data/docs/uat/FR-3-jump-location-tool.md +741 -0
  30. data/exe/jump +11 -0
  31. data/exe/{subtitle_manager → subtitle_processor} +1 -1
  32. data/exe/zsh_history +11 -0
  33. data/lib/appydave/tools/configuration/openai.rb +1 -1
  34. data/lib/appydave/tools/dam/file_helper.rb +28 -0
  35. data/lib/appydave/tools/dam/project_listing.rb +4 -30
  36. data/lib/appydave/tools/dam/s3_operations.rb +2 -1
  37. data/lib/appydave/tools/dam/ssd_status.rb +226 -0
  38. data/lib/appydave/tools/dam/status.rb +3 -51
  39. data/lib/appydave/tools/jump/cli.rb +561 -0
  40. data/lib/appydave/tools/jump/commands/add.rb +52 -0
  41. data/lib/appydave/tools/jump/commands/base.rb +43 -0
  42. data/lib/appydave/tools/jump/commands/generate.rb +153 -0
  43. data/lib/appydave/tools/jump/commands/remove.rb +58 -0
  44. data/lib/appydave/tools/jump/commands/report.rb +214 -0
  45. data/lib/appydave/tools/jump/commands/update.rb +42 -0
  46. data/lib/appydave/tools/jump/commands/validate.rb +54 -0
  47. data/lib/appydave/tools/jump/config.rb +233 -0
  48. data/lib/appydave/tools/jump/formatters/base.rb +48 -0
  49. data/lib/appydave/tools/jump/formatters/json_formatter.rb +19 -0
  50. data/lib/appydave/tools/jump/formatters/paths_formatter.rb +21 -0
  51. data/lib/appydave/tools/jump/formatters/table_formatter.rb +183 -0
  52. data/lib/appydave/tools/jump/location.rb +134 -0
  53. data/lib/appydave/tools/jump/path_validator.rb +47 -0
  54. data/lib/appydave/tools/jump/search.rb +230 -0
  55. data/lib/appydave/tools/subtitle_processor/transcript.rb +51 -0
  56. data/lib/appydave/tools/version.rb +1 -1
  57. data/lib/appydave/tools/zsh_history/command.rb +37 -0
  58. data/lib/appydave/tools/zsh_history/config.rb +235 -0
  59. data/lib/appydave/tools/zsh_history/filter.rb +184 -0
  60. data/lib/appydave/tools/zsh_history/formatter.rb +75 -0
  61. data/lib/appydave/tools/zsh_history/parser.rb +101 -0
  62. data/lib/appydave/tools.rb +25 -0
  63. data/package.json +1 -1
  64. metadata +51 -4
@@ -0,0 +1,741 @@
1
+ # UAT: FR-3 - Jump Location Tool
2
+
3
+ **Spec:** `docs/specs/fr-003-jump-location-tool.md`
4
+ **Date:** 2025-12-14
5
+ **Tester:** David
6
+ **Status:** In Progress (10/28 complete)
7
+
8
+ ## Prerequisites
9
+
10
+ Before starting, ensure:
11
+
12
+ 1. [x] Dependencies installed: `bundle install`
13
+ 2. [x] Backup any existing `~/.config/appydave/locations.json` (if it exists)
14
+ 3. [x] Note: Tests will create/modify `locations.json` - use cleanup section after testing
15
+
16
+ ## How to Use This Plan
17
+
18
+ 1. Run each command in your terminal
19
+ 2. Compare output to "Expected" description
20
+ 3. Mark the checkbox: `[x]` for pass, `[ ]` for fail
21
+ 4. Add notes if behavior differs from expected
22
+ 5. Complete the Summary section when done
23
+
24
+ ---
25
+
26
+ ## Test 1: Help and Info
27
+
28
+ ### Test 1.1: Main help
29
+
30
+ **What to verify:** Help displays all available commands
31
+
32
+ **Command:**
33
+ ```bash
34
+ ruby bin/jump.rb --help
35
+ ```
36
+
37
+ **Expected:**
38
+ - Shows usage information
39
+ - Lists all commands: search, get, list, add, update, remove, validate, report, generate, info
40
+ - Shows global options (--format, --help)
41
+
42
+ **Result:** [x] Pass / [ ] Fail
43
+ **Notes:**
44
+
45
+ ---
46
+
47
+ ### Test 1.2: Command-specific help
48
+
49
+ **What to verify:** Each command has detailed help
50
+
51
+ **Command:**
52
+ ```bash
53
+ ruby bin/jump.rb search --help
54
+ ```
55
+
56
+ **Expected:**
57
+ - Shows search-specific usage
58
+ - Documents search terms argument
59
+ - Shows format option
60
+
61
+ **Result:** [x] Pass / [ ] Fail
62
+ **Notes:**
63
+
64
+ ---
65
+
66
+ ### Test 1.3: Info command
67
+
68
+ **What to verify:** Info shows config location and stats
69
+
70
+ **Command:**
71
+ ```bash
72
+ ruby bin/jump.rb info
73
+ ```
74
+
75
+ **Expected:**
76
+ - Shows config file path
77
+ - Shows location count
78
+ - Shows last validated timestamp (if available)
79
+
80
+ **Result:** [x] Pass / [ ] Fail
81
+ **Notes:** Bug found and fixed - was showing "No locations found" instead of config info. Fix applied to TableFormatter.
82
+
83
+ ---
84
+
85
+ ## Test 2: CRUD Operations
86
+
87
+ ### Test 2.1: Add a location (minimal)
88
+
89
+ **What to verify:** Can add location with only required fields
90
+
91
+ **Command:**
92
+ ```bash
93
+ ruby bin/jump.rb add --key test-minimal --path ~/dev --format json
94
+ ```
95
+
96
+ **Expected:**
97
+ - Returns JSON with `success: true`
98
+ - Location includes key and path
99
+ - `jump` field auto-generated as `jtest-minimal`
100
+
101
+ **Result:** [x] Pass / [ ] Fail
102
+ **Notes:**
103
+
104
+ ---
105
+
106
+ ### Test 2.2: Add a location (all fields)
107
+
108
+ **What to verify:** Can add location with all metadata fields
109
+
110
+ **Command:**
111
+ ```bash
112
+ ruby bin/jump.rb add --key test-full --path ~/dev/test --brand appydave --type tool --tags ruby,cli,test --description "Full test location" --format json
113
+ ```
114
+
115
+ **Expected:**
116
+ - Returns JSON with `success: true`
117
+ - Location object includes all provided fields
118
+ - `jump` field auto-generated as `jtest-full`
119
+
120
+ **Result:** [x] Pass / [ ] Fail
121
+ **Notes:**
122
+
123
+ ---
124
+
125
+ ### Test 2.3: Add duplicate key (error)
126
+
127
+ **What to verify:** Cannot add location with duplicate key
128
+
129
+ **Command:**
130
+ ```bash
131
+ ruby bin/jump.rb add --key test-minimal --path ~/other --format json
132
+ ```
133
+
134
+ **Expected:**
135
+ - Returns JSON with `success: false`
136
+ - Error message indicates duplicate key
137
+ - Exit code is non-zero
138
+
139
+ **Result:** [x] Pass / [ ] Fail
140
+ **Notes:**
141
+
142
+ ---
143
+
144
+ ### Test 2.4: Get by exact key
145
+
146
+ **What to verify:** Can retrieve location by key
147
+
148
+ **Command:**
149
+ ```bash
150
+ ruby bin/jump.rb get test-full --format json
151
+ ```
152
+
153
+ **Expected:**
154
+ - Returns JSON with `success: true`
155
+ - Contains single result with all fields from test 2.2
156
+ - Includes score field
157
+
158
+ **Result:** [x] Pass / [ ] Fail
159
+ **Notes:**
160
+
161
+ ---
162
+
163
+ ### Test 2.5: Get non-existent key
164
+
165
+ **What to verify:** Error with suggestions for unknown key
166
+
167
+ **Command:**
168
+ ```bash
169
+ ruby bin/jump.rb get nonexistent-key --format json
170
+ ```
171
+
172
+ **Expected:**
173
+ - Returns JSON with `success: false`
174
+ - Error code is `NOT_FOUND`
175
+ - May include `suggestion` field with similar keys
176
+
177
+ **Result:** [x] Pass / [ ] Fail
178
+ **Notes:**
179
+
180
+ ---
181
+
182
+ ### Test 2.6: Update location
183
+
184
+ **What to verify:** Can modify existing location fields
185
+
186
+ **Command:**
187
+ ```bash
188
+ ruby bin/jump.rb update test-minimal --description "Updated description" --tags updated,modified --format json
189
+ ```
190
+
191
+ **Expected:**
192
+ - Returns JSON with `success: true`
193
+ - Location now has new description and tags
194
+ - Other fields unchanged
195
+
196
+ **Result:** [x] Pass / [ ] Fail
197
+ **Notes:**
198
+
199
+ ---
200
+
201
+ ### Test 2.7: List all locations
202
+
203
+ **What to verify:** List shows all added locations
204
+
205
+ **Command:**
206
+ ```bash
207
+ ruby bin/jump.rb list --format table
208
+ ```
209
+
210
+ **Expected:**
211
+ - Table includes `test-minimal` and `test-full` rows
212
+ - Shows key, jump alias, type, brand, description columns
213
+ - Colored/formatted output
214
+
215
+ **Result:** [x] Pass / [ ] Fail
216
+ **Notes:**
217
+
218
+ ---
219
+
220
+ ### Test 2.8: Remove location
221
+
222
+ **What to verify:** Can remove location with --force
223
+
224
+ **Command:**
225
+ ```bash
226
+ ruby bin/jump.rb remove test-minimal --force --format json
227
+ ```
228
+
229
+ **Expected:**
230
+ - Returns JSON with `success: true`
231
+ - Location no longer appears in `jump list`
232
+
233
+ **Result:** [ ] Pass / [ ] Fail
234
+ **Notes:**
235
+
236
+ ---
237
+
238
+ ## Test 3: Search Functionality
239
+
240
+ ### Test 3.1: Search by keyword
241
+
242
+ **What to verify:** Fuzzy search finds matches
243
+
244
+ **Command:**
245
+ ```bash
246
+ ruby bin/jump.rb search test --format json
247
+ ```
248
+
249
+ **Expected:**
250
+ - Returns matches containing "test"
251
+ - Results include `test-full` (added earlier)
252
+ - Each result has a `score` field
253
+
254
+ **Result:** [ ] Pass / [ ] Fail
255
+ **Notes:**
256
+
257
+ ---
258
+
259
+ ### Test 3.2: Search by multiple terms
260
+
261
+ **What to verify:** Multiple terms narrow results
262
+
263
+ **Command:**
264
+ ```bash
265
+ ruby bin/jump.rb search ruby tool --format json
266
+ ```
267
+
268
+ **Expected:**
269
+ - Returns matches containing both "ruby" AND "tool"
270
+ - Higher scores for better matches
271
+ - Results sorted by score (highest first)
272
+
273
+ **Result:** [ ] Pass / [ ] Fail
274
+ **Notes:**
275
+
276
+ ---
277
+
278
+ ### Test 3.3: Search with no matches
279
+
280
+ **What to verify:** Empty search returns no results gracefully
281
+
282
+ **Command:**
283
+ ```bash
284
+ ruby bin/jump.rb search zzzznonexistent --format json
285
+ ```
286
+
287
+ **Expected:**
288
+ - Returns JSON with `success: true`
289
+ - `count: 0`
290
+ - Empty `results` array
291
+
292
+ **Result:** [ ] Pass / [ ] Fail
293
+ **Notes:**
294
+
295
+ ---
296
+
297
+ ### Test 3.4: Search with table output
298
+
299
+ **What to verify:** Table format is human-readable
300
+
301
+ **Command:**
302
+ ```bash
303
+ ruby bin/jump.rb search test --format table
304
+ ```
305
+
306
+ **Expected:**
307
+ - Pretty formatted table
308
+ - Columns properly aligned
309
+ - May include colors (terminal-dependent)
310
+
311
+ **Result:** [ ] Pass / [ ] Fail
312
+ **Notes:**
313
+
314
+ ---
315
+
316
+ ### Test 3.5: Search with paths output
317
+
318
+ **What to verify:** Paths format returns one path per line
319
+
320
+ **Command:**
321
+ ```bash
322
+ ruby bin/jump.rb search test --format paths
323
+ ```
324
+
325
+ **Expected:**
326
+ - One path per line (no table formatting)
327
+ - Paths are expanded (no `~`)
328
+ - Suitable for piping to other commands
329
+
330
+ **Result:** [ ] Pass / [ ] Fail
331
+ **Notes:**
332
+
333
+ ---
334
+
335
+ ## Test 4: Validation
336
+
337
+ ### Test 4.1: Validate existing paths
338
+
339
+ **What to verify:** Validation reports path status
340
+
341
+ **Command:**
342
+ ```bash
343
+ ruby bin/jump.rb validate --format json
344
+ ```
345
+
346
+ **Expected:**
347
+ - Returns validation results for all locations
348
+ - Each location shows `valid: true` or `valid: false`
349
+ - Reports which paths don't exist
350
+
351
+ **Result:** [ ] Pass / [ ] Fail
352
+ **Notes:**
353
+
354
+ ---
355
+
356
+ ### Test 4.2: Validate specific key
357
+
358
+ **What to verify:** Can validate single location
359
+
360
+ **Command:**
361
+ ```bash
362
+ ruby bin/jump.rb validate test-full --format json
363
+ ```
364
+
365
+ **Expected:**
366
+ - Returns validation for only `test-full`
367
+ - Shows whether `~/dev/test` path exists
368
+
369
+ **Result:** [ ] Pass / [ ] Fail
370
+ **Notes:**
371
+
372
+ ---
373
+
374
+ ## Test 5: Reports
375
+
376
+ ### Test 5.1: Report brands
377
+
378
+ **What to verify:** Shows brands with location counts
379
+
380
+ **Command:**
381
+ ```bash
382
+ ruby bin/jump.rb report brands --format table
383
+ ```
384
+
385
+ **Expected:**
386
+ - Lists brands (e.g., "appydave")
387
+ - Shows count of locations per brand
388
+ - Table formatted output
389
+
390
+ **Result:** [ ] Pass / [ ] Fail
391
+ **Notes:**
392
+
393
+ ---
394
+
395
+ ### Test 5.2: Report types
396
+
397
+ **What to verify:** Shows types with location counts
398
+
399
+ **Command:**
400
+ ```bash
401
+ ruby bin/jump.rb report types --format table
402
+ ```
403
+
404
+ **Expected:**
405
+ - Lists types (e.g., "tool")
406
+ - Shows count of locations per type
407
+
408
+ **Result:** [ ] Pass / [ ] Fail
409
+ **Notes:**
410
+
411
+ ---
412
+
413
+ ### Test 5.3: Report tags
414
+
415
+ **What to verify:** Shows all tags with counts
416
+
417
+ **Command:**
418
+ ```bash
419
+ ruby bin/jump.rb report tags --format json
420
+ ```
421
+
422
+ **Expected:**
423
+ - Lists all unique tags
424
+ - Shows count of locations per tag
425
+ - JSON format with structured data
426
+
427
+ **Result:** [ ] Pass / [ ] Fail
428
+ **Notes:**
429
+
430
+ ---
431
+
432
+ ### Test 5.4: Report by-brand
433
+
434
+ **What to verify:** Groups locations by brand
435
+
436
+ **Command:**
437
+ ```bash
438
+ ruby bin/jump.rb report by-brand --format table
439
+ ```
440
+
441
+ **Expected:**
442
+ - Locations grouped under brand headers
443
+ - Shows all locations for each brand
444
+
445
+ **Result:** [ ] Pass / [ ] Fail
446
+ **Notes:**
447
+
448
+ ---
449
+
450
+ ### Test 5.5: Report by-brand filtered
451
+
452
+ **What to verify:** Can filter to specific brand
453
+
454
+ **Command:**
455
+ ```bash
456
+ ruby bin/jump.rb report by-brand appydave --format json
457
+ ```
458
+
459
+ **Expected:**
460
+ - Only shows locations for "appydave" brand
461
+ - JSON format with filtered results
462
+
463
+ **Result:** [ ] Pass / [ ] Fail
464
+ **Notes:**
465
+
466
+ ---
467
+
468
+ ### Test 5.6: Report summary
469
+
470
+ **What to verify:** Overview of all data
471
+
472
+ **Command:**
473
+ ```bash
474
+ ruby bin/jump.rb report summary --format table
475
+ ```
476
+
477
+ **Expected:**
478
+ - Total location count
479
+ - Counts by brand, type, etc.
480
+ - Overview statistics
481
+
482
+ **Result:** [ ] Pass / [ ] Fail
483
+ **Notes:**
484
+
485
+ ---
486
+
487
+ ## Test 6: Generation
488
+
489
+ ### Test 6.1: Generate aliases (stdout)
490
+
491
+ **What to verify:** Generates shell alias format
492
+
493
+ **Command:**
494
+ ```bash
495
+ ruby bin/jump.rb generate aliases
496
+ ```
497
+
498
+ **Expected:**
499
+ - Outputs shell alias lines
500
+ - Format: `alias jtest-full="cd /expanded/path"`
501
+ - One alias per line
502
+
503
+ **Result:** [ ] Pass / [ ] Fail
504
+ **Notes:**
505
+
506
+ ---
507
+
508
+ ### Test 6.2: Generate aliases (file output)
509
+
510
+ **What to verify:** Can write to file
511
+
512
+ **Command:**
513
+ ```bash
514
+ ruby bin/jump.rb generate aliases --output /tmp/test-aliases.zsh && cat /tmp/test-aliases.zsh
515
+ ```
516
+
517
+ **Expected:**
518
+ - Creates file at specified path
519
+ - File contains alias definitions
520
+ - No output to stdout (besides cat output)
521
+
522
+ **Result:** [ ] Pass / [ ] Fail
523
+ **Notes:**
524
+
525
+ ---
526
+
527
+ ### Test 6.3: Generate help
528
+
529
+ **What to verify:** Generates help content for fzf
530
+
531
+ **Command:**
532
+ ```bash
533
+ ruby bin/jump.rb generate help
534
+ ```
535
+
536
+ **Expected:**
537
+ - Outputs help-formatted content
538
+ - Each location on one line
539
+ - Format suitable for fzf search
540
+
541
+ **Result:** [ ] Pass / [ ] Fail
542
+ **Notes:**
543
+
544
+ ---
545
+
546
+ ## Test 7: Output Formats
547
+
548
+ ### Test 7.1: JSON format structure
549
+
550
+ **What to verify:** JSON follows spec structure
551
+
552
+ **Command:**
553
+ ```bash
554
+ ruby bin/jump.rb list --format json | head -20
555
+ ```
556
+
557
+ **Expected:**
558
+ - Valid JSON
559
+ - Has `success`, `count`, `results` fields
560
+ - Each result has `key`, `path`, `jump` fields
561
+
562
+ **Result:** [ ] Pass / [ ] Fail
563
+ **Notes:**
564
+
565
+ ---
566
+
567
+ ### Test 7.2: Table format readability
568
+
569
+ **What to verify:** Table is well-formatted
570
+
571
+ **Command:**
572
+ ```bash
573
+ ruby bin/jump.rb list --format table
574
+ ```
575
+
576
+ **Expected:**
577
+ - Columns aligned
578
+ - Headers visible
579
+ - Data rows properly formatted
580
+
581
+ **Result:** [ ] Pass / [ ] Fail
582
+ **Notes:**
583
+
584
+ ---
585
+
586
+ ## Test 8: Error Handling
587
+
588
+ ### Test 8.1: Invalid key format
589
+
590
+ **What to verify:** Rejects invalid key characters
591
+
592
+ **Command:**
593
+ ```bash
594
+ ruby bin/jump.rb add --key "INVALID KEY!" --path ~/dev --format json
595
+ ```
596
+
597
+ **Expected:**
598
+ - Returns JSON with `success: false`
599
+ - Error message explains key format requirements
600
+ - Exit code is non-zero (2 for invalid input)
601
+
602
+ **Result:** [ ] Pass / [ ] Fail
603
+ **Notes:**
604
+
605
+ ---
606
+
607
+ ### Test 8.2: Missing required argument
608
+
609
+ **What to verify:** Clear error for missing --path
610
+
611
+ **Command:**
612
+ ```bash
613
+ ruby bin/jump.rb add --key test-missing-path --format json
614
+ ```
615
+
616
+ **Expected:**
617
+ - Returns error (JSON or text)
618
+ - Indicates path is required
619
+
620
+ **Result:** [ ] Pass / [ ] Fail
621
+ **Notes:**
622
+
623
+ ---
624
+
625
+ ### Test 8.3: Invalid path format
626
+
627
+ **What to verify:** Rejects paths without / or ~
628
+
629
+ **Command:**
630
+ ```bash
631
+ ruby bin/jump.rb add --key test-bad-path --path "relative/path" --format json
632
+ ```
633
+
634
+ **Expected:**
635
+ - Returns JSON with `success: false`
636
+ - Error explains path must start with ~ or /
637
+
638
+ **Result:** [ ] Pass / [ ] Fail
639
+ **Notes:**
640
+
641
+ ---
642
+
643
+ ## Test 9: Exit Codes
644
+
645
+ ### Test 9.1: Success exit code
646
+
647
+ **What to verify:** Success returns 0
648
+
649
+ **Command:**
650
+ ```bash
651
+ ruby bin/jump.rb list --format json; echo "Exit code: $?"
652
+ ```
653
+
654
+ **Expected:**
655
+ - Exit code: 0
656
+
657
+ **Result:** [ ] Pass / [ ] Fail
658
+ **Notes:**
659
+
660
+ ---
661
+
662
+ ### Test 9.2: Not found exit code
663
+
664
+ **What to verify:** Not found returns 1
665
+
666
+ **Command:**
667
+ ```bash
668
+ ruby bin/jump.rb get nonexistent123 --format json; echo "Exit code: $?"
669
+ ```
670
+
671
+ **Expected:**
672
+ - Exit code: 1
673
+
674
+ **Result:** [ ] Pass / [ ] Fail
675
+ **Notes:**
676
+
677
+ ---
678
+
679
+ ### Test 9.3: Invalid input exit code
680
+
681
+ **What to verify:** Invalid input returns 2
682
+
683
+ **Command:**
684
+ ```bash
685
+ ruby bin/jump.rb add --key "BAD!" --path ~/dev --format json; echo "Exit code: $?"
686
+ ```
687
+
688
+ **Expected:**
689
+ - Exit code: 2
690
+
691
+ **Result:** [ ] Pass / [ ] Fail
692
+ **Notes:**
693
+
694
+ ---
695
+
696
+ ## Cleanup
697
+
698
+ After testing, remove test data:
699
+
700
+ ```bash
701
+ # Remove test locations
702
+ ruby bin/jump.rb remove test-full --force 2>/dev/null
703
+ ruby bin/jump.rb remove test-minimal --force 2>/dev/null
704
+
705
+ # Remove generated test file
706
+ rm -f /tmp/test-aliases.zsh
707
+
708
+ # Verify cleanup
709
+ ruby bin/jump.rb list --format table
710
+ ```
711
+
712
+ ---
713
+
714
+ ## Summary
715
+
716
+ **Date completed:**
717
+ **Passed:** __/28
718
+ **Failed:** __/28
719
+
720
+ ### Issues Found
721
+
722
+ [Describe any failures or unexpected behavior]
723
+
724
+ ### UX Observations
725
+
726
+ [Note any friction, confusing output, or suggestions - even for passing tests]
727
+
728
+ ### Exit Codes Verified
729
+
730
+ | Code | Meaning | Tested |
731
+ |------|---------|--------|
732
+ | 0 | Success | [ ] |
733
+ | 1 | Not found | [ ] |
734
+ | 2 | Invalid input | [ ] |
735
+ | 3 | Config error | [ ] (not directly tested) |
736
+ | 4 | Path not found | [ ] (covered by validate) |
737
+
738
+ ## Verdict
739
+
740
+ [ ] Ready to ship
741
+ [ ] Needs rework - see issues above