claude-code-workflow 6.3.7 → 6.3.8
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/agents/issue-plan-agent.md +136 -760
- package/.claude/agents/issue-queue-agent.md +149 -616
- package/.claude/commands/issue/execute.md +55 -26
- package/.claude/commands/issue/manage.md +37 -789
- package/.claude/commands/issue/new.md +9 -42
- package/.claude/commands/issue/plan.md +86 -278
- package/.claude/commands/issue/queue.md +99 -159
- package/.claude/skills/issue-manage/SKILL.md +244 -0
- package/.codex/prompts/issue-execute.md +11 -11
- package/ccw/dist/cli.d.ts.map +1 -1
- package/ccw/dist/cli.js +1 -0
- package/ccw/dist/cli.js.map +1 -1
- package/ccw/dist/commands/issue.d.ts +1 -0
- package/ccw/dist/commands/issue.d.ts.map +1 -1
- package/ccw/dist/commands/issue.js +86 -70
- package/ccw/dist/commands/issue.js.map +1 -1
- package/ccw/dist/core/routes/issue-routes.d.ts +3 -1
- package/ccw/dist/core/routes/issue-routes.d.ts.map +1 -1
- package/ccw/dist/core/routes/issue-routes.js +30 -18
- package/ccw/dist/core/routes/issue-routes.js.map +1 -1
- package/ccw/src/cli.ts +1 -0
- package/ccw/src/commands/issue.ts +111 -76
- package/ccw/src/core/routes/issue-routes.ts +34 -18
- package/ccw/src/templates/dashboard-js/views/issue-manager.js +14 -14
- package/package.json +1 -1
|
@@ -9,16 +9,39 @@ allowed-tools: TodoWrite(*), Task(*), Bash(*), Read(*), Write(*)
|
|
|
9
9
|
|
|
10
10
|
## Overview
|
|
11
11
|
|
|
12
|
-
Queue formation command using **issue-queue-agent** that analyzes all bound solutions, resolves conflicts,
|
|
12
|
+
Queue formation command using **issue-queue-agent** that analyzes all bound solutions, resolves conflicts, and creates an ordered execution queue.
|
|
13
|
+
|
|
14
|
+
## Output Requirements
|
|
15
|
+
|
|
16
|
+
**Generate Files:**
|
|
17
|
+
1. `.workflow/issues/queues/{queue-id}.json` - Full queue with tasks, conflicts, groups
|
|
18
|
+
2. `.workflow/issues/queues/index.json` - Update with new queue entry
|
|
19
|
+
|
|
20
|
+
**Return Summary:**
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"queue_id": "QUE-20251227-143000",
|
|
24
|
+
"total_tasks": N,
|
|
25
|
+
"execution_groups": [{ "id": "P1", "type": "parallel", "count": N }],
|
|
26
|
+
"conflicts_resolved": N,
|
|
27
|
+
"issues_queued": ["GH-123", "GH-124"]
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Completion Criteria:**
|
|
32
|
+
- [ ] Queue JSON generated with valid DAG (no cycles)
|
|
33
|
+
- [ ] All file conflicts resolved with rationale
|
|
34
|
+
- [ ] Semantic priority calculated for all tasks
|
|
35
|
+
- [ ] Execution groups assigned (parallel P* / sequential S*)
|
|
36
|
+
- [ ] Issue statuses updated to `queued` via `ccw issue update`
|
|
37
|
+
|
|
38
|
+
## Core Capabilities
|
|
13
39
|
|
|
14
|
-
**Core capabilities:**
|
|
15
40
|
- **Agent-driven**: issue-queue-agent handles all ordering logic
|
|
16
|
-
- ACE semantic search for relationship discovery
|
|
17
41
|
- Dependency DAG construction and cycle detection
|
|
18
42
|
- File conflict detection and resolution
|
|
19
43
|
- Semantic priority calculation (0.0-1.0)
|
|
20
44
|
- Parallel/Sequential group assignment
|
|
21
|
-
- Output global queue.json
|
|
22
45
|
|
|
23
46
|
## Storage Structure (Queue History)
|
|
24
47
|
|
|
@@ -77,10 +100,12 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
|
|
|
77
100
|
# Flags
|
|
78
101
|
--issue <id> Form queue for specific issue only
|
|
79
102
|
--append <id> Append issue to active queue (don't create new)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
103
|
+
|
|
104
|
+
# CLI subcommands (ccw issue queue ...)
|
|
105
|
+
ccw issue queue list List all queues with status
|
|
106
|
+
ccw issue queue switch <queue-id> Switch active queue
|
|
107
|
+
ccw issue queue archive Archive current queue
|
|
108
|
+
ccw issue queue delete <queue-id> Delete queue from history
|
|
84
109
|
```
|
|
85
110
|
|
|
86
111
|
## Execution Process
|
|
@@ -166,165 +191,93 @@ console.log(`Loaded ${allTasks.length} tasks from ${plannedIssues.length} issues
|
|
|
166
191
|
### Phase 2-4: Agent-Driven Queue Formation
|
|
167
192
|
|
|
168
193
|
```javascript
|
|
169
|
-
//
|
|
194
|
+
// Build minimal prompt - agent reads schema and handles ordering
|
|
170
195
|
const agentPrompt = `
|
|
171
|
-
## Tasks
|
|
172
|
-
|
|
173
|
-
${
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
196
|
+
## Order Tasks
|
|
197
|
+
|
|
198
|
+
**Tasks**: ${allTasks.length} from ${plannedIssues.length} issues
|
|
199
|
+
**Project Root**: ${process.cwd()}
|
|
200
|
+
|
|
201
|
+
### Input
|
|
202
|
+
\`\`\`json
|
|
203
|
+
${JSON.stringify(allTasks.map(t => ({
|
|
204
|
+
key: \`\${t.issue_id}:\${t.task.id}\`,
|
|
205
|
+
type: t.task.type,
|
|
206
|
+
file_context: t.task.file_context,
|
|
207
|
+
depends_on: t.task.depends_on
|
|
208
|
+
})), null, 2)}
|
|
209
|
+
\`\`\`
|
|
210
|
+
|
|
211
|
+
### Steps
|
|
212
|
+
1. Parse tasks: Extract task keys, types, file contexts, dependencies
|
|
213
|
+
2. Build DAG: Construct dependency graph from depends_on references
|
|
214
|
+
3. Detect cycles: Verify no circular dependencies exist (abort if found)
|
|
215
|
+
4. Detect conflicts: Identify file modification conflicts across issues
|
|
216
|
+
5. Resolve conflicts: Apply ordering rules (Create→Update→Delete, config→src→tests)
|
|
217
|
+
6. Calculate priority: Compute semantic priority (0.0-1.0) for each task
|
|
218
|
+
7. Assign groups: Assign parallel (P*) or sequential (S*) execution groups
|
|
219
|
+
8. Generate queue: Write queue JSON with ordered tasks
|
|
220
|
+
9. Update index: Update queues/index.json with new queue entry
|
|
221
|
+
|
|
222
|
+
### Rules
|
|
223
|
+
- **DAG Validity**: Output must be valid DAG with no circular dependencies
|
|
224
|
+
- **Conflict Resolution**: All file conflicts must be resolved with rationale
|
|
225
|
+
- **Ordering Priority**:
|
|
226
|
+
1. Create before Update (files must exist before modification)
|
|
227
|
+
2. Foundation before integration (config/ → src/)
|
|
228
|
+
3. Types before implementation (types/ → components/)
|
|
229
|
+
4. Core before tests (src/ → __tests__/)
|
|
230
|
+
5. Delete last (preserve dependencies until no longer needed)
|
|
231
|
+
- **Parallel Safety**: Tasks in same parallel group must have no file conflicts
|
|
232
|
+
- **Queue ID Format**: \`QUE-YYYYMMDD-HHMMSS\` (UTC timestamp)
|
|
233
|
+
|
|
234
|
+
### Generate Files
|
|
235
|
+
1. \`.workflow/issues/queues/\${queueId}.json\` - Full queue (schema: cat .claude/workflows/cli-templates/schemas/queue-schema.json)
|
|
236
|
+
2. \`.workflow/issues/queues/index.json\` - Update with new entry
|
|
237
|
+
|
|
238
|
+
### Return Summary
|
|
239
|
+
\`\`\`json
|
|
240
|
+
{
|
|
241
|
+
"queue_id": "QUE-YYYYMMDD-HHMMSS",
|
|
242
|
+
"total_tasks": N,
|
|
243
|
+
"execution_groups": [{ "id": "P1", "type": "parallel", "count": N }],
|
|
244
|
+
"conflicts_resolved": N,
|
|
245
|
+
"issues_queued": ["GH-123"]
|
|
246
|
+
}
|
|
247
|
+
\`\`\`
|
|
189
248
|
`;
|
|
190
249
|
|
|
191
250
|
const result = Task(
|
|
192
251
|
subagent_type="issue-queue-agent",
|
|
193
252
|
run_in_background=false,
|
|
194
|
-
description=`Order ${allTasks.length} tasks
|
|
253
|
+
description=`Order ${allTasks.length} tasks`,
|
|
195
254
|
prompt=agentPrompt
|
|
196
255
|
);
|
|
197
256
|
|
|
198
|
-
|
|
199
|
-
const agentOutput = JSON.parse(result);
|
|
200
|
-
|
|
201
|
-
if (!agentOutput.success) {
|
|
202
|
-
console.error(`Queue formation failed: ${agentOutput.error}`);
|
|
203
|
-
if (agentOutput.cycles) {
|
|
204
|
-
console.error('Circular dependencies:', agentOutput.cycles.join(', '));
|
|
205
|
-
}
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
257
|
+
const summary = JSON.parse(result);
|
|
208
258
|
```
|
|
209
259
|
|
|
210
|
-
### Phase 5:
|
|
260
|
+
### Phase 5: Summary & Status Update
|
|
211
261
|
|
|
212
262
|
```javascript
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
// Write queue.json
|
|
216
|
-
Write('.workflow/issues/queue.json', JSON.stringify(queueOutput, null, 2));
|
|
217
|
-
|
|
218
|
-
// Update issue statuses in issues.jsonl
|
|
219
|
-
const updatedIssues = allIssues.map(issue => {
|
|
220
|
-
if (plannedIssues.find(p => p.id === issue.id)) {
|
|
221
|
-
return {
|
|
222
|
-
...issue,
|
|
223
|
-
status: 'queued',
|
|
224
|
-
queued_at: new Date().toISOString(),
|
|
225
|
-
updated_at: new Date().toISOString()
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
return issue;
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
Write(issuesPath, updatedIssues.map(i => JSON.stringify(i)).join('\n'));
|
|
232
|
-
|
|
233
|
-
// Display summary
|
|
263
|
+
// Agent already generated queue files, use summary
|
|
234
264
|
console.log(`
|
|
235
|
-
## Queue Formed
|
|
265
|
+
## Queue Formed: ${summary.queue_id}
|
|
236
266
|
|
|
237
|
-
**
|
|
238
|
-
**Issues**: ${
|
|
239
|
-
**
|
|
267
|
+
**Tasks**: ${summary.total_tasks}
|
|
268
|
+
**Issues**: ${summary.issues_queued.join(', ')}
|
|
269
|
+
**Groups**: ${summary.execution_groups.map(g => `${g.id}(${g.count})`).join(', ')}
|
|
270
|
+
**Conflicts Resolved**: ${summary.conflicts_resolved}
|
|
240
271
|
|
|
241
|
-
|
|
242
|
-
${(queueOutput.execution_groups || []).map(g => {
|
|
243
|
-
const type = g.type === 'parallel' ? 'Parallel' : 'Sequential';
|
|
244
|
-
return `- ${g.id} (${type}): ${g.task_count} tasks`;
|
|
245
|
-
}).join('\n')}
|
|
246
|
-
|
|
247
|
-
### Next Steps
|
|
248
|
-
1. Review queue: \`ccw issue queue list\`
|
|
249
|
-
2. Execute: \`/issue:execute\`
|
|
272
|
+
Next: \`/issue:execute\`
|
|
250
273
|
`);
|
|
251
|
-
```
|
|
252
274
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
```json
|
|
258
|
-
{
|
|
259
|
-
"id": "QUE-20251227-143000",
|
|
260
|
-
"name": "Auth Feature Queue",
|
|
261
|
-
"status": "active",
|
|
262
|
-
"issue_ids": ["GH-123", "GH-124"],
|
|
263
|
-
|
|
264
|
-
"queue": [
|
|
265
|
-
{
|
|
266
|
-
"queue_id": "Q-001",
|
|
267
|
-
"issue_id": "GH-123",
|
|
268
|
-
"solution_id": "SOL-001",
|
|
269
|
-
"task_id": "T1",
|
|
270
|
-
"status": "pending",
|
|
271
|
-
"execution_order": 1,
|
|
272
|
-
"execution_group": "P1",
|
|
273
|
-
"depends_on": [],
|
|
274
|
-
"semantic_priority": 0.7,
|
|
275
|
-
"queued_at": "2025-12-26T10:00:00Z"
|
|
276
|
-
}
|
|
277
|
-
],
|
|
278
|
-
|
|
279
|
-
"conflicts": [
|
|
280
|
-
{
|
|
281
|
-
"type": "file_conflict",
|
|
282
|
-
"file": "src/auth.ts",
|
|
283
|
-
"tasks": ["GH-123:T1", "GH-124:T2"],
|
|
284
|
-
"resolution": "sequential",
|
|
285
|
-
"resolution_order": ["GH-123:T1", "GH-124:T2"],
|
|
286
|
-
"rationale": "T1 creates file before T2 updates",
|
|
287
|
-
"resolved": true
|
|
288
|
-
}
|
|
289
|
-
],
|
|
290
|
-
|
|
291
|
-
"execution_groups": [
|
|
292
|
-
{ "id": "P1", "type": "parallel", "task_count": 3, "tasks": ["GH-123:T1", "GH-124:T1", "GH-125:T1"] },
|
|
293
|
-
{ "id": "S2", "type": "sequential", "task_count": 2, "tasks": ["GH-123:T2", "GH-124:T2"] }
|
|
294
|
-
],
|
|
295
|
-
|
|
296
|
-
"_metadata": {
|
|
297
|
-
"version": "2.0",
|
|
298
|
-
"total_tasks": 5,
|
|
299
|
-
"pending_count": 3,
|
|
300
|
-
"completed_count": 2,
|
|
301
|
-
"failed_count": 0,
|
|
302
|
-
"created_at": "2025-12-26T10:00:00Z",
|
|
303
|
-
"updated_at": "2025-12-26T11:00:00Z",
|
|
304
|
-
"source": "issue-queue-agent"
|
|
305
|
-
}
|
|
275
|
+
// Update issue statuses via CLI
|
|
276
|
+
for (const issueId of summary.issues_queued) {
|
|
277
|
+
Bash(`ccw issue update ${issueId} --status queued`);
|
|
306
278
|
}
|
|
307
279
|
```
|
|
308
280
|
|
|
309
|
-
### Queue ID Format
|
|
310
|
-
|
|
311
|
-
```
|
|
312
|
-
QUE-YYYYMMDD-HHMMSS
|
|
313
|
-
例如: QUE-20251227-143052
|
|
314
|
-
```
|
|
315
|
-
|
|
316
|
-
## Semantic Priority Rules
|
|
317
|
-
|
|
318
|
-
| Factor | Priority Boost |
|
|
319
|
-
|--------|---------------|
|
|
320
|
-
| Create action | +0.2 |
|
|
321
|
-
| Configure action | +0.15 |
|
|
322
|
-
| Implement action | +0.1 |
|
|
323
|
-
| Config/Types scope | +0.1 |
|
|
324
|
-
| Refactor action | -0.05 |
|
|
325
|
-
| Test action | -0.1 |
|
|
326
|
-
| Delete action | -0.15 |
|
|
327
|
-
|
|
328
281
|
## Error Handling
|
|
329
282
|
|
|
330
283
|
| Error | Resolution |
|
|
@@ -334,19 +287,6 @@ QUE-YYYYMMDD-HHMMSS
|
|
|
334
287
|
| Unresolved conflicts | Agent resolves using ordering rules |
|
|
335
288
|
| Invalid task reference | Skip and warn |
|
|
336
289
|
|
|
337
|
-
## Agent Integration
|
|
338
|
-
|
|
339
|
-
The command uses `issue-queue-agent` which:
|
|
340
|
-
1. Builds dependency DAG from task depends_on fields
|
|
341
|
-
2. Detects circular dependencies (aborts if found)
|
|
342
|
-
3. Identifies file modification conflicts across issues
|
|
343
|
-
4. Resolves conflicts using semantic ordering rules
|
|
344
|
-
5. Calculates priority (0.0-1.0) for each task
|
|
345
|
-
6. Assigns parallel/sequential execution groups
|
|
346
|
-
7. Outputs structured queue JSON
|
|
347
|
-
|
|
348
|
-
See `.claude/agents/issue-queue-agent.md` for agent specification.
|
|
349
|
-
|
|
350
290
|
## Related Commands
|
|
351
291
|
|
|
352
292
|
- `/issue:plan` - Plan issues and bind solutions
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: issue-manage
|
|
3
|
+
description: Interactive issue management with menu-driven CRUD operations. Use when managing issues, viewing issue status, editing issue fields, or performing bulk operations on issues. Triggers on "manage issue", "list issues", "edit issue", "delete issue", "bulk update", "issue dashboard".
|
|
4
|
+
allowed-tools: Bash, Read, Write, AskUserQuestion, Task, Glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Issue Management Skill
|
|
8
|
+
|
|
9
|
+
Interactive menu-driven interface for issue CRUD operations via `ccw issue` CLI.
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
Ask me:
|
|
14
|
+
- "Show all issues" → List with filters
|
|
15
|
+
- "View issue GH-123" → Detailed inspection
|
|
16
|
+
- "Edit issue priority" → Modify fields
|
|
17
|
+
- "Delete old issues" → Remove with confirmation
|
|
18
|
+
- "Bulk update status" → Batch operations
|
|
19
|
+
|
|
20
|
+
## CLI Endpoints
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Core operations
|
|
24
|
+
ccw issue list # List all issues
|
|
25
|
+
ccw issue list <id> --json # Get issue details
|
|
26
|
+
ccw issue status <id> # Detailed status
|
|
27
|
+
ccw issue init <id> --title "..." # Create issue
|
|
28
|
+
ccw issue task <id> --title "..." # Add task
|
|
29
|
+
ccw issue bind <id> <solution-id> # Bind solution
|
|
30
|
+
|
|
31
|
+
# Queue management
|
|
32
|
+
ccw issue queue # List current queue
|
|
33
|
+
ccw issue queue add <id> # Add to queue
|
|
34
|
+
ccw issue queue list # Queue history
|
|
35
|
+
ccw issue queue switch <queue-id> # Switch queue
|
|
36
|
+
ccw issue queue archive # Archive queue
|
|
37
|
+
ccw issue queue delete <queue-id> # Delete queue
|
|
38
|
+
ccw issue next # Get next task
|
|
39
|
+
ccw issue done <queue-id> # Mark completed
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Operations
|
|
43
|
+
|
|
44
|
+
### 1. LIST 📋
|
|
45
|
+
|
|
46
|
+
Filter and browse issues:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
┌─ Filter by Status ─────────────────┐
|
|
50
|
+
│ □ All □ Registered │
|
|
51
|
+
│ □ Planned □ Queued │
|
|
52
|
+
│ □ Executing □ Completed │
|
|
53
|
+
└────────────────────────────────────┘
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Flow**:
|
|
57
|
+
1. Ask filter preferences → `ccw issue list --json`
|
|
58
|
+
2. Display table: ID | Status | Priority | Title
|
|
59
|
+
3. Select issue for detail view
|
|
60
|
+
|
|
61
|
+
### 2. VIEW 🔍
|
|
62
|
+
|
|
63
|
+
Detailed issue inspection:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
┌─ Issue: GH-123 ─────────────────────┐
|
|
67
|
+
│ Title: Fix authentication bug │
|
|
68
|
+
│ Status: planned | Priority: P2 │
|
|
69
|
+
│ Solutions: 2 (1 bound) │
|
|
70
|
+
│ Tasks: 5 pending │
|
|
71
|
+
└─────────────────────────────────────┘
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Flow**:
|
|
75
|
+
1. Fetch `ccw issue status <id> --json`
|
|
76
|
+
2. Display issue + solutions + tasks
|
|
77
|
+
3. Offer actions: Edit | Plan | Queue | Delete
|
|
78
|
+
|
|
79
|
+
### 3. EDIT ✏️
|
|
80
|
+
|
|
81
|
+
Modify issue fields:
|
|
82
|
+
|
|
83
|
+
| Field | Options |
|
|
84
|
+
|-------|---------|
|
|
85
|
+
| Title | Free text |
|
|
86
|
+
| Priority | P1-P5 |
|
|
87
|
+
| Status | registered → completed |
|
|
88
|
+
| Context | Problem description |
|
|
89
|
+
| Labels | Comma-separated |
|
|
90
|
+
|
|
91
|
+
**Flow**:
|
|
92
|
+
1. Select field to edit
|
|
93
|
+
2. Show current value
|
|
94
|
+
3. Collect new value via AskUserQuestion
|
|
95
|
+
4. Update `.workflow/issues/issues.jsonl`
|
|
96
|
+
|
|
97
|
+
### 4. DELETE 🗑️
|
|
98
|
+
|
|
99
|
+
Remove with confirmation:
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
⚠️ Delete issue GH-123?
|
|
103
|
+
This will also remove:
|
|
104
|
+
- Associated solutions
|
|
105
|
+
- Queued tasks
|
|
106
|
+
|
|
107
|
+
[Delete] [Cancel]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Flow**:
|
|
111
|
+
1. Confirm deletion via AskUserQuestion
|
|
112
|
+
2. Remove from `issues.jsonl`
|
|
113
|
+
3. Clean up `solutions/<id>.jsonl`
|
|
114
|
+
4. Remove from `queue.json`
|
|
115
|
+
|
|
116
|
+
### 5. BULK 📦
|
|
117
|
+
|
|
118
|
+
Batch operations:
|
|
119
|
+
|
|
120
|
+
| Operation | Description |
|
|
121
|
+
|-----------|-------------|
|
|
122
|
+
| Update Status | Change multiple issues |
|
|
123
|
+
| Update Priority | Batch priority change |
|
|
124
|
+
| Add Labels | Tag multiple issues |
|
|
125
|
+
| Delete Multiple | Bulk removal |
|
|
126
|
+
| Queue All Planned | Add all planned to queue |
|
|
127
|
+
| Retry All Failed | Reset failed tasks |
|
|
128
|
+
|
|
129
|
+
## Workflow
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
┌──────────────────────────────────────┐
|
|
133
|
+
│ Main Menu │
|
|
134
|
+
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │
|
|
135
|
+
│ │List│ │View│ │Edit│ │Bulk│ │
|
|
136
|
+
│ └──┬─┘ └──┬─┘ └──┬─┘ └──┬─┘ │
|
|
137
|
+
└─────┼──────┼──────┼──────┼──────────┘
|
|
138
|
+
│ │ │ │
|
|
139
|
+
▼ ▼ ▼ ▼
|
|
140
|
+
Filter Detail Fields Multi
|
|
141
|
+
Select Actions Update Select
|
|
142
|
+
│ │ │ │
|
|
143
|
+
└──────┴──────┴──────┘
|
|
144
|
+
│
|
|
145
|
+
▼
|
|
146
|
+
Back to Menu
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Implementation Guide
|
|
150
|
+
|
|
151
|
+
### Entry Point
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
// Parse input for issue ID
|
|
155
|
+
const issueId = input.match(/^([A-Z]+-\d+|ISS-\d+)/i)?.[1];
|
|
156
|
+
|
|
157
|
+
// Show main menu
|
|
158
|
+
await showMainMenu(issueId);
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Main Menu Pattern
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
// 1. Fetch dashboard data
|
|
165
|
+
const issues = JSON.parse(Bash('ccw issue list --json') || '[]');
|
|
166
|
+
const queue = JSON.parse(Bash('ccw issue queue --json 2>/dev/null') || '{}');
|
|
167
|
+
|
|
168
|
+
// 2. Display summary
|
|
169
|
+
console.log(`Issues: ${issues.length} | Queue: ${queue.pending_count || 0} pending`);
|
|
170
|
+
|
|
171
|
+
// 3. Ask action via AskUserQuestion
|
|
172
|
+
const action = AskUserQuestion({
|
|
173
|
+
questions: [{
|
|
174
|
+
question: 'What would you like to do?',
|
|
175
|
+
header: 'Action',
|
|
176
|
+
options: [
|
|
177
|
+
{ label: 'List Issues', description: 'Browse with filters' },
|
|
178
|
+
{ label: 'View Issue', description: 'Detail view' },
|
|
179
|
+
{ label: 'Edit Issue', description: 'Modify fields' },
|
|
180
|
+
{ label: 'Bulk Operations', description: 'Batch actions' }
|
|
181
|
+
]
|
|
182
|
+
}]
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// 4. Route to handler
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Filter Pattern
|
|
189
|
+
|
|
190
|
+
```javascript
|
|
191
|
+
const filter = AskUserQuestion({
|
|
192
|
+
questions: [{
|
|
193
|
+
question: 'Filter by status?',
|
|
194
|
+
header: 'Filter',
|
|
195
|
+
multiSelect: true,
|
|
196
|
+
options: [
|
|
197
|
+
{ label: 'All', description: 'Show all' },
|
|
198
|
+
{ label: 'Registered', description: 'Unplanned' },
|
|
199
|
+
{ label: 'Planned', description: 'Has solution' },
|
|
200
|
+
{ label: 'Executing', description: 'In progress' }
|
|
201
|
+
]
|
|
202
|
+
}]
|
|
203
|
+
});
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Edit Pattern
|
|
207
|
+
|
|
208
|
+
```javascript
|
|
209
|
+
// Select field
|
|
210
|
+
const field = AskUserQuestion({...});
|
|
211
|
+
|
|
212
|
+
// Get new value based on field type
|
|
213
|
+
// For Priority: show P1-P5 options
|
|
214
|
+
// For Status: show status options
|
|
215
|
+
// For Title: accept free text via "Other"
|
|
216
|
+
|
|
217
|
+
// Update file
|
|
218
|
+
const issuesPath = '.workflow/issues/issues.jsonl';
|
|
219
|
+
// Read → Parse → Update → Write
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Data Files
|
|
223
|
+
|
|
224
|
+
| File | Purpose |
|
|
225
|
+
|------|---------|
|
|
226
|
+
| `.workflow/issues/issues.jsonl` | Issue records |
|
|
227
|
+
| `.workflow/issues/solutions/<id>.jsonl` | Solutions per issue |
|
|
228
|
+
| `.workflow/issues/queue.json` | Execution queue |
|
|
229
|
+
|
|
230
|
+
## Error Handling
|
|
231
|
+
|
|
232
|
+
| Error | Resolution |
|
|
233
|
+
|-------|------------|
|
|
234
|
+
| No issues found | Suggest `/issue:new` to create |
|
|
235
|
+
| Issue not found | Show available issues, re-prompt |
|
|
236
|
+
| Write failure | Check file permissions |
|
|
237
|
+
| Queue error | Display ccw error message |
|
|
238
|
+
|
|
239
|
+
## Related Commands
|
|
240
|
+
|
|
241
|
+
- `/issue:new` - Create structured issue
|
|
242
|
+
- `/issue:plan` - Generate solution
|
|
243
|
+
- `/issue:queue` - Form execution queue
|
|
244
|
+
- `/issue:execute` - Execute tasks
|
|
@@ -21,7 +21,7 @@ WHILE task exists:
|
|
|
21
21
|
- TEST: Run task.test commands
|
|
22
22
|
- VERIFY: Check task.acceptance criteria
|
|
23
23
|
- COMMIT: Stage files, commit with task.commit.message_template
|
|
24
|
-
3. Report completion via ccw issue complete <
|
|
24
|
+
3. Report completion via ccw issue complete <item_id>
|
|
25
25
|
4. Fetch next task via ccw issue next
|
|
26
26
|
|
|
27
27
|
WHEN queue empty:
|
|
@@ -37,7 +37,7 @@ ccw issue next
|
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
This returns JSON with the full task definition:
|
|
40
|
-
- `
|
|
40
|
+
- `item_id`: Unique task identifier in queue (e.g., "T-1")
|
|
41
41
|
- `issue_id`: Parent issue ID (e.g., "ISSUE-20251227-001")
|
|
42
42
|
- `task`: Full task definition with implementation steps
|
|
43
43
|
- `context`: Relevant files and patterns
|
|
@@ -51,7 +51,7 @@ Expected task structure:
|
|
|
51
51
|
|
|
52
52
|
```json
|
|
53
53
|
{
|
|
54
|
-
"
|
|
54
|
+
"item_id": "T-1",
|
|
55
55
|
"issue_id": "ISSUE-20251227-001",
|
|
56
56
|
"solution_id": "SOL-001",
|
|
57
57
|
"task": {
|
|
@@ -159,7 +159,7 @@ git add path/to/file1.ts path/to/file2.ts ...
|
|
|
159
159
|
git commit -m "$(cat <<'EOF'
|
|
160
160
|
[task.commit.message_template]
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
Item-ID: [item_id]
|
|
163
163
|
Issue-ID: [issue_id]
|
|
164
164
|
Task-ID: [task.id]
|
|
165
165
|
EOF
|
|
@@ -180,7 +180,7 @@ EOF
|
|
|
180
180
|
After commit succeeds, report to queue system:
|
|
181
181
|
|
|
182
182
|
```bash
|
|
183
|
-
ccw issue complete [
|
|
183
|
+
ccw issue complete [item_id] --result '{
|
|
184
184
|
"files_modified": ["path1", "path2"],
|
|
185
185
|
"tests_passed": true,
|
|
186
186
|
"acceptance_passed": true,
|
|
@@ -193,7 +193,7 @@ ccw issue complete [queue_id] --result '{
|
|
|
193
193
|
**If task failed and cannot be fixed:**
|
|
194
194
|
|
|
195
195
|
```bash
|
|
196
|
-
ccw issue fail [
|
|
196
|
+
ccw issue fail [item_id] --reason "Phase [X] failed: [details]"
|
|
197
197
|
```
|
|
198
198
|
|
|
199
199
|
## Step 5: Continue to Next Task
|
|
@@ -206,7 +206,7 @@ ccw issue next
|
|
|
206
206
|
|
|
207
207
|
**Output progress:**
|
|
208
208
|
```
|
|
209
|
-
✓ [N/M] Completed: [
|
|
209
|
+
✓ [N/M] Completed: [item_id] - [task.title]
|
|
210
210
|
→ Fetching next task...
|
|
211
211
|
```
|
|
212
212
|
|
|
@@ -221,10 +221,10 @@ When `ccw issue next` returns `{ "status": "empty" }`:
|
|
|
221
221
|
|
|
222
222
|
**Total Tasks Executed**: N
|
|
223
223
|
**All Commits**:
|
|
224
|
-
| # |
|
|
225
|
-
|
|
226
|
-
| 1 |
|
|
227
|
-
| 2 |
|
|
224
|
+
| # | Item ID | Task | Commit |
|
|
225
|
+
|---|---------|------|--------|
|
|
226
|
+
| 1 | T-1 | Task title | abc123 |
|
|
227
|
+
| 2 | T-2 | Task title | def456 |
|
|
228
228
|
|
|
229
229
|
**Files Modified**:
|
|
230
230
|
- path/to/file1.ts
|
package/ccw/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuEA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAuEA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA0NxC"}
|
package/ccw/dist/cli.js
CHANGED
|
@@ -250,6 +250,7 @@ export function run(argv) {
|
|
|
250
250
|
.option('--priority <n>', 'Task priority (1-5)')
|
|
251
251
|
.option('--format <fmt>', 'Output format: json, markdown')
|
|
252
252
|
.option('--json', 'Output as JSON')
|
|
253
|
+
.option('--ids', 'List only IDs (one per line, for scripting)')
|
|
253
254
|
.option('--force', 'Force operation')
|
|
254
255
|
// New options for solution/queue management
|
|
255
256
|
.option('--solution <path>', 'Solution JSON file path')
|