appydave-tools 0.69.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 +11 -0
- data/AGENTS.md +43 -0
- data/CHANGELOG.md +24 -0
- data/CLAUDE.md +96 -3
- data/README.md +15 -0
- data/bin/dam +39 -7
- 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 -68
- 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/dam/batch-s3-listing-requirements.md +780 -0
- data/docs/guides/tools/video-file-namer.md +400 -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 +220 -138
- data/lib/appydave/tools/dam/s3_operations.rb +112 -60
- 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 +53 -4
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# UAT Agent
|
|
2
|
+
|
|
3
|
+
You are the User Acceptance Testing agent for the AppyDave Tools project.
|
|
4
|
+
|
|
5
|
+
## Your Role
|
|
6
|
+
|
|
7
|
+
Create **manual test plans** for the human tester to execute. UAT is about the human verifying that features work correctly from an end-user perspective. You DO NOT execute the tests yourself.
|
|
8
|
+
|
|
9
|
+
**Key distinction:**
|
|
10
|
+
- **UAT (this agent)** - Creates test plans for humans to execute manually
|
|
11
|
+
- **CLI Test agent (`/cli-test`)** - Automated CLI testing that Claude executes
|
|
12
|
+
|
|
13
|
+
## What You Produce
|
|
14
|
+
|
|
15
|
+
A checklist of manual tests the human will run in their terminal, with:
|
|
16
|
+
- Clear commands to copy/paste
|
|
17
|
+
- Expected outcomes to verify
|
|
18
|
+
- Checkboxes for the human to mark pass/fail
|
|
19
|
+
- Space for the human to record observations
|
|
20
|
+
|
|
21
|
+
## Documentation Location
|
|
22
|
+
|
|
23
|
+
All UAT plans live in: `docs/uat/`
|
|
24
|
+
|
|
25
|
+
Pattern: `FR-{number}-{feature-name}.md` or `NFR-{number}-{feature-name}.md`
|
|
26
|
+
|
|
27
|
+
## Process
|
|
28
|
+
|
|
29
|
+
### Step 1: Read the Spec
|
|
30
|
+
|
|
31
|
+
- Find the requirement in `docs/backlog.md`
|
|
32
|
+
- Read any linked spec docs (e.g., `docs/specs/fr-003-*.md`)
|
|
33
|
+
- Identify all acceptance criteria
|
|
34
|
+
|
|
35
|
+
### Step 2: Create UAT Test Plan
|
|
36
|
+
|
|
37
|
+
Create `docs/uat/FR-{number}-{feature-name}.md` using this template:
|
|
38
|
+
|
|
39
|
+
```markdown
|
|
40
|
+
# UAT: FR-{number} - {Feature Name}
|
|
41
|
+
|
|
42
|
+
**Spec:** `docs/specs/fr-{number}-*.md`
|
|
43
|
+
**Date:** YYYY-MM-DD
|
|
44
|
+
**Tester:** [Your Name]
|
|
45
|
+
**Status:** Pending
|
|
46
|
+
|
|
47
|
+
## Prerequisites
|
|
48
|
+
|
|
49
|
+
Before starting, ensure:
|
|
50
|
+
|
|
51
|
+
1. [ ] Dependencies installed: `bundle install`
|
|
52
|
+
2. [ ] [Any configuration requirements]
|
|
53
|
+
3. [ ] [Any test data setup]
|
|
54
|
+
|
|
55
|
+
## How to Use This Plan
|
|
56
|
+
|
|
57
|
+
1. Run each command in your terminal
|
|
58
|
+
2. Compare output to "Expected" description
|
|
59
|
+
3. Mark the checkbox: `[x]` for pass, `[ ]` for fail
|
|
60
|
+
4. Add notes if behavior differs from expected
|
|
61
|
+
5. Complete the Summary section when done
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Tests
|
|
66
|
+
|
|
67
|
+
### Test 1: [Description]
|
|
68
|
+
|
|
69
|
+
**What to verify:** [Brief description of what this tests]
|
|
70
|
+
|
|
71
|
+
**Command:**
|
|
72
|
+
```bash
|
|
73
|
+
[command to run]
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Expected:**
|
|
77
|
+
- [Expected outcome 1]
|
|
78
|
+
- [Expected outcome 2]
|
|
79
|
+
|
|
80
|
+
**Result:** [ ] Pass / [ ] Fail
|
|
81
|
+
**Notes:**
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### Test 2: [Description]
|
|
86
|
+
|
|
87
|
+
...
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Summary
|
|
92
|
+
|
|
93
|
+
**Date completed:**
|
|
94
|
+
**Passed:** __/__
|
|
95
|
+
**Failed:** __/__
|
|
96
|
+
|
|
97
|
+
### Issues Found
|
|
98
|
+
|
|
99
|
+
[Describe any failures or unexpected behavior]
|
|
100
|
+
|
|
101
|
+
### UX Observations
|
|
102
|
+
|
|
103
|
+
[Note any friction, confusing output, or suggestions - even for passing tests]
|
|
104
|
+
|
|
105
|
+
## Verdict
|
|
106
|
+
|
|
107
|
+
[ ] Ready to ship
|
|
108
|
+
[ ] Needs rework - see issues above
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Step 3: Organize Tests by Category
|
|
112
|
+
|
|
113
|
+
Group tests logically:
|
|
114
|
+
- **Happy path** - Core functionality works as expected
|
|
115
|
+
- **Error handling** - Invalid inputs produce helpful errors
|
|
116
|
+
- **Edge cases** - Boundary conditions, empty inputs, etc.
|
|
117
|
+
- **Output formats** - Different format options work correctly
|
|
118
|
+
|
|
119
|
+
### Step 4: Deliver the Plan
|
|
120
|
+
|
|
121
|
+
Once the test plan is created:
|
|
122
|
+
1. Tell the human the file location
|
|
123
|
+
2. Summarize how many tests and categories
|
|
124
|
+
3. Note any prerequisites they need to set up first
|
|
125
|
+
4. Suggest running `/cli-test` first for automated verification
|
|
126
|
+
|
|
127
|
+
## Writing Good Manual Tests
|
|
128
|
+
|
|
129
|
+
### DO:
|
|
130
|
+
- Write commands that can be copy/pasted directly
|
|
131
|
+
- Be specific about expected output (exact text, exit codes)
|
|
132
|
+
- Include cleanup commands if tests create data
|
|
133
|
+
- Group related tests together
|
|
134
|
+
- Note when tests depend on previous test data
|
|
135
|
+
|
|
136
|
+
### DON'T:
|
|
137
|
+
- Execute the tests yourself (that's `/cli-test`)
|
|
138
|
+
- Fill in results (human does that)
|
|
139
|
+
- Use placeholder values the human must replace
|
|
140
|
+
- Assume the human knows implementation details
|
|
141
|
+
|
|
142
|
+
## Test Categories
|
|
143
|
+
|
|
144
|
+
| Category | What to Test | Example |
|
|
145
|
+
|----------|--------------|---------|
|
|
146
|
+
| Core CRUD | Create, read, update, delete operations | `jump add`, `jump get`, `jump remove` |
|
|
147
|
+
| Search/Query | Finding and filtering data | `jump search ruby`, `jump list` |
|
|
148
|
+
| Output Formats | Different display formats | `--format json`, `--format table` |
|
|
149
|
+
| Error Handling | Invalid inputs, missing data | Missing required flags, unknown keys |
|
|
150
|
+
| Exit Codes | Correct return codes | Success=0, Not found=1, Invalid=2 |
|
|
151
|
+
| Generation | File/output generation | `jump generate aliases --output file` |
|
|
152
|
+
| Help/Docs | Help text and documentation | `--help`, `--version` |
|
|
153
|
+
|
|
154
|
+
## Example Test Plan
|
|
155
|
+
|
|
156
|
+
```markdown
|
|
157
|
+
# UAT: FR-3 - Jump Location Tool
|
|
158
|
+
|
|
159
|
+
**Spec:** `docs/specs/fr-003-jump-location-tool.md`
|
|
160
|
+
**Date:** 2025-12-14
|
|
161
|
+
**Tester:** David
|
|
162
|
+
**Status:** Pending
|
|
163
|
+
|
|
164
|
+
## Prerequisites
|
|
165
|
+
|
|
166
|
+
Before starting, ensure:
|
|
167
|
+
|
|
168
|
+
1. [ ] Dependencies installed: `bundle install`
|
|
169
|
+
2. [ ] No existing test locations (or willing to clean up after)
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Tests
|
|
174
|
+
|
|
175
|
+
### Core CRUD
|
|
176
|
+
|
|
177
|
+
#### Test 1: Add a location
|
|
178
|
+
|
|
179
|
+
**What to verify:** Can add a new location with all metadata fields
|
|
180
|
+
|
|
181
|
+
**Command:**
|
|
182
|
+
```bash
|
|
183
|
+
ruby bin/jump.rb add --key test-project --path ~/dev/test --brand testbrand --type tool --tags ruby,test --description "Test project" --format json
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Expected:**
|
|
187
|
+
- Returns JSON with `success: true`
|
|
188
|
+
- Location object includes all provided fields
|
|
189
|
+
- `jump` field auto-generated as `jtest-project`
|
|
190
|
+
|
|
191
|
+
**Result:** [ ] Pass / [ ] Fail
|
|
192
|
+
**Notes:**
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
#### Test 2: List shows the new location
|
|
197
|
+
|
|
198
|
+
**What to verify:** List command includes newly added location
|
|
199
|
+
|
|
200
|
+
**Command:**
|
|
201
|
+
```bash
|
|
202
|
+
ruby bin/jump.rb list --format table
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Expected:**
|
|
206
|
+
- Table includes `test-project` row
|
|
207
|
+
- Shows key, jump alias, type, brand, description
|
|
208
|
+
|
|
209
|
+
**Result:** [ ] Pass / [ ] Fail
|
|
210
|
+
**Notes:**
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
### Cleanup
|
|
215
|
+
|
|
216
|
+
After testing, remove test data:
|
|
217
|
+
```bash
|
|
218
|
+
ruby bin/jump.rb remove test-project --force
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Summary
|
|
224
|
+
|
|
225
|
+
**Date completed:**
|
|
226
|
+
**Passed:** __/2
|
|
227
|
+
**Failed:** __/2
|
|
228
|
+
|
|
229
|
+
### Issues Found
|
|
230
|
+
|
|
231
|
+
[To be filled by tester]
|
|
232
|
+
|
|
233
|
+
### UX Observations
|
|
234
|
+
|
|
235
|
+
[To be filled by tester]
|
|
236
|
+
|
|
237
|
+
## Verdict
|
|
238
|
+
|
|
239
|
+
[ ] Ready to ship
|
|
240
|
+
[ ] Needs rework - see issues above
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Related Agents
|
|
244
|
+
|
|
245
|
+
- `/cli-test` - Automated CLI testing (run this BEFORE UAT for quick verification)
|
|
246
|
+
- `/dev` - Developer who implements features
|
|
247
|
+
- `/po` - Product Owner who writes specs
|
|
248
|
+
- `/progress` - Quick status check
|
|
249
|
+
|
|
250
|
+
## Typical Workflow
|
|
251
|
+
|
|
252
|
+
1. Feature is implemented by `/dev`
|
|
253
|
+
2. Run `/cli-test FR-3` for automated verification (Claude executes)
|
|
254
|
+
3. If cli-test passes, run `/uat FR-3` to create manual test plan
|
|
255
|
+
4. Human executes manual test plan
|
|
256
|
+
5. Human records results and verdict
|
|
257
|
+
6. If passed → Feature is ready to ship
|
|
258
|
+
|
|
259
|
+
## Bug Handover to Developer
|
|
260
|
+
|
|
261
|
+
When a bug is discovered during UAT and fixed on the spot, create a **brief conversational handover** so the developer can add proper test coverage.
|
|
262
|
+
|
|
263
|
+
**When to use:** User says "give me a handover" or "hand this to dev" after a bug fix.
|
|
264
|
+
|
|
265
|
+
### Handover Format
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
## Bug Fix Handover: [Brief Description]
|
|
269
|
+
|
|
270
|
+
**Status:** Fixed, needs test coverage
|
|
271
|
+
|
|
272
|
+
### The Bug
|
|
273
|
+
[One sentence: what was wrong]
|
|
274
|
+
|
|
275
|
+
### Root Cause
|
|
276
|
+
[One sentence: why it happened]
|
|
277
|
+
|
|
278
|
+
**File:** `path/to/file.rb`
|
|
279
|
+
|
|
280
|
+
### The Fix
|
|
281
|
+
[Brief description of what was changed, with line numbers if helpful]
|
|
282
|
+
|
|
283
|
+
### Developer Action
|
|
284
|
+
Add test coverage:
|
|
285
|
+
|
|
286
|
+
**File:** `spec/path/to/spec.rb`
|
|
287
|
+
|
|
288
|
+
**Test case:**
|
|
289
|
+
```ruby
|
|
290
|
+
[Minimal test example that would catch this bug]
|
|
291
|
+
```
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Example
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
## Bug Fix Handover: Jump `info` showing wrong message
|
|
298
|
+
|
|
299
|
+
**Status:** Fixed, needs test coverage
|
|
300
|
+
|
|
301
|
+
### The Bug
|
|
302
|
+
`jump info` displayed "No locations found." instead of config metadata.
|
|
303
|
+
|
|
304
|
+
### Root Cause
|
|
305
|
+
TableFormatter checked `results.empty?` before checking result type. Info results have no `results` key, so it defaulted to empty array.
|
|
306
|
+
|
|
307
|
+
**File:** `lib/appydave/tools/jump/formatters/table_formatter.rb`
|
|
308
|
+
|
|
309
|
+
### The Fix
|
|
310
|
+
Added `info_result?` check before `results.empty?` check, plus `format_info` method (lines 47-66).
|
|
311
|
+
|
|
312
|
+
### Developer Action
|
|
313
|
+
Add test for info formatting in `spec/appydave/tools/jump/formatters/table_formatter_spec.rb`
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Key Points
|
|
317
|
+
|
|
318
|
+
- **Keep it brief** - just enough for dev to understand and write tests
|
|
319
|
+
- **Always include the file path** - saves dev time finding it
|
|
320
|
+
- **Suggest a test case** - even pseudocode helps
|
|
321
|
+
- **No separate document** - handover is conversational, in the chat
|
data/.rubocop.yml
CHANGED
|
@@ -21,6 +21,7 @@ Metrics/BlockLength:
|
|
|
21
21
|
- "**/spec/**/*"
|
|
22
22
|
- "*.gemspec"
|
|
23
23
|
- "bin/gpt_context.rb"
|
|
24
|
+
- "lib/appydave/tools/dam/project_listing.rb"
|
|
24
25
|
AllowedMethods:
|
|
25
26
|
- configure
|
|
26
27
|
- context
|
|
@@ -73,6 +74,16 @@ Naming/VariableNumber:
|
|
|
73
74
|
Naming/MethodParameterName:
|
|
74
75
|
AllowedNames:
|
|
75
76
|
- as
|
|
77
|
+
- s3
|
|
78
|
+
|
|
79
|
+
Naming/PredicateMethod:
|
|
80
|
+
AllowedMethods:
|
|
81
|
+
- add
|
|
82
|
+
- update
|
|
83
|
+
- remove
|
|
84
|
+
- save
|
|
85
|
+
- delete
|
|
86
|
+
- create
|
|
76
87
|
Style/EmptyMethod:
|
|
77
88
|
Exclude:
|
|
78
89
|
- "**/spec/**/*"
|
data/AGENTS.md
CHANGED
|
@@ -18,5 +18,48 @@ Commits follow conventional commits consumed by semantic-release (`feat:`, `fix:
|
|
|
18
18
|
## Agent Coordination
|
|
19
19
|
Claude is the primary automation agent; align with the collaboration notes in `CLAUDE.md` before introducing new flows or prompt templates. When scripting repeatable tasks (gpt_context runs, metadata syncs), document the expected Claude inputs/outputs so the agent can reproduce them. Flag breaking CLI changes in PR descriptions with a dedicated **Claude Impact** subsection to keep downstream automations in sync.
|
|
20
20
|
|
|
21
|
+
## Slash Command Agents
|
|
22
|
+
|
|
23
|
+
This project has specialized agents activated via slash commands:
|
|
24
|
+
|
|
25
|
+
| Command | Agent | Purpose |
|
|
26
|
+
|---------|-------|---------|
|
|
27
|
+
| `/po` | Product Owner | Requirements gathering, spec writing, documentation |
|
|
28
|
+
| `/dev` | Developer | Feature implementation, code changes |
|
|
29
|
+
| `/uat` | UAT Tester | User acceptance testing, verification |
|
|
30
|
+
| `/progress` | Status Check | Quick project status summary |
|
|
31
|
+
|
|
32
|
+
### Workflow
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
/progress → Quick orientation, see what's pending
|
|
36
|
+
↓
|
|
37
|
+
/po → Discuss requirements, write specs to docs/backlog.md
|
|
38
|
+
↓
|
|
39
|
+
/dev → Implement features based on specs
|
|
40
|
+
↓
|
|
41
|
+
/uat → Test implementation against acceptance criteria
|
|
42
|
+
↓
|
|
43
|
+
/po → Review UAT results, update documentation
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Agent Files
|
|
47
|
+
|
|
48
|
+
Located in `.claude/commands/`:
|
|
49
|
+
- `po.md` - Product Owner agent instructions
|
|
50
|
+
- `dev.md` - Developer agent instructions
|
|
51
|
+
- `uat.md` - UAT tester agent instructions
|
|
52
|
+
- `progress.md` - Status check command
|
|
53
|
+
|
|
54
|
+
### Key Documentation Files
|
|
55
|
+
|
|
56
|
+
| File | Purpose | Maintained By |
|
|
57
|
+
|------|---------|---------------|
|
|
58
|
+
| `docs/backlog.md` | Requirements (FR/NFR) with status | /po |
|
|
59
|
+
| `docs/brainstorming-notes.md` | Ideas being explored | /po |
|
|
60
|
+
| `docs/uat/` | UAT plans and results | /uat |
|
|
61
|
+
| `CHANGELOG.md` | Version history | Auto (semantic-release) |
|
|
62
|
+
| `CLAUDE.md` | Project context for Claude | Manual |
|
|
63
|
+
|
|
21
64
|
## Security & Configuration Tips
|
|
22
65
|
Keep API keys and OAuth secrets in `.env` or `~/.config/appydave/` (managed via `ad_config`). Never commit those files; `.gitignore` already excludes them. Validate YouTube API changes against a test channel before touching production content, and rotate credentials when machines change owners.
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
# [0.70.0](https://github.com/appydave/appydave-tools/compare/v0.69.0...v0.70.0) (2025-11-26)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* rename files_match? to compare_files to satisfy rubocop naming convention ([01140dc](https://github.com/appydave/appydave-tools/commit/01140dca0cfe277e7363e35726fab37204812ef6))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* handle multipart S3 ETags with size-based comparison for sync detection ([d29cf4b](https://github.com/appydave/appydave-tools/commit/d29cf4b704f7595ece902bb49af970d07540240e))
|
|
12
|
+
|
|
13
|
+
# [0.69.0](https://github.com/appydave/appydave-tools/compare/v0.68.0...v0.69.0) (2025-11-22)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* disable RedundantFormat cop for intentional header formatting ([e4f03be](https://github.com/appydave/appydave-tools/commit/e4f03be70e101e704a617cc9d0f5bf5df9474070))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* add fuzzy brand matching and improve table alignment ([bce8309](https://github.com/appydave/appydave-tools/commit/bce83093b3834b2f6a3c70d2fa5854b88f88d48b))
|
|
24
|
+
|
|
1
25
|
# [0.68.0](https://github.com/appydave/appydave-tools/compare/v0.67.0...v0.68.0) (2025-11-22)
|
|
2
26
|
|
|
3
27
|
|
data/CLAUDE.md
CHANGED
|
@@ -48,6 +48,76 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
|
|
48
48
|
- **Shareable individually** - Tools can be featured in standalone videos
|
|
49
49
|
- **Language flexible** - Currently Ruby, could be rewritten if needed
|
|
50
50
|
|
|
51
|
+
## Documentation Discovery Protocol
|
|
52
|
+
|
|
53
|
+
**CRITICAL: When user asks about recent changes, work completed, or project history:**
|
|
54
|
+
|
|
55
|
+
### 1. ALWAYS Check Existing Documentation FIRST
|
|
56
|
+
|
|
57
|
+
**Check in this order:**
|
|
58
|
+
|
|
59
|
+
1. **CHANGELOG.md** (PRIMARY SOURCE for recent changes)
|
|
60
|
+
- Location: `/CHANGELOG.md`
|
|
61
|
+
- Contains: Complete version history (v0.0.2 → current)
|
|
62
|
+
- Organized by: Semantic version with Features/Fixes categorized
|
|
63
|
+
- Updated: Automatically via semantic-release on every release
|
|
64
|
+
- **Use this for:** "What changed recently?", "What work was done?", "Sprint summary"
|
|
65
|
+
|
|
66
|
+
2. **Git log** (SECONDARY - only if CHANGELOG lacks detail)
|
|
67
|
+
- Use for: Commit-level detail, specific date ranges, author information
|
|
68
|
+
- Command: `git log --since="1 week ago" --oneline`
|
|
69
|
+
|
|
70
|
+
3. **docs/ folders** (TERTIARY - for architecture/design decisions)
|
|
71
|
+
- `docs/code-quality/` - Audit reports, retrospectives, UAT plans
|
|
72
|
+
- `docs/dam/` - DAM-specific requirements and architecture
|
|
73
|
+
- `docs/usage/` - Tool usage guides
|
|
74
|
+
|
|
75
|
+
### 2. Before Creating New Documentation
|
|
76
|
+
|
|
77
|
+
**ALWAYS verify:**
|
|
78
|
+
- ✅ Does it already exist in CHANGELOG.md?
|
|
79
|
+
- ✅ Does it exist in docs/ folders?
|
|
80
|
+
- ✅ Does it exist in existing markdown files?
|
|
81
|
+
- ✅ Is it redundant with automated changelogs?
|
|
82
|
+
|
|
83
|
+
**Only create new documentation if:**
|
|
84
|
+
- ❌ Information doesn't exist anywhere
|
|
85
|
+
- ❌ Existing docs have gaps
|
|
86
|
+
- ❌ New perspective/format is genuinely needed
|
|
87
|
+
|
|
88
|
+
### 3. Common Mistakes to Avoid
|
|
89
|
+
|
|
90
|
+
**DON'T:**
|
|
91
|
+
- ❌ Jump straight to `git log` without checking CHANGELOG.md
|
|
92
|
+
- ❌ Suggest creating new changelogs when CHANGELOG.md exists
|
|
93
|
+
- ❌ Recreate information that's already in automated systems
|
|
94
|
+
- ❌ Ignore existing documentation
|
|
95
|
+
|
|
96
|
+
**DO:**
|
|
97
|
+
- ✅ Trust CHANGELOG.md as source of truth for version history
|
|
98
|
+
- ✅ Use existing docs before creating new ones
|
|
99
|
+
- ✅ Reference existing documentation in responses
|
|
100
|
+
- ✅ Supplement (not replace) existing docs
|
|
101
|
+
|
|
102
|
+
### Example: User Asks "What work was done recently?"
|
|
103
|
+
|
|
104
|
+
**Correct approach:**
|
|
105
|
+
```
|
|
106
|
+
1. Read CHANGELOG.md
|
|
107
|
+
2. Summarize recent versions (e.g., v0.60.0 → v0.69.0)
|
|
108
|
+
3. Group features by theme
|
|
109
|
+
4. Reference specific versions/commits
|
|
110
|
+
5. Supplement with git log if more detail needed
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Incorrect approach:**
|
|
114
|
+
```
|
|
115
|
+
❌ Run git log first
|
|
116
|
+
❌ Manually count commits
|
|
117
|
+
❌ Suggest creating new changelog
|
|
118
|
+
❌ Ignore existing CHANGELOG.md
|
|
119
|
+
```
|
|
120
|
+
|
|
51
121
|
## Common Commands
|
|
52
122
|
|
|
53
123
|
### Development Setup
|
|
@@ -464,6 +534,23 @@ gem build # Build gemspec into .gem file
|
|
|
464
534
|
- **Configuration System**: Flexible config management for multi-project workflows
|
|
465
535
|
- **Type System**: Custom type classes for data validation and transformation
|
|
466
536
|
|
|
537
|
+
### Architecture Documentation
|
|
538
|
+
|
|
539
|
+
Comprehensive guides for understanding and extending the codebase:
|
|
540
|
+
|
|
541
|
+
| Document | Location | Purpose |
|
|
542
|
+
|----------|----------|---------|
|
|
543
|
+
| **CLI Patterns Guide** | [docs/architecture/cli/cli-patterns.md](./docs/architecture/cli/cli-patterns.md) | 4 CLI architecture patterns with decision tree, code examples, migration guide |
|
|
544
|
+
| **CLI Pattern Comparison** | [docs/architecture/cli/cli-pattern-comparison.md](./docs/architecture/cli/cli-pattern-comparison.md) | Visual diagrams, decision matrix, anti-patterns |
|
|
545
|
+
| **exe/bin Convention** | [docs/architecture/cli/exe-bin-convention.md](./docs/architecture/cli/exe-bin-convention.md) | How exe/ wrappers load bin/ implementations for gem installation |
|
|
546
|
+
| **Testing Patterns** | [docs/architecture/testing/testing-patterns.md](./docs/architecture/testing/testing-patterns.md) | RSpec conventions, fixtures, VCR mocking, Guard workflow |
|
|
547
|
+
| **Configuration Systems** | [docs/architecture/configuration/configuration-systems.md](./docs/architecture/configuration/configuration-systems.md) | Config architecture and patterns |
|
|
548
|
+
|
|
549
|
+
**Quick Reference:**
|
|
550
|
+
- **New CLI tool?** → Read CLI Patterns Guide first, choose pattern 1-4
|
|
551
|
+
- **Adding tests?** → Read Testing Patterns Guide
|
|
552
|
+
- **Understanding exe/ vs bin/?** → Read exe/bin Convention
|
|
553
|
+
|
|
467
554
|
### Key Components
|
|
468
555
|
|
|
469
556
|
#### CLI Actions (`lib/appydave/tools/cli_actions/`)
|
|
@@ -510,13 +597,19 @@ gem build # Build gemspec into .gem file
|
|
|
510
597
|
- No `require` statements needed in spec files (handled by spec_helper)
|
|
511
598
|
- VCR for HTTP request mocking (YouTube API calls)
|
|
512
599
|
- SimpleCov for coverage reporting
|
|
600
|
+
- **Test business logic (`lib/`), not CLI executables (`bin/`)**
|
|
601
|
+
|
|
602
|
+
**Full guide:** [docs/architecture/testing/testing-patterns.md](./docs/architecture/testing/testing-patterns.md)
|
|
513
603
|
|
|
514
604
|
### File Organization
|
|
515
|
-
-
|
|
516
|
-
-
|
|
517
|
-
-
|
|
605
|
+
- **`exe/`** - Thin wrappers installed as gem commands (no `.rb` extension)
|
|
606
|
+
- **`bin/`** - Full CLI implementations (`.rb` extension, used during development)
|
|
607
|
+
- **`lib/appydave/tools/`** - Core library code (business logic)
|
|
608
|
+
- **`spec/`** - Tests mirror lib structure
|
|
518
609
|
- Configuration examples and docs in respective `_doc.md` files
|
|
519
610
|
|
|
611
|
+
**exe/ vs bin/ explained:** [docs/architecture/cli/exe-bin-convention.md](./docs/architecture/cli/exe-bin-convention.md)
|
|
612
|
+
|
|
520
613
|
## Key Dependencies
|
|
521
614
|
- `google-api-client`: YouTube API integration
|
|
522
615
|
- `ruby-openai`: OpenAI GPT integration
|
data/README.md
CHANGED
|
@@ -426,6 +426,21 @@ guard
|
|
|
426
426
|
bin/console
|
|
427
427
|
```
|
|
428
428
|
|
|
429
|
+
### Architecture Documentation
|
|
430
|
+
|
|
431
|
+
Before adding new tools or making significant changes, review these guides:
|
|
432
|
+
|
|
433
|
+
| Guide | What It Covers |
|
|
434
|
+
|-------|----------------|
|
|
435
|
+
| [CLI Patterns](./docs/architecture/cli/cli-patterns.md) | 4 CLI architecture patterns, decision tree, code examples |
|
|
436
|
+
| [exe/ vs bin/](./docs/architecture/cli/exe-bin-convention.md) | How executables are organized for gem installation |
|
|
437
|
+
| [Testing Patterns](./docs/architecture/testing/testing-patterns.md) | RSpec conventions, fixtures, mocking, continuous testing |
|
|
438
|
+
| [CLI Pattern Comparison](./docs/architecture/cli/cli-pattern-comparison.md) | Visual diagrams, decision matrix |
|
|
439
|
+
|
|
440
|
+
**Quick start:**
|
|
441
|
+
- Creating a CLI tool? → [CLI Patterns Guide](./docs/architecture/cli/cli-patterns.md)
|
|
442
|
+
- Writing tests? → [Testing Patterns Guide](./docs/architecture/testing/testing-patterns.md)
|
|
443
|
+
|
|
429
444
|
### Semantic Versioning
|
|
430
445
|
|
|
431
446
|
This project uses **automated versioning** via semantic-release. Don't manually edit version files.
|
data/bin/dam
CHANGED
|
@@ -22,6 +22,7 @@ class VatCLI
|
|
|
22
22
|
'archive' => method(:archive_command),
|
|
23
23
|
'manifest' => method(:manifest_command),
|
|
24
24
|
'sync-ssd' => method(:sync_ssd_command),
|
|
25
|
+
'ssd-status' => method(:ssd_status_command),
|
|
25
26
|
'repo-status' => method(:repo_status_command),
|
|
26
27
|
'repo-sync' => method(:repo_sync_command),
|
|
27
28
|
'repo-push' => method(:repo_push_command),
|
|
@@ -69,7 +70,7 @@ class VatCLI
|
|
|
69
70
|
puts 'Available commands:'
|
|
70
71
|
puts ' list, status, manifest'
|
|
71
72
|
puts ' s3-up, s3-down, s3-status, s3-cleanup-remote, s3-cleanup-local'
|
|
72
|
-
puts ' archive, sync-ssd'
|
|
73
|
+
puts ' archive, sync-ssd, ssd-status'
|
|
73
74
|
puts ' repo-status, repo-sync, repo-push'
|
|
74
75
|
puts ' s3-share, s3-discover, s3-scan'
|
|
75
76
|
puts ''
|
|
@@ -130,6 +131,7 @@ class VatCLI
|
|
|
130
131
|
# List brands and projects
|
|
131
132
|
def list_command(args)
|
|
132
133
|
detailed = args.include?('--detailed')
|
|
134
|
+
s3 = args.include?('--s3')
|
|
133
135
|
args = args.reject { |arg| arg.start_with?('--') || arg.start_with?('-') }
|
|
134
136
|
|
|
135
137
|
brand_arg = args[0]
|
|
@@ -137,13 +139,13 @@ class VatCLI
|
|
|
137
139
|
|
|
138
140
|
if brand_arg.nil?
|
|
139
141
|
# List all brands with summary
|
|
140
|
-
Appydave::Tools::Dam::ProjectListing.list_brands_with_counts(detailed: detailed)
|
|
142
|
+
Appydave::Tools::Dam::ProjectListing.list_brands_with_counts(detailed: detailed, s3: s3)
|
|
141
143
|
elsif pattern_arg
|
|
142
144
|
# Pattern matching
|
|
143
145
|
Appydave::Tools::Dam::ProjectListing.list_with_pattern(brand_arg, pattern_arg)
|
|
144
146
|
else
|
|
145
147
|
# Specific brand
|
|
146
|
-
Appydave::Tools::Dam::ProjectListing.list_brand_projects(brand_arg, detailed: detailed)
|
|
148
|
+
Appydave::Tools::Dam::ProjectListing.list_brand_projects(brand_arg, detailed: detailed, s3: s3)
|
|
147
149
|
end
|
|
148
150
|
rescue StandardError => e
|
|
149
151
|
puts "❌ Error: #{e.message}"
|
|
@@ -363,6 +365,24 @@ class VatCLI
|
|
|
363
365
|
exit 1
|
|
364
366
|
end
|
|
365
367
|
|
|
368
|
+
# Show SSD mount status
|
|
369
|
+
def ssd_status_command(args)
|
|
370
|
+
all = args.include?('--all')
|
|
371
|
+
args = args.reject { |arg| arg.start_with?('--') }
|
|
372
|
+
brand_arg = args[0]
|
|
373
|
+
|
|
374
|
+
if all || brand_arg.nil?
|
|
375
|
+
# Show status for all brands
|
|
376
|
+
Appydave::Tools::Dam::SsdStatus.new.show_all
|
|
377
|
+
else
|
|
378
|
+
# Show status for specific brand
|
|
379
|
+
Appydave::Tools::Dam::SsdStatus.new.show(brand_arg)
|
|
380
|
+
end
|
|
381
|
+
rescue StandardError => e
|
|
382
|
+
puts "❌ Error: #{e.message}"
|
|
383
|
+
exit 1
|
|
384
|
+
end
|
|
385
|
+
|
|
366
386
|
# Show git status for brand repositories
|
|
367
387
|
def repo_status_command(args)
|
|
368
388
|
all = args.include?('--all')
|
|
@@ -741,6 +761,7 @@ class VatCLI
|
|
|
741
761
|
archive <brand> <project> Copy project to SSD backup
|
|
742
762
|
manifest <brand> [--all] Generate project manifest
|
|
743
763
|
sync-ssd <brand> Restore light files from SSD
|
|
764
|
+
ssd-status [brand] Check SSD mount status for all/one brand
|
|
744
765
|
|
|
745
766
|
List Modes:
|
|
746
767
|
dam list All brands with counts/sizes
|
|
@@ -956,7 +977,7 @@ class VatCLI
|
|
|
956
977
|
puts <<~HELP
|
|
957
978
|
List Command
|
|
958
979
|
|
|
959
|
-
Usage: dam list [brand] [pattern]
|
|
980
|
+
Usage: dam list [brand] [pattern] [--s3] [--detailed]
|
|
960
981
|
|
|
961
982
|
Modes:
|
|
962
983
|
1. List all brands with summary:
|
|
@@ -969,10 +990,21 @@ class VatCLI
|
|
|
969
990
|
dam list appydave 'b6*' # All projects b60-b69
|
|
970
991
|
dam list appydave 'b4*' # All projects b40-b49
|
|
971
992
|
|
|
993
|
+
Options:
|
|
994
|
+
--s3 Show S3 sync status (slower, makes AWS API calls)
|
|
995
|
+
--detailed Show extended metadata (PATH, SSD, file counts)
|
|
996
|
+
|
|
972
997
|
Examples:
|
|
973
|
-
dam list #
|
|
974
|
-
dam list
|
|
975
|
-
dam list
|
|
998
|
+
dam list # Fast: brand, project count, size, modified, git
|
|
999
|
+
dam list --s3 # Slower: adds S3 SYNC column
|
|
1000
|
+
dam list voz # Fast: all VOZ projects (no S3 column)
|
|
1001
|
+
dam list voz --s3 # Slower: VOZ projects with S3 sync status
|
|
1002
|
+
dam list appydave 'b6*' # Fast: b60-b69 projects
|
|
1003
|
+
dam list appydave --detailed --s3 # Comprehensive: all columns including S3
|
|
1004
|
+
|
|
1005
|
+
Performance Note:
|
|
1006
|
+
The --s3 flag makes AWS API calls for each project, which can be slow.
|
|
1007
|
+
Default view omits S3 status for faster performance.
|
|
976
1008
|
HELP
|
|
977
1009
|
end
|
|
978
1010
|
|