claude-code-workflow 7.2.29 → 7.2.30

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.
Files changed (124) hide show
  1. package/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json +2 -2
  2. package/.ccw/workflows/cli-templates/schemas/task-schema.json +14 -7
  3. package/.claude/agents/action-planning-agent.md +7 -4
  4. package/.claude/agents/cli-explore-agent.md +77 -63
  5. package/.claude/agents/cli-lite-planning-agent.md +11 -10
  6. package/.claude/agents/issue-plan-agent.md +421 -426
  7. package/.claude/commands/workflow/spec/setup.md +1 -1
  8. package/.claude/skills/ccw-chain/SKILL.md +119 -0
  9. package/.claude/skills/ccw-chain/chains/ccw-cycle.json +21 -0
  10. package/.claude/skills/ccw-chain/chains/ccw-exploration.json +47 -0
  11. package/.claude/skills/ccw-chain/chains/ccw-issue.json +33 -0
  12. package/.claude/skills/ccw-chain/chains/ccw-lightweight.json +57 -0
  13. package/.claude/skills/ccw-chain/chains/ccw-main.json +52 -0
  14. package/.claude/skills/ccw-chain/chains/ccw-standard.json +39 -0
  15. package/.claude/skills/ccw-chain/chains/ccw-team.json +10 -0
  16. package/.claude/skills/ccw-chain/chains/ccw-with-file.json +31 -0
  17. package/.claude/skills/ccw-chain/phases/analyze-with-file.md +788 -0
  18. package/.claude/skills/ccw-chain/phases/brainstorm/SKILL.md +408 -0
  19. package/.claude/skills/ccw-chain/phases/brainstorm/phases/01-mode-routing.md +207 -0
  20. package/.claude/skills/ccw-chain/phases/brainstorm/phases/02-artifacts.md +567 -0
  21. package/.claude/skills/ccw-chain/phases/brainstorm/phases/03-role-analysis.md +748 -0
  22. package/.claude/skills/ccw-chain/phases/brainstorm/phases/04-synthesis.md +827 -0
  23. package/.claude/skills/ccw-chain/phases/brainstorm-with-file.md +482 -0
  24. package/.claude/skills/ccw-chain/phases/collaborative-plan-with-file.md +639 -0
  25. package/.claude/skills/ccw-chain/phases/debug-with-file.md +656 -0
  26. package/.claude/skills/ccw-chain/phases/integration-test-cycle.md +936 -0
  27. package/.claude/skills/ccw-chain/phases/issue-convert-to-plan.md +720 -0
  28. package/.claude/skills/ccw-chain/phases/issue-discover.md +483 -0
  29. package/.claude/skills/ccw-chain/phases/issue-execute.md +629 -0
  30. package/.claude/skills/ccw-chain/phases/issue-from-brainstorm.md +382 -0
  31. package/.claude/skills/ccw-chain/phases/issue-plan.md +343 -0
  32. package/.claude/skills/ccw-chain/phases/issue-queue.md +464 -0
  33. package/.claude/skills/ccw-chain/phases/refactor-cycle.md +852 -0
  34. package/.claude/skills/ccw-chain/phases/review-cycle/SKILL.md +132 -0
  35. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-fix.md +760 -0
  36. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-module.md +764 -0
  37. package/.claude/skills/ccw-chain/phases/review-cycle/phases/review-session.md +775 -0
  38. package/.claude/skills/ccw-chain/phases/roadmap-with-file.md +544 -0
  39. package/.claude/skills/ccw-chain/phases/spec-generator/SKILL.md +338 -0
  40. package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-5-requirement-clarification.md +404 -0
  41. package/.claude/skills/ccw-chain/phases/spec-generator/phases/01-discovery.md +257 -0
  42. package/.claude/skills/ccw-chain/phases/spec-generator/phases/02-product-brief.md +274 -0
  43. package/.claude/skills/ccw-chain/phases/spec-generator/phases/03-requirements.md +184 -0
  44. package/.claude/skills/ccw-chain/phases/spec-generator/phases/04-architecture.md +248 -0
  45. package/.claude/skills/ccw-chain/phases/spec-generator/phases/05-epics-stories.md +178 -0
  46. package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-5-auto-fix.md +144 -0
  47. package/.claude/skills/ccw-chain/phases/spec-generator/phases/06-readiness-check.md +480 -0
  48. package/.claude/skills/ccw-chain/phases/team-planex.md +123 -0
  49. package/.claude/skills/ccw-chain/phases/ui-design-explore-auto.md +678 -0
  50. package/.claude/skills/ccw-chain/phases/unified-execute-with-file.md +870 -0
  51. package/.claude/skills/ccw-chain/phases/workflow-execute/SKILL.md +625 -0
  52. package/.claude/skills/ccw-chain/phases/workflow-execute/phases/06-review.md +215 -0
  53. package/.claude/skills/ccw-chain/phases/workflow-lite-plan.md +616 -0
  54. package/.claude/skills/ccw-chain/phases/workflow-multi-cli-plan.md +424 -0
  55. package/.claude/skills/ccw-chain/phases/workflow-plan/SKILL.md +466 -0
  56. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/01-session-discovery.md +99 -0
  57. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/02-context-gathering.md +338 -0
  58. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/03-conflict-resolution.md +422 -0
  59. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/04-task-generation.md +440 -0
  60. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/05-plan-verify.md +395 -0
  61. package/.claude/skills/ccw-chain/phases/workflow-plan/phases/06-replan.md +594 -0
  62. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/SKILL.md +527 -0
  63. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/01-session-discovery.md +57 -0
  64. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/02-context-gathering.md +407 -0
  65. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/03-test-coverage-analysis.md +172 -0
  66. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -0
  67. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/05-tdd-task-generation.md +473 -0
  68. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/06-tdd-structure-validation.md +189 -0
  69. package/.claude/skills/ccw-chain/phases/workflow-tdd-plan/phases/07-tdd-verify.md +635 -0
  70. package/.claude/skills/ccw-chain/phases/workflow-test-fix/SKILL.md +482 -0
  71. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/01-session-start.md +60 -0
  72. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/02-test-context-gather.md +493 -0
  73. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/03-test-concept-enhanced.md +150 -0
  74. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/04-test-task-generate.md +346 -0
  75. package/.claude/skills/ccw-chain/phases/workflow-test-fix/phases/05-test-cycle-execute.md +538 -0
  76. package/.claude/skills/ccw-chain/specs/auto-mode.md +47 -0
  77. package/.claude/skills/ccw-chain/specs/intent-patterns.md +60 -0
  78. package/.claude/skills/chain-loader/SKILL.md +78 -0
  79. package/.claude/skills/chain-loader/phases/01-analyze-skill.md +53 -0
  80. package/.claude/skills/chain-loader/phases/02-design-graph.md +73 -0
  81. package/.claude/skills/chain-loader/phases/03-generate-validate.md +75 -0
  82. package/.claude/skills/chain-loader/specs/chain-schema.md +99 -0
  83. package/.claude/skills/chain-loader/specs/design-patterns.md +99 -0
  84. package/.claude/skills/chain-loader/templates/chain-json.md +63 -0
  85. package/.claude/skills/review-cycle/phases/review-module.md +764 -764
  86. package/.claude/skills/review-cycle/phases/review-session.md +775 -775
  87. package/.claude/skills/workflow-multi-cli-plan/SKILL.md +2 -2
  88. package/.claude/skills/workflow-plan/phases/03-conflict-resolution.md +422 -422
  89. package/.claude/skills/workflow-plan/phases/05-plan-verify.md +395 -395
  90. package/.claude/skills/workflow-tdd-plan/phases/02-context-gathering.md +407 -407
  91. package/.claude/skills/workflow-tdd-plan/phases/04-conflict-resolution.md +426 -426
  92. package/.claude/skills/workflow-test-fix/phases/02-test-context-gather.md +493 -493
  93. package/README.md +14 -0
  94. package/ccw/dist/core/routes/litellm-api-routes.d.ts.map +1 -1
  95. package/ccw/dist/core/routes/litellm-api-routes.js +0 -23
  96. package/ccw/dist/core/routes/litellm-api-routes.js.map +1 -1
  97. package/ccw/dist/tools/chain-loader.d.ts +10 -0
  98. package/ccw/dist/tools/chain-loader.d.ts.map +1 -0
  99. package/ccw/dist/tools/chain-loader.js +642 -0
  100. package/ccw/dist/tools/chain-loader.js.map +1 -0
  101. package/ccw/dist/tools/index.d.ts.map +1 -1
  102. package/ccw/dist/tools/index.js +2 -0
  103. package/ccw/dist/tools/index.js.map +1 -1
  104. package/ccw/dist/tools/json-builder.js +20 -0
  105. package/ccw/dist/tools/json-builder.js.map +1 -1
  106. package/ccw/dist/types/chain-types.d.ts +72 -0
  107. package/ccw/dist/types/chain-types.d.ts.map +1 -0
  108. package/ccw/dist/types/chain-types.js +5 -0
  109. package/ccw/dist/types/chain-types.js.map +1 -0
  110. package/ccw/scripts/prepublish-clean.mjs +0 -1
  111. package/package.json +1 -3
  112. package/ccw-litellm/README.md +0 -180
  113. package/ccw-litellm/pyproject.toml +0 -35
  114. package/ccw-litellm/src/ccw_litellm/__init__.py +0 -47
  115. package/ccw-litellm/src/ccw_litellm/cli.py +0 -108
  116. package/ccw-litellm/src/ccw_litellm/clients/__init__.py +0 -12
  117. package/ccw-litellm/src/ccw_litellm/clients/litellm_embedder.py +0 -270
  118. package/ccw-litellm/src/ccw_litellm/clients/litellm_llm.py +0 -198
  119. package/ccw-litellm/src/ccw_litellm/config/__init__.py +0 -22
  120. package/ccw-litellm/src/ccw_litellm/config/loader.py +0 -343
  121. package/ccw-litellm/src/ccw_litellm/config/models.py +0 -162
  122. package/ccw-litellm/src/ccw_litellm/interfaces/__init__.py +0 -14
  123. package/ccw-litellm/src/ccw_litellm/interfaces/embedder.py +0 -52
  124. package/ccw-litellm/src/ccw_litellm/interfaces/llm.py +0 -45
