{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Issue Solution Schema", "description": "Schema for solution registered to an issue", "type": "object", "required": ["id", "tasks", "is_bound", "created_at"], "properties": { "id": { "type": "string", "description": "Unique solution identifier: SOL-{issue-id}-{4-char-uid} where uid is 4 alphanumeric chars", "pattern": "^SOL-.+-[a-z0-9]{4}$", "examples": ["SOL-GH-123-a7x9", "SOL-ISS-20251229-001-b2k4"] }, "description": { "type": "string", "description": "High-level summary of the solution" }, "approach": { "type": "string", "description": "Technical approach or strategy" }, "tasks": { "type": "array", "description": "Task breakdown for this solution", "items": { "type": "object", "required": ["id", "title", "scope", "action", "implementation"], "properties": { "id": { "type": "string", "pattern": "^T[0-9]+$" }, "title": { "type": "string", "description": "Action verb + target" }, "scope": { "type": "string", "description": "Module path or feature area" }, "action": { "type": "string", "enum": ["Create", "Update", "Implement", "Refactor", "Add", "Delete", "Configure", "Test", "Fix"] }, "description": { "type": "string", "description": "1-2 sentences describing what to implement" }, "files": { "type": "array", "description": "Files affected by this task (preferred over modification_points)", "items": { "type": "object", "required": ["path"], "properties": { "path": { "type": "string", "description": "File path relative to project root" }, "action": { "type": "string", "enum": ["modify", "create", "delete"], "description": "Type of file operation" }, "target": { "type": "string", "description": "Target symbol or location within file" }, "change": { "type": "string", "description": "Description of the change" }, "changes": { "type": "array", "items": { "type": "string" }, "description": "Multiple changes to the file" }, "conflict_risk": { "type": "string", "enum": ["low", "medium", "high"], "description": "Risk of merge conflict" } } } }, "modification_points": { "type": "array", "deprecated": true, "description": "DEPRECATED: Use 'files' instead. Legacy field for backward compatibility.", "items": { "type": "object", "properties": { "file": { "type": "string" }, "target": { "type": "string" }, "change": { "type": "string" } } } }, "implementation": { "type": "array", "items": { "type": "string" }, "description": "Step-by-step implementation guide" }, "test": { "type": "object", "description": "Test requirements", "properties": { "unit": { "type": "array", "items": { "type": "string" } }, "integration": { "type": "array", "items": { "type": "string" } }, "commands": { "type": "array", "items": { "type": "string" } }, "coverage_target": { "type": "number" }, "manual_checks": { "type": "array", "items": { "type": "string" }, "description": "Manual verification steps" }, "success_metrics": { "type": "array", "items": { "type": "string" }, "description": "Success metrics for the task" } } }, "regression": { "type": "array", "items": { "type": "string" }, "description": "Regression check points" }, "convergence": { "type": "object", "description": "Convergence criteria & verification (preferred over acceptance)", "required": ["criteria"], "properties": { "criteria": { "type": "array", "items": { "type": "string" } }, "verification": { "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] }, "definition_of_done": { "type": "string" } } }, "acceptance": { "type": "object", "deprecated": true, "description": "DEPRECATED: Use 'convergence' instead. Legacy field for backward compatibility.", "properties": { "criteria": { "type": "array", "items": { "type": "string" } }, "verification": { "type": "array", "items": { "type": "string" } }, "manual_checks": { "type": "array", "items": { "type": "string" } } } }, "commit": { "type": "object", "description": "Commit specification", "properties": { "type": { "type": "string", "enum": ["feat", "fix", "refactor", "test", "docs", "chore"] }, "scope": { "type": "string" }, "message_template": { "type": "string" }, "breaking": { "type": "boolean" } } }, "depends_on": { "type": "array", "items": { "type": "string" }, "default": [], "description": "Task IDs this task depends on" }, "estimated_minutes": { "type": "integer", "description": "DEPRECATED: Use 'effort' instead. Estimated time to complete." }, "effort": { "type": "string", "enum": ["small", "medium", "large", "xlarge"], "description": "Effort estimate for the task" }, "status": { "type": "string", "description": "Task status (optional, for tracking)" }, "priority": { "oneOf": [ { "type": "string", "enum": ["critical", "high", "medium", "low"] }, { "type": "integer", "minimum": 1, "maximum": 5 } ], "default": "medium", "description": "Task priority. Prefer string enum; integer 1-5 accepted for backward compatibility." } }, "anyOf": [ { "required": ["convergence"] }, { "required": ["acceptance"] } ], "_migration": { "description": "Field migration mapping from legacy to current format", "mappings": { "modification_points[].file": "files[].path", "modification_points[].target": "files[].target", "modification_points[].change": "files[].change", "acceptance.criteria": "convergence.criteria", "acceptance.verification": "convergence.verification", "acceptance.manual_checks": "test.manual_checks", "priority (integer 1-5)": "priority (string enum)", "estimated_minutes": "effort" } } } }, "exploration_context": { "type": "object", "description": "ACE exploration results", "properties": { "project_structure": { "type": "string" }, "relevant_files": { "type": "array", "items": { "type": "string" } }, "patterns": { "type": "string" }, "integration_points": { "type": "string" } } }, "analysis": { "type": "object", "description": "Solution risk assessment", "properties": { "risk": { "type": "string", "enum": ["low", "medium", "high"] }, "impact": { "type": "string", "enum": ["low", "medium", "high"] }, "complexity": { "type": "string", "enum": ["low", "medium", "high"] } } }, "score": { "type": "number", "minimum": 0, "maximum": 1, "description": "Solution quality score (0.0-1.0)" }, "is_bound": { "type": "boolean", "default": false, "description": "Whether this solution is bound to the issue" }, "created_at": { "type": "string", "format": "date-time" }, "bound_at": { "type": "string", "format": "date-time", "description": "When this solution was bound to the issue" } } }