Files
crank/docs/schemas/capability-inventory.schema.json
T

142 lines
3.0 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://crank.local/schemas/capability-inventory.schema.json",
"title": "Crank Community Capability Inventory",
"type": "object",
"additionalProperties": false,
"required": [
"schema_version",
"product",
"flows"
],
"properties": {
"schema_version": {
"const": 1
},
"product": {
"const": "crank-community"
},
"flows": {
"type": "array",
"minItems": 1,
"maxItems": 10000,
"items": {
"$ref": "#/$defs/flow"
}
}
},
"$defs": {
"flow": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"type",
"requirements",
"user_outcome",
"owner",
"status",
"capabilities",
"evidence"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"type": {
"enum": [
"ui",
"api",
"mcp"
]
},
"requirements": {
"type": "array",
"minItems": 1,
"maxItems": 64,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"pattern": "^FR-[1-9][0-9]*$"
}
},
"user_outcome": {
"type": "string",
"minLength": 1,
"maxLength": 4096,
"pattern": "[\\s\\S]*\\S[\\s\\S]*"
},
"owner": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"pattern": "[\\s\\S]*\\S[\\s\\S]*"
},
"status": {
"enum": [
"implemented",
"planned",
"gap",
"blocked"
]
},
"capabilities": {
"type": "array",
"minItems": 1,
"maxItems": 16,
"uniqueItems": true,
"items": {
"enum": [
"tools",
"resources",
"prompts",
"tasks",
"load_runs"
]
}
},
"evidence": {
"$ref": "#/$defs/evidence"
},
"notes": {
"type": "string",
"maxLength": 4096
}
}
},
"evidence": {
"type": "object",
"additionalProperties": false,
"required": [
"automated",
"manual"
],
"properties": {
"automated": {
"$ref": "#/$defs/evidencePaths"
},
"manual": {
"$ref": "#/$defs/evidencePaths"
}
}
},
"evidencePaths": {
"type": "array",
"minItems": 1,
"maxItems": 64,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^(?!/)(?!.*//)(?!.*(?:^|/)\\.\\.?($|/))(?!.*\\\\).+$"
}
}
}
}