Skip to content

Organisation catalogue overlay

Authoritative source: skill/schemas/catalogue-overlay.schema.json

Complete source

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.invalid/schemas/catalogue-overlay.schema.json",
  "title": "Organisation catalogue overlay",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema_version",
    "overlay_version",
    "organisation",
    "namespace",
    "entries",
    "workflows"
  ],
  "properties": {
    "schema_version": {"const": 1},
    "overlay_version": {"$ref": "#/$defs/semver"},
    "organisation": {"type": "string", "minLength": 1},
    "namespace": {"type": "string", "pattern": "^[a-z][a-z0-9-]*$"},
    "entries": {"type": "array", "items": {"$ref": "#/$defs/entry"}},
    "workflows": {"type": "array", "items": {"$ref": "#/$defs/workflow"}}
  },
  "$defs": {
    "semver": {"type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"},
    "entryId": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9-]*(?:\\.[a-z][a-z0-9-]*)+$"
    },
    "workflowId": {
      "type": "string",
      "pattern": "^workflow(?:\\.[a-z][a-z0-9-]*)+$"
    },
    "relativePath": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+\\.md$"
    },
    "nonEmptyStringArray": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {"type": "string", "minLength": 1}
    },
    "stringArray": {
      "type": "array",
      "uniqueItems": true,
      "items": {"type": "string", "minLength": 1}
    },
    "lifecycle": {
      "type": "object",
      "properties": {
        "aliases": {"type": "array", "uniqueItems": true},
        "introduced_in": {"$ref": "#/$defs/semver"},
        "deprecated_in": {"oneOf": [{"type": "null"}, {"$ref": "#/$defs/semver"}]},
        "replaced_by": {"oneOf": [{"type": "null"}, {"$ref": "#/$defs/entryId"}]}
      }
    },
    "entry": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id", "kind", "title", "status", "summary", "path", "tags", "languages",
        "use_when", "avoid_when", "related", "aliases", "introduced_in",
        "deprecated_in", "replaced_by"
      ],
      "properties": {
        "id": {"$ref": "#/$defs/entryId"},
        "kind": {
          "enum": ["shared-component", "design-pattern", "decision-record", "worked-example"]
        },
        "title": {"type": "string", "minLength": 1},
        "status": {"enum": ["draft", "experimental", "stable", "deprecated", "retired"]},
        "summary": {"type": "string", "minLength": 20},
        "path": {"$ref": "#/$defs/relativePath"},
        "tags": {"$ref": "#/$defs/nonEmptyStringArray"},
        "languages": {"$ref": "#/$defs/nonEmptyStringArray"},
        "use_when": {"$ref": "#/$defs/nonEmptyStringArray"},
        "avoid_when": {"$ref": "#/$defs/nonEmptyStringArray"},
        "related": {"$ref": "#/$defs/stringArray"},
        "aliases": {
          "type": "array", "uniqueItems": true, "items": {"$ref": "#/$defs/entryId"}
        },
        "introduced_in": {"$ref": "#/$defs/semver"},
        "deprecated_in": {"oneOf": [{"type": "null"}, {"$ref": "#/$defs/semver"}]},
        "replaced_by": {"oneOf": [{"type": "null"}, {"$ref": "#/$defs/entryId"}]}
      }
    },
    "workflow": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id", "title", "status", "path", "summary", "tags", "languages", "aliases",
        "introduced_in", "deprecated_in", "replaced_by"
      ],
      "properties": {
        "id": {"$ref": "#/$defs/workflowId"},
        "title": {"type": "string", "minLength": 1},
        "status": {"enum": ["draft", "experimental", "stable", "deprecated", "retired"]},
        "path": {"$ref": "#/$defs/relativePath"},
        "summary": {"type": "string", "minLength": 20},
        "tags": {"$ref": "#/$defs/nonEmptyStringArray"},
        "languages": {"$ref": "#/$defs/nonEmptyStringArray"},
        "aliases": {
          "type": "array", "uniqueItems": true, "items": {"$ref": "#/$defs/workflowId"}
        },
        "introduced_in": {"$ref": "#/$defs/semver"},
        "deprecated_in": {"oneOf": [{"type": "null"}, {"$ref": "#/$defs/semver"}]},
        "replaced_by": {"oneOf": [{"type": "null"}, {"$ref": "#/$defs/workflowId"}]}
      }
    }
  }
}