{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "dev/phase-plan@1", "title": "Devflow Phase Plan", "type": "object", "additionalProperties": false, "required": ["phases"], "properties": { "phases": { "type": "array", "minItems": 1, "items": { "type": "object", "additionalProperties": false, "required": ["key", "title", "objective", "roles"], "properties": { "key": { "type": "string", "minLength": 1 }, "title": { "type": "string", "minLength": 1 }, "objective": { "type": "string", "minLength": 1 }, "roles": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } }, "expectedArtifact": { "type": "object", "additionalProperties": false, "required": ["path", "schema"], "properties": { "path": { "type": "string", "pattern": "^(?!.*:)(?!.*(?:^|/)\\.{1,2}(?:/|$))[A-Za-z0-9._-]+(?:/[A-Za-z0-9._-]+)*$" }, "schema": { "type": "string", "pattern": "^[a-z][a-z0-9_-]*/[a-z][a-z0-9_-]*@[1-9][0-9]*$" } } }, "gates": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "tasks": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["id", "title", "role", "writeSet"], "properties": { "id": { "type": "string", "minLength": 1 }, "title": { "type": "string", "minLength": 1 }, "role": { "type": "string", "minLength": 1 }, "writeSet": { "type": "array", "minItems": 1, "items": { "type": "string", "pattern": "^(?!/)(?!.*:)(?!.*[!{}()\\[\\]\\\\\\r\\n])(?!.*(?:^|/)\\.{1,2}(?:/|$)).+$" } }, "dependsOn": { "type": "array", "items": { "type": "string", "minLength": 1 } } } } } } } } } }