appydave-tools 0.68.0 → 0.69.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a0e6357f497b70aa2ce6feb5932babafb0db836b80147830ae772347fae304b
4
- data.tar.gz: 4fda87967c00f84ce106eb26b73cfb7badc702e0f4d1c001cd80928acfe54e61
3
+ metadata.gz: a24c15bc4b23513bde2a68019a63077e627f4a32908dedc8c2af882892809984
4
+ data.tar.gz: 8c77419c2ce675ac8340ee450a02f7e530d2c59dbbd06c7573e5ec27a8069d6e
5
5
  SHA512:
6
- metadata.gz: 968479f3a3093c46abfbdef6f095a4504213b520162892e29e3f39bd2be68c7d23cd0bf2e80cadc7adedecc717d636c6f467d3459f762a213d61a31cb43b165d
7
- data.tar.gz: 301b0602883535496ba915f8f3b71d39153f45d6a9e1f91a66046da094a7507a1ce411f7a084ad8cf92d89eb77e959acc24a92a67b30bf3ca1407eff726b827a
6
+ metadata.gz: cb2f7b0f3828607d232a98164058fb1d5c01a90782dcb110a9ac34ed884035482503ae97a57f8ae8850bd23857475fb74fb3788ee48783170c9c6090cdec83ea
7
+ data.tar.gz: f9cb457726c269bdeee39113683ac60f75c0931425bf7dbd79539e7c4ca784b55d2ef3ab9337ca377d01086a58f965f97bb7fbc12bbbfdf87b91dde10dcde47d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ # [0.68.0](https://github.com/appydave/appydave-tools/compare/v0.67.0...v0.68.0) (2025-11-22)
2
+
3
+
4
+ ### Features
5
+
6
+ * add fuzzy matching for brand typos with 'Did you mean?' suggestions ([e95db43](https://github.com/appydave/appydave-tools/commit/e95db4398351d91dde1cc6af3c6e2f82aa2e420c))
7
+ * add S3 staging with 3-state model (↑ upload, ↓ download, ✓ synced) ([833057f](https://github.com/appydave/appydave-tools/commit/833057f65b3f6434aff20d1956733f4724ac9b35))
8
+ * add S3 upload/download timestamps to project list (--detailed view) ([4228b51](https://github.com/appydave/appydave-tools/commit/4228b51e85e209548a7a9de210877fe4f7fba94e))
9
+
1
10
  # [0.67.0](https://github.com/appydave/appydave-tools/compare/v0.66.0...v0.67.0) (2025-11-22)
2
11
 
3
12
 
@@ -0,0 +1,341 @@
1
+ # User Acceptance Testing Report
2
+ **Project:** AppyDave Tools - DAM (Digital Asset Management)
3
+ **Date:** 2025-01-22
4
+ **Tester:** Claude Code (Automated UAT)
5
+ **Commit Range:** 9e49668 (baseline) → 4228b51 (current) + fixes
6
+
7
+ ---
8
+
9
+ ## Executive Summary
10
+
11
+ **Status:** ✅ **PASSED** - All 20 tests passed
12
+ **Test Duration:** ~2 hours (including 4 issue fixes)
13
+ **Overall Result:** DAM CLI is production-ready with all core features working correctly
14
+
15
+ ### Key Findings
16
+ - ✅ All core functionality preserved and working
17
+ - ✅ All new features implemented and functional
18
+ - ✅ Edge cases handled gracefully
19
+ - ✅ Performance acceptable (< 30s for largest operations)
20
+ - ⚠️ 4 formatting/feature issues found and **fixed during testing**
21
+
22
+ ---
23
+
24
+ ## Test Results Summary
25
+
26
+ | Suite | Tests | Passed | Failed | Notes |
27
+ |-------|-------|--------|--------|-------|
28
+ | **Suite 1: Core Functionality** | 6 | 6 | 0 | All baseline features working |
29
+ | **Suite 2: New Features** | 7 | 7 | 0 | New features functional (4 fixes applied) |
30
+ | **Suite 3: Edge Cases** | 4 | 4 | 0 | Error handling robust |
31
+ | **Suite 4: Performance** | 3 | 3 | 0 | Performance acceptable |
32
+ | **TOTAL** | **20** | **20** | **0** | **100% pass rate** |
33
+
34
+ ---
35
+
36
+ ## Suite 1: Core Functionality (6 tests)
37
+
38
+ ### Test 1: Brand Listing ✅ PASSED
39
+ **Command:** `bin/dam list`
40
+ **Expected:** List all brands with project counts, sizes, git status
41
+ **Result:** ✅ Shows 6 brands (appydave, aitldr, joy, kiros, ss, voz) with accurate counts
42
+
43
+ ### Test 2: Invalid Brand Name ✅ PASSED
44
+ **Command:** `bin/dam list invalidbrand`
45
+ **Expected:** Error message with available brands
46
+ **Result:** ✅ Clear error with full brand list
47
+
48
+ ### Test 3: Project Listing for Brand ✅ PASSED
49
+ **Command:** `bin/dam list appydave`
50
+ **Expected:** List all projects for AppyDave brand
51
+ **Result:** ✅ Shows 13 projects (b59-b71) with sizes, ages, git/S3 status
52
+
53
+ ### Test 4: Project Pattern Matching ✅ PASSED
54
+ **Command:** `bin/dam list appydave 'b6*'`
55
+ **Expected:** Show only projects matching b6* pattern
56
+ **Result:** ✅ Shows 11 projects (b60-b71), excludes b59
57
+
58
+ ### Test 5: S3 Sync Status ✅ PASSED
59
+ **Command:** `bin/dam s3-status appydave b65`
60
+ **Expected:** Show S3 sync status with file comparison
61
+ **Result:** ✅ Shows synced status, file counts, sizes
62
+
63
+ ### Test 6: Git Status Display ✅ PASSED
64
+ **Command:** `bin/dam list appydave | grep GIT`
65
+ **Expected:** Git status column shows clean/changes status
66
+ **Result:** ✅ All projects show "✓ clean" status
67
+
68
+ ---
69
+
70
+ ## Suite 2: New Features (7 tests)
71
+
72
+ ### Test 7: Brand Listing with Detailed View ✅ PASSED (1 fix applied)
73
+ **Command:** `bin/dam list --detailed`
74
+ **Expected:** Extended brand view with workflow and active project columns
75
+ **Result:** ✅ Shows detailed brand information
76
+ **Issue Fixed:** KEY column too narrow (12 chars) for "beauty-and-joy" (14 chars)
77
+ **Fix Applied:** Increased KEY column from 12 to 15 characters
78
+
79
+ ### Test 8: Detailed Project Listing ✅ PASSED (2 fixes applied)
80
+ **Command:** `bin/dam list appydave --detailed`
81
+ **Expected:** Extended project view with PATH, HEAVY/LIGHT files, SSD backup, S3 timestamps
82
+ **Result:** ✅ Shows all additional columns with proper alignment
83
+ **Issues Fixed:**
84
+ 1. PATH column too narrow (35 chars) for long paths (65 chars)
85
+ 2. Header alignment using hardcoded strings instead of format()
86
+
87
+ **Fixes Applied:**
88
+ 1. Increased PATH column from 35 to 65 characters
89
+ 2. Applied format() pattern to headers (3 locations):
90
+ - Brand listing default view
91
+ - Project listing default view
92
+ - Project listing detailed view
93
+
94
+ **Pattern Improvement:**
95
+ ```ruby
96
+ # Before: Hardcoded header string
97
+ puts 'PROJECT SIZE AGE ...'
98
+
99
+ # After: Headers use same format as data
100
+ puts format('%-45s %12s %15s ...', 'PROJECT', 'SIZE', 'AGE', ...)
101
+ ```
102
+
103
+ This guarantees headers and data always align perfectly.
104
+
105
+ ### Test 9: S3 Auto-Detection from PWD ✅ PASSED
106
+ **Command:** `cd ~/dev/video-projects/v-appydave/b65 && bin/dam s3-status`
107
+ **Expected:** Auto-detect brand and project from current directory
108
+ **Result:** ✅ Correctly detected appydave/b65-guy-monroe-marketing-plan
109
+
110
+ ### Test 10: Fuzzy Brand Matching ✅ PASSED (1 feature implemented)
111
+ **Command:** `bin/dam list appydav` (typo)
112
+ **Expected:** "Did you mean?" suggestions with similar brand names
113
+ **Result:** ✅ Suggests "appydave" with Levenshtein distance matching
114
+ **Feature Implemented:** Added fuzzy matching to `lib/appydave/tools/dam/config.rb:38-45`
115
+
116
+ **Implementation:**
117
+ ```ruby
118
+ unless Dir.exist?(path)
119
+ brands_list = available_brands_display
120
+ # Use fuzzy matching to suggest similar brands (check both shortcuts and keys)
121
+ Appydave::Tools::Configuration::Config.configure
122
+ brands_config = Appydave::Tools::Configuration::Config.brands
123
+ all_brand_identifiers = brands_config.brands.flat_map { |b| [b.shortcut, b.key] }.uniq
124
+ suggestions = FuzzyMatcher.find_matches(brand_key, all_brand_identifiers, threshold: 3)
125
+ raise BrandNotFoundError.new(path, brands_list, suggestions)
126
+ end
127
+ ```
128
+
129
+ **Output:**
130
+ ```
131
+ ❌ Error: Brand directory not found: /Users/.../v-appydav
132
+
133
+ Did you mean?
134
+ - appydave
135
+
136
+ Available brands:
137
+ ad - AppyDave
138
+ ...
139
+ ```
140
+
141
+ ### Test 11: S3 Timestamp Tracking ✅ PASSED
142
+ **Command:** `bin/dam list appydave --detailed | grep b65`
143
+ **Expected:** Show separate upload/download timestamps
144
+ **Result:** ✅ Shows S3 ↑ UPLOAD: 2w, S3 ↓ DOWNLOAD: 3w
145
+
146
+ ### Test 12: SSD Backup Status Display ✅ PASSED
147
+ **Command:** `bin/dam list appydave --detailed`
148
+ **Expected:** SSD BACKUP column shows backup status
149
+ **Result:** ✅ Column displays "N/A" for non-backed-up projects
150
+
151
+ ### Test 13: Heavy/Light Files Breakdown ✅ PASSED
152
+ **Command:** `bin/dam list appydave --detailed | grep -E "b59|b62"`
153
+ **Expected:** Show count and size of heavy vs light files
154
+ **Result:** ✅ Shows breakdown:
155
+ - b59: HEAVY: 2 (1.2 GB), LIGHT: 9 (15.8 MB)
156
+ - b62: HEAVY: 4 (275.1 MB), LIGHT: 6 (754.7 KB)
157
+
158
+ ---
159
+
160
+ ## Suite 3: Edge Cases (4 tests)
161
+
162
+ ### Test 14: Empty Brand ✅ PASSED
163
+ **Command:** `bin/dam list joy` (0 projects)
164
+ **Expected:** Graceful handling with helpful message
165
+ **Result:** ✅ Shows "⚠️ No projects found" with suggestion to run `dam manifest joy`
166
+
167
+ ### Test 15: Invalid Project Pattern ✅ PASSED
168
+ **Command:** `bin/dam list appydave 'z99*'`
169
+ **Expected:** Clear error message for non-matching pattern
170
+ **Result:** ✅ Shows "No projects found matching pattern 'z99*'" with suggestion
171
+
172
+ ### Test 16: Case-Insensitive Brand Resolution ✅ PASSED
173
+ **Commands:** `bin/dam list APPYDAVE`, `AppyDave`, `appydave`
174
+ **Expected:** All variations resolve to same brand
175
+ **Result:** ✅ All three resolve to v-appydave
176
+
177
+ ### Test 17: Brand Shortcut vs Full Key ✅ PASSED
178
+ **Commands:** `bin/dam list ad` vs `bin/dam list appydave`
179
+ **Expected:** Both resolve to same brand
180
+ **Result:** ✅ Both resolve to v-appydave
181
+
182
+ ---
183
+
184
+ ## Suite 4: Performance Check (3 tests)
185
+
186
+ ### Test 18: Large Brand Listing (6 brands) ✅ PASSED
187
+ **Command:** `time bin/dam list`
188
+ **Expected:** Quick response (< 2s)
189
+ **Result:** ✅ Completed instantly (< 1 second)
190
+ **Output:** 6 brands, 29 projects, 24.1 GB
191
+
192
+ ### Test 19: Large Project Listing (13 projects) ✅ PASSED
193
+ **Command:** `time bin/dam list appydave`
194
+ **Expected:** Acceptable performance (< 30s)
195
+ **Result:** ✅ 26.8 seconds (19.95s user, 5.60s system)
196
+ **Note:** Time spent on git/S3 status checks for each project
197
+
198
+ ### Test 20: Detailed View Performance ✅ PASSED
199
+ **Command:** `time bin/dam list appydave --detailed`
200
+ **Expected:** Acceptable performance with extra columns (< 30s)
201
+ **Result:** ✅ 27.4 seconds (20.00s user, 5.72s system)
202
+ **Note:** Minimal overhead despite 6 additional columns
203
+
204
+ ---
205
+
206
+ ## Issues Found & Fixed
207
+
208
+ ### Issue 1: Brand Listing KEY Column Misalignment
209
+ - **Location:** `lib/appydave/tools/dam/project_listing.rb:53-69`
210
+ - **Problem:** KEY column width (12 chars) too narrow for "beauty-and-joy" (14 chars)
211
+ - **Fix:** Increased column width from 12 to 15 characters
212
+ - **Impact:** Low - cosmetic alignment issue
213
+
214
+ ### Issue 2: Detailed View PATH Column Misalignment
215
+ - **Location:** `lib/appydave/tools/dam/project_listing.rb:121-158`
216
+ - **Problem:** PATH column width (35 chars) too narrow for long project paths (up to 65 chars)
217
+ - **Fix:** Increased column width from 35 to 65 characters
218
+ - **Impact:** Low - cosmetic alignment issue
219
+
220
+ ### Issue 3: Header Alignment Pattern
221
+ - **Location:** 3 locations in `project_listing.rb` (lines 53, 161, 123)
222
+ - **Problem:** Headers used hardcoded strings instead of format(), causing misalignment
223
+ - **Root Cause:** Headers weren't treated as data, leading to manual spacing errors
224
+ - **Fix:** Applied format() to headers using same format strings as data rows
225
+ - **Impact:** Medium - architectural improvement that prevents future alignment issues
226
+ - **Pattern:**
227
+ ```ruby
228
+ # Before: Manual header spacing
229
+ puts 'PROJECT SIZE AGE ...'
230
+
231
+ # After: Headers treated as data
232
+ puts format('%-45s %12s %15s ...', 'PROJECT', 'SIZE', 'AGE', ...)
233
+ ```
234
+
235
+ ### Issue 4: Missing Fuzzy Brand Matching Feature
236
+ - **Location:** `lib/appydave/tools/dam/config.rb:38-45`
237
+ - **Problem:** Feature existed in spec and error classes but wasn't triggered
238
+ - **Fix:** Implemented fuzzy matching using existing FuzzyMatcher class
239
+ - **Implementation:** Checks both brand shortcuts and keys with Levenshtein distance threshold of 3
240
+ - **Impact:** Medium - usability improvement for typos
241
+
242
+ ---
243
+
244
+ ## Code Quality Observations
245
+
246
+ ### Strengths
247
+ 1. **Robust error handling** - All edge cases handled gracefully
248
+ 2. **Comprehensive feature set** - All planned features working
249
+ 3. **Good separation of concerns** - FuzzyMatcher, BrandResolver, Config classes well-structured
250
+ 4. **Helpful error messages** - Clear guidance for users
251
+
252
+ ### Improvements Applied
253
+ 1. **Consistent formatting pattern** - Headers now use same format() as data
254
+ 2. **Fuzzy matching integration** - Better UX for brand typos
255
+ 3. **Column width optimization** - Tables now accommodate real-world data
256
+
257
+ ---
258
+
259
+ ## Performance Analysis
260
+
261
+ | Operation | Time | Projects | Notes |
262
+ |-----------|------|----------|-------|
263
+ | Brand listing | < 1s | 6 brands | Instant response |
264
+ | Project listing | 26.8s | 13 projects | Git/S3 checks per project |
265
+ | Detailed view | 27.4s | 13 projects | Minimal overhead for extra data |
266
+
267
+ **Performance Bottlenecks:**
268
+ - Git status checks: ~1-2s per project
269
+ - S3 timestamp checks: ~1-2s per project
270
+ - Total: ~26s for 13 projects is acceptable
271
+
272
+ **Optimization Opportunities (Future):**
273
+ - Parallel git/S3 status checks
274
+ - Caching of git/S3 status (with TTL)
275
+ - Lazy loading for detailed view
276
+
277
+ ---
278
+
279
+ ## Recommendations
280
+
281
+ ### For Release
282
+ ✅ **Ready to ship** - All tests passed, issues fixed
283
+
284
+ ### Post-Release Enhancements
285
+ 1. **Performance optimization** - Consider parallel status checks for large project counts
286
+ 2. **Caching layer** - Cache git/S3 status with 5-minute TTL
287
+ 3. **Progress indicators** - Show progress for operations > 5 seconds
288
+ 4. **Table width detection** - Auto-adjust column widths based on terminal width
289
+
290
+ ### Documentation Updates
291
+ 1. Document the "headers as data" pattern for future table additions
292
+ 2. Add performance notes to README (expected ~2s per project)
293
+ 3. Update examples with fuzzy matching feature
294
+
295
+ ---
296
+
297
+ ## Test Artifacts
298
+
299
+ ### Files Modified During Testing
300
+ 1. `lib/appydave/tools/dam/project_listing.rb` - 3 table formatting fixes
301
+ 2. `lib/appydave/tools/dam/config.rb` - Fuzzy matching implementation
302
+ 3. `spec/appydave/tools/dam/errors_spec.rb` - RuboCop style fixes (unrelated)
303
+
304
+ ### Test Environment
305
+ - **Ruby Version:** 3.4.2
306
+ - **Bundler Version:** 2.6.2
307
+ - **OS:** macOS Darwin 24.6.0
308
+ - **Working Directory:** `/Users/davidcruwys/dev/ad/appydave-tools`
309
+ - **Video Projects Root:** `/Users/davidcruwys/dev/video-projects`
310
+
311
+ ### Test Data
312
+ - **Brands:** 6 (appydave, aitldr, beauty-and-joy, kiros, supportsignal, voz)
313
+ - **Total Projects:** 29
314
+ - **Total Size:** 24.1 GB
315
+ - **Largest Brand:** appydave (13 projects, 22.4 GB)
316
+
317
+ ---
318
+
319
+ ## Conclusion
320
+
321
+ **UAT Status:** ✅ **PASSED**
322
+
323
+ The DAM CLI has successfully passed all 20 user acceptance tests across 4 test suites. All core functionality is preserved, new features are working correctly, edge cases are handled gracefully, and performance is acceptable.
324
+
325
+ Four issues were identified and fixed during testing:
326
+ 1. Table alignment improvements (3 fixes)
327
+ 2. Fuzzy matching feature implementation (1 enhancement)
328
+
329
+ The codebase is production-ready and recommended for release.
330
+
331
+ **Next Steps:**
332
+ 1. ✅ Commit formatting fixes and fuzzy matching implementation
333
+ 2. ✅ Run full test suite (`rake spec`) to ensure no regressions
334
+ 3. ✅ Update CHANGELOG.md with new features
335
+ 4. ✅ Release new version via semantic-release
336
+
337
+ ---
338
+
339
+ **Report Generated:** 2025-01-22
340
+ **Tested By:** Claude Code (Automated UAT)
341
+ **Approved For Release:** ✅ YES
@@ -37,7 +37,12 @@ module Appydave
37
37
 
38
38
  unless Dir.exist?(path)
39
39
  brands_list = available_brands_display
40
- raise "Brand directory not found: #{path}\nAvailable brands:\n#{brands_list}"
40
+ # Use fuzzy matching to suggest similar brands (check both shortcuts and keys)
41
+ Appydave::Tools::Configuration::Config.configure
42
+ brands_config = Appydave::Tools::Configuration::Config.brands
43
+ all_brand_identifiers = brands_config.brands.flat_map { |b| [b.shortcut, b.key] }.uniq
44
+ suggestions = FuzzyMatcher.find_matches(brand_key, all_brand_identifiers, threshold: 3)
45
+ raise BrandNotFoundError.new(path, brands_list, suggestions)
41
46
  end
42
47
 
43
48
  path
@@ -49,15 +49,26 @@ module Appydave
49
49
  )
50
50
  end
51
51
  else
52
- # Default view
53
- puts 'BRAND KEY PROJECTS SIZE LAST MODIFIED GIT S3 SYNC'
54
- puts '-' * 130
52
+ # Default view - use same format for header and data
53
+ # rubocop:disable Style/RedundantFormat
54
+ puts format(
55
+ '%-30s %-15s %10s %12s %20s %-15s %-10s',
56
+ 'BRAND',
57
+ 'KEY',
58
+ 'PROJECTS',
59
+ 'SIZE',
60
+ 'LAST MODIFIED',
61
+ 'GIT',
62
+ 'S3 SYNC'
63
+ )
64
+ # rubocop:enable Style/RedundantFormat
65
+ puts '-' * 133
55
66
 
56
67
  brand_data.each do |data|
57
68
  brand_display = "#{data[:shortcut]} - #{data[:name]}"
58
69
 
59
70
  puts format(
60
- '%-30s %-12s %10d %12s %20s %-15s %-10s',
71
+ '%-30s %-15s %10d %12s %20s %-15s %-10s',
61
72
  brand_display,
62
73
  data[:key],
63
74
  data[:count],
@@ -119,12 +130,24 @@ module Appydave
119
130
  puts ''
120
131
 
121
132
  if detailed
122
- # Detailed view with additional columns
123
- header = 'PROJECT SIZE AGE GIT S3 ' \
124
- 'PATH HEAVY FILES LIGHT FILES SSD BACKUP ' \
125
- 'S3 UPLOAD S3 ↓ DOWNLOAD'
126
- puts header
127
- puts '-' * 250
133
+ # Detailed view with additional columns - use same format for header and data
134
+ # rubocop:disable Style/RedundantFormat
135
+ puts format(
136
+ '%-45s %12s %15s %-15s %-12s %-65s %-18s %-18s %-30s %-15s %-15s',
137
+ 'PROJECT',
138
+ 'SIZE',
139
+ 'AGE',
140
+ 'GIT',
141
+ 'S3',
142
+ 'PATH',
143
+ 'HEAVY FILES',
144
+ 'LIGHT FILES',
145
+ 'SSD BACKUP',
146
+ 'S3 ↑ UPLOAD',
147
+ 'S3 ↓ DOWNLOAD'
148
+ )
149
+ # rubocop:enable Style/RedundantFormat
150
+ puts '-' * 280
128
151
 
129
152
  project_data.each do |data|
130
153
  age_display = data[:stale] ? "#{data[:age]} ⚠️" : data[:age]
@@ -132,7 +155,7 @@ module Appydave
132
155
  s3_download = data[:s3_last_download] ? format_age(data[:s3_last_download]) : 'N/A'
133
156
 
134
157
  puts format(
135
- '%-45s %12s %15s %-15s %-12s %-35s %-18s %-18s %-30s %-15s %-15s',
158
+ '%-45s %12s %15s %-15s %-12s %-65s %-18s %-18s %-30s %-15s %-15s',
136
159
  data[:name],
137
160
  format_size(data[:size]),
138
161
  age_display,
@@ -147,8 +170,17 @@ module Appydave
147
170
  )
148
171
  end
149
172
  else
150
- # Default view
151
- puts 'PROJECT SIZE AGE GIT S3'
173
+ # Default view - use same format for header and data
174
+ # rubocop:disable Style/RedundantFormat
175
+ puts format(
176
+ '%-45s %12s %15s %-15s %-12s',
177
+ 'PROJECT',
178
+ 'SIZE',
179
+ 'AGE',
180
+ 'GIT',
181
+ 'S3'
182
+ )
183
+ # rubocop:enable Style/RedundantFormat
152
184
  puts '-' * 130
153
185
 
154
186
  project_data.each do |data|
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Appydave
4
4
  module Tools
5
- VERSION = '0.68.0'
5
+ VERSION = '0.69.0'
6
6
  end
7
7
  end
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appydave-tools",
3
- "version": "0.68.0",
3
+ "version": "0.69.0",
4
4
  "description": "AppyDave YouTube Automation Tools",
5
5
  "scripts": {
6
6
  "release": "semantic-release"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appydave-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.68.0
4
+ version: 0.69.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
@@ -256,6 +256,7 @@ files:
256
256
  - docs/code-quality/implementation-plan.md
257
257
  - docs/code-quality/report-2025-01-21.md
258
258
  - docs/code-quality/uat-plan-2025-01-22.md
259
+ - docs/code-quality/uat-report-2025-01-22.md
259
260
  - docs/guides/configuration-setup.md
260
261
  - docs/guides/platforms/windows/README.md
261
262
  - docs/guides/platforms/windows/dam-testing-plan-windows-powershell.md