{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Devkit portable project configuration", "description": "The runtime additionally checks reference existence, cycles, resolved path confinement and cross-repository alias/path uniqueness. cwd defaults to the workspace when omitted.", "type": "object", "additionalProperties": false, "required": ["schema_version", "repositories"], "properties": { "schema_version": {"type": "integer", "const": 1}, "name": {"type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[^\\u0000\\r\\n]+$"}, "repositories": { "type": "array", "minItems": 1, "maxItems": 256, "items": { "type": "object", "additionalProperties": false, "required": ["name", "path"], "properties": { "name": {"$ref": "#/$defs/identifier"}, "path": {"$ref": "#/$defs/relativePath"}, "aliases": {"type": "array", "maxItems": 128, "uniqueItems": true, "items": {"$ref": "#/$defs/identifier"}} } } }, "tools": { "type": "object", "additionalProperties": false, "properties": {"python": {"$ref": "#/$defs/executable"}, "node": {"$ref": "#/$defs/executable"}, "npm": {"$ref": "#/$defs/executable"}} }, "review": { "type": "object", "additionalProperties": false, "properties": { "issue_inventory": {"$ref": "#/$defs/relativePath"}, "principles": {"$ref": "#/$defs/relativePath"} } }, "checks": { "type": "array", "maxItems": 512, "items": { "type": "object", "additionalProperties": false, "required": ["id", "argv"], "properties": { "id": {"$ref": "#/$defs/identifier"}, "title": {"type": "string", "maxLength": 1024, "pattern": "^[^\\u0000]*$"}, "argv": {"type": "array", "minItems": 1, "maxItems": 256, "prefixItems": [{"type": "string", "minLength": 1, "maxLength": 8192, "pattern": "^[^\\u0000]+$"}], "items": {"type": "string", "maxLength": 8192, "pattern": "^[^\\u0000]*$"}}, "cwd": {"$ref": "#/$defs/relativePath"}, "deps": {"$ref": "#/$defs/profile"}, "after": {"$ref": "#/$defs/profile"}, "reuse": {"type": "string", "enum": ["verified", "never"]}, "inputs": {"$ref": "#/$defs/inputs"}, "resources": {"type": "array", "maxItems": 256, "uniqueItems": true, "items": {"type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[^\\u0000\\r\\n]+$"}}, "repos": {"type": "array", "maxItems": 256, "uniqueItems": true, "items": {"$ref": "#/$defs/identifier"}}, "timeout_seconds": {"type": "number", "exclusiveMinimum": 0, "maximum": 43200} } } }, "profiles": { "type": "object", "additionalProperties": false, "properties": { "quick": {"$ref": "#/$defs/profile"}, "ui": {"$ref": "#/$defs/profile"}, "backend": {"$ref": "#/$defs/profile"}, "full": {"$ref": "#/$defs/profile"} } } }, "$defs": { "inputs": {"type": "object", "additionalProperties": false, "required": ["repos"], "properties": {"repos": {"type": "array", "minItems": 1, "maxItems": 256, "uniqueItems": true, "items": {"$ref": "#/$defs/identifier"}}}}, "identifier": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9_.-]{0,127}$(?![\\s\\S])"}, "executable": {"type": "string", "minLength": 1, "maxLength": 4096, "pattern": "^[^\\u0000\\r\\n]+$"}, "relativePath": {"type": "string", "minLength": 1, "maxLength": 4096, "pattern": "^(?!/)(?!\\.\\.(?:/|$))(?!.*?/\\.\\.(?:/|$))[^\\u0000\\r\\n]+$"}, "profile": {"type": "array", "maxItems": 512, "uniqueItems": true, "items": {"$ref": "#/$defs/identifier"}} } }