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.
- checksums.yaml +4 -4
- data/.claude/commands/brainstorming-agent.md +227 -0
- data/.claude/commands/cli-test.md +251 -0
- data/.claude/commands/dev.md +234 -0
- data/.claude/commands/po.md +227 -0
- data/.claude/commands/progress.md +51 -0
- data/.claude/commands/uat.md +321 -0
- data/.rubocop.yml +9 -0
- data/AGENTS.md +43 -0
- data/CHANGELOG.md +12 -0
- data/CLAUDE.md +26 -3
- data/README.md +15 -0
- data/bin/dam +21 -1
- data/bin/jump.rb +29 -0
- data/bin/subtitle_processor.rb +54 -1
- data/bin/zsh_history.rb +846 -0
- data/docs/README.md +162 -69
- data/docs/architecture/cli/exe-bin-convention.md +434 -0
- data/docs/architecture/cli-patterns.md +631 -0
- data/docs/architecture/gpt-context/gpt-context-architecture.md +325 -0
- data/docs/architecture/gpt-context/gpt-context-implementation-guide.md +419 -0
- data/docs/architecture/gpt-context/gpt-context-vision.md +179 -0
- data/docs/architecture/testing/testing-patterns.md +762 -0
- data/docs/backlog.md +120 -0
- data/docs/cli-tests/FR-3-jump-location-tool.md +515 -0
- data/docs/specs/fr-002-gpt-context-help-system.md +265 -0
- data/docs/specs/fr-003-jump-location-tool.md +779 -0
- data/docs/specs/zsh-history-tool.md +820 -0
- data/docs/uat/FR-3-jump-location-tool.md +741 -0
- data/exe/jump +11 -0
- data/exe/{subtitle_manager → subtitle_processor} +1 -1
- data/exe/zsh_history +11 -0
- data/lib/appydave/tools/configuration/openai.rb +1 -1
- data/lib/appydave/tools/dam/file_helper.rb +28 -0
- data/lib/appydave/tools/dam/project_listing.rb +4 -30
- data/lib/appydave/tools/dam/s3_operations.rb +2 -1
- data/lib/appydave/tools/dam/ssd_status.rb +226 -0
- data/lib/appydave/tools/dam/status.rb +3 -51
- data/lib/appydave/tools/jump/cli.rb +561 -0
- data/lib/appydave/tools/jump/commands/add.rb +52 -0
- data/lib/appydave/tools/jump/commands/base.rb +43 -0
- data/lib/appydave/tools/jump/commands/generate.rb +153 -0
- data/lib/appydave/tools/jump/commands/remove.rb +58 -0
- data/lib/appydave/tools/jump/commands/report.rb +214 -0
- data/lib/appydave/tools/jump/commands/update.rb +42 -0
- data/lib/appydave/tools/jump/commands/validate.rb +54 -0
- data/lib/appydave/tools/jump/config.rb +233 -0
- data/lib/appydave/tools/jump/formatters/base.rb +48 -0
- data/lib/appydave/tools/jump/formatters/json_formatter.rb +19 -0
- data/lib/appydave/tools/jump/formatters/paths_formatter.rb +21 -0
- data/lib/appydave/tools/jump/formatters/table_formatter.rb +183 -0
- data/lib/appydave/tools/jump/location.rb +134 -0
- data/lib/appydave/tools/jump/path_validator.rb +47 -0
- data/lib/appydave/tools/jump/search.rb +230 -0
- data/lib/appydave/tools/subtitle_processor/transcript.rb +51 -0
- data/lib/appydave/tools/version.rb +1 -1
- data/lib/appydave/tools/zsh_history/command.rb +37 -0
- data/lib/appydave/tools/zsh_history/config.rb +235 -0
- data/lib/appydave/tools/zsh_history/filter.rb +184 -0
- data/lib/appydave/tools/zsh_history/formatter.rb +75 -0
- data/lib/appydave/tools/zsh_history/parser.rb +101 -0
- data/lib/appydave/tools.rb +25 -0
- data/package.json +1 -1
- 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
|