mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-05 01:50:27 +08:00
feat: 更新问题规划和队列命令,增强解决方案注册和用户选择逻辑
This commit is contained in:
@@ -180,10 +180,23 @@ function decomposeTasks(issue, exploration) {
|
||||
- Task validation (all 5 phases present)
|
||||
- Conflict detection (cross-issue file modifications)
|
||||
|
||||
**Solution Registration**:
|
||||
```bash
|
||||
# Write solution and register via CLI
|
||||
ccw issue bind <issue-id> --solution /tmp/sol.json
|
||||
**Solution Registration** (CRITICAL: check solution count first):
|
||||
```javascript
|
||||
for (const issue of issues) {
|
||||
const solutions = generatedSolutions[issue.id];
|
||||
|
||||
if (solutions.length === 1) {
|
||||
// Single solution → auto-bind
|
||||
Bash(`ccw issue bind ${issue.id} --solution ${solutions[0].file}`);
|
||||
bound.push({ issue_id: issue.id, solution_id: solutions[0].id, task_count: solutions[0].tasks.length });
|
||||
} else {
|
||||
// Multiple solutions → DO NOT BIND, return for user selection
|
||||
pending_selection.push({
|
||||
issue_id: issue.id,
|
||||
solutions: solutions.map(s => ({ id: s.id, description: s.description, task_count: s.tasks.length }))
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
@@ -255,7 +268,7 @@ Each line is a solution JSON containing tasks. Schema: `cat .claude/workflows/cl
|
||||
2. Use vague criteria ("works correctly", "good performance")
|
||||
3. Create circular dependencies
|
||||
4. Generate more than 10 tasks per issue
|
||||
5. Bind when multiple solutions exist
|
||||
5. **Bind when multiple solutions exist** - MUST check `solutions.length === 1` before calling `ccw issue bind`
|
||||
|
||||
**OUTPUT**:
|
||||
1. Register solutions via `ccw issue bind <id> --solution <file>`
|
||||
|
||||
@@ -244,4 +244,7 @@ Queue Item ID format: `S-N` (S-1, S-2, S-3, ...)
|
||||
**OUTPUT**:
|
||||
1. Write `.workflow/issues/queues/{queue-id}.json`
|
||||
2. Update `.workflow/issues/queues/index.json`
|
||||
3. Return summary with `queue_id`, `total_solutions`, `total_tasks`, `execution_groups`, `conflicts_resolved`, `issues_queued`
|
||||
3. **CRITICAL**: Final return MUST be PURE JSON only (no markdown, no explanation, no prose):
|
||||
```json
|
||||
{"queue_id":"QUE-xxx","total_solutions":N,"total_tasks":N,"execution_groups":[...],"conflicts_resolved":N,"issues_queued":["ISS-xxx"]}
|
||||
```
|
||||
|
||||
@@ -252,7 +252,11 @@ for (let i = 0; i < agentTasks.length; i += MAX_PARALLEL) {
|
||||
for (const item of summary.bound || []) {
|
||||
console.log(`✓ ${item.issue_id}: ${item.solution_id} (${item.task_count} tasks)`);
|
||||
}
|
||||
pendingSelections.push(...(summary.pending_selection || []));
|
||||
// Collect and notify pending selections
|
||||
for (const pending of summary.pending_selection || []) {
|
||||
console.log(`⏳ ${pending.issue_id}: ${pending.solutions.length} solutions → awaiting selection`);
|
||||
pendingSelections.push(pending);
|
||||
}
|
||||
if (summary.conflicts?.length > 0) {
|
||||
console.log(`⚠ Conflicts: ${summary.conflicts.map(c => c.file).join(', ')}`);
|
||||
}
|
||||
@@ -261,11 +265,13 @@ for (let i = 0; i < agentTasks.length; i += MAX_PARALLEL) {
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 3: Multi-Solution Selection
|
||||
### Phase 3: Multi-Solution Selection (MANDATORY when pendingSelections > 0)
|
||||
|
||||
```javascript
|
||||
// Only handle issues where agent generated multiple solutions
|
||||
// MUST trigger user selection when multiple solutions exist
|
||||
if (pendingSelections.length > 0) {
|
||||
console.log(`\n## User Selection Required: ${pendingSelections.length} issue(s) have multiple solutions\n`);
|
||||
|
||||
const answer = AskUserQuestion({
|
||||
questions: pendingSelections.map(({ issue_id, solutions }) => ({
|
||||
question: `Select solution for ${issue_id}:`,
|
||||
|
||||
@@ -199,6 +199,8 @@ Phase 5: Queue Output
|
||||
|
||||
### Phase 1: Solution Loading
|
||||
|
||||
**NOTE**: Execute code directly. DO NOT pre-read solution files - Bash cat handles all reading.
|
||||
|
||||
```javascript
|
||||
// Load issues.jsonl
|
||||
const issuesPath = '.workflow/issues/issues.jsonl';
|
||||
|
||||
Reference in New Issue
Block a user