mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-14 02:42:04 +08:00
refactor(issue): unify solution ID format to SOL-{issue-id}-{seq}
- Update solution-schema.json pattern to support new format - Add Solution ID Format specification to plan.md - Fix JSON parsing with extractJsonFromMarkdown + try-catch - Update all examples in agent and prompt files: - issue-plan-agent.md - issue-queue-agent.md - issue-execute.md - issue-queue.md - queue.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -241,13 +241,13 @@ OUTPUT FORMAT:
|
|||||||
"conflicts": [{
|
"conflicts": [{
|
||||||
"type": "file_conflict|api_conflict|data_conflict|dependency_conflict|architecture_conflict",
|
"type": "file_conflict|api_conflict|data_conflict|dependency_conflict|architecture_conflict",
|
||||||
"severity": "high|medium|low",
|
"severity": "high|medium|low",
|
||||||
"solutions_affected": ["SOL-001", "SOL-002"],
|
"solutions_affected": ["SOL-GH-123-1", "SOL-GH-123-2"],
|
||||||
"summary": "brief description",
|
"summary": "brief description",
|
||||||
"resolution_strategy": "sequential|parallel_with_coordination|refactor_merge",
|
"resolution_strategy": "sequential|parallel_with_coordination|refactor_merge",
|
||||||
"recommended_order": ["SOL-001", "SOL-002"],
|
"recommended_order": ["SOL-GH-123-1", "SOL-GH-123-2"],
|
||||||
"rationale": "why this order"
|
"rationale": "why this order"
|
||||||
}],
|
}],
|
||||||
"safe_parallel": [["SOL-003", "SOL-004"]]
|
"safe_parallel": [["SOL-GH-124-1", "SOL-GH-125-1"]]
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@@ -287,15 +287,15 @@ Each line is a solution JSON containing tasks. Schema: `cat .claude/workflows/cl
|
|||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"bound": [{ "issue_id": "...", "solution_id": "...", "task_count": N }],
|
"bound": [{ "issue_id": "...", "solution_id": "...", "task_count": N }],
|
||||||
"pending_selection": [{ "issue_id": "...", "solutions": [{ "id": "SOL-001", "description": "...", "task_count": N }] }],
|
"pending_selection": [{ "issue_id": "GH-123", "solutions": [{ "id": "SOL-GH-123-1", "description": "...", "task_count": N }] }],
|
||||||
"conflicts": [{
|
"conflicts": [{
|
||||||
"type": "file_conflict|api_conflict|data_conflict|dependency_conflict|architecture_conflict",
|
"type": "file_conflict|api_conflict|data_conflict|dependency_conflict|architecture_conflict",
|
||||||
"severity": "high|medium|low",
|
"severity": "high|medium|low",
|
||||||
"solutions_affected": ["SOL-001", "SOL-002"],
|
"solutions_affected": ["SOL-GH-123-1", "SOL-GH-123-2"],
|
||||||
"summary": "brief description",
|
"summary": "brief description",
|
||||||
"resolution_strategy": "sequential|parallel_with_coordination",
|
"resolution_strategy": "sequential|parallel_with_coordination",
|
||||||
"recommended_order": ["SOL-001", "SOL-002"],
|
"recommended_order": ["SOL-GH-123-1", "SOL-GH-123-2"],
|
||||||
"recommended_resolution": "Use sequential execution: SOL-001 first",
|
"recommended_resolution": "Use sequential execution: SOL-GH-123-1 first",
|
||||||
"resolution_options": [{ "strategy": "...", "rationale": "..." }]
|
"resolution_options": [{ "strategy": "...", "rationale": "..." }]
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ color: orange
|
|||||||
{
|
{
|
||||||
solutions: [{
|
solutions: [{
|
||||||
issue_id: string, // e.g., "ISS-20251227-001"
|
issue_id: string, // e.g., "ISS-20251227-001"
|
||||||
solution_id: string, // e.g., "SOL-20251227-001"
|
solution_id: string, // e.g., "SOL-ISS-20251227-001-1"
|
||||||
task_count: number, // Number of tasks in this solution
|
task_count: number, // Number of tasks in this solution
|
||||||
files_touched: string[], // All files modified by this solution
|
files_touched: string[], // All files modified by this solution
|
||||||
priority: string // Issue priority: critical | high | medium | low
|
priority: string // Issue priority: critical | high | medium | low
|
||||||
@@ -247,7 +247,7 @@ Queue Item ID format: `S-N` (S-1, S-2, S-3, ...)
|
|||||||
{
|
{
|
||||||
"item_id": "S-1",
|
"item_id": "S-1",
|
||||||
"issue_id": "ISS-20251227-003",
|
"issue_id": "ISS-20251227-003",
|
||||||
"solution_id": "SOL-20251227-003",
|
"solution_id": "SOL-ISS-20251227-003-1",
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
"execution_order": 1,
|
"execution_order": 1,
|
||||||
"execution_group": "P1",
|
"execution_group": "P1",
|
||||||
|
|||||||
@@ -214,6 +214,8 @@ ${issueList}
|
|||||||
### Generate Files
|
### Generate Files
|
||||||
\`.workflow/issues/solutions/{issue-id}.jsonl\` - Solution with tasks (schema: cat .claude/workflows/cli-templates/schemas/solution-schema.json)
|
\`.workflow/issues/solutions/{issue-id}.jsonl\` - Solution with tasks (schema: cat .claude/workflows/cli-templates/schemas/solution-schema.json)
|
||||||
|
|
||||||
|
**Solution ID Format**: \`SOL-{issue-id}-{seq}\` (e.g., \`SOL-GH-123-1\`, \`SOL-ISS-20251229-1\`)
|
||||||
|
|
||||||
### Binding Rules
|
### Binding Rules
|
||||||
- **Single solution**: Auto-bind via \`ccw issue bind <id> --solution <file>\`
|
- **Single solution**: Auto-bind via \`ccw issue bind <id> --solution <file>\`
|
||||||
- **Multiple solutions**: Register only, return for user selection
|
- **Multiple solutions**: Register only, return for user selection
|
||||||
@@ -254,7 +256,17 @@ for (let i = 0; i < agentTasks.length; i += MAX_PARALLEL) {
|
|||||||
// Collect results from this chunk
|
// Collect results from this chunk
|
||||||
for (const { taskId, batchIndex } of taskIds) {
|
for (const { taskId, batchIndex } of taskIds) {
|
||||||
const result = TaskOutput(task_id=taskId, block=true);
|
const result = TaskOutput(task_id=taskId, block=true);
|
||||||
const summary = JSON.parse(result);
|
|
||||||
|
// Extract JSON from potential markdown code blocks (agent may wrap in ```json...```)
|
||||||
|
const jsonText = extractJsonFromMarkdown(result);
|
||||||
|
let summary;
|
||||||
|
try {
|
||||||
|
summary = JSON.parse(jsonText);
|
||||||
|
} catch (e) {
|
||||||
|
console.log(`⚠ Batch ${batchIndex + 1}: Failed to parse agent result, skipping`);
|
||||||
|
updateTodo(`Plan batch ${batchIndex + 1}`, 'completed');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
agentResults.push(summary); // Store for Phase 3 conflict aggregation
|
agentResults.push(summary); // Store for Phase 3 conflict aggregation
|
||||||
|
|
||||||
for (const item of summary.bound || []) {
|
for (const item of summary.bound || []) {
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
|
|||||||
{
|
{
|
||||||
"item_id": "S-1",
|
"item_id": "S-1",
|
||||||
"issue_id": "ISS-20251227-003",
|
"issue_id": "ISS-20251227-003",
|
||||||
"solution_id": "SOL-20251227-003",
|
"solution_id": "SOL-ISS-20251227-003-1",
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
"execution_order": 1,
|
"execution_order": 1,
|
||||||
"execution_group": "P1",
|
"execution_group": "P1",
|
||||||
@@ -102,7 +102,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
|
|||||||
{
|
{
|
||||||
"item_id": "S-2",
|
"item_id": "S-2",
|
||||||
"issue_id": "ISS-20251227-001",
|
"issue_id": "ISS-20251227-001",
|
||||||
"solution_id": "SOL-20251227-001",
|
"solution_id": "SOL-ISS-20251227-001-1",
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
"execution_order": 2,
|
"execution_order": 2,
|
||||||
"execution_group": "P1",
|
"execution_group": "P1",
|
||||||
@@ -115,7 +115,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
|
|||||||
{
|
{
|
||||||
"item_id": "S-3",
|
"item_id": "S-3",
|
||||||
"issue_id": "ISS-20251227-002",
|
"issue_id": "ISS-20251227-002",
|
||||||
"solution_id": "SOL-20251227-002",
|
"solution_id": "SOL-ISS-20251227-002-1",
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
"execution_order": 3,
|
"execution_order": 3,
|
||||||
"execution_group": "S2",
|
"execution_group": "S2",
|
||||||
|
|||||||
@@ -7,8 +7,9 @@
|
|||||||
"properties": {
|
"properties": {
|
||||||
"id": {
|
"id": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "Unique solution identifier",
|
"description": "Unique solution identifier: SOL-{issue-id}-{seq}",
|
||||||
"pattern": "^SOL-[0-9]+$"
|
"pattern": "^SOL-.+-[0-9]+$",
|
||||||
|
"examples": ["SOL-GH-123-1", "SOL-ISS-20251229-1"]
|
||||||
},
|
},
|
||||||
"description": {
|
"description": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ ccw issue next
|
|||||||
This returns JSON with the full solution definition:
|
This returns JSON with the full solution definition:
|
||||||
- `item_id`: Solution identifier in queue (e.g., "S-1")
|
- `item_id`: Solution identifier in queue (e.g., "S-1")
|
||||||
- `issue_id`: Parent issue ID (e.g., "ISS-20251227-001")
|
- `issue_id`: Parent issue ID (e.g., "ISS-20251227-001")
|
||||||
- `solution_id`: Solution ID (e.g., "SOL-20251227-001")
|
- `solution_id`: Solution ID (e.g., "SOL-ISS-20251227-001-1")
|
||||||
- `solution`: Full solution with all tasks
|
- `solution`: Full solution with all tasks
|
||||||
- `execution_hints`: Timing and executor hints
|
- `execution_hints`: Timing and executor hints
|
||||||
|
|
||||||
@@ -54,10 +54,10 @@ Expected solution structure:
|
|||||||
{
|
{
|
||||||
"item_id": "S-1",
|
"item_id": "S-1",
|
||||||
"issue_id": "ISS-20251227-001",
|
"issue_id": "ISS-20251227-001",
|
||||||
"solution_id": "SOL-20251227-001",
|
"solution_id": "SOL-ISS-20251227-001-1",
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
"solution": {
|
"solution": {
|
||||||
"id": "SOL-20251227-001",
|
"id": "SOL-ISS-20251227-001-1",
|
||||||
"description": "Description of solution approach",
|
"description": "Description of solution approach",
|
||||||
"tasks": [
|
"tasks": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ Build a file → solutions mapping:
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
fileModifications = {
|
fileModifications = {
|
||||||
"src/auth.ts": ["SOL-001", "SOL-003"],
|
"src/auth.ts": ["SOL-ISS-001-1", "SOL-ISS-003-1"],
|
||||||
"src/api.ts": ["SOL-002"]
|
"src/api.ts": ["SOL-ISS-002-1"]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ Group assignment:
|
|||||||
{
|
{
|
||||||
"item_id": "S-1",
|
"item_id": "S-1",
|
||||||
"issue_id": "ISS-001",
|
"issue_id": "ISS-001",
|
||||||
"solution_id": "SOL-001",
|
"solution_id": "SOL-ISS-001-1",
|
||||||
"status": "pending",
|
"status": "pending",
|
||||||
"execution_order": 1,
|
"execution_order": 1,
|
||||||
"execution_group": "P1",
|
"execution_group": "P1",
|
||||||
|
|||||||
Reference in New Issue
Block a user