@@ -0,0 +1,464 @@
1
+ ---
2
+ name: queue
3
+ description: Form execution queue from bound solutions using issue-queue-agent (solution-level)
4
+ argument-hint: "[-y|--yes] [--queues <n>] [--issue <id>]"
5
+ allowed-tools: TodoWrite(*), Agent(*), Bash(*), Read(*), Write(*)
6
+ ---
7
+
8
+ ## Auto Mode
9
+
10
+ When `--yes` or `-y`: Auto-confirm queue formation, use recommended conflict resolutions.
11
+
12
+ # Issue Queue Command (/issue:queue)
13
+
14
+ ## Overview
15
+
16
+ Queue formation command using **issue-queue-agent** that analyzes all bound solutions, resolves **inter-solution** conflicts, and creates an ordered execution queue at **solution level**.
17
+
18
+ **Design Principle**: Queue items are **solutions**, not individual tasks. Each executor receives a complete solution with all its tasks.
19
+
20
+ ## Core Capabilities
21
+
22
+ - **Agent-driven**: issue-queue-agent handles all ordering logic
23
+ - **Solution-level granularity**: Queue items are solutions, not tasks
24
+ - **Conflict clarification**: High-severity conflicts prompt user decision
25
+ - Semantic priority calculation per solution (0.0-1.0)
26
+ - Parallel/Sequential group assignment for solutions
27
+
28
+ ## Core Guidelines
29
+
30
+ **⚠️ Data Access Principle**: Issues and queue files can grow very large. To avoid context overflow:
31
+
32
+ | Operation | Correct | Incorrect |
33
+ |-----------|---------|-----------|
34
+ | List issues (brief) | `ccw issue list --status planned --brief` | `Read('issues.jsonl')` |
35
+ | **Batch solutions (NEW)** | `ccw issue solutions --status planned --brief` | Loop `ccw issue solution <id>` |
36
+ | List queue (brief) | `ccw issue queue --brief` | `Read('queues/*.json')` |
37
+ | Read issue details | `ccw issue status <id> --json` | `Read('issues.jsonl')` |
38
+ | Get next item | `ccw issue next --json` | `Read('queues/*.json')` |
39
+ | Update status | `ccw issue update <id> --status ...` | Direct file edit |
40
+ | Sync from queue | `ccw issue update --from-queue` | Direct file edit |
41
+ | Read solution (single) | `ccw issue solution <id> --brief` | `Read('solutions/*.jsonl')` |
42
+
43
+ **Output Options**:
44
+ - `--brief`: JSON with minimal fields (id, status, counts)
45
+ - `--json`: Full JSON (agent use only)
46
+
47
+ **Orchestration vs Execution**:
48
+ - **Command (orchestrator)**: Use `--brief` for minimal context
49
+ - **Agent (executor)**: Fetch full details → `ccw issue status <id> --json`
50
+
51
+ **ALWAYS** use CLI commands for CRUD operations. **NEVER** read entire `issues.jsonl` or `queues/*.json` directly.
52
+
53
+
54
+
55
+ ## Usage
56
+
57
+ ```bash
58
+ /issue:queue [FLAGS]
59
+
60
+ # Examples
61
+ /issue:queue # Form NEW queue from all bound solutions
62
+ /issue:queue --queues 3 # Form 3 parallel queues (solutions distributed)
63
+ /issue:queue --issue GH-123 # Form queue for specific issue only
64
+ /issue:queue --append GH-124 # Append to active queue
65
+ /issue:queue --list # List all queues (history)
66
+ /issue:queue --switch QUE-xxx # Switch active queue
67
+ /issue:queue --archive # Archive completed active queue
68
+
69
+ # Flags
70
+ --queues <n> Number of parallel queues (default: 1)
71
+ --issue <id> Form queue for specific issue only
72
+ --append <id> Append issue to active queue (don't create new)
73
+ --force Skip active queue check, always create new queue
74
+
75
+ # CLI subcommands (ccw issue queue ...)
76
+ ccw issue queue list List all queues with status
77
+ ccw issue queue add <issue-id> Add issue to queue (interactive if active queue exists)
78
+ ccw issue queue add <issue-id> -f Add to new queue without prompt (force)
79
+ ccw issue queue merge <src> --queue <target> Merge source queue into target queue
80
+ ccw issue queue switch <queue-id> Switch active queue
81
+ ccw issue queue archive Archive current queue
82
+ ccw issue queue delete <queue-id> Delete queue from history
83
+ ```
84
+
85
+ ## Execution Process
86
+
87
+ ```
88
+ Phase 1: Solution Loading & Distribution
89
+ ├─ Load issues.jsonl, filter by status='planned' + bound_solution_id
90
+ ├─ Read solutions/{issue-id}.jsonl, find bound solution
91
+ ├─ Extract files_touched from task files[] or modification_points (legacy)
92
+ ├─ Build solution objects array
93
+ └─ If --queues > 1: Partition solutions into N groups (minimize cross-group file conflicts)
94
+
95
+ Phase 2-4: Agent-Driven Queue Formation (issue-queue-agent)
96
+ ├─ Generate N queue IDs (QUE-xxx-1, QUE-xxx-2, ...)
97
+ ├─ If --queues == 1: Launch single issue-queue-agent
98
+ ├─ If --queues > 1: Launch N issue-queue-agents IN PARALLEL
99
+ ├─ Each agent performs:
100
+ │ ├─ Conflict analysis (5 types via Gemini CLI)
101
+ │ ├─ Build dependency DAG from conflicts
102
+ │ ├─ Calculate semantic priority per solution
103
+ │ └─ Assign execution groups (parallel/sequential)
104
+ └─ Each agent writes: queue JSON + index update (NOT active yet)
105
+
106
+ Phase 5: Conflict Clarification (if needed)
107
+ ├─ Collect `clarifications` arrays from all agents
108
+ ├─ If clarifications exist → AskUserQuestion (batched)
109
+ ├─ Pass user decisions back to respective agents (resume)
110
+ └─ Agents update queues with resolved conflicts
111
+
112
+ Phase 6: Status Update & Summary
113
+ ├─ Update issue statuses to 'queued'
114
+ └─ Display new queue summary (N queues)
115
+
116
+ Phase 7: Active Queue Check & Decision (REQUIRED)
117
+ ├─ Read queue index: ccw issue queue list --brief
118
+ ├─ Get generated queue ID from agent output
119
+ ├─ If NO active queue exists:
120
+ │ ├─ Set generated queue as active_queue_id
121
+ │ ├─ Update index.json
122
+ │ └─ Display: "Queue created and activated"
123
+
124
+ └─ If active queue exists with items:
125
+ ├─ Display both queues to user
126
+ ├─ Use AskUserQuestion to prompt:
127
+ │ ├─ "Use new queue (keep existing)" → Set new as active, keep old inactive
128
+ │ ├─ "Merge: add new items to existing" → Merge new → existing, delete new
129
+ │ ├─ "Merge: add existing items to new" → Merge existing → new, archive old
130
+ │ └─ "Cancel" → Delete new queue, keep existing active
131
+ └─ Execute chosen action
132
+ ```
133
+
134
+ ## Implementation
135
+
136
+ ### Phase 1: Solution Loading & Distribution
137
+
138
+ **Data Loading:**
139
+ - Use `ccw issue solutions --status planned --brief` to get all planned issues with solutions in **one call**
140
+ - Returns: Array of `{ issue_id, solution_id, is_bound, task_count, files_touched[], priority }`
141
+ - If no bound solutions found → display message, suggest `/issue:plan`
142
+
143
+ **Build Solution Objects:**
144
+ ```javascript
145
+ // Single CLI call replaces N individual queries
146
+ const result = Bash(`ccw issue solutions --status planned --brief`).trim();
147
+ const solutions = result ? JSON.parse(result) : [];
148
+
149
+ if (solutions.length === 0) {
150
+ console.log('No bound solutions found. Run /issue:plan first.');
151
+ return;
152
+ }
153
+
154
+ // solutions already in correct format:
155
+ // { issue_id, solution_id, is_bound, task_count, files_touched[], priority }
156
+ ```
157
+
158
+ **Multi-Queue Distribution** (if `--queues > 1`):
159
+ - Use `files_touched` from brief output for partitioning
160
+ - Group solutions with overlapping files into same queue
161
+
162
+ **Output:** Array of solution objects (or N arrays if multi-queue)
163
+
164
+ ### Phase 2-4: Agent-Driven Queue Formation
165
+
166
+ **Generate Queue IDs** (command layer, pass to agent):
167
+ ```javascript
168
+ const timestamp = new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14);
169
+ const numQueues = args.queues || 1;
170
+ const queueIds = numQueues === 1
171
+ ? [`QUE-${timestamp}`]
172
+ : Array.from({length: numQueues}, (_, i) => `QUE-${timestamp}-${i + 1}`);
173
+ ```
174
+
175
+ **Agent Prompt** (same for each queue, with assigned solutions):
176
+ ```
177
+ ## Order Solutions into Execution Queue
178
+
179
+ **Queue ID**: ${queueId}
180
+ **Solutions**: ${solutions.length} from ${issues.length} issues
181
+ **Project Root**: ${cwd}
182
+ **Queue Index**: ${queueIndex} of ${numQueues}
183
+
184
+ ### Input
185
+ ${JSON.stringify(solutions)}
186
+ // Each object: { issue_id, solution_id, task_count, files_touched[], priority }
187
+
188
+ ### Workflow
189
+
190
+ Step 1: Build dependency graph from solutions (nodes=solutions, edges=file conflicts via files_touched)
191
+ Step 2: Use Gemini CLI for conflict analysis (5 types: file, API, data, dependency, architecture)
192
+ Step 3: For high-severity conflicts without clear resolution → add to `clarifications`
193
+ Step 4: Calculate semantic priority (base from issue priority + task_count boost)
194
+ Step 5: Assign execution groups: P* (parallel, no overlaps) / S* (sequential, shared files)
195
+ Step 6: Write queue JSON + update index
196
+
197
+ ### Output Requirements
198
+
199
+ **Write files** (exactly 2):
200
+ - `.workflow/issues/queues/${queueId}.json` - Full queue with solutions, conflicts, groups
201
+ - `.workflow/issues/queues/index.json` - Update with new queue entry
202
+
203
+ **Return JSON**:
204
+ \`\`\`json
205
+ {
206
+ "queue_id": "${queueId}",
207
+ "total_solutions": N,
208
+ "total_tasks": N,
209
+ "execution_groups": [{"id": "P1", "type": "parallel", "count": N}],
210
+ "issues_queued": ["ISS-xxx"],
211
+ "clarifications": [{"conflict_id": "CFT-1", "question": "...", "options": [...]}]
212
+ }
213
+ \`\`\`
214
+
215
+ ### Rules
216
+ - Solution granularity (NOT individual tasks)
217
+ - Queue Item ID format: S-1, S-2, S-3, ...
218
+ - Use provided Queue ID (do NOT generate new)
219
+ - `clarifications` only present if high-severity unresolved conflicts exist
220
+ - Use `files_touched` from input (already extracted by orchestrator)
221
+
222
+ ### Done Criteria
223
+ - [ ] Queue JSON written with all solutions ordered
224
+ - [ ] Index updated with active_queue_id
225
+ - [ ] No circular dependencies
226
+ - [ ] Parallel groups have no file overlaps
227
+ - [ ] Return JSON matches required shape
228
+ ```
229
+
230
+ **Launch Agents** (parallel if multi-queue):
231
+ ```javascript
232
+ const numQueues = args.queues || 1;
233
+
234
+ if (numQueues === 1) {
235
+ // Single queue: single agent call
236
+ const result = Task(
237
+ subagent_type="issue-queue-agent",
238
+ prompt=buildPrompt(queueIds[0], solutions),
239
+ description=`Order ${solutions.length} solutions`
240
+ );
241
+ } else {
242
+ // Multi-queue: parallel agent calls (single message with N Task calls)
243
+ const agentPromises = solutionGroups.map((group, i) =>
244
+ Task(
245
+ subagent_type="issue-queue-agent",
246
+ prompt=buildPrompt(queueIds[i], group, i + 1, numQueues),
247
+ description=`Queue ${i + 1}/${numQueues}: ${group.length} solutions`
248
+ )
249
+ );
250
+ // All agents launched in parallel via single message with multiple Agent tool calls
251
+ }
252
+ ```
253
+
254
+ **Multi-Queue Index Update:**
255
+ - First queue sets `active_queue_id`
256
+ - All queues added to `queues` array with `queue_group` field linking them
257
+
258
+ ### Phase 5: Conflict Clarification
259
+
260
+ **Collect Agent Results** (multi-queue):
261
+ ```javascript
262
+ // Collect clarifications from all agents
263
+ const allClarifications = results.flatMap((r, i) =>
264
+ (r.clarifications || []).map(c => ({ ...c, queue_id: queueIds[i], agent_id: agentIds[i] }))
265
+ );
266
+ ```
267
+
268
+ **Check Agent Return:**
269
+ - Parse agent result JSON (or all results if multi-queue)
270
+ - If any `clarifications` array exists and non-empty → user decision required
271
+
272
+ **Clarification Flow:**
273
+ ```javascript
274
+ if (allClarifications.length > 0) {
275
+ for (const clarification of allClarifications) {
276
+ // Auto mode: use recommended resolution (first option)
277
+ if (autoYes) {
278
+ const autoAnswer = clarification.options[0]?.label || 'skip';
279
+ Task(
280
+ subagent_type="issue-queue-agent",
281
+ resume=clarification.agent_id,
282
+ prompt=`Conflict ${clarification.conflict_id} resolved: ${autoAnswer}`
283
+ );
284
+ continue;
285
+ }
286
+
287
+ // Present to user via AskUserQuestion
288
+ const answer = AskUserQuestion({
289
+ questions: [{
290
+ question: `[${clarification.queue_id}] ${clarification.question}`,
291
+ header: clarification.conflict_id,
292
+ options: clarification.options,
293
+ multiSelect: false
294
+ }]
295
+ });
296
+
297
+ // Resume respective agent with user decision
298
+ Task(
299
+ subagent_type="issue-queue-agent",
300
+ resume=clarification.agent_id,
301
+ prompt=`Conflict ${clarification.conflict_id} resolved: ${answer.selected}`
302
+ );
303
+ }
304
+ }
305
+ ```
306
+
307
+ ### Phase 6: Status Update & Summary
308
+
309
+ **Status Update** (MUST use CLI command, NOT direct file operations):
310
+
311
+ ```bash
312
+ # Option 1: Batch update from queue (recommended)
313
+ ccw issue update --from-queue [queue-id] --json
314
+ ccw issue update --from-queue --json # Use active queue
315
+ ccw issue update --from-queue QUE-xxx --json # Use specific queue
316
+
317
+ # Option 2: Individual issue update
318
+ ccw issue update <issue-id> --status queued
319
+ ```
320
+
321
+ **⚠️ IMPORTANT**: Do NOT directly modify `issues.jsonl`. Always use CLI command to ensure proper validation and history tracking.
322
+
323
+ **Output** (JSON):
324
+ ```json
325
+ {
326
+ "success": true,
327
+ "queue_id": "QUE-xxx",
328
+ "queued": ["ISS-001", "ISS-002"],
329
+ "queued_count": 2,
330
+ "unplanned": ["ISS-003"],
331
+ "unplanned_count": 1
332
+ }
333
+ ```
334
+
335
+ **Behavior:**
336
+ - Updates issues in queue to `status: 'queued'` (skips already queued/executing/completed)
337
+ - Identifies planned issues with `bound_solution_id` NOT in queue → `unplanned` array
338
+ - Optional `queue-id`: defaults to active queue if omitted
339
+
340
+ **Summary Output:**
341
+ - Display queue ID, solution count, task count
342
+ - Show unplanned issues (planned but NOT in queue)
343
+ - Show next step: `/issue:execute`
344
+
345
+ ### Phase 7: Active Queue Check & Decision
346
+
347
+ **After agent completes Phase 1-6, check for active queue:**
348
+
349
+ ```bash
350
+ ccw issue queue list --brief
351
+ ```
352
+
353
+ **Decision:**
354
+ - If `active_queue_id` is null → `ccw issue queue switch <new-queue-id>` (activate new queue)
355
+ - If active queue exists → Use **AskUserQuestion** to prompt user
356
+
357
+ **AskUserQuestion:**
358
+ ```javascript
359
+ // Auto mode: merge into existing queue
360
+ if (autoYes) {
361
+ Bash(`ccw issue queue merge ${newQueueId} --queue ${activeQueueId}`);
362
+ Bash(`ccw issue queue delete ${newQueueId}`);
363
+ console.log(`Auto-merged new queue into ${activeQueueId}`);
364
+ return;
365
+ }
366
+
367
+ AskUserQuestion({
368
+ questions: [{
369
+ question: "Active queue exists. How would you like to proceed?",
370
+ header: "Queue Action",
371
+ options: [
372
+ { label: "Merge into existing queue", description: "Add new items to active queue, delete new queue" },
373
+ { label: "Use new queue", description: "Switch to new queue, keep existing in history" },
374
+ { label: "Cancel", description: "Delete new queue, keep existing active" }
375
+ ],
376
+ multiSelect: false
377
+ }]
378
+ })
379
+ ```
380
+
381
+ **Action Commands:**
382
+
383
+ | User Choice | Commands |
384
+ |-------------|----------|
385
+ | **Merge into existing** | `ccw issue queue merge <new-queue-id> --queue <active-queue-id>` then `ccw issue queue delete <new-queue-id>` |
386
+ | **Use new queue** | `ccw issue queue switch <new-queue-id>` |
387
+ | **Cancel** | `ccw issue queue delete <new-queue-id>` |
388
+
389
+ ## Storage Structure (Queue History)
390
+
391
+ ```
392
+ .workflow/issues/
393
+ ├── issues.jsonl # All issues (one per line)
394
+ ├── queues/ # Queue history directory
395
+ │ ├── index.json # Queue index (active + history)
396
+ │ ├── {queue-id}.json # Individual queue files
397
+ │ └── ...
398
+ └── solutions/
399
+ ├── {issue-id}.jsonl # Solutions for issue
400
+ └── ...
401
+ ```
402
+
403
+ ### Queue Index Schema
404
+
405
+ ```json
406
+ {
407
+ "active_queue_id": "QUE-20251227-143000",
408
+ "active_queue_group": "QGR-20251227-143000",
409
+ "queues": [
410
+ {
411
+ "id": "QUE-20251227-143000-1",
412
+ "queue_group": "QGR-20251227-143000",
413
+ "queue_index": 1,
414
+ "total_queues": 3,
415
+ "status": "active",
416
+ "issue_ids": ["ISS-xxx", "ISS-yyy"],
417
+ "total_solutions": 3,
418
+ "completed_solutions": 1,
419
+ "created_at": "2025-12-27T14:30:00Z"
420
+ }
421
+ ]
422
+ }
423
+ ```
424
+
425
+ **Multi-Queue Fields:**
426
+ - `queue_group`: Links queues created in same batch (format: `QGR-{timestamp}`)
427
+ - `queue_index`: Position in group (1-based)
428
+ - `total_queues`: Total queues in group
429
+ - `active_queue_group`: Current active group (for multi-queue execution)
430
+
431
+ **Note**: Queue file schema is produced by `issue-queue-agent`. See agent documentation for details.
432
+ ## Error Handling
433
+
434
+ | Error | Resolution |
435
+ |-------|------------|
436
+ | No bound solutions | Display message, suggest /issue:plan |
437
+ | Circular dependency | List cycles, abort queue formation |
438
+ | High-severity conflict | Return `clarifications`, prompt user decision |
439
+ | User cancels clarification | Abort queue formation |
440
+ | **index.json not updated** | Auto-fix: Set active_queue_id to new queue |
441
+ | **Queue file missing solutions** | Abort with error, agent must regenerate |
442
+ | **User cancels queue add** | Display message, return without changes |
443
+ | **Merge with empty source** | Skip merge, display warning |
444
+ | **All items duplicate** | Skip merge, display "All items already exist" |
445
+
446
+ ## Quality Checklist
447
+
448
+ Before completing, verify:
449
+
450
+ - [ ] All planned issues with `bound_solution_id` are included
451
+ - [ ] Queue JSON written to `queues/{queue-id}.json` (N files if multi-queue)
452
+ - [ ] Index updated in `queues/index.json` with `active_queue_id`
453
+ - [ ] Multi-queue: All queues share same `queue_group`
454
+ - [ ] No circular dependencies in solution DAG
455
+ - [ ] All conflicts resolved (auto or via user clarification)
456
+ - [ ] Parallel groups have no file overlaps
457
+ - [ ] Cross-queue: No file overlaps between queues
458
+ - [ ] Issue statuses updated to `queued`
459
+
460
+ ## Related Commands
461
+
462
+ - `/issue:execute` - Execute queue with codex
463
+ - `ccw issue queue list` - View current queue
464
+ - `ccw issue update --from-queue [queue-id]` - Sync issue statuses from queue