This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://devrunbook.local/schemas/repository-profile.schema.json",
|
||||
"title": "DevRunbook Repository Profile",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["apiVersion", "kind", "metadata", "spec"],
|
||||
"properties": {
|
||||
"apiVersion": {"const": "devrunbook.io/v1alpha1"},
|
||||
"kind": {"const": "RepositoryProfile"},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["name", "revision", "source"],
|
||||
"properties": {
|
||||
"name": {"type": "string", "minLength": 1, "maxLength": 120},
|
||||
"revision": {"type": "integer", "minimum": 1},
|
||||
"source": {"enum": ["manual", "gitea", "imported", "mixed"]},
|
||||
"capturedAt": {"type": "string", "format": "date-time"},
|
||||
"sourceReference": {"type": "string", "maxLength": 300},
|
||||
"contentDigest": {"$ref": "#/$defs/sha256"}
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["repositoryType", "stack", "commands", "paths", "policies"],
|
||||
"properties": {
|
||||
"repositoryType": {"enum": ["single-app", "monorepo", "library", "infrastructure", "mixed", "unknown"]},
|
||||
"defaultBranch": {"type": "string", "maxLength": 200},
|
||||
"stack": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["languages", "frameworks", "packageManagers", "databases", "deploymentTypes", "testFrameworks"],
|
||||
"properties": {
|
||||
"languages": {"$ref": "#/$defs/stringSet"},
|
||||
"frameworks": {"$ref": "#/$defs/stringSet"},
|
||||
"packageManagers": {"$ref": "#/$defs/stringSet"},
|
||||
"databases": {"$ref": "#/$defs/stringSet"},
|
||||
"deploymentTypes": {"$ref": "#/$defs/stringSet"},
|
||||
"testFrameworks": {"$ref": "#/$defs/stringSet"},
|
||||
"services": {"$ref": "#/$defs/stringSet"},
|
||||
"runtimes": {"$ref": "#/$defs/stringSet"},
|
||||
"queues": {"$ref": "#/$defs/stringSet"},
|
||||
"ciSystems": {"$ref": "#/$defs/stringSet"}
|
||||
}
|
||||
},
|
||||
"commands": {
|
||||
"type": "array",
|
||||
"maxItems": 100,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["id", "role", "command", "workingDirectory", "platform", "shell", "source", "confirmed", "safeForAgentSuggestion"],
|
||||
"properties": {
|
||||
"id": {"type": "string", "pattern": "^[a-z][a-z0-9-]*$", "maxLength": 80},
|
||||
"role": {"$ref": "#/$defs/commandRole"},
|
||||
"command": {"type": "string", "minLength": 1, "maxLength": 1000},
|
||||
"workingDirectory": {"type": "string", "minLength": 1, "maxLength": 500},
|
||||
"platform": {"enum": ["any", "linux", "windows", "macos", "container"]},
|
||||
"shell": {"enum": ["auto", "sh", "bash", "pwsh", "cmd"]},
|
||||
"source": {"enum": ["manual", "manifest", "documentation", "gitea", "inferred"]},
|
||||
"confirmed": {"type": "boolean"},
|
||||
"safeForAgentSuggestion": {"type": "boolean"},
|
||||
"timeoutSeconds": {"type": "integer", "minimum": 1, "maximum": 86400},
|
||||
"notes": {"type": "string", "maxLength": 500},
|
||||
"confidence": {"enum": ["low", "medium", "high"]},
|
||||
"evidence": {"$ref": "#/$defs/stringSet"},
|
||||
"observedCommand": {"type": "string", "minLength": 1, "maxLength": 1000},
|
||||
"confirmedAt": {"type": "string", "format": "date-time"}
|
||||
}
|
||||
}
|
||||
},
|
||||
"paths": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["applicationRoots", "testRoots", "documentationRoots", "generated", "protected", "excluded"],
|
||||
"properties": {
|
||||
"applicationRoots": {"$ref": "#/$defs/pathSet"},
|
||||
"testRoots": {"$ref": "#/$defs/pathSet"},
|
||||
"documentationRoots": {"$ref": "#/$defs/pathSet"},
|
||||
"generated": {"$ref": "#/$defs/pathSet"},
|
||||
"protected": {"$ref": "#/$defs/pathSet"},
|
||||
"excluded": {"$ref": "#/$defs/pathSet"},
|
||||
"packageRoots": {"$ref": "#/$defs/pathSet"},
|
||||
"serviceRoots": {"$ref": "#/$defs/pathSet"},
|
||||
"dataRuntime": {"$ref": "#/$defs/pathSet"},
|
||||
"ignored": {"$ref": "#/$defs/pathSet"}
|
||||
}
|
||||
},
|
||||
"policies": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["preserveBackwardCompatibility", "newDependencies", "gitWrite", "migrations", "documentationRequired", "networkAccess", "productionDataAccess"],
|
||||
"properties": {
|
||||
"preserveBackwardCompatibility": {"type": "boolean"},
|
||||
"newDependencies": {"enum": ["allowed", "justify", "approval-required", "forbidden"]},
|
||||
"gitWrite": {"enum": ["none", "local-commit", "push-with-approval"]},
|
||||
"migrations": {"enum": ["forbidden", "plan-only", "reversible-only", "allowed-with-backup"]},
|
||||
"documentationRequired": {"type": "boolean"},
|
||||
"networkAccess": {"enum": ["forbidden", "read-only-approved-hosts", "allowed-with-approval"]},
|
||||
"productionDataAccess": {"enum": ["forbidden", "read-only-redacted", "approval-required"]},
|
||||
"requiredValidationRoles": {"type": "array", "uniqueItems": true, "maxItems": 30, "items": {"$ref": "#/$defs/commandRole"}},
|
||||
"branchConventions": {"$ref": "#/$defs/stringSet"},
|
||||
"environmentConstraints": {"$ref": "#/$defs/stringSet"}
|
||||
}
|
||||
},
|
||||
"sourceFacts": {
|
||||
"type": "array",
|
||||
"maxItems": 500,
|
||||
"items": {"$ref": "#/$defs/sourceFact"}
|
||||
},
|
||||
"manualOverrides": {
|
||||
"type": "array",
|
||||
"maxItems": 200,
|
||||
"items": {"$ref": "#/$defs/manualOverride"}
|
||||
},
|
||||
"notes": {"type": "string", "maxLength": 5000}
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
|
||||
"commandRole": {"enum": ["install", "format", "format-check", "lint", "typecheck", "unit-test", "integration-test", "end-to-end-test", "build", "dev-start", "smoke-test", "migration-status", "migration-apply", "security-scan", "dependency-audit"]},
|
||||
"stringSet": {"type": "array", "uniqueItems": true, "maxItems": 100, "items": {"type": "string", "minLength": 1, "maxLength": 120}},
|
||||
"pathSet": {"type": "array", "uniqueItems": true, "maxItems": 200, "items": {"type": "string", "minLength": 1, "maxLength": 500}},
|
||||
"sourceFact": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["path", "value", "source", "evidence"],
|
||||
"properties": {
|
||||
"path": {"$ref": "#/$defs/jsonPointer"},
|
||||
"value": {},
|
||||
"source": {"enum": ["manual", "manifest", "documentation", "gitea", "inferred", "prior-profile"]},
|
||||
"evidence": {"$ref": "#/$defs/evidenceSet"},
|
||||
"confidence": {"enum": ["low", "medium", "high"]},
|
||||
"observedAt": {"type": "string", "format": "date-time"}
|
||||
}
|
||||
},
|
||||
"manualOverride": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["path", "value", "observedValue", "evidence", "confirmedAt"],
|
||||
"properties": {
|
||||
"path": {"$ref": "#/$defs/jsonPointer"},
|
||||
"value": {},
|
||||
"observedValue": {},
|
||||
"evidence": {"$ref": "#/$defs/evidenceSet"},
|
||||
"confirmedAt": {"type": "string", "format": "date-time"},
|
||||
"note": {"type": "string", "maxLength": 500}
|
||||
}
|
||||
},
|
||||
"jsonPointer": {"type": "string", "pattern": "^(?:/(?:[^~/]|~0|~1)*)+$", "maxLength": 500},
|
||||
"evidenceSet": {"type": "array", "minItems": 1, "maxItems": 100, "uniqueItems": true, "items": {"type": "string", "minLength": 1, "maxLength": 120}}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user