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:
catlog22
2025-12-29 11:45:31 +08:00
parent 0d82c9fa03
commit dda6af130c
7 changed files with 34 additions and 21 deletions

View File

@@ -241,13 +241,13 @@ OUTPUT FORMAT:
"conflicts": [{
"type": "file_conflict|api_conflict|data_conflict|dependency_conflict|architecture_conflict",
"severity": "high|medium|low",
"solutions_affected": ["SOL-001", "SOL-002"],
"solutions_affected": ["SOL-GH-123-1", "SOL-GH-123-2"],
"summary": "brief description",
"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"
}],
"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
{
"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": [{
"type": "file_conflict|api_conflict|data_conflict|dependency_conflict|architecture_conflict",
"severity": "high|medium|low",
"solutions_affected": ["SOL-001", "SOL-002"],
"solutions_affected": ["SOL-GH-123-1", "SOL-GH-123-2"],
"summary": "brief description",
"resolution_strategy": "sequential|parallel_with_coordination",
"recommended_order": ["SOL-001", "SOL-002"],
"recommended_resolution": "Use sequential execution: SOL-001 first",
"recommended_order": ["SOL-GH-123-1", "SOL-GH-123-2"],
"recommended_resolution": "Use sequential execution: SOL-GH-123-1 first",
"resolution_options": [{ "strategy": "...", "rationale": "..." }]
}]
}

View File

@@ -37,7 +37,7 @@ color: orange
{
solutions: [{
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
files_touched: string[], // All files modified by this solution
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",
"issue_id": "ISS-20251227-003",
"solution_id": "SOL-20251227-003",
"solution_id": "SOL-ISS-20251227-003-1",
"status": "pending",
"execution_order": 1,
"execution_group": "P1",

View File

@@ -214,6 +214,8 @@ ${issueList}
### Generate Files
\`.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
- **Single solution**: Auto-bind via \`ccw issue bind <id> --solution <file>\`
- **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
for (const { taskId, batchIndex } of taskIds) {
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
for (const item of summary.bound || []) {

View File

@@ -89,7 +89,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
{
"item_id": "S-1",
"issue_id": "ISS-20251227-003",
"solution_id": "SOL-20251227-003",
"solution_id": "SOL-ISS-20251227-003-1",
"status": "pending",
"execution_order": 1,
"execution_group": "P1",
@@ -102,7 +102,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
{
"item_id": "S-2",
"issue_id": "ISS-20251227-001",
"solution_id": "SOL-20251227-001",
"solution_id": "SOL-ISS-20251227-001-1",
"status": "pending",
"execution_order": 2,
"execution_group": "P1",
@@ -115,7 +115,7 @@ Queue formation command using **issue-queue-agent** that analyzes all bound solu
{
"item_id": "S-3",
"issue_id": "ISS-20251227-002",
"solution_id": "SOL-20251227-002",
"solution_id": "SOL-ISS-20251227-002-1",
"status": "pending",
"execution_order": 3,
"execution_group": "S2",

View File

@@ -7,8 +7,9 @@
"properties": {
"id": {
"type": "string",
"description": "Unique solution identifier",
"pattern": "^SOL-[0-9]+$"
"description": "Unique solution identifier: SOL-{issue-id}-{seq}",
"pattern": "^SOL-.+-[0-9]+$",
"examples": ["SOL-GH-123-1", "SOL-ISS-20251229-1"]
},
"description": {
"type": "string",

View File

@@ -40,7 +40,7 @@ ccw issue next
This returns JSON with the full solution definition:
- `item_id`: Solution identifier in queue (e.g., "S-1")
- `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
- `execution_hints`: Timing and executor hints
@@ -54,10 +54,10 @@ Expected solution structure:
{
"item_id": "S-1",
"issue_id": "ISS-20251227-001",
"solution_id": "SOL-20251227-001",
"solution_id": "SOL-ISS-20251227-001-1",
"status": "pending",
"solution": {
"id": "SOL-20251227-001",
"id": "SOL-ISS-20251227-001-1",
"description": "Description of solution approach",
"tasks": [
{

View File

@@ -78,8 +78,8 @@ Build a file → solutions mapping:
```javascript
fileModifications = {
"src/auth.ts": ["SOL-001", "SOL-003"],
"src/api.ts": ["SOL-002"]
"src/auth.ts": ["SOL-ISS-001-1", "SOL-ISS-003-1"],
"src/api.ts": ["SOL-ISS-002-1"]
}
```
@@ -129,7 +129,7 @@ Group assignment:
{
"item_id": "S-1",
"issue_id": "ISS-001",
"solution_id": "SOL-001",
"solution_id": "SOL-ISS-001-1",
"status": "pending",
"execution_order": 1,
"execution_group": "P1",