@champpaba/claude-agent-kit 3.0.0 → 3.0.2
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.
- package/.claude/commands/cview.md +364 -364
- package/.claude/contexts/design/accessibility.md +611 -611
- package/.claude/contexts/design/layout.md +400 -400
- package/.claude/contexts/design/responsive.md +551 -551
- package/.claude/contexts/design/shadows.md +522 -522
- package/.claude/contexts/design/typography.md +465 -465
- package/.claude/contexts/domain/README.md +164 -164
- package/.claude/contexts/patterns/agent-coordination.md +388 -388
- package/.claude/contexts/patterns/development-principles.md +513 -513
- package/.claude/contexts/patterns/error-handling.md +478 -478
- package/.claude/contexts/patterns/logging.md +424 -424
- package/.claude/contexts/patterns/tdd-classification.md +516 -516
- package/.claude/contexts/patterns/testing.md +413 -413
- package/.claude/lib/context-loading-protocol.md +1 -0
- package/.claude/lib/tdd-classifier.md +345 -345
- package/.claude/lib/validation-gates.md +484 -484
- package/.claude/settings.local.json +42 -42
- package/.claude/templates/context-template.md +45 -45
- package/.claude/templates/flags-template.json +42 -42
- package/.claude/templates/phases-sections/accessibility-test.md +17 -17
- package/.claude/templates/phases-sections/api-design.md +37 -37
- package/.claude/templates/phases-sections/backend-tests.md +16 -16
- package/.claude/templates/phases-sections/backend.md +37 -37
- package/.claude/templates/phases-sections/business-logic-validation.md +16 -16
- package/.claude/templates/phases-sections/component-tests.md +17 -17
- package/.claude/templates/phases-sections/contract-backend.md +16 -16
- package/.claude/templates/phases-sections/contract-frontend.md +16 -16
- package/.claude/templates/phases-sections/database.md +35 -35
- package/.claude/templates/phases-sections/e2e-tests.md +16 -16
- package/.claude/templates/phases-sections/fix-implementation.md +17 -17
- package/.claude/templates/phases-sections/frontend-integration.md +18 -18
- package/.claude/templates/phases-sections/manual-flow-test.md +15 -15
- package/.claude/templates/phases-sections/manual-ux-test.md +16 -16
- package/.claude/templates/phases-sections/refactor-implementation.md +17 -17
- package/.claude/templates/phases-sections/refactor.md +16 -16
- package/.claude/templates/phases-sections/regression-tests.md +15 -15
- package/.claude/templates/phases-sections/responsive-test.md +16 -16
- package/.claude/templates/phases-sections/script-implementation.md +43 -43
- package/.claude/templates/phases-sections/test-coverage.md +16 -16
- package/.claude/templates/phases-sections/user-approval.md +14 -14
- package/LICENSE +21 -21
- package/package.json +1 -1
|
@@ -1,364 +1,364 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Change View
|
|
3
|
-
description: View detailed progress for a change
|
|
4
|
-
category: Multi-Agent
|
|
5
|
-
tags: [progress, view, status]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Usage
|
|
9
|
-
|
|
10
|
-
```bash
|
|
11
|
-
/cview {change-id}
|
|
12
|
-
/cview {change-id} --json
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## What It Does
|
|
16
|
-
|
|
17
|
-
Shows detailed phase-by-phase breakdown with:
|
|
18
|
-
- All phases (completed, in-progress, pending)
|
|
19
|
-
- Time tracking per phase
|
|
20
|
-
- Agent assignments
|
|
21
|
-
- Issues and notes
|
|
22
|
-
- Files touched
|
|
23
|
-
- Statistics
|
|
24
|
-
|
|
25
|
-
## Steps
|
|
26
|
-
|
|
27
|
-
### Step 1: Check if Change Exists
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
ls openspec/changes/{change-id}/.claude/flags.json
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
If not found:
|
|
34
|
-
```
|
|
35
|
-
❌ Error: Change {change-id} not set up
|
|
36
|
-
Run: /csetup {change-id}
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Step 2: Read flags.json
|
|
40
|
-
|
|
41
|
-
```typescript
|
|
42
|
-
const flags = JSON.parse(
|
|
43
|
-
Read('openspec/changes/{change-id}/.claude/flags.json')
|
|
44
|
-
)
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### Step 3: Format Output
|
|
48
|
-
|
|
49
|
-
**If `--json` flag:**
|
|
50
|
-
```json
|
|
51
|
-
{
|
|
52
|
-
"change_id": "CHANGE-003",
|
|
53
|
-
"template": "frontend-only",
|
|
54
|
-
"progress_percentage": 64,
|
|
55
|
-
"current_phase": "refactor",
|
|
56
|
-
"phases": { ... },
|
|
57
|
-
"meta": { ... }
|
|
58
|
-
}
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
**Otherwise, format human-readable:**
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
════════════════════════════════════════════════════════════
|
|
65
|
-
📋 {CHANGE_ID}: {Change Title} ({template})
|
|
66
|
-
════════════════════════════════════════════════════════════
|
|
67
|
-
|
|
68
|
-
📊 Overall Progress: {percentage}% ({completed}/{total} phases complete)
|
|
69
|
-
|
|
70
|
-
⏱️ Time Tracking:
|
|
71
|
-
Total Spent: {spent}h {min}m
|
|
72
|
-
Total Estimated: {estimated}h {min}m
|
|
73
|
-
Efficiency: {efficiency}% {ahead/behind} schedule
|
|
74
|
-
Remaining: ~{remaining}h {min}m
|
|
75
|
-
|
|
76
|
-
════════════════════════════════════════════════════════════
|
|
77
|
-
✅ COMPLETED PHASES ({count})
|
|
78
|
-
════════════════════════════════════════════════════════════
|
|
79
|
-
|
|
80
|
-
[{number}] {Phase Name} ({agent})
|
|
81
|
-
⏱️ {start_time} → {end_time} ({duration} min, estimated {estimated} min)
|
|
82
|
-
📁 Created: {count} files
|
|
83
|
-
- {file-path-1}
|
|
84
|
-
- {file-path-2}
|
|
85
|
-
✓ Tasks: {task-ids}
|
|
86
|
-
📝 {notes}
|
|
87
|
-
|
|
88
|
-
{repeat for all completed phases}
|
|
89
|
-
|
|
90
|
-
════════════════════════════════════════════════════════════
|
|
91
|
-
🔄 IN PROGRESS ({count})
|
|
92
|
-
════════════════════════════════════════════════════════════
|
|
93
|
-
|
|
94
|
-
[{number}] {Phase Name} ({agent}) ← CURRENT
|
|
95
|
-
⏱️ Started: {start_time} ({minutes_ago} minutes ago)
|
|
96
|
-
⏱️ Estimated: {remaining} minutes remaining
|
|
97
|
-
📝 {notes}
|
|
98
|
-
|
|
99
|
-
════════════════════════════════════════════════════════════
|
|
100
|
-
⏳ PENDING ({count})
|
|
101
|
-
════════════════════════════════════════════════════════════
|
|
102
|
-
|
|
103
|
-
[{number}] {Phase Name} ({agent})
|
|
104
|
-
⏱️ Estimated: {estimated} minutes
|
|
105
|
-
📋 {brief-description}
|
|
106
|
-
|
|
107
|
-
{repeat for all pending phases}
|
|
108
|
-
|
|
109
|
-
════════════════════════════════════════════════════════════
|
|
110
|
-
📈 STATISTICS
|
|
111
|
-
════════════════════════════════════════════════════════════
|
|
112
|
-
|
|
113
|
-
Tests: {passed} passed, {failed} failed ({pass_rate}% pass rate)
|
|
114
|
-
Coverage: {coverage}% (target: {target}% {✓/✗})
|
|
115
|
-
Issues: {found} found, {fixed} fixed, {remaining} remaining
|
|
116
|
-
Files: {created} created, {modified} modified
|
|
117
|
-
Approvals: {approval_status}
|
|
118
|
-
|
|
119
|
-
════════════════════════════════════════════════════════════
|
|
120
|
-
🎯 NEXT STEPS
|
|
121
|
-
════════════════════════════════════════════════════════════
|
|
122
|
-
|
|
123
|
-
{if in_progress}
|
|
124
|
-
Current phase in progress. Wait for completion.
|
|
125
|
-
|
|
126
|
-
{else if next_phase === user}
|
|
127
|
-
Next phase requires your action:
|
|
128
|
-
→ Phase {number}: {Phase Name}
|
|
129
|
-
→ {action_required}
|
|
130
|
-
|
|
131
|
-
When done: /cdev {change-id} --continue
|
|
132
|
-
|
|
133
|
-
{else if next_phase === automated}
|
|
134
|
-
Continue development:
|
|
135
|
-
→ /cdev {change-id}
|
|
136
|
-
|
|
137
|
-
{else if all_complete}
|
|
138
|
-
✅ All phases complete!
|
|
139
|
-
|
|
140
|
-
Review and archive:
|
|
141
|
-
1. Update tasks.md (mark all [x])
|
|
142
|
-
2. Review report: openspec/changes/{change-id}/.claude/report.md
|
|
143
|
-
3. Archive: openspec archive {change-id}
|
|
144
|
-
|
|
145
|
-
{else if blocked}
|
|
146
|
-
⚠️ Change is blocked: {blocking_reason}
|
|
147
|
-
Fix issues before continuing.
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## Formatting Helpers
|
|
153
|
-
|
|
154
|
-
### Progress Bar
|
|
155
|
-
|
|
156
|
-
```typescript
|
|
157
|
-
function generateProgressBar(percentage: number, width: number = 20): string {
|
|
158
|
-
const filled = Math.floor(percentage * width / 100)
|
|
159
|
-
const empty = width - filled
|
|
160
|
-
return `[${'█'.repeat(filled)}${'░'.repeat(empty)}] ${percentage}%`
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// Example: generateProgressBar(64, 20)
|
|
164
|
-
// Output: [████████████░░░░░░░░] 64%
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Time Formatting
|
|
168
|
-
|
|
169
|
-
```typescript
|
|
170
|
-
function formatDuration(minutes: number): string {
|
|
171
|
-
const hours = Math.floor(minutes / 60)
|
|
172
|
-
const mins = minutes % 60
|
|
173
|
-
if (hours > 0) {
|
|
174
|
-
return `${hours}h ${mins}m`
|
|
175
|
-
}
|
|
176
|
-
return `${mins} min`
|
|
177
|
-
}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Time Ago
|
|
181
|
-
|
|
182
|
-
```typescript
|
|
183
|
-
function timeAgo(timestamp: string): string {
|
|
184
|
-
const now = new Date()
|
|
185
|
-
const then = new Date(timestamp)
|
|
186
|
-
const diffMinutes = Math.floor((now - then) / 1000 / 60)
|
|
187
|
-
|
|
188
|
-
if (diffMinutes < 60) return `${diffMinutes} minutes ago`
|
|
189
|
-
const hours = Math.floor(diffMinutes / 60)
|
|
190
|
-
if (hours < 24) return `${hours} hours ago`
|
|
191
|
-
const days = Math.floor(hours / 24)
|
|
192
|
-
return `${days} days ago`
|
|
193
|
-
}
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Efficiency Calculation
|
|
197
|
-
|
|
198
|
-
```typescript
|
|
199
|
-
function calculateEfficiency(actual: number, estimated: number): {
|
|
200
|
-
percentage: number
|
|
201
|
-
status: 'ahead' | 'on track' | 'behind'
|
|
202
|
-
} {
|
|
203
|
-
const percentage = Math.round((estimated / actual) * 100)
|
|
204
|
-
let status: 'ahead' | 'on track' | 'behind'
|
|
205
|
-
|
|
206
|
-
if (percentage > 110) status = 'ahead'
|
|
207
|
-
else if (percentage >= 90) status = 'on track'
|
|
208
|
-
else status = 'behind'
|
|
209
|
-
|
|
210
|
-
return { percentage, status }
|
|
211
|
-
}
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## Example Output
|
|
217
|
-
|
|
218
|
-
```bash
|
|
219
|
-
$ /cview CHANGE-003
|
|
220
|
-
|
|
221
|
-
════════════════════════════════════════════════════════════
|
|
222
|
-
📋 CHANGE-003: Create Landing Page (frontend-only)
|
|
223
|
-
════════════════════════════════════════════════════════════
|
|
224
|
-
|
|
225
|
-
📊 Overall Progress: [████████████░░░░░░░░] 64% (7/11 phases complete)
|
|
226
|
-
|
|
227
|
-
⏱️ Time Tracking:
|
|
228
|
-
Total Spent: 2h 55min
|
|
229
|
-
Total Estimated: 3h 15min
|
|
230
|
-
Efficiency: 111% (ahead of schedule)
|
|
231
|
-
Remaining: ~35 minutes
|
|
232
|
-
|
|
233
|
-
════════════════════════════════════════════════════════════
|
|
234
|
-
✅ COMPLETED PHASES (7)
|
|
235
|
-
════════════════════════════════════════════════════════════
|
|
236
|
-
|
|
237
|
-
[1] Frontend Mockup (uxui-frontend)
|
|
238
|
-
⏱️ 2025-10-30 10:00 → 11:35 (95 min, estimated 90 min)
|
|
239
|
-
📁 Created: 4 files
|
|
240
|
-
- src/app/page.tsx
|
|
241
|
-
- src/components/landing/hero-section.tsx
|
|
242
|
-
- src/components/landing/features-section.tsx
|
|
243
|
-
- src/components/landing/cta-section.tsx
|
|
244
|
-
✓ Tasks: 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3
|
|
245
|
-
📝 All landing page sections created. Responsive design implemented.
|
|
246
|
-
|
|
247
|
-
[2] Accessibility Test (test-debug)
|
|
248
|
-
⏱️ 2025-10-30 11:35 → 11:43 (8 min, estimated 10 min)
|
|
249
|
-
🎯 Lighthouse: 98/100
|
|
250
|
-
✓ Contrast ratio: Pass
|
|
251
|
-
✓ ARIA labels: Complete
|
|
252
|
-
📝 Minor contrast adjustment made to CTA button.
|
|
253
|
-
|
|
254
|
-
[3] Manual UX Test (user)
|
|
255
|
-
⏱️ 2025-10-30 11:43 → 12:03 (20 min, estimated 15 min)
|
|
256
|
-
🐛 Issues: 2 found, 2 fixed
|
|
257
|
-
- Spacing issue in mobile view (fixed)
|
|
258
|
-
- Hero headline too small on tablet (fixed)
|
|
259
|
-
|
|
260
|
-
[4] Business Logic Validation (integration)
|
|
261
|
-
⏱️ 2025-10-30 12:03 → 12:10 (7 min, estimated 10 min)
|
|
262
|
-
✓ Requirements: 9/9 passed
|
|
263
|
-
✓ No discrepancies
|
|
264
|
-
|
|
265
|
-
[5] User Approval (user)
|
|
266
|
-
⏱️ 2025-10-30 12:10 → 12:15 (5 min, estimated 5 min)
|
|
267
|
-
✅ Approved
|
|
268
|
-
|
|
269
|
-
[6] Component Tests (test-debug)
|
|
270
|
-
⏱️ 2025-10-30 12:15 → 12:40 (25 min, estimated 20 min)
|
|
271
|
-
✓ Tests: 12 passed, 0 failed
|
|
272
|
-
📊 Coverage: 75% (target: 70%)
|
|
273
|
-
|
|
274
|
-
[7] Responsive Test (user)
|
|
275
|
-
⏱️ 2025-10-30 14:00 → 14:15 (15 min, estimated 15 min)
|
|
276
|
-
✓ Breakpoints: 1920x1080, 768x1024, 375x667
|
|
277
|
-
✓ No issues found
|
|
278
|
-
|
|
279
|
-
════════════════════════════════════════════════════════════
|
|
280
|
-
🔄 IN PROGRESS (1)
|
|
281
|
-
════════════════════════════════════════════════════════════
|
|
282
|
-
|
|
283
|
-
[8] Refactor (test-debug) ← CURRENT
|
|
284
|
-
⏱️ Started: 2025-10-30 14:15 (15 minutes ago)
|
|
285
|
-
⏱️ Estimated: 20 minutes total (~5 minutes remaining)
|
|
286
|
-
📝 Extracting reusable button component. Optimizing CSS classes.
|
|
287
|
-
|
|
288
|
-
════════════════════════════════════════════════════════════
|
|
289
|
-
⏳ PENDING (3)
|
|
290
|
-
════════════════════════════════════════════════════════════
|
|
291
|
-
|
|
292
|
-
[9] Test Coverage Report (test-debug)
|
|
293
|
-
⏱️ Estimated: 5 minutes
|
|
294
|
-
📋 Generate final coverage report
|
|
295
|
-
|
|
296
|
-
[10] Documentation (integration)
|
|
297
|
-
⏱️ Estimated: 15 minutes
|
|
298
|
-
📋 Update README, add JSDoc comments
|
|
299
|
-
|
|
300
|
-
[11] Final Report (integration)
|
|
301
|
-
⏱️ Estimated: 10 minutes
|
|
302
|
-
📋 Generate verbose report for archive
|
|
303
|
-
|
|
304
|
-
════════════════════════════════════════════════════════════
|
|
305
|
-
📈 STATISTICS
|
|
306
|
-
════════════════════════════════════════════════════════════
|
|
307
|
-
|
|
308
|
-
Tests: 12 passed, 0 failed (100% pass rate)
|
|
309
|
-
Coverage: 75% (target: 70% ✓)
|
|
310
|
-
Issues: 2 found, 2 fixed, 0 remaining
|
|
311
|
-
Files: 4 created, 2 modified
|
|
312
|
-
Approvals: ✅ User approved (phase 5)
|
|
313
|
-
|
|
314
|
-
════════════════════════════════════════════════════════════
|
|
315
|
-
🎯 NEXT STEPS
|
|
316
|
-
════════════════════════════════════════════════════════════
|
|
317
|
-
|
|
318
|
-
Current phase in progress. Wait for completion or check status:
|
|
319
|
-
→ /cstatus CHANGE-003
|
|
320
|
-
|
|
321
|
-
To continue after current phase completes:
|
|
322
|
-
→ /cdev CHANGE-003
|
|
323
|
-
|
|
324
|
-
To view raw JSON data:
|
|
325
|
-
→ /cview CHANGE-003 --json
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
---
|
|
329
|
-
|
|
330
|
-
## Error Handling
|
|
331
|
-
|
|
332
|
-
**If change not found:**
|
|
333
|
-
```
|
|
334
|
-
❌ Error: Change CHANGE-003 not found or not set up
|
|
335
|
-
|
|
336
|
-
Please check:
|
|
337
|
-
1. Change ID is correct
|
|
338
|
-
2. Change has been set up: /csetup CHANGE-003
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
**If flags.json is corrupted:**
|
|
342
|
-
```
|
|
343
|
-
❌ Error: Cannot parse flags.json (invalid JSON)
|
|
344
|
-
|
|
345
|
-
This may indicate corruption. Try:
|
|
346
|
-
1. Check file: openspec/changes/{change-id}/.claude/flags.json
|
|
347
|
-
2. Restore from backup if available
|
|
348
|
-
3. Re-run setup: /csetup {change-id} (will overwrite!)
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
## Quick Commands Reference
|
|
354
|
-
|
|
355
|
-
```bash
|
|
356
|
-
# Detailed view
|
|
357
|
-
/cview CHANGE-003
|
|
358
|
-
|
|
359
|
-
# JSON output
|
|
360
|
-
/cview CHANGE-003 --json
|
|
361
|
-
|
|
362
|
-
# Combined with other commands
|
|
363
|
-
/cview CHANGE-003 && /cdev CHANGE-003
|
|
364
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: Change View
|
|
3
|
+
description: View detailed progress for a change
|
|
4
|
+
category: Multi-Agent
|
|
5
|
+
tags: [progress, view, status]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Usage
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
/cview {change-id}
|
|
12
|
+
/cview {change-id} --json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## What It Does
|
|
16
|
+
|
|
17
|
+
Shows detailed phase-by-phase breakdown with:
|
|
18
|
+
- All phases (completed, in-progress, pending)
|
|
19
|
+
- Time tracking per phase
|
|
20
|
+
- Agent assignments
|
|
21
|
+
- Issues and notes
|
|
22
|
+
- Files touched
|
|
23
|
+
- Statistics
|
|
24
|
+
|
|
25
|
+
## Steps
|
|
26
|
+
|
|
27
|
+
### Step 1: Check if Change Exists
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
ls openspec/changes/{change-id}/.claude/flags.json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
If not found:
|
|
34
|
+
```
|
|
35
|
+
❌ Error: Change {change-id} not set up
|
|
36
|
+
Run: /csetup {change-id}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Step 2: Read flags.json
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
const flags = JSON.parse(
|
|
43
|
+
Read('openspec/changes/{change-id}/.claude/flags.json')
|
|
44
|
+
)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 3: Format Output
|
|
48
|
+
|
|
49
|
+
**If `--json` flag:**
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"change_id": "CHANGE-003",
|
|
53
|
+
"template": "frontend-only",
|
|
54
|
+
"progress_percentage": 64,
|
|
55
|
+
"current_phase": "refactor",
|
|
56
|
+
"phases": { ... },
|
|
57
|
+
"meta": { ... }
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Otherwise, format human-readable:**
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
════════════════════════════════════════════════════════════
|
|
65
|
+
📋 {CHANGE_ID}: {Change Title} ({template})
|
|
66
|
+
════════════════════════════════════════════════════════════
|
|
67
|
+
|
|
68
|
+
📊 Overall Progress: {percentage}% ({completed}/{total} phases complete)
|
|
69
|
+
|
|
70
|
+
⏱️ Time Tracking:
|
|
71
|
+
Total Spent: {spent}h {min}m
|
|
72
|
+
Total Estimated: {estimated}h {min}m
|
|
73
|
+
Efficiency: {efficiency}% {ahead/behind} schedule
|
|
74
|
+
Remaining: ~{remaining}h {min}m
|
|
75
|
+
|
|
76
|
+
════════════════════════════════════════════════════════════
|
|
77
|
+
✅ COMPLETED PHASES ({count})
|
|
78
|
+
════════════════════════════════════════════════════════════
|
|
79
|
+
|
|
80
|
+
[{number}] {Phase Name} ({agent})
|
|
81
|
+
⏱️ {start_time} → {end_time} ({duration} min, estimated {estimated} min)
|
|
82
|
+
📁 Created: {count} files
|
|
83
|
+
- {file-path-1}
|
|
84
|
+
- {file-path-2}
|
|
85
|
+
✓ Tasks: {task-ids}
|
|
86
|
+
📝 {notes}
|
|
87
|
+
|
|
88
|
+
{repeat for all completed phases}
|
|
89
|
+
|
|
90
|
+
════════════════════════════════════════════════════════════
|
|
91
|
+
🔄 IN PROGRESS ({count})
|
|
92
|
+
════════════════════════════════════════════════════════════
|
|
93
|
+
|
|
94
|
+
[{number}] {Phase Name} ({agent}) ← CURRENT
|
|
95
|
+
⏱️ Started: {start_time} ({minutes_ago} minutes ago)
|
|
96
|
+
⏱️ Estimated: {remaining} minutes remaining
|
|
97
|
+
📝 {notes}
|
|
98
|
+
|
|
99
|
+
════════════════════════════════════════════════════════════
|
|
100
|
+
⏳ PENDING ({count})
|
|
101
|
+
════════════════════════════════════════════════════════════
|
|
102
|
+
|
|
103
|
+
[{number}] {Phase Name} ({agent})
|
|
104
|
+
⏱️ Estimated: {estimated} minutes
|
|
105
|
+
📋 {brief-description}
|
|
106
|
+
|
|
107
|
+
{repeat for all pending phases}
|
|
108
|
+
|
|
109
|
+
════════════════════════════════════════════════════════════
|
|
110
|
+
📈 STATISTICS
|
|
111
|
+
════════════════════════════════════════════════════════════
|
|
112
|
+
|
|
113
|
+
Tests: {passed} passed, {failed} failed ({pass_rate}% pass rate)
|
|
114
|
+
Coverage: {coverage}% (target: {target}% {✓/✗})
|
|
115
|
+
Issues: {found} found, {fixed} fixed, {remaining} remaining
|
|
116
|
+
Files: {created} created, {modified} modified
|
|
117
|
+
Approvals: {approval_status}
|
|
118
|
+
|
|
119
|
+
════════════════════════════════════════════════════════════
|
|
120
|
+
🎯 NEXT STEPS
|
|
121
|
+
════════════════════════════════════════════════════════════
|
|
122
|
+
|
|
123
|
+
{if in_progress}
|
|
124
|
+
Current phase in progress. Wait for completion.
|
|
125
|
+
|
|
126
|
+
{else if next_phase === user}
|
|
127
|
+
Next phase requires your action:
|
|
128
|
+
→ Phase {number}: {Phase Name}
|
|
129
|
+
→ {action_required}
|
|
130
|
+
|
|
131
|
+
When done: /cdev {change-id} --continue
|
|
132
|
+
|
|
133
|
+
{else if next_phase === automated}
|
|
134
|
+
Continue development:
|
|
135
|
+
→ /cdev {change-id}
|
|
136
|
+
|
|
137
|
+
{else if all_complete}
|
|
138
|
+
✅ All phases complete!
|
|
139
|
+
|
|
140
|
+
Review and archive:
|
|
141
|
+
1. Update tasks.md (mark all [x])
|
|
142
|
+
2. Review report: openspec/changes/{change-id}/.claude/report.md
|
|
143
|
+
3. Archive: openspec archive {change-id}
|
|
144
|
+
|
|
145
|
+
{else if blocked}
|
|
146
|
+
⚠️ Change is blocked: {blocking_reason}
|
|
147
|
+
Fix issues before continuing.
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Formatting Helpers
|
|
153
|
+
|
|
154
|
+
### Progress Bar
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
function generateProgressBar(percentage: number, width: number = 20): string {
|
|
158
|
+
const filled = Math.floor(percentage * width / 100)
|
|
159
|
+
const empty = width - filled
|
|
160
|
+
return `[${'█'.repeat(filled)}${'░'.repeat(empty)}] ${percentage}%`
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Example: generateProgressBar(64, 20)
|
|
164
|
+
// Output: [████████████░░░░░░░░] 64%
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Time Formatting
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
function formatDuration(minutes: number): string {
|
|
171
|
+
const hours = Math.floor(minutes / 60)
|
|
172
|
+
const mins = minutes % 60
|
|
173
|
+
if (hours > 0) {
|
|
174
|
+
return `${hours}h ${mins}m`
|
|
175
|
+
}
|
|
176
|
+
return `${mins} min`
|
|
177
|
+
}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Time Ago
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
function timeAgo(timestamp: string): string {
|
|
184
|
+
const now = new Date()
|
|
185
|
+
const then = new Date(timestamp)
|
|
186
|
+
const diffMinutes = Math.floor((now - then) / 1000 / 60)
|
|
187
|
+
|
|
188
|
+
if (diffMinutes < 60) return `${diffMinutes} minutes ago`
|
|
189
|
+
const hours = Math.floor(diffMinutes / 60)
|
|
190
|
+
if (hours < 24) return `${hours} hours ago`
|
|
191
|
+
const days = Math.floor(hours / 24)
|
|
192
|
+
return `${days} days ago`
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Efficiency Calculation
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
function calculateEfficiency(actual: number, estimated: number): {
|
|
200
|
+
percentage: number
|
|
201
|
+
status: 'ahead' | 'on track' | 'behind'
|
|
202
|
+
} {
|
|
203
|
+
const percentage = Math.round((estimated / actual) * 100)
|
|
204
|
+
let status: 'ahead' | 'on track' | 'behind'
|
|
205
|
+
|
|
206
|
+
if (percentage > 110) status = 'ahead'
|
|
207
|
+
else if (percentage >= 90) status = 'on track'
|
|
208
|
+
else status = 'behind'
|
|
209
|
+
|
|
210
|
+
return { percentage, status }
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Example Output
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
$ /cview CHANGE-003
|
|
220
|
+
|
|
221
|
+
════════════════════════════════════════════════════════════
|
|
222
|
+
📋 CHANGE-003: Create Landing Page (frontend-only)
|
|
223
|
+
════════════════════════════════════════════════════════════
|
|
224
|
+
|
|
225
|
+
📊 Overall Progress: [████████████░░░░░░░░] 64% (7/11 phases complete)
|
|
226
|
+
|
|
227
|
+
⏱️ Time Tracking:
|
|
228
|
+
Total Spent: 2h 55min
|
|
229
|
+
Total Estimated: 3h 15min
|
|
230
|
+
Efficiency: 111% (ahead of schedule)
|
|
231
|
+
Remaining: ~35 minutes
|
|
232
|
+
|
|
233
|
+
════════════════════════════════════════════════════════════
|
|
234
|
+
✅ COMPLETED PHASES (7)
|
|
235
|
+
════════════════════════════════════════════════════════════
|
|
236
|
+
|
|
237
|
+
[1] Frontend Mockup (uxui-frontend)
|
|
238
|
+
⏱️ 2025-10-30 10:00 → 11:35 (95 min, estimated 90 min)
|
|
239
|
+
📁 Created: 4 files
|
|
240
|
+
- src/app/page.tsx
|
|
241
|
+
- src/components/landing/hero-section.tsx
|
|
242
|
+
- src/components/landing/features-section.tsx
|
|
243
|
+
- src/components/landing/cta-section.tsx
|
|
244
|
+
✓ Tasks: 1.1, 1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3
|
|
245
|
+
📝 All landing page sections created. Responsive design implemented.
|
|
246
|
+
|
|
247
|
+
[2] Accessibility Test (test-debug)
|
|
248
|
+
⏱️ 2025-10-30 11:35 → 11:43 (8 min, estimated 10 min)
|
|
249
|
+
🎯 Lighthouse: 98/100
|
|
250
|
+
✓ Contrast ratio: Pass
|
|
251
|
+
✓ ARIA labels: Complete
|
|
252
|
+
📝 Minor contrast adjustment made to CTA button.
|
|
253
|
+
|
|
254
|
+
[3] Manual UX Test (user)
|
|
255
|
+
⏱️ 2025-10-30 11:43 → 12:03 (20 min, estimated 15 min)
|
|
256
|
+
🐛 Issues: 2 found, 2 fixed
|
|
257
|
+
- Spacing issue in mobile view (fixed)
|
|
258
|
+
- Hero headline too small on tablet (fixed)
|
|
259
|
+
|
|
260
|
+
[4] Business Logic Validation (integration)
|
|
261
|
+
⏱️ 2025-10-30 12:03 → 12:10 (7 min, estimated 10 min)
|
|
262
|
+
✓ Requirements: 9/9 passed
|
|
263
|
+
✓ No discrepancies
|
|
264
|
+
|
|
265
|
+
[5] User Approval (user)
|
|
266
|
+
⏱️ 2025-10-30 12:10 → 12:15 (5 min, estimated 5 min)
|
|
267
|
+
✅ Approved
|
|
268
|
+
|
|
269
|
+
[6] Component Tests (test-debug)
|
|
270
|
+
⏱️ 2025-10-30 12:15 → 12:40 (25 min, estimated 20 min)
|
|
271
|
+
✓ Tests: 12 passed, 0 failed
|
|
272
|
+
📊 Coverage: 75% (target: 70%)
|
|
273
|
+
|
|
274
|
+
[7] Responsive Test (user)
|
|
275
|
+
⏱️ 2025-10-30 14:00 → 14:15 (15 min, estimated 15 min)
|
|
276
|
+
✓ Breakpoints: 1920x1080, 768x1024, 375x667
|
|
277
|
+
✓ No issues found
|
|
278
|
+
|
|
279
|
+
════════════════════════════════════════════════════════════
|
|
280
|
+
🔄 IN PROGRESS (1)
|
|
281
|
+
════════════════════════════════════════════════════════════
|
|
282
|
+
|
|
283
|
+
[8] Refactor (test-debug) ← CURRENT
|
|
284
|
+
⏱️ Started: 2025-10-30 14:15 (15 minutes ago)
|
|
285
|
+
⏱️ Estimated: 20 minutes total (~5 minutes remaining)
|
|
286
|
+
📝 Extracting reusable button component. Optimizing CSS classes.
|
|
287
|
+
|
|
288
|
+
════════════════════════════════════════════════════════════
|
|
289
|
+
⏳ PENDING (3)
|
|
290
|
+
════════════════════════════════════════════════════════════
|
|
291
|
+
|
|
292
|
+
[9] Test Coverage Report (test-debug)
|
|
293
|
+
⏱️ Estimated: 5 minutes
|
|
294
|
+
📋 Generate final coverage report
|
|
295
|
+
|
|
296
|
+
[10] Documentation (integration)
|
|
297
|
+
⏱️ Estimated: 15 minutes
|
|
298
|
+
📋 Update README, add JSDoc comments
|
|
299
|
+
|
|
300
|
+
[11] Final Report (integration)
|
|
301
|
+
⏱️ Estimated: 10 minutes
|
|
302
|
+
📋 Generate verbose report for archive
|
|
303
|
+
|
|
304
|
+
════════════════════════════════════════════════════════════
|
|
305
|
+
📈 STATISTICS
|
|
306
|
+
════════════════════════════════════════════════════════════
|
|
307
|
+
|
|
308
|
+
Tests: 12 passed, 0 failed (100% pass rate)
|
|
309
|
+
Coverage: 75% (target: 70% ✓)
|
|
310
|
+
Issues: 2 found, 2 fixed, 0 remaining
|
|
311
|
+
Files: 4 created, 2 modified
|
|
312
|
+
Approvals: ✅ User approved (phase 5)
|
|
313
|
+
|
|
314
|
+
════════════════════════════════════════════════════════════
|
|
315
|
+
🎯 NEXT STEPS
|
|
316
|
+
════════════════════════════════════════════════════════════
|
|
317
|
+
|
|
318
|
+
Current phase in progress. Wait for completion or check status:
|
|
319
|
+
→ /cstatus CHANGE-003
|
|
320
|
+
|
|
321
|
+
To continue after current phase completes:
|
|
322
|
+
→ /cdev CHANGE-003
|
|
323
|
+
|
|
324
|
+
To view raw JSON data:
|
|
325
|
+
→ /cview CHANGE-003 --json
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Error Handling
|
|
331
|
+
|
|
332
|
+
**If change not found:**
|
|
333
|
+
```
|
|
334
|
+
❌ Error: Change CHANGE-003 not found or not set up
|
|
335
|
+
|
|
336
|
+
Please check:
|
|
337
|
+
1. Change ID is correct
|
|
338
|
+
2. Change has been set up: /csetup CHANGE-003
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**If flags.json is corrupted:**
|
|
342
|
+
```
|
|
343
|
+
❌ Error: Cannot parse flags.json (invalid JSON)
|
|
344
|
+
|
|
345
|
+
This may indicate corruption. Try:
|
|
346
|
+
1. Check file: openspec/changes/{change-id}/.claude/flags.json
|
|
347
|
+
2. Restore from backup if available
|
|
348
|
+
3. Re-run setup: /csetup {change-id} (will overwrite!)
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Quick Commands Reference
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
# Detailed view
|
|
357
|
+
/cview CHANGE-003
|
|
358
|
+
|
|
359
|
+
# JSON output
|
|
360
|
+
/cview CHANGE-003 --json
|
|
361
|
+
|
|
362
|
+
# Combined with other commands
|
|
363
|
+
/cview CHANGE-003 && /cdev CHANGE-003
|
|
364
|
+
```
|